Skills

การกำหนดค่า Skills

การกำหนดค่า Skills ส่วนใหญ่อยู่ภายใต้ skills ใน ~/.openclaw/openclaw.json ส่วนการมองเห็นเฉพาะเอเจนต์อยู่ภายใต้ agents.defaults.skills และ agents.list[].skills

json5
{  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 },    },  },}

การโหลด (skills.load)

skills.load.extraDirsstring[]

ไดเรกทอรี Skill เพิ่มเติมที่จะสแกน โดยมีลำดับความสำคัญต่ำสุด (ต่ำกว่า Skill ที่รวมมาให้และ Skill ของ Plugin) พาธรองรับการขยาย ~

skills.load.allowSymlinkTargetsstring[]

ไดเรกทอรีเป้าหมายจริงที่เชื่อถือได้ซึ่งโฟลเดอร์ Skill แบบ symlink สามารถชี้เข้าไปได้ แม้ symlink จะอยู่นอกรากที่กำหนดค่าไว้ ใช้ตัวเลือกนี้ สำหรับโครงสร้างรีโพซิทอรีข้างเคียงที่ตั้งใจไว้ เช่น <workspace>/skills/manager -> ~/Projects/manager/skills จำกัดรายการนี้ ให้แคบ — อย่าชี้ไปยังรากกว้าง ๆ เช่น ~ หรือ ~/Projects

skills.load.watchbooleandefault: true

เฝ้าดูโฟลเดอร์ Skill และรีเฟรชสแนปช็อต Skills เมื่อไฟล์ SKILL.md เปลี่ยนแปลง ครอบคลุมไฟล์ซ้อนภายใต้ราก Skill ที่จัดกลุ่มไว้

skills.load.watchDebounceMsnumberdefault: 250

ช่วงหน่วง debounce สำหรับเหตุการณ์จากตัวเฝ้าดู Skill หน่วยเป็นมิลลิวินาที

การติดตั้ง (skills.install)

skills.install.preferBrewbooleandefault: true

เลือกใช้ตัวติดตั้ง Homebrew ก่อนเมื่อมี brew

skills.install.nodeManager"npm" | "pnpm" | "yarn" | "bun"default: "npm"

ตัวจัดการแพ็กเกจ Node ที่ต้องการสำหรับการติดตั้ง Skill ค่านี้มีผลเฉพาะ การติดตั้ง Skill — รันไทม์ Gateway ควรใช้ Node ต่อไป (ไม่แนะนำ Bun สำหรับ WhatsApp/Telegram) openclaw setup --node-manager และ openclaw onboard --node-manager รองรับ npm, pnpm หรือ bun; ตั้งค่า "yarn" โดยตรงในการกำหนดค่าสำหรับการติดตั้ง Skill ที่ใช้ Yarn

skills.install.allowUploadedArchivesbooleandefault: false

อนุญาตให้ไคลเอนต์ Gateway operator.admin ที่เชื่อถือได้ติดตั้งไฟล์เก็บถาวร zip ส่วนตัวที่จัดเตรียมผ่าน skills.upload.* การติดตั้ง ClawHub ปกติ ไม่จำเป็นต้องใช้การตั้งค่านี้

นโยบายการติดตั้งของผู้ดำเนินการ (security.installPolicy)

ใช้ security.installPolicy เมื่อผู้ดำเนินการต้องการคำสั่งภายในเครื่องที่เชื่อถือได้ เพื่ออนุมัติหรือบล็อกการติดตั้ง Skill และ Plugin ตามนโยบายเฉพาะโฮสต์ นโยบายจะทำงานหลังจาก OpenClaw จัดเตรียมซอร์สแล้ว และก่อนที่การติดตั้ง หรืออัปเดตจะดำเนินต่อ นโยบายนี้ใช้กับ Skills จาก ClawHub, Skills ที่อัปโหลด, Skills จาก Git/ภายในเครื่อง, ตัวติดตั้งการขึ้นต่อกันของ Skill และแหล่งที่มา สำหรับการติดตั้ง/อัปเดต Plugin

json5
{  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: false

เปิดใช้นโยบายการติดตั้งที่ผู้ดำเนินการเป็นเจ้าของ เมื่อเปิดใช้โดยไม่มีคำสั่ง exec ที่ถูกต้อง การติดตั้งจะล้มเหลวแบบปิดกั้น

security.installPolicy.targets("skill" | "plugin")[]

ตัวกรองเป้าหมายแบบไม่บังคับ เมื่อละไว้ นโยบายจะใช้กับทุกเป้าหมายที่รองรับ เพื่อให้การติดตั้งใหม่ไม่เปิดอนุญาตโดยไม่คาดคิด

security.installPolicy.exec.commandstring

พาธสัมบูรณ์ไปยังไฟล์ปฏิบัติการนโยบายที่เชื่อถือได้ OpenClaw เรียกใช้ไฟล์นี้ โดยไม่ผ่านเชลล์และตรวจสอบพาธก่อนใช้งาน

security.installPolicy.exec.argsstring[]

อาร์กิวเมนต์คงที่ที่ส่งต่อหลัง command

security.installPolicy.exec.timeoutMsnumberdefault: 10000

ระยะเวลาตามนาฬิกาสูงสุดสำหรับการตัดสินใจตามนโยบายหนึ่งครั้ง

security.installPolicy.exec.noOutputTimeoutMsnumberdefault: timeoutMs

ระยะเวลาสูงสุดที่ไม่มีเอาต์พุต stdout หรือ stderr ก่อนที่นโยบายจะล้มเหลว แบบปิดกั้น

security.installPolicy.exec.maxOutputBytesnumberdefault: 1048576

จำนวนไบต์รวมสูงสุดของ stdout และ stderr ที่ยอมรับจากกระบวนการนโยบาย

security.installPolicy.exec.env"Record<string,
security.installPolicy.exec.passEnvstring[]

ชื่อตัวแปรสภาพแวดล้อมที่คัดลอกจากกระบวนการ OpenClaw ไปยังกระบวนการ นโยบาย โดยจะส่งเฉพาะตัวแปรที่ระบุชื่อไว้เท่านั้น

security.installPolicy.exec.trustedDirsstring[]

รายการอนุญาตแบบไม่บังคับของไดเรกทอรีที่สามารถมีไฟล์ปฏิบัติการนโยบายได้

security.installPolicy.exec.allowInsecurePathbooleandefault: false

ข้ามการตรวจสอบความเป็นเจ้าของและสิทธิ์ของพาธคำสั่ง ใช้เฉพาะเมื่อพาธ ได้รับการปกป้องด้วยกลไกอื่น

security.installPolicy.exec.allowSymlinkCommandbooleandefault: false

อนุญาตให้พาธคำสั่งที่กำหนดค่าเป็น symlink ได้ เป้าหมายที่แก้พาธแล้ว ยังคงต้องผ่านการตรวจสอบพาธอื่น ๆ อาร์กิวเมนต์สคริปต์สำหรับอินเทอร์พรีเตอร์ ต้องเป็นไฟล์ปกติโดยตรง ไม่ใช่ symlink

นโยบายจะได้รับออบเจ็กต์ JSON หนึ่งรายการทาง stdin ซึ่งมี protocolVersion: 1, openclawVersion, targetType, targetName, sourcePath, sourcePathKind, source แบบมีโครงสร้างซึ่งเป็นทางเลือก, origin แบบมีโครงสร้าง และ request นโยบายต้องเขียนออบเจ็กต์ JSON หนึ่งรายการไปยัง stdout: { "protocolVersion": 1, "decision": "allow" } หรือ { "protocolVersion": 1, "decision": "block", "reason": "..." } การออกด้วยรหัสที่ไม่ใช่ศูนย์, หมดเวลา, JSON ผิดรูปแบบ, ฟิลด์ขาดหาย หรือเวอร์ชันโปรโตคอลที่ไม่รองรับ จะล้มเหลวแบบปิดกั้น

OpenClaw ไม่เรียกใช้นโยบายการติดตั้งระหว่างการเริ่มต้น Gateway ตามปกติ การติดตั้งและอัปเดตจะล้มเหลวแบบปิดกั้นเมื่อนโยบายเปิดใช้อยู่แต่ไม่พร้อมใช้งาน openclaw doctor ทำการตรวจสอบแบบสถิต ส่วน openclaw doctor --deep เรียกใช้โพรบการติดตั้งจำลองกับคำสั่งที่กำหนดค่าไว้

การอัปเดตแบบกลุ่มจะใช้นโยบายแยกตามแต่ละเป้าหมาย: การอัปเดต Skill หรือ Plugin ที่ถูกบล็อกจะทำให้เฉพาะเป้าหมายนั้นล้มเหลว โดยไม่ปิดใช้นโยบายหรือข้ามเป้าหมาย ถัดไปในชุด

ตัวอย่าง stdin:

json
{  "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"  }}

คำสั่งนโยบายขั้นต่ำ:

js
#!/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" }));});

รายการอนุญาตของ Skill ที่รวมมาให้

skills.allowBundledstring[]

รายการอนุญาตแบบไม่บังคับสำหรับ Skills ที่ รวมมาให้ เท่านั้น เมื่อตั้งค่า เฉพาะ Skills ที่รวมมาให้และอยู่ในรายการเท่านั้นที่มีสิทธิ์ใช้งาน Skills ที่มีการจัดการ, ระดับเอเจนต์ และระดับพื้นที่ทำงานจะไม่ได้รับผลกระทบ

รายการต่อ Skill (skills.entries)

โดยค่าเริ่มต้น คีย์ภายใต้ entries จะตรงกับ name ของ Skill หาก Skill กำหนด metadata.openclaw.skillKey ให้ใช้คีย์นั้นแทน ใส่ชื่อที่มีเครื่องหมายขีดกลาง ไว้ในเครื่องหมายอัญประกาศ (JSON5 อนุญาตคีย์ที่ใส่เครื่องหมายอัญประกาศ)

OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNraWxscy5lbnRyaWVzLjxrZXk .enabled" type="boolean"> false ปิดใช้งาน Skill แม้จะรวมมาให้หรือติดตั้งแล้วก็ตาม Skill ที่รวมมาให้ coding-agent ต้องเลือกเปิดใช้ — ตั้งค่าเป็น true และตรวจสอบให้แน่ใจว่า มีการติดตั้งและยืนยันตัวตน claude, codex, opencode หรือ CLI อื่นที่รองรับ อย่างใดอย่างหนึ่งแล้ว

OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNraWxscy5lbnRyaWVzLjxrZXk .apiKey" type='string | { source, provider, id }'> ฟิลด์อำนวยความสะดวกสำหรับ Skills ที่ประกาศ metadata.openclaw.primaryEnv รองรับสตริงข้อความธรรมดาหรือ SecretRef: { source: "env", provider: "default", id: "VAR_NAME" }

"skills.entries.<key�����r�
"skills.entries.<key�w₫��ܩ

รายการอนุญาตของเอเจนต์ (agents)

ใช้การกำหนดค่าเอเจนต์เมื่อคุณต้องการใช้ราก Skill ของเครื่อง/พื้นที่ทำงานเดียวกัน แต่ให้แต่ละเอเจนต์มองเห็นชุด Skill ที่แตกต่างกัน

json5
{  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[]

รายการอนุญาตพื้นฐานร่วมที่เอเจนต์ซึ่งละ agents.list[].skills จะสืบทอด ละไว้ทั้งหมดเพื่อไม่จำกัด Skills โดยค่าเริ่มต้น

agents.list[].skillsstring[]

ชุด Skill สุดท้ายที่ระบุชัดเจนสำหรับเอเจนต์นั้น รายการที่ระบุชัดเจนจะ แทนที่ ค่าเริ่มต้นที่สืบทอดมา — จะไม่ผสานกัน ตั้งค่าเป็น [] เพื่อไม่เปิดเผย Skills ใด ๆ แก่เอเจนต์นั้น

เวิร์กช็อป (skills.workshop)

skills.workshop.autonomous.enabledbooleandefault: false

เมื่อเป็น true เอเจนต์สามารถสร้างข้อเสนอที่รอดำเนินการจากสัญญาณการสนทนา แบบถาวรหลังจากดำเนินงานแต่ละรอบสำเร็จ การสร้าง Skills ตามคำสั่งของผู้ใช้จะ ดำเนินการผ่าน Skill Workshop เสมอโดยไม่ขึ้นกับการตั้งค่านี้

skills.workshop.approvalPolicy"pending" | "auto"default: "pending"

pending กำหนดให้ผู้ดำเนินการต้องอนุมัติก่อนการนำไปใช้ ปฏิเสธ หรือกักกันที่เอเจนต์เป็นผู้เริ่มต้น auto อนุญาตการดำเนินการเหล่านั้นโดยไม่ต้องได้รับอนุมัติ

skills.workshop.allowSymlinkTargetWritesbooleandefault: false

อนุญาตให้การนำไปใช้โดย Skill Workshop เขียนผ่าน symlink ของ Skills ในพื้นที่ทำงาน ซึ่งเป้าหมายจริงได้รับความเชื่อถือจาก skills.load.allowSymlinkTargets อยู่แล้ว คงการตั้งค่านี้เป็นปิด เว้นแต่การนำข้อเสนอที่สร้างขึ้นไปใช้ควรแก้ไขราก Skills ที่ใช้ร่วมกันนั้น

skills.workshop.maxPendingnumberdefault: 50

จำนวนสูงสุดของข้อเสนอที่รอดำเนินการและถูกกักกันซึ่งเก็บไว้ต่อพื้นที่ทำงาน (ช่วงที่อนุญาต: 1-200)

skills.workshop.maxSkillBytesnumberdefault: 40000

ขนาดสูงสุดของเนื้อหาข้อเสนอเป็นไบต์ (ช่วงที่อนุญาต: 1024-200000) คำอธิบาย ข้อเสนอถูกจำกัดแยกต่างหากไม่เกิน 160 ไบต์ เนื่องจากจะแสดงในผลลัพธ์ การค้นพบและการแสดงรายการ

ดู Skill Workshop สำหรับวงจรชีวิตของข้อเสนอ คำสั่ง CLI พารามิเตอร์เครื่องมือของเอเจนต์ และเมธอด Gateway ที่การกำหนดค่านี้ควบคุม

ตามค่าเริ่มต้น ราก Skills ของพื้นที่ทำงาน เอเจนต์โครงการ ไดเรกทอรีเพิ่มเติม และ Skills ที่รวมมาให้จะเป็นขอบเขตการจำกัด โฟลเดอร์ Skills ที่เป็น symlink ภายใต้ <workspace>/skills ซึ่งชี้ออกไปนอกรากจะถูกข้ามพร้อมข้อความในบันทึก

หากต้องการอนุญาตโครงสร้าง symlink โดยเจตนา ให้ประกาศเป้าหมายที่เชื่อถือได้:

json5
{  skills: {    load: {      extraDirs: ["~/Projects/manager/skills"],      allowSymlinkTargets: ["~/Projects/manager/skills"],    },  },}

เมื่อใช้การกำหนดค่านี้ <workspace>/skills/manager -> ~/Projects/manager/skills จะได้รับการยอมรับหลังจากแก้ไขเป็นพาธจริงแล้ว extraDirs จะสแกนรีโพซิทอรีข้างเคียง โดยตรง ส่วน allowSymlinkTargets จะคงพาธที่เชื่อมด้วย symlink ไว้สำหรับ โครงสร้างที่มีอยู่

ตามค่าเริ่มต้น การนำไปใช้โดย Skill Workshop จะไม่เขียนผ่าน symlink เหล่านั้น หากต้องการให้การนำไปใช้โดย Workshop แก้ไข Skills ภายใต้เป้าหมาย symlink ที่เชื่อถืออยู่แล้ว ให้เปิดใช้แยกต่างหาก:

json5
{  skills: {    load: {      allowSymlinkTargets: ["~/Projects/manager/skills"],    },    workshop: {      allowSymlinkTargetWrites: true,    },  },}

ไดเรกทอรี ~/.openclaw/skills ที่มีการจัดการและไดเรกทอรีส่วนบุคคล ~/.agents/skills ยอมรับ symlink ของไดเรกทอรี Skills โดยไม่มีเงื่อนไขอยู่แล้ว (การจำกัดขอบเขตของ SKILL.md ต่อ Skills ยังคงมีผล) — จำเป็นต้องใช้ allowSymlinkTargets เฉพาะกับรากของพื้นที่ทำงาน ไดเรกทอรีเพิ่มเติม และเอเจนต์โครงการ (<workspace>/.agents/skills) เท่านั้น

Skills ในแซนด์บ็อกซ์และตัวแปรสภาพแวดล้อม

ส่งข้อมูลลับเข้าแซนด์บ็อกซ์ Docker ด้วย:

json5
{  agents: {    defaults: {      sandbox: {        docker: {          env: { GEMINI_API_KEY: "your-key-here" },        },      },    },  },}

การเตือนเรื่องลำดับการโหลด

text
workspace/skills      (สูงสุด)workspace/.agents/skills~/.agents/skills~/.openclaw/skillsSkills ที่รวมมาให้skills.load.extraDirs (ต่ำสุด)

การเปลี่ยนแปลง Skills และการกำหนดค่าจะมีผลในเซสชันใหม่ครั้งถัดไปเมื่อเปิดใช้ ตัวเฝ้าดู หรือในรอบการทำงานถัดไปของเอเจนต์เมื่อตัวเฝ้าดูตรวจพบการเปลี่ยนแปลง

ที่เกี่ยวข้อง

Was this useful?
On this page

On this page