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=...
ตัวอย่าง:
{ 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สุดท้ายอย่างปลอดภัยภายในคำสั่งเชลล์ก่อนการเรียกใช้ทันที
- macOS:
host=sandbox: เรียกใช้sh -lc(ล็อกอินเชลล์) ภายในคอนเทนเนอร์ ดังนั้น/etc/profileอาจรีเซ็ตPATHOpenClaw จะเติมenv.PATHไว้ด้านหน้าหลังโหลดโปรไฟล์ผ่านตัวแปรสภาพแวดล้อมภายใน (ไม่มีการแทรกค่าโดยเชลล์) และtools.exec.pathPrependมีผลที่นี่ด้วยhost=node: ระบบจะส่งเฉพาะการแทนที่ตัวแปรสภาพแวดล้อมที่ไม่ถูกบล็อกซึ่งคุณระบุไปยัง node การแทนที่env.PATHจะถูกปฏิเสธสำหรับการเรียกใช้บนโฮสต์และถูกโฮสต์ node ละเว้น หากต้องการรายการ PATH เพิ่มเติมบน node ให้กำหนดค่าสภาพแวดล้อมของบริการโฮสต์ node (systemd/launchd) หรือติดตั้งเครื่องมือในตำแหน่งมาตรฐาน
การผูก node ต่อเอเจนต์ (ใช้ดัชนีรายการเอเจนต์ในการกำหนดค่า):
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 โดยไม่มีอาร์กิวเมนต์เพื่อแสดงค่าปัจจุบัน
ตัวอย่าง:
/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 และ ไบนารีที่ปลอดภัยเทียบกับรายการอนุญาต
ตัวอย่าง
เบื้องหน้า:
{ "tool": "exec", "command": "ls -la" }เบื้องหลัง + การตรวจสอบสถานะ:
{"tool":"exec","command":"npm run build","yieldMs":1000}{"tool":"process","action":"poll","sessionId":"<id>"}การตรวจสอบสถานะมีไว้สำหรับดูสถานะตามต้องการ ไม่ใช่สำหรับลูปรอ หากเปิดใช้การปลุกเมื่อเสร็จสิ้นโดยอัตโนมัติ คำสั่งสามารถปลุกเซสชันเมื่อสร้างเอาต์พุตหรือล้มเหลวได้
ส่งปุ่มกด (แบบ tmux):
{"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):
{ "tool": "process", "action": "submit", "sessionId": "<id>" }วาง (ใช้วงเล็บครอบโดยค่าเริ่มต้น):
{ "tool": "process", "action": "paste", "sessionId": "<id>", "text": "line1\nline2\n" }apply_patch
apply_patch เป็นเครื่องมือย่อยของ exec สำหรับการแก้ไขหลายไฟล์แบบมีโครงสร้าง โดยเปิดใช้เป็นค่าเริ่มต้นและพร้อมใช้งานกับผู้ให้บริการโมเดลทุกราย ทั้งนี้ allowModels สามารถจำกัดการใช้งานได้ ใช้การกำหนดค่าเฉพาะเมื่อต้องการปิดใช้งานหรือจำกัดให้ใช้กับบางโมเดลเท่านั้น:
{ 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) เมื่อตั้งค่าไว้ เฉพาะโมเดลที่จับคู่เท่านั้นที่จะได้รับเครื่องมือ หากไม่ได้ตั้งค่า โมเดลทั้งหมดจะได้รับเครื่องมือ
เนื้อหาที่เกี่ยวข้อง
- การอนุมัติ Exec — จุดตรวจการอนุมัติสำหรับคำสั่งเชลล์
- การทำแซนด์บ็อกซ์ — การเรียกใช้คำสั่งในสภาพแวดล้อมแบบแซนด์บ็อกซ์
- กระบวนการเบื้องหลัง — เครื่องมือ exec และ process สำหรับงานที่ทำงานเป็นเวลานาน
- ความปลอดภัย — นโยบายเครื่องมือและการเข้าถึงแบบยกระดับ