Tools
เครื่องมือ Exec
เรียกใช้คำสั่งเชลล์ในเวิร์กสเปซ exec เป็นพื้นผิวเชลล์ที่เปลี่ยนแปลงสถานะได้: คำสั่งสามารถสร้าง แก้ไข หรือลบไฟล์ได้ทุกที่ที่โฮสต์หรือระบบไฟล์แซนด์บ็อกซ์ที่เลือกอนุญาต การปิดใช้งานเครื่องมือระบบไฟล์ของ OpenClaw เช่น write, edit หรือ apply_patch ไม่ได้ทำให้ exec เป็นแบบอ่านอย่างเดียว
รองรับการดำเนินการแบบ foreground + background ผ่าน process หากไม่อนุญาตให้ใช้ process exec จะรันแบบซิงโครนัสและละเว้น yieldMs/background
เซสชันพื้นหลังถูกกำหนดขอบเขตต่อเอเจนต์; process จะเห็นเฉพาะเซสชันจากเอเจนต์เดียวกัน
พารามิเตอร์
commandstringrequiredคำสั่งเชลล์ที่จะเรียกใช้
workdirstringdefault: cwdไดเรกทอรีทำงานสำหรับคำสั่ง
envobjectการแทนที่สภาพแวดล้อมแบบคีย์/ค่าที่ผสานทับบนสภาพแวดล้อมที่สืบทอดมา
yieldMsnumberdefault: 10000ย้ายคำสั่งไปเป็นพื้นหลังโดยอัตโนมัติหลังจากการหน่วงเวลานี้ (มิลลิวินาที)
backgroundbooleandefault: falseย้ายคำสั่งไปเป็นพื้นหลังทันทีแทนการรอ yieldMs
timeoutnumberdefault: tools.exec.timeoutSecแทนที่ timeout ของ exec ที่กำหนดค่าสำหรับการเรียกนี้ ตั้ง timeout: 0 เฉพาะเมื่อคำสั่งควรรันโดยไม่มี timeout ของกระบวนการ exec
ptybooleandefault: falseรันในเทอร์มินัลเทียมเมื่อพร้อมใช้งาน ใช้สำหรับ CLI ที่ต้องใช้ TTY เท่านั้น เอเจนต์เขียนโค้ด และ UI เทอร์มินัล
host'auto' | 'sandbox' | 'gateway' | 'node'default: autoตำแหน่งที่จะดำเนินการ auto จะ resolve เป็น 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 จะถูกบังคับเฉพาะเมื่อ elevated resolve เป็น full
หมายเหตุ:
hostมีค่าเริ่มต้นเป็นauto: ใช้แซนด์บ็อกซ์เมื่อรันไทม์แซนด์บ็อกซ์ทำงานอยู่สำหรับเซสชัน มิฉะนั้นใช้ gatewayhostรับเฉพาะauto,sandbox,gatewayหรือnodeเท่านั้น ไม่ใช่ตัวเลือกชื่อโฮสต์; ค่าที่ดูเหมือนชื่อโฮสต์จะถูกปฏิเสธก่อนคำสั่งรันautoเป็นกลยุทธ์การกำหนดเส้นทางเริ่มต้น ไม่ใช่ไวลด์การ์ด อนุญาตhost=nodeต่อการเรียกจากauto; อนุญาตhost=gatewayต่อการเรียกเฉพาะเมื่อไม่มีรันไทม์แซนด์บ็อกซ์ทำงานอยู่tools.exec.modeเป็นตัวปรับนโยบายที่ทำให้เป็นปกติแล้ว ค่าได้แก่deny,allowlist,ask,autoและfullautoจะรันการจับคู่ allowlist/safe-bin แบบกำหนดผลแน่นอนโดยตรง และส่งทุกกรณีการอนุมัติ exec ที่เหลือผ่านผู้ตรวจสอบอัตโนมัติเนทีฟของ OpenClaw ก่อนถามมนุษย์ask/ask=alwaysยังถามมนุษย์ทุกครั้ง- เมื่อไม่มีคอนฟิกเพิ่มเติม
host=autoยังคง "ใช้งานได้เลย": ไม่มีแซนด์บ็อกซ์หมายถึง resolve เป็นgateway; มีแซนด์บ็อกซ์สดหมายถึงยังอยู่ในแซนด์บ็อกซ์ elevatedออกจากแซนด์บ็อกซ์ไปยังพาธโฮสต์ที่กำหนดค่าไว้: ค่าเริ่มต้นคือgatewayหรือnodeเมื่อtools.exec.host=node(หรือค่าเริ่มต้นของเซสชันคือhost=node) ใช้ได้เฉพาะเมื่อเปิดใช้งานสิทธิ์ยกระดับสำหรับเซสชัน/ผู้ให้บริการปัจจุบัน- การอนุมัติ
gateway/nodeถูกควบคุมโดยไฟล์อนุมัติของโฮสต์ nodeต้องมี node ที่จับคู่ไว้ (แอปคู่หูหรือโฮสต์ node แบบ headless)- หากมีหลาย node ให้ตั้ง
exec.nodeหรือtools.exec.nodeเพื่อเลือกหนึ่งรายการ exec host=nodeเป็นพาธการดำเนินการเชลล์เพียงทางเดียวสำหรับ node; wrapper เดิมnodes.runถูกลบแล้วtimeoutใช้กับการดำเนินการ foreground, background,yieldMs, gateway, sandbox และ nodesystem.runหากละเว้น OpenClaw จะใช้tools.exec.timeoutSec;timeout: 0ที่ระบุชัดเจนจะปิดใช้งาน timeout ของกระบวนการ exec สำหรับการเรียกนั้น- บนโฮสต์ที่ไม่ใช่ Windows exec ใช้
SHELLเมื่อตั้งค่าไว้; หากSHELLเป็นfishจะเลือกใช้bash(หรือsh) จากPATHเพื่อหลีกเลี่ยงสคริปต์ที่ไม่เข้ากันกับ fish แล้วจึง fallback ไปที่SHELLหากไม่มีทั้งสองอย่าง - บนโฮสต์ Windows exec จะเลือกใช้การค้นพบ PowerShell 7 (
pwsh) ก่อน (Program Files, ProgramW6432 แล้วจึง PATH) แล้วจึง fallback ไปที่ Windows PowerShell 5.1 - บนโฮสต์ gateway ที่ไม่ใช่ Windows คำสั่ง exec ของ bash และ zsh ใช้สแนปช็อตเริ่มต้น OpenClaw จะจับ alias/function ที่ source ได้
และชุดสภาพแวดล้อมปลอดภัยขนาดเล็กจากไฟล์เริ่มต้นของเชลล์ไว้ใน
$OPENCLAW_STATE_DIR/cache/shell-snapshots/แล้ว source สแนปช็อตนั้นก่อนคำสั่ง exec แต่ละครั้ง ตัวแปรที่ดูเหมือนเป็นความลับจะถูกยกเว้น; sandbox และ node exec ไม่ใช้สแนปช็อตนี้ ตั้งค่าOPENCLAW_EXEC_SHELL_SNAPSHOT=0ในสภาพแวดล้อมกระบวนการ Gateway เพื่อปิดใช้งานพาธสแนปช็อตนี้ - การดำเนินการบนโฮสต์ (
gateway/node) ปฏิเสธenv.PATHและการแทนที่ loader (LD_*/DYLD_*) เพื่อ ป้องกันการ hijack ไบนารีหรือโค้ดที่ถูกฉีดเข้าไป - OpenClaw ตั้ง
OPENCLAW_SHELL=execในสภาพแวดล้อมของคำสั่งที่ spawn (รวมถึงการดำเนินการ PTY และ sandbox) เพื่อให้กฎ shell/profile ตรวจจับบริบทของเครื่องมือ exec ได้ - สำหรับการรันที่มีต้นทางจากช่องทาง OpenClaw ยังเปิดเผย payload JSON ระบุตัวตนผู้ส่ง/แชตแบบแคบใน
OPENCLAW_CHANNEL_CONTEXTเมื่อช่องทางให้ id เหล่านั้นมา openclaw channels loginถูกบล็อกจากexecเพราะเป็นโฟลว์ยืนยันตัวตนช่องทางแบบโต้ตอบ; ให้รันในเทอร์มินัลบนโฮสต์ gateway หรือใช้เครื่องมือเข้าสู่ระบบเนทีฟของช่องทางจากแชตเมื่อมี- สำคัญ: การทำแซนด์บ็อกซ์ ปิดโดยค่าเริ่มต้น หากปิดแซนด์บ็อกซ์
host=autoโดยนัย จะ resolve เป็นgatewayส่วนhost=sandboxที่ระบุชัดเจนยังคงล้มเหลวแบบปิดแทนที่จะ รันบนโฮสต์ gateway อย่างเงียบ ๆ เปิดใช้งานแซนด์บ็อกซ์หรือใช้host=gatewayพร้อมการอนุมัติ - การตรวจสอบล่วงหน้าของสคริปต์ (สำหรับข้อผิดพลาดไวยากรณ์เชลล์ Python/Node ที่พบบ่อย) จะตรวจเฉพาะไฟล์ภายในขอบเขต
workdirที่มีผล หากพาธสคริปต์ resolve ออกนอกworkdirการตรวจสอบล่วงหน้าจะถูกข้ามสำหรับ ไฟล์นั้น - สำหรับงานที่ใช้เวลานานซึ่งเริ่มตอนนี้ ให้เริ่มหนึ่งครั้งและพึ่งพาการปลุกเมื่อเสร็จสิ้นโดยอัตโนมัติ
เมื่อเปิดใช้งานและคำสั่งส่ง output หรือ fail
ใช้
processสำหรับ logs, status, input หรือการแทรกแซง; อย่าจำลอง การจัดกำหนดการด้วยลูป sleep, ลูป timeout หรือการ polling ซ้ำ - สำหรับงานที่ควรเกิดขึ้นภายหลังหรือตามกำหนดการ ให้ใช้ cron แทนรูปแบบ sleep/delay ของ
exec
คอนฟิก
tools.exec.notifyOnExit(ค่าเริ่มต้น: true): เมื่อเป็น true เซสชัน exec ที่ถูกย้ายไปพื้นหลังจะเข้าคิวอีเวนต์ระบบและร้องขอ Heartbeat เมื่อออกtools.exec.approvalRunningNoticeMs(ค่าเริ่มต้น: 10000): ส่งประกาศ "กำลังรัน" หนึ่งครั้งเมื่อ exec ที่ต้องผ่านการอนุมัติรันนานกว่านี้ (0 ปิดใช้งาน)tools.exec.timeoutSec(ค่าเริ่มต้น: 1800): timeout exec เริ่มต้นต่อคำสั่งเป็นวินาทีtimeoutต่อการเรียกจะแทนที่ค่านี้;timeout: 0ต่อการเรียกจะปิดใช้งาน timeout ของกระบวนการ exectools.exec.host(ค่าเริ่มต้น:auto; resolve เป็นsandboxเมื่อรันไทม์แซนด์บ็อกซ์ทำงานอยู่ มิฉะนั้นเป็นgateway)tools.exec.security(ค่าเริ่มต้น:denyสำหรับ sandbox,fullสำหรับ gateway + node เมื่อไม่ได้ตั้งค่า)tools.exec.ask(ค่าเริ่มต้น:off)- exec โฮสต์แบบไม่ต้องอนุมัติเป็นค่าเริ่มต้นสำหรับ gateway + node หากคุณต้องการพฤติกรรมการอนุมัติ/allowlist ให้เข้มงวดทั้ง
tools.exec.*และไฟล์อนุมัติของโฮสต์; ดู การอนุมัติ Exec - YOLO มาจากค่าเริ่มต้นของนโยบายโฮสต์ (
security=full,ask=off) ไม่ได้มาจากhost=autoหากคุณต้องการบังคับการกำหนดเส้นทาง gateway หรือ node ให้ตั้งtools.exec.hostหรือใช้/exec host=... - ในโหมด
security=fullบวกask=offhost exec จะทำตามนโยบายที่กำหนดค่าไว้โดยตรง; ไม่มีชั้นตัวกรองล่วงหน้า heuristic เพิ่มเติมสำหรับการพรางคำสั่งหรือชั้นปฏิเสธการตรวจสอบล่วงหน้าของสคริปต์ tools.exec.node(ค่าเริ่มต้น: unset)tools.exec.strictInlineEval(ค่าเริ่มต้น: false): เมื่อเป็น true รูปแบบ eval ของ interpreter แบบ inline เช่นpython -c,node -e,ruby -e,perl -e,php -r,lua -eและosascript -eต้องมีผู้ตรวจสอบหรือการอนุมัติที่ชัดเจน ในmode=autoพาธการอนุมัติ exec ปกติอาจให้ผู้ตรวจสอบอัตโนมัติเนทีฟอนุญาตคำสั่งครั้งเดียวที่มีความเสี่ยงต่ำอย่างชัดเจนได้; การเรียกsystem.runบนโฮสต์ node โดยตรงยังต้องมีการอนุมัติที่ชัดเจน เพราะไม่สามารถส่งคำสั่งไปยังเส้นทางอนุมัติโดยมนุษย์ได้ หากผู้ตรวจสอบถาม คำขอจะไปยังมนุษย์allow-alwaysยังสามารถคงการเรียก interpreter/script ที่ไม่เป็นอันตรายไว้ได้ แต่รูปแบบ inline-eval จะไม่กลายเป็นกฎอนุญาตถาวรtools.exec.commandHighlighting(ค่าเริ่มต้น: false): เมื่อเป็น true prompt การอนุมัติสามารถไฮไลต์ช่วงคำสั่งที่ parser หาได้ในข้อความคำสั่ง ตั้งเป็นtrueทั่วไปหรือรายเอเจนต์เพื่อเปิดใช้งานการไฮไลต์ข้อความคำสั่งโดยไม่เปลี่ยนนโยบายการอนุมัติ exectools.exec.pathPrepend: รายการไดเรกทอรีที่จะเติมนำหน้าPATHสำหรับการรัน exec (เฉพาะ gateway + sandbox)tools.exec.safeBins: ไบนารีปลอดภัยแบบ stdin-only ที่รันได้โดยไม่ต้องมีรายการ allowlist ที่ชัดเจน สำหรับรายละเอียดพฤติกรรม ดู Safe binstools.exec.safeBinTrustedDirs: ไดเรกทอรีเพิ่มเติมที่ระบุชัดเจนซึ่งเชื่อถือสำหรับการตรวจพาธsafeBinsรายการPATHจะไม่ถูกเชื่อถือโดยอัตโนมัติ ค่าเริ่มต้นในตัวคือ/binและ/usr/bintools.exec.safeBinProfiles: นโยบาย argv แบบกำหนดเองที่เลือกได้ต่อ safe bin (minPositional,maxPositional,allowedValueFlags,deniedFlags)
ตัวอย่าง:
{ tools: { exec: { pathPrepend: ["~/bin", "/opt/oss/bin"], }, },}การจัดการ PATH
host=gateway: ผสานPATHของ login-shell ของคุณเข้ากับสภาพแวดล้อม exec การแทนที่env.PATHจะถูกปฏิเสธสำหรับการดำเนินการบนโฮสต์ ตัว daemon เองยังรันด้วย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(login shell) ภายในคอนเทนเนอร์ ดังนั้น/etc/profileอาจรีเซ็ตPATHOpenClaw เติมenv.PATHนำหน้าหลังจาก source โปรไฟล์ผ่าน env var ภายใน (ไม่มีการ interpolate ของเชลล์);tools.exec.pathPrependใช้ที่นี่ด้วยhost=node: ส่งเฉพาะการแทนที่ env ที่ไม่ถูกบล็อกที่คุณส่งผ่านไปยัง 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: แท็บ Nodes มีแผง "การผูก node ของ Exec" ขนาดเล็กสำหรับการตั้งค่าเดียวกัน
การแทนที่ของเซสชัน (/exec)
ใช้ /exec เพื่อตั้งค่าเริ่มต้น ต่อเซสชัน สำหรับ host, security, ask และ node
ส่ง /exec โดยไม่มีอาร์กิวเมนต์เพื่อแสดงค่าปัจจุบัน
ตัวอย่าง:
/exec host=auto security=allowlist ask=on-miss node=mac-1โมเดลการอนุญาต
/exec จะมีผลเฉพาะกับ ผู้ส่งที่ได้รับอนุญาต (รายการอนุญาต/การจับคู่ของช่องทาง รวมกับ commands.useAccessGroups)
โดยอัปเดตเฉพาะ สถานะเซสชันเท่านั้น และไม่เขียน config ผู้ส่งจากช่องทางภายนอกที่ได้รับอนุญาตอาจ
ตั้งค่าเริ่มต้นของเซสชันเหล่านี้ได้ ไคลเอนต์ Gateway/webchat ภายในต้องมี operator.admin จึงจะบันทึกค่าเหล่านี้ได้
หากต้องการปิดใช้งาน exec แบบถาวร ให้ปฏิเสธผ่านนโยบายเครื่องมือ (tools.deny: ["exec"] หรือกำหนดต่อ agent) การอนุมัติจากโฮสต์
ยังคงมีผล เว้นแต่คุณจะตั้งค่า security=full และ ask=off อย่างชัดเจน
การอนุมัติ exec (แอปคู่ขนาน / โฮสต์ Node)
agent ที่อยู่ใน sandbox อาจต้องขออนุมัติรายคำขอก่อนที่ exec จะรันบน Gateway หรือโฮสต์ Node
ดู การอนุมัติ exec สำหรับนโยบาย รายการอนุญาต และโฟลว์ UI
เมื่อจำเป็นต้องมีการอนุมัติ เครื่องมือ exec จะส่งคืนทันทีพร้อม
status: "approval-pending" และ id การอนุมัติ เมื่อได้รับอนุมัติแล้ว (หรือถูกปฏิเสธ / หมดเวลา)
Gateway จะปล่อยเหตุการณ์ระบบความคืบหน้าและการเสร็จสิ้นของคำสั่งเฉพาะสำหรับการรันที่ได้รับอนุมัติเท่านั้น
(Exec running / Exec finished) การอนุมัติที่ถูกปฏิเสธหรือหมดเวลาถือเป็นสถานะสิ้นสุด และจะไม่
ปลุกเซสชัน agent ด้วยเหตุการณ์ระบบการปฏิเสธ
ในช่องทางที่มีการ์ด/ปุ่มอนุมัติแบบ native agent ควรพึ่งพา
UI native นั้นก่อน และรวมคำสั่ง /approve แบบแมนนวลเฉพาะเมื่อผลลัพธ์ของเครื่องมือ
ระบุอย่างชัดเจนว่าการอนุมัติผ่านแชตไม่พร้อมใช้งาน หรือการอนุมัติแบบแมนนวลเป็น
เส้นทางเดียวเท่านั้น
รายการอนุญาต + safe bins
การบังคับใช้รายการอนุญาตแบบแมนนวลจะจับคู่ glob ของพาธไบนารีที่ resolve แล้ว และ glob ของชื่อคำสั่งเปล่า
ชื่อเปล่าจะจับคู่เฉพาะคำสั่งที่เรียกผ่าน PATH ดังนั้น rg จึงสามารถจับคู่กับ
/opt/homebrew/bin/rg ได้เมื่อคำสั่งคือ rg แต่จะไม่จับคู่ ./rg หรือ /tmp/rg
เมื่อ security=allowlist คำสั่ง shell จะได้รับอนุญาตอัตโนมัติเฉพาะเมื่อทุก segment ของ pipeline
อยู่ในรายการอนุญาตหรือเป็น safe bin การเชื่อมคำสั่ง (;, &&, ||) และ redirection
จะถูกปฏิเสธในโหมดรายการอนุญาต เว้นแต่ทุก segment ระดับบนสุดจะผ่าน
รายการอนุญาต (รวมถึง safe bins) Redirection ยังคงไม่รองรับ
ความเชื่อถือแบบถาวร allow-always จะไม่ข้ามกฎนั้น: คำสั่งที่เชื่อมกันยังต้องให้ทุก
segment ระดับบนสุดจับคู่ได้
autoAllowSkills เป็นเส้นทางอำนวยความสะดวกแยกต่างหากในการอนุมัติ exec ไม่เหมือนกับ
รายการอนุญาตพาธแบบแมนนวล สำหรับความเชื่อถือแบบชัดเจนที่เข้มงวด ให้ปิดใช้งาน autoAllowSkills ไว้
ใช้ตัวควบคุมสองแบบนี้สำหรับงานที่ต่างกัน:
tools.exec.safeBins: ตัวกรองสตรีมขนาดเล็กที่รับเฉพาะ stdintools.exec.safeBinTrustedDirs: ไดเรกทอรีที่เชื่อถือเพิ่มเติมอย่างชัดเจนสำหรับพาธ executable ของ safe-bintools.exec.safeBinProfiles: นโยบาย argv ที่ชัดเจนสำหรับ safe bins แบบกำหนดเอง- รายการอนุญาต: ความเชื่อถือที่ชัดเจนสำหรับพาธ executable
อย่าถือว่า safeBins เป็นรายการอนุญาตทั่วไป และอย่าเพิ่มไบนารี interpreter/runtime (เช่น python3, node, ruby, bash) หากคุณต้องการสิ่งเหล่านั้น ให้ใช้รายการอนุญาตที่ชัดเจนและเปิด prompt การอนุมัติไว้
openclaw security audit จะเตือนเมื่อรายการ safeBins ของ interpreter/runtime ไม่มีโปรไฟล์ที่ชัดเจน และ openclaw doctor --fix สามารถ scaffold รายการ safeBinProfiles แบบกำหนดเองที่ขาดไปได้
openclaw security audit และ openclaw doctor จะเตือนเช่นกันเมื่อคุณเพิ่มไบนารีที่มีพฤติกรรมกว้าง เช่น jq กลับเข้าไปใน safeBins อย่างชัดเจน
หากคุณอนุญาต interpreter อย่างชัดเจน ให้เปิดใช้ tools.exec.strictInlineEval เพื่อให้รูปแบบ inline code-eval ยังคงต้องมีผู้ตรวจทานหรือการอนุมัติที่ชัดเจน
สำหรับรายละเอียดนโยบายและตัวอย่างแบบเต็ม ดู การอนุมัติ exec และ Safe bins เทียบกับรายการอนุญาต
ตัวอย่าง
Foreground:
{ "tool": "exec", "command": "ls -la" }Background + poll:
{"tool":"exec","command":"npm run build","yieldMs":1000}{"tool":"process","action":"poll","sessionId":"<id>"}การ polling ใช้สำหรับสถานะตามคำขอ ไม่ใช่ลูปการรอ หากเปิดใช้งานการปลุกเมื่อเสร็จสิ้นอัตโนมัติ คำสั่งสามารถปลุกเซสชันเมื่อปล่อย output หรือทำงานล้มเหลวได้
ส่งคีย์ (สไตล์ 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"]}Submit (ส่งเฉพาะ CR):
{ "tool": "process", "action": "submit", "sessionId": "<id>" }Paste (ครอบด้วย bracketed ตามค่าเริ่มต้น):
{ "tool": "process", "action": "paste", "sessionId": "<id>", "text": "line1\nline2\n" }apply_patch
apply_patch เป็น subtool ของ exec สำหรับการแก้ไขหลายไฟล์แบบมีโครงสร้าง
เปิดใช้งานตามค่าเริ่มต้นสำหรับโมเดล OpenAI และ OpenAI Codex ใช้ config เฉพาะ
เมื่อคุณต้องการปิดใช้งานหรือจำกัดไว้เฉพาะโมเดลบางรุ่น:
{ tools: { exec: { applyPatch: { workspaceOnly: true, allowModels: ["gpt-5.5"] }, }, },}หมายเหตุ:
- พร้อมใช้งานเฉพาะสำหรับโมเดล OpenAI/OpenAI Codex
- นโยบายเครื่องมือยังคงมีผล;
allow: ["write"]จะอนุญาตapply_patchโดยนัย deny: ["write"]ไม่ได้ปฏิเสธapply_patch; ให้ปฏิเสธapply_patchอย่างชัดเจน หรือใช้deny: ["group:fs"]เมื่อการเขียน patch ควรถูกบล็อกด้วย- Config อยู่ใต้
tools.exec.applyPatch tools.exec.applyPatch.enabledมีค่าเริ่มต้นเป็นtrue; ตั้งเป็นfalseเพื่อปิดใช้งานเครื่องมือนี้สำหรับโมเดล OpenAItools.exec.applyPatch.workspaceOnlyมีค่าเริ่มต้นเป็นtrue(จำกัดอยู่ใน workspace) ตั้งเป็นfalseเฉพาะเมื่อคุณตั้งใจให้apply_patchเขียน/ลบนอกไดเรกทอรี workspace เท่านั้น
ที่เกี่ยวข้อง
- การอนุมัติ Exec — เกตการอนุมัติสำหรับคำสั่ง shell
- Sandboxing — การรันคำสั่งในสภาพแวดล้อม sandbox
- กระบวนการเบื้องหลัง — exec ที่รันนานและเครื่องมือ process
- ความปลอดภัย — นโยบายเครื่องมือและสิทธิ์เข้าถึงระดับสูง