Skills
Konfigurasi Skills
Sebagian besar konfigurasi Skills berada di bawah skills dalam
~/.openclaw/openclaw.json. Visibilitas khusus agen berada di bawah
agents.defaults.skills dan agents.list[].skills.
{ skills: { allowBundled: ["gemini", "peekaboo"], load: { extraDirs: ["~/Projects/agent-scripts/skills"], allowSymlinkTargets: ["~/Projects/manager/skills"], watch: true, watchDebounceMs: 250, }, install: { preferBrew: true, nodeManager: "npm", allowUploadedArchives: false, }, workshop: { autonomous: { enabled: false }, allowSymlinkTargetWrites: false, approvalPolicy: "pending", maxPending: 50, maxSkillBytes: 40000, }, entries: { "image-lab": { enabled: true, apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, env: { GEMINI_API_KEY: "GEMINI_KEY_HERE" }, }, peekaboo: { enabled: true }, sag: { enabled: false }, }, },}Pemuatan (skills.load)
skills.load.extraDirsstring[]Direktori Skills tambahan yang akan dipindai, dengan prioritas terendah (di bawah
Skills bawaan dan Plugin). Path diperluas dengan dukungan ~.
skills.load.allowSymlinkTargetsstring[]Direktori target nyata tepercaya yang boleh menjadi tujuan resolusi folder Skills
bersymlink, bahkan ketika symlink berada di luar root yang dikonfigurasi. Gunakan ini untuk
tata letak repositori sejajar yang disengaja seperti
<workspace>/skills/manager -> ~/Projects/manager/skills. Jaga agar daftar ini
tetap sempit — jangan arahkan ke root luas seperti ~ atau ~/Projects.
skills.load.watchbooleandefault: truePantau folder Skills dan perbarui snapshot Skills ketika file SKILL.md
berubah. Mencakup file bertingkat di bawah root Skills yang dikelompokkan.
skills.load.watchDebounceMsnumberdefault: 250Jendela debounce untuk peristiwa pemantau Skills dalam milidetik.
Instalasi (skills.install)
skills.install.preferBrewbooleandefault: trueUtamakan penginstal Homebrew ketika brew tersedia.
skills.install.nodeManager"npm" | "pnpm" | "yarn" | "bun"default: "npm"Preferensi pengelola paket Node untuk instalasi Skills. Ini hanya memengaruhi instalasi
Skills — runtime Gateway harus tetap menggunakan Node (Bun tidak
direkomendasikan untuk WhatsApp/Telegram). openclaw setup --node-manager dan
openclaw onboard --node-manager menerima npm, pnpm, atau bun; tetapkan
"yarn" secara langsung dalam konfigurasi untuk instalasi Skills berbasis Yarn.
skills.install.allowUploadedArchivesbooleandefault: falseIzinkan klien Gateway operator.admin tepercaya menginstal arsip zip privat
yang disiapkan melalui skills.upload.*. Instalasi ClawHub biasa tidak
memerlukan pengaturan ini.
Kebijakan Instalasi Operator (security.installPolicy)
Gunakan security.installPolicy ketika operator memerlukan perintah lokal tepercaya untuk
menyetujui atau memblokir instalasi Skills dan Plugin dengan kebijakan khusus host. Kebijakan
berjalan setelah OpenClaw menyiapkan materi sumber dan sebelum instalasi
atau pembaruan dilanjutkan. Kebijakan ini berlaku untuk Skills ClawHub, Skills yang diunggah, Skills
Git/lokal, penginstal dependensi Skills, serta sumber instalasi/pembaruan Plugin.
{ security: { installPolicy: { enabled: true, // Omit targets to cover every supported target. targets: ["skill", "plugin"], exec: { source: "exec", command: "/usr/local/bin/openclaw-install-policy", args: ["--json"], timeoutMs: 10000, noOutputTimeoutMs: 10000, maxOutputBytes: 1048576, passEnv: ["OPENCLAW_STATE_DIR", "PATH"], env: { POLICY_MODE: "strict" }, trustedDirs: ["/usr/local/bin"], }, }, },}security.installPolicy.enabledbooleandefault: falseMengaktifkan kebijakan instalasi milik operator. Jika diaktifkan tanpa perintah exec
yang valid, instalasi gagal secara tertutup.
security.installPolicy.targets("skill" | "plugin")[]Filter target opsional. Jika dihilangkan, kebijakan berlaku untuk setiap target yang didukung agar instalasi baru tidak tiba-tiba gagal secara terbuka.
security.installPolicy.exec.commandstringPath absolut ke berkas eksekutabel kebijakan tepercaya. OpenClaw menjalankannya tanpa shell dan memvalidasi path tersebut sebelum digunakan.
security.installPolicy.exec.argsstring[]Argumen statis yang diteruskan setelah command.
security.installPolicy.exec.timeoutMsnumberdefault: 10000Durasi waktu nyata maksimum untuk satu keputusan kebijakan.
security.installPolicy.exec.noOutputTimeoutMsnumberdefault: timeoutMsWaktu maksimum tanpa keluaran stdout atau stderr sebelum kebijakan gagal secara tertutup.
security.installPolicy.exec.maxOutputBytesnumberdefault: 1048576Jumlah maksimum gabungan byte stdout dan stderr yang diterima dari proses kebijakan.
security.installPolicy.exec.env"Record<string,security.installPolicy.exec.passEnvstring[]Nama variabel lingkungan yang disalin dari proses OpenClaw ke proses kebijakan. Hanya variabel yang disebutkan yang diteruskan.
security.installPolicy.exec.trustedDirsstring[]Daftar izin opsional untuk direktori yang boleh berisi berkas eksekutabel kebijakan.
security.installPolicy.exec.allowInsecurePathbooleandefault: falseMelewati pemeriksaan kepemilikan dan izin path perintah. Gunakan hanya ketika path dilindungi oleh mekanisme lain.
security.installPolicy.exec.allowSymlinkCommandbooleandefault: falseMengizinkan path perintah yang dikonfigurasi berupa symlink. Target hasil resolusi tetap harus memenuhi pemeriksaan path lainnya. Argumen skrip interpreter harus berupa file reguler langsung, bukan symlink.
Kebijakan menerima satu objek JSON pada stdin dengan protocolVersion: 1,
openclawVersion, targetType, targetName, sourcePath, sourcePathKind,
source terstruktur opsional, origin terstruktur, dan request. Kebijakan harus
menulis satu objek JSON pada stdout: { "protocolVersion": 1, "decision": "allow" }
atau { "protocolVersion": 1, "decision": "block", "reason": "..." }. Kode keluar
bukan nol, batas waktu terlampaui, JSON salah format, kolom yang hilang, atau versi protokol yang
tidak didukung akan gagal secara tertutup.
OpenClaw tidak menjalankan kebijakan instalasi selama startup Gateway normal.
Instalasi dan pembaruan gagal secara tertutup ketika kebijakan diaktifkan tetapi tidak tersedia.
openclaw doctor melakukan validasi statis; openclaw doctor --deep
menjalankan probe instalasi sintetis terhadap perintah yang dikonfigurasi.
Pembaruan massal menerapkan kebijakan per target: pembaruan Skills atau Plugin yang diblokir akan menggagalkan target tersebut tanpa menonaktifkan kebijakan atau melewati target berikutnya dalam batch.
Contoh stdin:
{ "protocolVersion": 1, "openclawVersion": "2026.6.1", "targetType": "skill", "targetName": "weather", "sourcePath": "/var/folders/.../openclaw-skill-clawhub/root", "sourcePathKind": "directory", "source": { "kind": "clawhub", "authority": "openclaw", "mutable": false, "network": true }, "origin": { "type": "clawhub", "registry": "https://clawhub.openclaw.ai", "slug": "weather", "version": "1.0.0" }, "request": { "kind": "skill-install", "mode": "install", "requestedSpecifier": "clawhub:weather@1.0.0" }, "skill": { "installId": "clawhub" }}Perintah kebijakan minimal:
#!/usr/bin/env node let input = "";process.stdin.setEncoding("utf8");process.stdin.on("data", (chunk) => { input += chunk;});process.stdin.on("end", () => { const request = JSON.parse(input); if (request.targetType === "plugin" && request.source?.kind === "local-path") { process.stdout.write( JSON.stringify({ protocolVersion: 1, decision: "block", reason: "local plugin paths are not approved on this host", }), ); return; } process.stdout.write(JSON.stringify({ protocolVersion: 1, decision: "allow" }));});Daftar izin Skills bawaan
skills.allowBundledstring[]Daftar izin opsional khusus untuk Skills bawaan. Jika ditetapkan, hanya Skills bawaan dalam daftar yang memenuhi syarat. Skills terkelola, tingkat agen, dan ruang kerja tidak terpengaruh.
Entri per Skills (skills.entries)
Secara default, kunci di bawah entries cocok dengan name Skills. Jika Skills mendefinisikan
metadata.openclaw.skillKey, gunakan kunci tersebut sebagai gantinya. Beri tanda kutip pada nama yang mengandung tanda hubung
(JSON5 mengizinkan kunci yang diberi tanda kutip).
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNraWxscy5lbnRyaWVzLjxrZXk
.enabled" type="boolean">
false menonaktifkan Skills meskipun bawaan atau terinstal. Skills bawaan
coding-agent bersifat opsional — tetapkan ke true dan pastikan salah satu dari
claude, codex, opencode, atau CLI lain yang didukung telah terinstal dan
diautentikasi.
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNraWxscy5lbnRyaWVzLjxrZXk
.apiKey" type='string | { source, provider, id }'>
Kolom praktis untuk Skills yang mendeklarasikan metadata.openclaw.primaryEnv.
Mendukung string teks biasa atau SecretRef: { source: "env", provider: "default", id: "VAR_NAME" }.
"skills.entries.<key�����r�"skills.entries.<key�w₫��ܩDaftar izin agen (agents)
Gunakan konfigurasi agen ketika Anda menginginkan root Skills mesin/ruang kerja yang sama tetapi kumpulan Skills yang terlihat berbeda untuk setiap agen.
{ agents: { defaults: { skills: ["github", "weather"], // shared baseline }, list: [ { id: "writer" }, // inherits github, weather { id: "docs", skills: ["docs-search"] }, // replaces defaults entirely { id: "locked-down", skills: [] }, // no skills ], },}agents.defaults.skillsstring[]Daftar izin dasar bersama yang diwarisi oleh agen yang tidak menyertakan
agents.list[].skills. Hilangkan sepenuhnya agar Skills tidak dibatasi secara
default.
agents.list[].skillsstring[]Kumpulan Skills akhir eksplisit untuk agen tersebut. Daftar eksplisit menggantikan
nilai default yang diwarisi — daftar tersebut tidak digabungkan. Tetapkan ke [] agar tidak mengekspos Skills apa pun kepada
agen tersebut.
Workshop (skills.workshop)
skills.workshop.autonomous.enabledbooleandefault: falseJika true, agen dapat membuat proposal tertunda dari sinyal percakapan
persisten setelah giliran berhasil. Pembuatan skill yang diminta pengguna selalu
melalui Skill Workshop, terlepas dari pengaturan ini.
skills.workshop.approvalPolicy"pending" | "auto"default: "pending"pending memerlukan persetujuan operator sebelum penerapan, penolakan,
atau karantina yang dimulai agen. auto mengizinkan tindakan tersebut tanpa persetujuan.
skills.workshop.allowSymlinkTargetWritesbooleandefault: falseIzinkan penerapan Skill Workshop menulis melalui symlink skill ruang kerja yang
target sebenarnya telah dipercaya oleh skills.load.allowSymlinkTargets. Biarkan
ini dinonaktifkan kecuali penerapan proposal yang dihasilkan harus mengubah akar
skill bersama tersebut.
skills.workshop.maxPendingnumberdefault: 50Jumlah maksimum proposal tertunda dan dikarantina yang disimpan per ruang kerja (rentang yang diizinkan: 1-200).
skills.workshop.maxSkillBytesnumberdefault: 40000Ukuran maksimum isi proposal dalam byte (rentang yang diizinkan: 1024-200000). Deskripsi proposal dibatasi secara terpisah hingga maksimal 160 byte karena muncul dalam keluaran penemuan dan daftar.
Lihat Skill Workshop untuk siklus hidup proposal, perintah CLI, parameter alat agen, dan metode Gateway yang dikendalikan konfigurasi ini.
Akar skill dengan symlink
Secara default, akar skill ruang kerja, agen proyek, direktori tambahan, dan bawaan merupakan
batas penahanan. Folder skill dengan symlink di bawah <workspace>/skills
yang mengarah ke luar akar akan dilewati dengan pesan log.
Untuk mengizinkan tata letak symlink yang disengaja, nyatakan target tepercaya:
{ skills: { load: { extraDirs: ["~/Projects/manager/skills"], allowSymlinkTargets: ["~/Projects/manager/skills"], }, },}Dengan konfigurasi ini, <workspace>/skills/manager -> ~/Projects/manager/skills
diterima setelah resolusi realpath. extraDirs memindai repositori sejawat
secara langsung; allowSymlinkTargets mempertahankan jalur dengan symlink untuk tata letak
yang sudah ada.
Secara default, penerapan Skill Workshop tidak menulis melalui symlink tersebut. Untuk mengizinkan penerapan Workshop mengubah skill di bawah target symlink yang telah dipercaya, aktifkan secara terpisah:
{ skills: { load: { allowSymlinkTargets: ["~/Projects/manager/skills"], }, workshop: { allowSymlinkTargetWrites: true, }, },}Direktori ~/.openclaw/skills terkelola dan ~/.agents/skills pribadi
telah menerima symlink direktori skill tanpa syarat (penahanan SKILL.md
per skill tetap berlaku) — allowSymlinkTargets hanya diperlukan
untuk akar ruang kerja, direktori tambahan, dan agen proyek (<workspace>/.agents/skills).
Skill dalam sandbox dan variabel lingkungan
Teruskan rahasia ke sandbox Docker dengan:
{ agents: { defaults: { sandbox: { docker: { env: { GEMINI_API_KEY: "your-key-here" }, }, }, }, },}Pengingat urutan pemuatan
workspace/skills (tertinggi)workspace/.agents/skills~/.agents/skills~/.openclaw/skillsskill bawaanskills.load.extraDirs (terendah)Perubahan pada skill dan konfigurasi berlaku pada sesi baru berikutnya ketika pemantau diaktifkan, atau pada giliran agen berikutnya ketika pemantau mendeteksi perubahan.