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 skill tambahan untuk dipindai, dengan prioritas paling rendah
(setelah skill bawaan dan Plugin). Path diperluas dengan dukungan ~.
skills.load.allowSymlinkTargetsstring[]Direktori target asli tepercaya tempat folder skill berupa symlink dapat
diarahkan, bahkan ketika symlink berada di luar root yang dikonfigurasi.
Gunakan ini untuk tata letak sibling-repo yang disengaja seperti
<workspace>/skills/manager -> ~/Projects/manager/skills. Jaga daftar ini
tetap sempit — jangan arahkan ke root yang luas seperti ~ atau ~/Projects.
skills.load.watchbooleandefault: truePantau folder skill dan segarkan snapshot skill ketika file SKILL.md
berubah. Mencakup file bersarang di bawah root skill yang dikelompokkan.
skills.load.watchDebounceMsnumberdefault: 250Jendela debounce untuk peristiwa pemantau skill 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 skill. Ini hanya memengaruhi
instalasi skill — runtime Gateway tetap harus menggunakan Node (Bun tidak
direkomendasikan untuk WhatsApp/Telegram). Gunakan openclaw setup --node-manager
untuk npm, pnpm, atau bun; tetapkan "yarn" secara manual untuk instalasi
skill berbasis Yarn.
skills.install.allowUploadedArchivesbooleandefault: falseIzinkan klien Gateway operator.admin tepercaya memasang arsip zip privat
yang disiapkan melalui skills.upload.*. Instalasi ClawHub normal tidak
memerlukan pengaturan ini.
Kebijakan Instalasi Operator (security.installPolicy)
Gunakan security.installPolicy ketika operator memerlukan perintah lokal
tepercaya untuk menyetujui atau memblokir instalasi skill dan Plugin dengan
kebijakan khusus host. Kebijakan berjalan setelah OpenClaw menyiapkan material
sumber dan sebelum instalasi atau pembaruan berlanjut. Ini berlaku untuk skill
ClawHub, skill yang diunggah, skill Git/lokal, penginstal dependensi skill, dan
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. Ketika diaktifkan tanpa
perintah exec yang valid, instalasi gagal tertutup.
security.installPolicy.targets("skill" | "plugin")[]Filter target opsional. Ketika dihilangkan, kebijakan berlaku untuk setiap target yang didukung sehingga instalasi baru tidak tiba-tiba gagal terbuka.
security.installPolicy.exec.commandstringPath absolut ke executable kebijakan tepercaya. OpenClaw menjalankannya tanpa shell dan memvalidasi path sebelum digunakan.
security.installPolicy.exec.argsstring[]Argumen statis yang diteruskan setelah command.
security.installPolicy.exec.timeoutMsnumberdefault: 10000Runtime wall-clock maksimum untuk satu keputusan kebijakan.
security.installPolicy.exec.noOutputTimeoutMsnumberdefault: timeoutMsWaktu maksimum tanpa keluaran stdout atau stderr sebelum kebijakan gagal tertutup.
security.installPolicy.exec.maxOutputBytesnumberdefault: 1048576Byte gabungan stdout dan stderr maksimum 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 bernama yang diteruskan.
security.installPolicy.exec.trustedDirsstring[]Daftar izin opsional untuk direktori yang boleh berisi executable 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 yang diselesaikan 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": "..." }. Exit
bukan nol, timeout, JSON cacat, field hilang, atau versi protokol yang tidak
didukung akan gagal tertutup.
OpenClaw tidak menjalankan kebijakan instalasi selama startup Gateway normal.
Instalasi dan pembaruan gagal tertutup ketika kebijakan diaktifkan tetapi tidak
tersedia. openclaw doctor melakukan validasi statis, dan openclaw doctor --deep
menjalankan probe instalasi sintetis terhadap perintah yang dikonfigurasi.
Pembaruan massal menerapkan kebijakan per target: pembaruan skill atau Plugin yang diblokir 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 skill bawaan
skills.allowBundledstring[]Daftar izin opsional hanya untuk skill bawaan. Ketika ditetapkan, hanya skill bawaan dalam daftar yang memenuhi syarat. Skill terkelola, tingkat agen, dan workspace tidak terpengaruh.
Entri per skill (skills.entries)
Kunci di bawah entries cocok dengan name skill secara default. Jika sebuah
skill mendefinisikan metadata.openclaw.skillKey, gunakan kunci tersebut
sebagai gantinya. Kutip nama yang memakai tanda hubung (JSON5 mengizinkan kunci
yang dikutip).
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNraWxscy5lbnRyaWVzLjxrZXk
.enabled" type="boolean">
false menonaktifkan skill bahkan ketika bawaan atau terpasang. Skill bawaan
coding-agent bersifat ikut serta — tetapkan ke true dan pastikan salah
satu dari claude, codex, opencode, atau CLI lain yang didukung sudah
terpasang dan terautentikasi.
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNraWxscy5lbnRyaWVzLjxrZXk
.apiKey" type='string | { source, provider, id }'>
Field praktis untuk skill yang mendeklarasikan metadata.openclaw.primaryEnv.
Mendukung string plaintext 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 skill mesin/workspace yang sama tetapi set skill yang terlihat berbeda per 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 baseline bersama yang diwarisi oleh agen yang menghilangkan
agents.list[].skills. Hilangkan seluruhnya agar skill tidak dibatasi secara
default.
agents.list[].skillsstring[]Set skill final eksplisit untuk agen tersebut. Daftar eksplisit mengganti
default yang diwarisi — daftar tersebut tidak digabungkan. Tetapkan ke []
untuk tidak mengekspos skill apa pun bagi agen tersebut.
Workshop (skills.workshop)
skills.workshop.autonomous.enabledbooleandefault: falseKetika true, agen dapat membuat proposal tertunda dari sinyal percakapan
tahan lama setelah giliran berhasil. Pembuatan skill yang dipicu pengguna
selalu melalui Skill Workshop terlepas dari pengaturan ini.
skills.workshop.approvalPolicy"pending" | "auto"default: "pending"pending memerlukan persetujuan operator sebelum apply, reject, atau
quarantine yang diinisiasi agen. auto mengizinkan tindakan tersebut tanpa persetujuan.
skills.workshop.allowSymlinkTargetWritesbooleandefault: falseIzinkan penerapan Skill Workshop untuk menulis melalui symlink skill ruang kerja yang
target aslinya sudah dipercaya oleh skills.load.allowSymlinkTargets. Biarkan ini
dinonaktifkan kecuali penerapan proposal yang dihasilkan harus mengubah root skill bersama
tersebut.
skills.workshop.maxPendingnumberdefault: 50Jumlah maksimum proposal tertunda dan dikarantina yang disimpan per ruang kerja.
skills.workshop.maxSkillBytesnumberdefault: 40000Ukuran maksimum isi proposal dalam byte. Deskripsi proposal dibatasi secara ketat pada 160 byte karena muncul dalam keluaran penemuan dan daftar.
Root skill bersymlink
Secara default, root skill ruang kerja, agen proyek, direktori tambahan, dan bawaan adalah
batas kontainmen. Folder skill bersymlink di bawah <workspace>/skills
yang terselesaikan ke luar root akan dilewati dengan pesan log.
Untuk mengizinkan tata letak symlink yang disengaja, deklarasikan 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 repo saudara secara langsung;
allowSymlinkTargets mempertahankan jalur bersymlink untuk tata letak yang sudah ada.
Penerapan Skill Workshop tidak menulis melalui symlink tersebut secara default. Untuk mengizinkan Workshop apply mengubah skills di bawah target symlink yang sudah dipercaya, ikut sertakan secara terpisah:
{ skills: { load: { allowSymlinkTargets: ["~/Projects/manager/skills"], }, workshop: { allowSymlinkTargetWrites: true, }, },}Direktori ~/.openclaw/skills yang dikelola dan direktori personal ~/.agents/skills
sudah menerima symlink direktori skill (kontainmen SKILL.md per-skill tetap
berlaku).
Skills tersandbox dan variabel env
Teruskan secret ke sandbox Docker dengan:
{ agents: { defaults: { sandbox: { docker: { env: { GEMINI_API_KEY: "your-key-here" }, }, }, }, },}Pengingat urutan pemuatan
workspace/skills (highest)workspace/.agents/skills~/.agents/skills~/.openclaw/skillsbundled skillsskills.load.extraDirs (lowest)Perubahan pada skills dan konfigurasi berlaku pada sesi baru berikutnya saat watcher diaktifkan, atau pada giliran agen berikutnya saat watcher mendeteksi perubahan.