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: "auto",      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 เพิ่มเติมที่จะสแกน โดยมีลำดับความสำคัญต่ำที่สุด (ต่ำกว่า Skills ที่มาพร้อมระบบและของ 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 เท่านั้น โดย OpenClaw CLI และรันไทม์ Gateway ต้องใช้ Node เพราะ ที่เก็บสถานะมาตรฐานใช้ node:sqlite ส่วน 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,      // ไม่ระบุ targets เพื่อให้ครอบคลุมทุกเป้าหมายที่รองรับ      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: "พาธ Plugin ภายในเครื่องไม่ได้รับการอนุมัติบนโฮสต์นี้",      }),    );    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"], // ค่าพื้นฐานที่ใช้ร่วมกัน    },    list: [      { id: "writer" }, // สืบทอด github, weather      { id: "docs", skills: ["docs-search"] }, // แทนที่ค่าเริ่มต้นทั้งหมด      { id: "locked-down", skills: [] }, // ไม่มี Skills    ],  },}
agents.defaults.skillsstring[]

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

agents.list[].skillsstring[]

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

Workshop (skills.workshop)

skills.workshop.autonomous.enabledbooleandefault: false

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

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

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

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

skills.workshop.allowSymlinkTargetWritesbooleandefault: false

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

skills.workshop.maxPendingnumberdefault: 50

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

skills.workshop.maxSkillBytesnumberdefault: 40000

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

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

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

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

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

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

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

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

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

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

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

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

ข้อควรจำเกี่ยวกับลำดับการโหลด

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

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

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

Was this useful?
On this page

On this page