System Access¶
วิธีให้เอเจนต์เข้าถึงเครื่องที่มันรันอยู่ และขีดจำกัดจริงอยู่ตรงไหน
Warning
shell_exec รันคำสั่งใดๆ ในฐานะผู้ใช้ของคุณ ไม่มี command allowlist ไม่มี
denylist และไม่มี sandbox เว้นแต่คุณจะเปิดมันเอง เอเจนต์ที่ถือ tool นี้ทำ
อะไรก็ได้ที่คุณทำได้จากเทอร์มินัล
เริ่มที่นี่: คุณอาจยังไม่ได้เปิดใช้งาน tool ใดๆ เลย¶
หากเอเจนต์บอกว่ามันรันคำสั่งหรืออ่านไฟล์ไม่ได้ นั่นมักไม่ใช่ปัญหาเรื่องสิทธิ์ มันหมายความว่าไม่มี tool ใดถูกเปิดใช้งานตั้งแต่แรก
Tool มาจาก tools.enabled และ fallback ไปที่ agent.tools ทั้งสองค่าเริ่ม
ต้นเป็นค่าว่าง และค่าว่างจะสร้างเอเจนต์ที่มี tool เป็นศูนย์ ไม่มีอะไรเปิด
ใช้งานเป็นค่าเริ่มต้นเลย
ตรวจสอบก่อนว่าคุณมีไฟล์ config อยู่หรือไม่:
หากไม่มี นั่นคือคำตอบ สร้างมันขึ้นมา:
[engine]
default = "ollama"
[intelligence]
default_model = "qwen3.5:9b"
[agent]
default_agent = "orchestrator"
[tools]
enabled = ["shell_exec", "file_read", "file_write", "think"]
มีเวอร์ชันแบบเต็มกว่าอยู่ที่
configs/openjarvis/examples/full-system-access.toml
จากนั้นยืนยันว่ารายการถูก resolve จริง:
Tool เข้าถึงอะไรได้บ้าง¶
| Tool | ขอบเขต |
|---|---|
shell_exec |
คำสั่งใดๆ ในฐานะผู้ใช้ของคุณ timeout เริ่มต้น 30 วินาที สูงสุด 300 วินาที output ถูกจำกัดที่ 100 KB ต่อ stream |
file_read |
Path ที่อ่านได้ใดๆ จำกัดที่ 1 MB |
file_write |
Path ที่เขียนได้ใดๆ จำกัดที่ 10 MB สร้างไดเรกทอรีแม่ได้ |
apply_patch |
นำ unified diff ไปใช้กับ path ใดๆ |
code_interpreter |
Python ใน subprocess อยู่หลัง pattern blocklist แบบหยาบ |
file_read และ file_write รับ argument allowed_dirs ที่จำกัดให้ใช้ได้เฉพาะ
ชุดไดเรกทอรีที่กำหนด แต่ไม่มีคีย์ config ใดเติมค่านี้ให้ เมื่อว่างเปล่า ทุก
path จะได้รับอนุญาต หากคุณต้องการ filesystem jail ในวันนี้ ใช้ container
sandbox แทนที่จะพึ่ง tool เหล่านี้บังคับ
ชื่อไฟล์ที่ Sensitive¶
file_read และ file_write จะปฏิเสธชื่อที่ตรงกับ glob list สั้นๆ: .env,
*.pem, id_rsa, credentials.* และอื่นๆ อีกสิบกว่ารายการ มันตรวจจาก
ชื่อไฟล์เท่านั้น ไม่ใช่ path หรือเนื้อหา และมีเพียง tool สองตัวนี้เท่านั้นที่
ตรวจสอบมัน shell_exec, apply_patch และ code_interpreter ข้ามการตรวจนี้
ไปทั้งหมด ดังนั้น cat ~/.ssh/id_rsa ผ่าน shell_exec จึงยังทำงานได้ตามปกติ
ให้มองว่านี่คือการป้องกันการพิมพ์ผิด ไม่ใช่ขอบเขตความปลอดภัย
พฤติกรรมการยืนยัน (Confirmation)¶
shell_exec, git_commit และ agent_kill ถูกทำเครื่องหมายเป็น
requires_confirmation สิ่งนี้แปลว่าอะไรขึ้นอยู่กับวิธีที่คุณเปิดเอเจนต์
ทั้งหมด:
| Entry Point | พฤติกรรม |
|---|---|
jarvis chat |
ถามยืนยันก่อนการเรียกแต่ละครั้ง |
jarvis ask |
อนุมัติอัตโนมัติ |
jarvis agent ask |
อนุมัติอัตโนมัติ ส่ง --no-yes หากต้องการให้ถาม |
| HTTP server, แอปเดสก์ท็อป | อนุมัติอัตโนมัติ Tool ที่คุณเพิ่มเข้าไปใน toolkit ของเอเจนต์ถือว่าได้รับการอนุมัติล่วงหน้าแล้ว |
Embed ผ่าน SystemBuilder |
ไม่มี callback ต่อสายไว้ ดังนั้น tool เหล่านี้จะล้มเหลวแบบ fail-closed |
แถวสุดท้ายมักทำให้คนพลาด หาก shell_exec คืนข้อความ "requires confirmation
but no confirmation callback is available" แปลว่าคุณกำลังสร้างเอเจนต์เอง และ
ต้องส่ง confirm_callback เข้าไปด้วย
enforce_tool_confirmation ไม่มีผลอะไรเลย
config loader ยอมรับ security.enforce_tool_confirmation แต่ไม่มีจุดใดใน
เส้นทางการรัน tool อ่านค่านี้เลย การตั้งค่านี้จะไม่เปลี่ยนพฤติกรรมการ
ยืนยันที่ใดเลย ใช้ตารางด้านบนแทน
macOS: Full Disk Access¶
บน macOS ระบบปฏิบัติการคือขอบเขตจริง ไม่ใช่ config การเข้าถึง shell และไฟล์ ทั่วไปเริ่มทำงานได้ทันทีที่คุณเปิดใช้งาน tool แต่ข้อมูลที่ TCC ป้องกันไว้ ไม่เป็นเช่นนั้น: Messages, Mail, Photos, ประวัติ Safari, Contacts และ Calendar ทั้งหมดยังคงถูกล็อกไว้ และไม่มีคีย์ config ใดเปลี่ยนสิ่งนั้นได้
ให้สิทธิ์ Full Disk Access กับ process ที่ host backend Child process จะได้ รับสิทธิ์นี้สืบทอดมา:
| วิธีที่คุณรัน OpenJarvis | ให้สิทธิ์แก่ |
|---|---|
CLI (jarvis ask, jarvis chat) |
เทอร์มินัลของคุณ (Terminal, iTerm, Warp) |
| แอปเดสก์ท็อป | OpenJarvis.app ซึ่งเรียก jarvis serve ขึ้นมาภายใน |
launchd (deploy/launchd/com.openjarvis.plist) |
binary jarvis เป็น entry ของตัวมันเอง |
System Settings จากนั้น Privacy & Security จากนั้น Full Disk Access จากนั้น +
launchd daemon มี TCC context ของตัวเอง การให้สิทธิ์กับ Terminal จึงไม่มีผล
กับมัน เพิ่ม /usr/local/bin/jarvis แยกต่างหาก
หากต้องการตรวจสอบว่าการให้สิทธิ์มีผลหรือไม่:
Restart process ที่ host หลังจากเปลี่ยนการตั้งค่านี้
สั่งงานแอป Mac¶
AppleScript ทำงานผ่าน shell_exec:
macOS จะขอสิทธิ์ Automation ครั้งเดียวต่อแอปเป้าหมาย ในครั้งแรกที่คุณแตะมัน
สิ่งที่คุณทำไม่ได้¶
ไม่มี computer use OpenJarvis มองไม่เห็นหน้าจอของคุณ ขยับ pointer ไม่ได้ หรือส่งการกดแป้นพิมพ์ไม่ได้ ไม่มี tool สำหรับสิ่งนี้ที่ลงทะเบียนไว้ และไม่มี library automation อินพุตปรากฏอยู่ที่ใดในโค้ดเบสเลย ดังนั้นการให้สิทธิ์ Accessibility หรือ Screen Recording จึงไม่ได้อะไรเพิ่มขึ้นมาด้วยตัวมันเอง
action click และ type ที่คุณจะพบเป็นของ Playwright ซึ่งจำกัดอยู่แค่หน้า
เบราว์เซอร์ ไม่ใช่เดสก์ท็อป
บางส่วนของสิ่งนี้เข้าถึงได้ผ่าน shell_exec หากคุณนำเครื่องมือมาเอง
screencapture จะจับภาพหน้าจอได้เมื่อคุณให้สิทธิ์ Screen Recording แล้ว และ
บางอย่างเช่น cliclick จะขยับ pointer ได้ สิ่งนี้ทำให้คุณมี action แบบ
สคริปต์ แต่ไม่ได้ทำให้คุณมีเอเจนต์ที่มองหน้าจอและคิดเองว่าจะคลิกตรงไหน
การจำกัดการเข้าถึง¶
การเข้าถึงกว้างขึ้นและแคบลงผ่าน tools.enabled ถอดรายการออกเพื่อริบ
ความสามารถ รายการนั้นคือสิทธิ์ทั้งหมดที่ให้ไป
มีตัวเลือกการแยก isolation ที่แข็งแกร่งกว่าอยู่สองแบบ ทั้งคู่ปิดเป็นค่าเริ่มต้น:
[sandbox]
enabled = true # run tools inside a container
runtime = "docker"
[security.capabilities]
enabled = true # RBAC over declared tool capabilities
policy_path = "~/.openjarvis/policy.yaml"
Capability เปิดกว้างเป็นค่าเริ่มต้น แม้เมื่อเปิดใช้งานแล้ว
CapabilityPolicy ถูกสร้างด้วย default_deny=False และไม่มีคีย์ config
ใด expose flag นั้น ดังนั้นเอเจนต์ที่ไม่มี entry นโยบายชัดเจนจะได้รับทุก
capability เขียน entry สำหรับทุกเอเจนต์ที่คุณตั้งใจจะจำกัด
สำหรับอะไรที่ไม่น่าเชื่อถือ ใช้ docker_shell_exec และ
code_interpreter_docker แทนเวอร์ชันฝั่ง host
ดูเพิ่มเติม¶
- Security สำหรับ scanner, audit log และ guardrail
- Tools สำหรับ registry แบบเต็ม
- Code Assistant สำหรับการตั้งค่าแบบเปิด shell ที่แคบกว่า
- External MCP Servers สำหรับความสามารถที่ OpenJarvis ไม่ได้มีมาให้เอง