Tools

เครื่องมือดำเนินการ

เรียกใช้คำสั่งเชลล์ในพื้นที่ทำงาน exec เป็นพื้นผิวเชลล์ที่แก้ไขข้อมูลได้: คำสั่งสามารถสร้าง แก้ไข หรือลบไฟล์ได้ทุกที่ที่ระบบไฟล์ของโฮสต์หรือแซนด์บ็อกซ์ที่เลือกอนุญาต การปิดใช้เครื่องมือระบบไฟล์ของ OpenClaw เช่น write, edit หรือ apply_patch ไม่ได้ทำให้ exec เป็นแบบอ่านอย่างเดียว

รองรับการดำเนินการทั้งเบื้องหน้าและเบื้องหลังผ่าน process หากไม่อนุญาต process ระบบจะเรียกใช้ exec แบบซิงโครนัสและไม่สนใจ yieldMs/background เซสชันเบื้องหลังจำกัดขอบเขตแยกตามเอเจนต์ โดย process จะเห็นเฉพาะเซสชันจากเอเจนต์เดียวกัน

พารามิเตอร์

commandstringrequired

คำสั่งเชลล์ที่จะเรียกใช้

workdirstringdefault: cwd

ไดเรกทอรีทำงานสำหรับคำสั่ง

envobject

ค่าทดแทนสภาพแวดล้อมแบบคีย์/ค่าที่ผสานทับสภาพแวดล้อมที่สืบทอดมา

yieldMsnumberdefault: 10000

ย้ายคำสั่งไปทำงานเบื้องหลังโดยอัตโนมัติหลังจากระยะเวลาหน่วงนี้ (มิลลิวินาที)

backgroundbooleandefault: false

ย้ายคำสั่งไปทำงานเบื้องหลังทันที แทนที่จะรอ yieldMs

timeoutnumberdefault: tools.exec.timeoutSec

แทนที่ระยะหมดเวลาของ exec ที่กำหนดค่าไว้สำหรับการเรียกครั้งนี้ หน่วยเป็นวินาที มีผลกับการดำเนินการเบื้องหน้า เบื้องหลัง yieldMs, gateway, แซนด์บ็อกซ์ และ system.run ของ node โดย timeout: 0 จะปิดใช้การหมดเวลาของกระบวนการ exec สำหรับการเรียกครั้งนั้น

ptybooleandefault: false

เรียกใช้ในเทอร์มินัลเทียมเมื่อพร้อมใช้งาน ใช้สำหรับ CLI ที่ทำงานเฉพาะกับ TTY เอเจนต์เขียนโค้ด และ UI บนเทอร์มินัล

host'auto' | 'sandbox' | 'gateway' | 'node'default: auto

ตำแหน่งที่จะดำเนินการ auto จะถูกกำหนดเป็น sandbox เมื่อรันไทม์แซนด์บ็อกซ์ทำงานอยู่ และเป็น gateway ในกรณีอื่น

security'deny' | 'allowlist' | 'full'

ไม่มีผลสำหรับการเรียกเครื่องมือปกติ ความปลอดภัยของ gateway/node ควบคุมโดย tools.exec.security และไฟล์การอนุมัติของโฮสต์ โหมดยกระดับสามารถบังคับใช้ security=full ได้เฉพาะเมื่อผู้ควบคุมให้สิทธิ์การเข้าถึงแบบยกระดับอย่างชัดเจน

ask'off' | 'on-miss' | 'always'

โหมดการขออนุมัติพื้นฐานมาจาก tools.exec.ask และการอนุมัติของโฮสต์ สำหรับการเรียกโมเดลที่มาจากช่องทาง ระบบจะไม่สนใจ ask รายครั้งเมื่อการขออนุมัติที่มีผลของโฮสต์เป็น off มิฉะนั้นค่านี้ทำได้เพียงเพิ่มความเข้มงวดเป็นโหมดที่เข้มงวดกว่า ผู้เรียกภายใน/API ที่เชื่อถือได้ซึ่งสร้างเครื่องมือ exec ด้วยค่า ask ที่ระบุไว้อย่างชัดเจนจะไม่มีการเปลี่ยนแปลง

nodestring

รหัส/ชื่อ Node เมื่อ host=node

elevatedbooleandefault: false

ขอโหมดยกระดับ: ออกจากแซนด์บ็อกซ์ไปยังพาธโฮสต์ที่กำหนดค่าไว้ security=full จะถูกบังคับใช้เฉพาะเมื่อสถานะยกระดับถูกกำหนดเป็น full

หมายเหตุ:

  • host ยอมรับเฉพาะ auto, sandbox, gateway หรือ node เท่านั้น ค่านี้ไม่ใช่ตัวเลือกชื่อโฮสต์ โดยค่าที่มีลักษณะเหมือนชื่อโฮสต์จะถูกปฏิเสธก่อนเรียกใช้คำสั่ง
  • อนุญาตให้ระบุ host=node รายครั้งจาก auto ส่วน host=gateway รายครั้งจะอนุญาตเฉพาะเมื่อไม่มีรันไทม์แซนด์บ็อกซ์ทำงานอยู่
  • แม้ไม่มีการกำหนดค่าเพิ่มเติม host=auto ก็ยัง "ใช้งานได้ทันที": หากไม่มีแซนด์บ็อกซ์ ค่านี้จะถูกกำหนดเป็น gateway ส่วนเมื่อมีแซนด์บ็อกซ์ที่ทำงานอยู่ ค่านี้จะยังคงทำงานภายในแซนด์บ็อกซ์
  • elevated ออกจากแซนด์บ็อกซ์ไปยังพาธโฮสต์ที่กำหนดค่าไว้: ค่าเริ่มต้นคือ gateway หรือ node เมื่อ tools.exec.host=node (หรือค่าเริ่มต้นของเซสชันคือ host=node) ใช้งานได้เฉพาะเมื่อเปิดใช้สิทธิ์การเข้าถึงแบบยกระดับสำหรับเซสชัน/ผู้ให้บริการปัจจุบัน
  • การอนุมัติ gateway/node ควบคุมโดยไฟล์การอนุมัติของโฮสต์
  • node ต้องใช้ Node ที่จับคู่ไว้ (แอปคู่หูหรือโฮสต์ Node แบบไม่มีอินเทอร์เฟซ) หากมีหลาย Node ให้ตั้งค่า exec.node หรือ tools.exec.node เพื่อเลือกหนึ่งรายการ
  • exec host=node เป็นพาธเดียวสำหรับดำเนินการเชลล์บน Node ส่วน Wrapper รุ่นเก่า nodes.run ถูกลบแล้ว
  • บนโฮสต์ที่ไม่ใช่ Windows exec จะใช้ SHELL เมื่อตั้งค่าไว้ หาก SHELL เป็น fish ระบบจะเลือกใช้ bash (หรือ sh) จาก PATH ก่อน เพื่อหลีกเลี่ยงรูปแบบคำสั่ง bash ที่ใช้กับ fish ไม่ได้ จากนั้นจึงย้อนกลับไปใช้ SHELL หากไม่มีทั้งสองรายการ
  • บนโฮสต์ Windows exec จะค้นหาและเลือกใช้ PowerShell 7 (pwsh) ก่อน (Program Files, ProgramW6432 แล้วจึง PATH) จากนั้นจึงย้อนกลับไปใช้ Windows PowerShell 5.1
  • บนโฮสต์ Gateway ที่ไม่ใช่ Windows คำสั่ง exec ของ bash และ zsh จะใช้สแนปช็อตเริ่มต้น OpenClaw บันทึก alias/ฟังก์ชันที่นำมาใช้ได้และชุดสภาพแวดล้อมขนาดเล็กที่ปลอดภัยจากไฟล์เริ่มต้นของเชลล์ไว้ใน $OPENCLAW_STATE_DIR/cache/shell-snapshots/ แล้วโหลดสแนปช็อตนั้นก่อนคำสั่ง exec แต่ละครั้ง ตัวแปรที่มีลักษณะเป็นข้อมูลลับจะถูกยกเว้น ส่วน exec ในแซนด์บ็อกซ์และ Node จะไม่ใช้สแนปช็อตนี้ ตั้งค่า OPENCLAW_EXEC_SHELL_SNAPSHOT=0 ในสภาพแวดล้อมของกระบวนการ Gateway เพื่อปิดใช้พาธสแนปช็อตนี้
  • การดำเนินการบนโฮสต์ (gateway/node) จะปฏิเสธ env.PATH และค่าทดแทนตัวโหลด (LD_*/DYLD_*) เพื่อป้องกันการยึดไบนารีหรือการแทรกโค้ด
  • OpenClaw ตั้งค่า OPENCLAW_SHELL=exec ในสภาพแวดล้อมของคำสั่งที่สร้างขึ้น (รวมถึงการดำเนินการผ่าน PTY และแซนด์บ็อกซ์) เพื่อให้กฎของเชลล์/โปรไฟล์ตรวจจับบริบทของเครื่องมือ exec ได้
  • สำหรับการเรียกใช้ที่มาจากช่องทาง OpenClaw ยังเปิดเผยเพย์โหลด JSON แบบจำกัดซึ่งระบุตัวตนผู้ส่ง/แชตใน OPENCLAW_CHANNEL_CONTEXT เมื่อช่องทางให้รหัสเหล่านั้นมา
  • exec ไม่สามารถเรียกใช้คำสั่งเชลล์ openclaw channels login หรือ /approve ได้: openclaw channels login เป็นขั้นตอนการยืนยันตัวตนของช่องทางแบบโต้ตอบ และ /approve ต้องผ่านตัวจัดการคำสั่งการอนุมัติ ไม่ใช่เชลล์ ให้เข้าสู่ระบบช่องทางในเทอร์มินัลบนโฮสต์ Gateway หรือใช้เครื่องมือเอเจนต์สำหรับเข้าสู่ระบบของช่องทางนั้นเมื่อมีให้ใช้ (ตัวอย่างเช่น whatsapp_login)
  • สำคัญ: การใช้แซนด์บ็อกซ์ ปิดอยู่โดยค่าเริ่มต้น หากปิดการใช้แซนด์บ็อกซ์ ค่า host=auto โดยนัยจะถูกกำหนดเป็น gateway ส่วน host=sandbox ที่ระบุอย่างชัดเจนจะยังคงล้มเหลวแบบปิด แทนที่จะเรียกใช้บนโฮสต์ Gateway โดยเงียบ ๆ เปิดใช้แซนด์บ็อกซ์หรือใช้ host=gateway พร้อมการอนุมัติ
  • การตรวจสอบเบื้องต้นของสคริปต์ (สำหรับข้อผิดพลาดทั่วไปด้านไวยากรณ์เชลล์ของ Python/Node) จะตรวจเฉพาะไฟล์ภายในขอบเขต workdir ที่มีผล หากพาธสคริปต์ถูกกำหนดไปยังตำแหน่งนอก workdir ระบบจะข้ามการตรวจสอบเบื้องต้นสำหรับไฟล์นั้น นอกจากนี้ ระบบจะข้ามการตรวจสอบเบื้องต้นทั้งหมดเมื่อ host=gateway และนโยบายที่มีผลคือ security=full พร้อม ask=off
  • สำหรับงานที่ใช้เวลานานและเริ่มตอนนี้ ให้เริ่มเพียงครั้งเดียวและอาศัยการปลุกเมื่อเสร็จสิ้นโดยอัตโนมัติเมื่อเปิดใช้และคำสั่งสร้างเอาต์พุตหรือล้มเหลว ใช้ process สำหรับบันทึก สถานะ อินพุต หรือการแทรกแซง อย่าจำลองการจัดกำหนดการด้วยลูป sleep ลูปหมดเวลา หรือการสำรวจสถานะซ้ำ ๆ
  • คำสั่งเบื้องหลังที่เอเจนต์เริ่มจะแสดงในมุมมองงานเบื้องหลังของ Web, iOS และ Android จนกว่าจะเสร็จสิ้น บัญชีแยกประเภทงานจะได้รับการสรุปให้เสร็จก่อนที่ Heartbeat เมื่อเสร็จสิ้นจะปลุกเอเจนต์อีกครั้ง
  • สำหรับงานที่ควรเกิดขึ้นภายหลังหรือตามกำหนดการ ให้ใช้ Cron แทนรูปแบบ sleep/delay ของ exec

การกำหนดค่า

คีย์ ค่าเริ่มต้น หมายเหตุ
tools.exec.timeoutSec 1800 ระยะหมดเวลาเริ่มต้นต่อคำสั่ง exec เป็นวินาที โดย timeout ต่อการเรียกจะแทนที่ค่านี้ และ timeout: 0 ต่อการเรียกจะปิดระยะหมดเวลาของกระบวนการ exec
tools.exec.host auto แปลงเป็น sandbox เมื่อรันไทม์แซนด์บ็อกซ์ทำงานอยู่ มิฉะนั้นจะแปลงเป็น gateway
tools.exec.security deny สำหรับแซนด์บ็อกซ์, full สำหรับ gateway/node เมื่อไม่ได้ตั้งค่า
tools.exec.ask off
tools.exec.mode ไม่ได้ตั้งค่า ตัวควบคุมนโยบายที่ทำให้เป็นมาตรฐานแล้ว ดูโหมดด้านล่าง ไม่สามารถใช้ร่วมกับ tools.exec.security/tools.exec.ask
tools.exec.reviewer.model โมเดลหลักของเอเจนต์ที่กำหนดไว้ ตัวเลือกเสริมสำหรับแทนที่ผู้ให้บริการ/โมเดลที่ใช้ในการตรวจสอบ mode=auto
tools.exec.reviewer.timeoutMs 30000 ระยะหมดเวลาต่อขั้นสำหรับการเตรียมและการทำงานจนเสร็จของโมเดลผู้ตรวจสอบ ก่อนเปลี่ยนไปให้มนุษย์ดำเนินการแทน
tools.exec.node ไม่ได้ตั้งค่า
tools.exec.notifyOnExit true เมื่อเป็นจริง เซสชัน exec ที่ทำงานเบื้องหลังจะเพิ่มเหตุการณ์ระบบลงในคิวและร้องขอ Heartbeat เมื่อสิ้นสุด
tools.exec.approvalRunningNoticeMs 10000 แสดงการแจ้งเตือน "กำลังทำงาน" หนึ่งครั้งเมื่อ exec ที่ต้องผ่านการอนุมัติทำงานนานกว่าค่านี้ (0 จะปิดการทำงานนี้)
tools.exec.strictInlineEval false ดูการประเมินค่าแบบอินไลน์
tools.exec.commandHighlighting false เมื่อเป็นจริง พรอมต์การอนุมัติสามารถเน้นช่วงคำสั่งในข้อความคำสั่งที่ได้จากตัวแยกวิเคราะห์ ตั้งค่าได้ทั้งแบบส่วนกลางหรือต่อเอเจนต์ และไม่เปลี่ยนนโยบายการอนุมัติ
tools.exec.pathPrepend ไม่ได้ตั้งค่า รายการไดเรกทอรีที่จะเติมไว้ด้านหน้า PATH สำหรับการเรียกใช้ exec (gateway + แซนด์บ็อกซ์เท่านั้น)
tools.exec.safeBins ไม่ได้ตั้งค่า ไบนารีที่ปลอดภัยและรับข้อมูลผ่าน stdin เท่านั้น ซึ่งเรียกใช้ได้โดยไม่ต้องมีรายการในรายการอนุญาตอย่างชัดเจน ดูไบนารีที่ปลอดภัย
tools.exec.safeBinTrustedDirs /bin, /usr/bin ไดเรกทอรีที่เชื่อถือเพิ่มเติมซึ่งระบุไว้อย่างชัดเจนสำหรับการตรวจสอบพาธของ safeBins รายการ PATH จะไม่ได้รับความเชื่อถือโดยอัตโนมัติ
tools.exec.safeBinProfiles ไม่ได้ตั้งค่า นโยบาย argv แบบกำหนดเองที่เป็นตัวเลือกเสริมสำหรับไบนารีที่ปลอดภัยแต่ละรายการ (minPositional, maxPositional, allowedValueFlags, deniedFlags)

การเรียกใช้ exec บนโฮสต์โดยไม่ต้องอนุมัติเป็นค่าเริ่มต้นสำหรับ gateway และ node (security=full, ask=off) ซึ่งมาจากค่าเริ่มต้นของนโยบายโฮสต์ ไม่ใช่จาก host=auto หากต้องการลักษณะการทำงานแบบต้องอนุมัติ/ใช้รายการอนุญาต ให้เพิ่มความเข้มงวดทั้ง tools.exec.* และไฟล์การอนุมัติของโฮสต์ ดูการอนุมัติ Exec หากต้องการบังคับการกำหนดเส้นทางไปยัง gateway หรือ node โดยไม่ขึ้นกับสถานะแซนด์บ็อกซ์ ให้ตั้งค่า tools.exec.host หรือใช้ /exec host=...

ตัวอย่าง:

json5
{  tools: {    exec: {      pathPrepend: ["~/bin", "/opt/oss/bin"],    },  },}

โหมด

tools.exec.mode คือตัวควบคุมนโยบายที่ทำให้เป็นมาตรฐานแล้ว การตั้งค่านี้จะกำหนดค่า security/ask และไม่สามารถใช้ร่วมกับ tools.exec.security/tools.exec.ask ที่ระบุไว้อย่างชัดเจนได้

โหมด ความปลอดภัย การถาม ลักษณะการทำงาน
deny deny off ปฏิเสธ Exec
allowlist allowlist off เรียกใช้เฉพาะคำสั่งในรายการอนุญาต/คำสั่งไบนารีที่ปลอดภัย และจะไม่ถามสำหรับคำสั่งอื่น
ask allowlist on-miss รายการที่ตรงกับรายการอนุญาตจะทำงานโดยตรง ส่วนรายการอื่นทั้งหมดจะถามมนุษย์
auto allowlist on-miss รายการที่ตรงกับรายการอนุญาต/ไบนารีที่ปลอดภัยจะทำงานโดยตรง ส่วนรายการอื่นทั้งหมดจะผ่านผู้ตรวจสอบอัตโนมัติแบบเนทีฟของ OpenClaw ก่อนถามมนุษย์
full full off ไม่มีด่านการอนุมัติ

ask/ask=always ยังคงถามมนุษย์ทุกครั้งโดยไม่ขึ้นกับโหมด

การอนุมัติจากการตรวจสอบอัตโนมัติใช้ได้ครั้งเดียว บน gateway OpenClaw จะส่งพาธไฟล์ปฏิบัติการที่แก้ไขแล้วให้ผู้ตรวจสอบ และตรึงการเรียกใช้ไว้กับพาธเดียวกันนั้น คำสั่งที่ไม่สามารถลดรูปเป็นแผนการเรียกใช้เดียวที่บังคับใช้ได้ เช่น heredoc, การขยายค่าโดยเชลล์ หรือการใส่เครื่องหมายคำพูดของตัวห่อหุ้มที่ไม่รองรับ จะเปลี่ยนไปขออนุมัติจากมนุษย์ แม้ว่าในกรณีอื่นโมเดลจะอนุญาตคำสั่งเหล่านั้นก็ตาม

การอนุมัติคำสั่งของเซิร์ฟเวอร์แอป Codex ที่ยังไม่ได้รับการตัดสินโดยรันไทม์หรือนโยบายแบบเนทีฟอย่างชัดเจน จะใช้เส้นทางการอนุมัติจากมนุษย์ OpenClaw จะไม่เรียกใช้ผู้ตรวจสอบ exec ที่กำหนดค่าไว้สำหรับคำขอเหล่านี้ เนื่องจาก Codex ไม่เปิดเผยไฟล์ปฏิบัติการที่แก้ไขแล้วและบังคับใช้ได้ ซึ่งสามารถผูกการตัดสินของผู้ตรวจสอบเข้ากับคำสั่งที่ Codex เรียกใช้

การประเมินค่าแบบอินไลน์ (strictInlineEval)

เมื่อ tools.exec.strictInlineEval เป็น true รูปแบบการประเมินค่าของอินเทอร์พรีเตอร์แบบอินไลน์ต้องผ่านผู้ตรวจสอบหรือได้รับการอนุมัติอย่างชัดเจน ได้แก่ python -c, node -e, ruby -e, perl -e, php -r, lua -e, osascript -e และรูปแบบที่คล้ายกันในอินเทอร์พรีเตอร์และตัวนำพาคำสั่งอื่นที่รองรับ (awk, find -exec, make, sed, xargs และอื่นๆ) ใน mode=auto เส้นทางการอนุมัติ exec ตามปกติอาจอนุญาตให้ผู้ตรวจสอบอัตโนมัติแบบเนทีฟอนุมัติคำสั่งแบบใช้ครั้งเดียวที่เห็นได้ชัดว่ามีความเสี่ยงต่ำ ส่วนการเรียก system.run โดยตรงบนโฮสต์ node ยังคงต้องได้รับการอนุมัติอย่างชัดเจน เนื่องจากไม่สามารถส่งคำสั่งไปยังเส้นทางการอนุมัติจากมนุษย์ได้ หากผู้ตรวจสอบขอให้อนุมัติ คำขอจะถูกส่งไปยังมนุษย์ allow-always ยังคงสามารถบันทึกการเรียกใช้อินเทอร์พรีเตอร์/สคริปต์ที่ไม่มีอันตรายได้ แต่รูปแบบการประเมินค่าแบบอินไลน์จะไม่กลายเป็นกฎอนุญาตแบบถาวร

การจัดการ PATH

  • host=gateway: ผสาน PATH จากล็อกอินเชลล์เข้ากับสภาพแวดล้อม exec การแทนที่ env.PATH จะถูกปฏิเสธสำหรับการเรียกใช้บนโฮสต์ ตัวดีมอนเองยังคงทำงานด้วย PATH ขั้นต่ำ:
    • macOS: /opt/homebrew/bin, /usr/local/bin, /usr/bin, /bin
    • Linux: /usr/local/bin, /usr/bin, /bin
    • เพื่อป้องกันไม่ให้การกำหนดค่าเชลล์ของผู้ใช้ (เช่น ~/.zshenv หรือ /etc/zshenv) แทนที่พาธที่มีลำดับความสำคัญระหว่างการเริ่มต้น ระบบจะเติมรายการ tools.exec.pathPrepend ไว้ด้านหน้า PATH สุดท้ายอย่างปลอดภัยภายในคำสั่งเชลล์ก่อนการเรียกใช้ทันที
  • host=sandbox: เรียกใช้ sh -lc (ล็อกอินเชลล์) ภายในคอนเทนเนอร์ ดังนั้น /etc/profile อาจรีเซ็ต PATH OpenClaw จะเติม env.PATH ไว้ด้านหน้าหลังโหลดโปรไฟล์ผ่านตัวแปรสภาพแวดล้อมภายใน (ไม่มีการแทรกค่าโดยเชลล์) และ tools.exec.pathPrepend มีผลที่นี่ด้วย
  • host=node: ระบบจะส่งเฉพาะการแทนที่ตัวแปรสภาพแวดล้อมที่ไม่ถูกบล็อกซึ่งคุณระบุไปยัง node การแทนที่ env.PATH จะถูกปฏิเสธสำหรับการเรียกใช้บนโฮสต์และถูกโฮสต์ node ละเว้น หากต้องการรายการ PATH เพิ่มเติมบน node ให้กำหนดค่าสภาพแวดล้อมของบริการโฮสต์ node (systemd/launchd) หรือติดตั้งเครื่องมือในตำแหน่งมาตรฐาน

การผูก node ต่อเอเจนต์ (ใช้ดัชนีรายการเอเจนต์ในการกำหนดค่า):

bash
openclaw config get agents.listopenclaw config set 'agents.list[0].tools.exec.node' "node-id-or-name"

Control UI: หน้า Devices มีแผงขนาดเล็กชื่อ "Exec node binding" สำหรับการตั้งค่าเดียวกัน

การแทนที่สำหรับเซสชัน (/exec)

ใช้ /exec เพื่อตั้งค่าเริ่มต้น ต่อเซสชัน สำหรับ host, security, ask และ node ส่ง /exec โดยไม่มีอาร์กิวเมนต์เพื่อแสดงค่าปัจจุบัน

ตัวอย่าง:

text
/exec host=auto security=allowlist ask=on-miss node=mac-1

ระบบจะยอมรับ /exec เฉพาะจาก ผู้ส่งที่ได้รับอนุญาต (รายการอนุญาต/การจับคู่ของช่องทาง รวมถึง commands.useAccessGroups) คำสั่งนี้อัปเดต เฉพาะสถานะเซสชัน และไม่เขียนการกำหนดค่า ผู้ส่งจากช่องทางภายนอกที่ได้รับอนุญาตสามารถตั้งค่าเริ่มต้นสำหรับเซสชันเหล่านี้ได้ ส่วนไคลเอนต์ gateway/webchat ภายในต้องใช้ operator.admin เพื่อบันทึกค่าเหล่านี้อย่างถาวร

หากต้องการปิดใช้งาน exec โดยเด็ดขาด ให้ปฏิเสธผ่านนโยบายเครื่องมือ (tools.deny: ["exec"] หรือแบบต่อเอเจนต์) การอนุมัติของโฮสต์ยังคงมีผล เว้นแต่จะตั้งค่า security=full และ ask=off อย่างชัดเจน

การอนุมัติ Exec (แอปคู่หู / โฮสต์ node)

เอเจนต์ในแซนด์บ็อกซ์สามารถกำหนดให้ต้องได้รับการอนุมัติต่อคำขอก่อนที่ exec จะทำงานบน gateway หรือโฮสต์ node ดูการอนุมัติ Execสำหรับนโยบาย รายการอนุญาต และขั้นตอนใน UI

เมื่อต้องได้รับการอนุมัติจากมนุษย์ โฟลว์ของโฮสต์ node และ gateway ที่ไม่ใช่แบบเนทีฟจะส่งคืน status: "approval-pending" พร้อมรหัสการอนุมัติทันที ส่วนโฟลว์ gateway ของแชตแบบเนทีฟและ Web UI สามารถรอแบบอินไลน์และส่งคืนผลลัพธ์สุดท้ายของคำสั่งหลังได้รับการอนุมัติ ผลลัพธ์ approval-pending หมายความว่าคำสั่งยังไม่เริ่มทำงาน ดังนั้นคำเตือนการเปลี่ยนไปทำงานเบื้องหน้าจะแสดงเฉพาะเมื่อคำสั่งที่ได้รับอนุมัติทำงานแบบอินไลน์จริงเท่านั้น การเรียกใช้แบบอะซิงโครนัสที่ได้รับอนุมัติจะแสดงเหตุการณ์ระบบเกี่ยวกับความคืบหน้าและการทำงานเสร็จสิ้นของคำสั่ง (Exec running / Exec finished) ส่วนการอนุมัติที่ถูกปฏิเสธหรือหมดเวลาถือเป็นสถานะสิ้นสุด และจะไม่ปลุกเซสชันเอเจนต์ด้วยเหตุการณ์ระบบแจ้งการปฏิเสธ

ในช่องทางที่มีการ์ด/ปุ่มอนุมัติแบบเนทีฟ เอเจนต์ควรใช้ UI แบบเนทีฟนั้นก่อน และระบุคำสั่ง /approve สำหรับการดำเนินการด้วยตนเองเฉพาะเมื่อผลลัพธ์จากเครื่องมือระบุอย่างชัดเจนว่าไม่สามารถอนุมัติผ่านแชตได้ หรือการอนุมัติด้วยตนเองเป็นวิธีเดียวเท่านั้น

รายการอนุญาต + ไบนารีที่ปลอดภัย

การบังคับใช้รายการอนุญาตด้วยตนเองจะจับคู่กับ glob ของพาธไบนารีที่ผ่านการแก้ไขแล้วและ glob ของชื่อคำสั่งล้วน ชื่อคำสั่งล้วนจะจับคู่เฉพาะคำสั่งที่เรียกใช้ผ่าน PATH ดังนั้น rg จึงจับคู่กับ /opt/homebrew/bin/rg ได้เมื่อคำสั่งคือ rg แต่จะไม่จับคู่กับ ./rg หรือ /tmp/rg

เมื่อ security=allowlist คำสั่งเชลล์จะได้รับอนุญาตโดยอัตโนมัติเฉพาะเมื่อทุกส่วนของไปป์ไลน์อยู่ในรายการอนุญาตหรือเป็นไบนารีที่ปลอดภัย การเชื่อมคำสั่ง (;, &&, ||) และการเปลี่ยนทิศทางจะถูกปฏิเสธในโหมดรายการอนุญาต เว้นแต่ทุกส่วนระดับบนสุดจะผ่านรายการอนุญาต (รวมถึงไบนารีที่ปลอดภัย) การเปลี่ยนทิศทางยังคงไม่รองรับ ความเชื่อถือ allow-always แบบถาวรไม่สามารถข้ามกฎนี้ได้ กล่าวคือคำสั่งที่เชื่อมต่อกันยังคงต้องให้ทุกส่วนระดับบนสุดจับคู่ได้

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

ใช้ตัวควบคุมทั้งสองสำหรับงานที่แตกต่างกัน:

  • tools.exec.safeBins: ตัวกรองสตรีมขนาดเล็กที่รับข้อมูลผ่าน stdin เท่านั้น
  • tools.exec.safeBinTrustedDirs: ไดเรกทอรีที่เชื่อถือเพิ่มเติมซึ่งระบุอย่างชัดเจนสำหรับพาธไฟล์ปฏิบัติการของไบนารีที่ปลอดภัย
  • tools.exec.safeBinProfiles: นโยบาย argv ที่ระบุอย่างชัดเจนสำหรับไบนารีที่ปลอดภัยแบบกำหนดเอง
  • allowlist: ความเชื่อถือที่ระบุอย่างชัดเจนสำหรับพาธไฟล์ปฏิบัติการ

อย่าถือว่า safeBins เป็นรายการอนุญาตทั่วไป และอย่าเพิ่มไบนารีอินเทอร์พรีเตอร์/รันไทม์ (เช่น python3, node, ruby, bash) หากจำเป็นต้องใช้ ให้ใช้รายการอนุญาตที่ระบุอย่างชัดเจนและเปิดใช้พรอมต์การอนุมัติไว้

openclaw security audit จะแจ้งเตือนเมื่อรายการ safeBins ของอินเทอร์พรีเตอร์/รันไทม์ไม่มีโปรไฟล์ที่ระบุอย่างชัดเจน และ openclaw doctor --fix สามารถสร้างโครงรายการ safeBinProfiles แบบกำหนดเองที่ขาดหายไปได้ นอกจากนี้ openclaw security audit และ openclaw doctor ยังจะแจ้งเตือนเมื่อเพิ่มไบนารีที่มีลักษณะการทำงานกว้าง เช่น jq กลับเข้าไปใน safeBins อย่างชัดเจน (jq สามารถอ่านข้อมูลสภาพแวดล้อมและโหลดโค้ด jq จากโมดูลหรือไฟล์เริ่มต้นได้ ดังนั้นควรใช้รายการอนุญาตที่ระบุอย่างชัดเจนหรือการเรียกใช้ที่มีการอนุมัติกำกับแทน) jq จะถูกปฏิเสธไม่ให้เป็นไบนารีที่ปลอดภัย แม้จะระบุไว้อย่างชัดเจนก็ตาม หากเพิ่มอินเทอร์พรีเตอร์ลงในรายการอนุญาตอย่างชัดเจน ให้เปิดใช้ tools.exec.strictInlineEval เพื่อให้รูปแบบการประเมินโค้ดแบบอินไลน์ยังคงต้องได้รับการอนุมัติจากผู้ตรวจสอบหรือการอนุมัติอย่างชัดเจน

ดูรายละเอียดนโยบายและตัวอย่างทั้งหมดได้ที่ การอนุมัติ Exec และ ไบนารีที่ปลอดภัยเทียบกับรายการอนุญาต

ตัวอย่าง

เบื้องหน้า:

json
{ "tool": "exec", "command": "ls -la" }

เบื้องหลัง + การตรวจสอบสถานะ:

json
{"tool":"exec","command":"npm run build","yieldMs":1000}{"tool":"process","action":"poll","sessionId":"<id>"}

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

ส่งปุ่มกด (แบบ tmux):

json
{"tool":"process","action":"send-keys","sessionId":"<id>","keys":["Enter"]}{"tool":"process","action":"send-keys","sessionId":"<id>","keys":["C-c"]}{"tool":"process","action":"send-keys","sessionId":"<id>","keys":["Up","Up","Enter"]}

ส่ง (ส่งเฉพาะ CR):

json
{ "tool": "process", "action": "submit", "sessionId": "<id>" }

วาง (ใช้วงเล็บครอบโดยค่าเริ่มต้น):

json
{ "tool": "process", "action": "paste", "sessionId": "<id>", "text": "line1\nline2\n" }

apply_patch

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

json5
{  tools: {    exec: {      applyPatch: { workspaceOnly: true, allowModels: ["gpt-5.6-sol"] },    },  },}

หมายเหตุ:

  • นโยบายเครื่องมือยังคงมีผล โดย allow: ["write"] จะอนุญาต apply_patch โดยปริยาย
  • deny: ["write"] ไม่ได้ปฏิเสธ apply_patch ให้ปฏิเสธ apply_patch อย่างชัดเจน หรือใช้ deny: ["group:fs"] เมื่อต้องการบล็อกการเขียนแพตช์ด้วย
  • การกำหนดค่าอยู่ภายใต้ tools.exec.applyPatch
  • tools.exec.applyPatch.enabled มีค่าเริ่มต้นเป็น true ให้ตั้งค่าเป็น false เพื่อปิดใช้งานเครื่องมือ
  • tools.exec.applyPatch.workspaceOnly มีค่าเริ่มต้นเป็น true (จำกัดภายในเวิร์กสเปซ) ตั้งค่าเป็น false เฉพาะเมื่อตั้งใจให้ apply_patch เขียน/ลบนอกไดเรกทอรีเวิร์กสเปซเท่านั้น
  • tools.exec.applyPatch.allowModels เป็นรายการอนุญาตของรหัสโมเดลที่กำหนดหรือไม่ก็ได้ (แบบดิบ เช่น gpt-5.4 หรือแบบเต็ม เช่น openai/gpt-5.4) เมื่อตั้งค่าไว้ เฉพาะโมเดลที่จับคู่เท่านั้นที่จะได้รับเครื่องมือ หากไม่ได้ตั้งค่า โมเดลทั้งหมดจะได้รับเครื่องมือ

เนื้อหาที่เกี่ยวข้อง

Was this useful?
On this page

On this page