Gateway
OpenShell
OpenShell เป็นแบ็กเอนด์ sandbox แบบมีการจัดการสำหรับ OpenClaw แทนที่จะรันคอนเทนเนอร์ Docker ในเครื่อง OpenClaw จะมอบหมายวงจรชีวิตของ sandbox ให้กับ CLI openshell ซึ่งจัดเตรียมสภาพแวดล้อมระยะไกลพร้อมการเรียกใช้คำสั่งผ่าน SSH
Plugin OpenShell ใช้ทรานสปอร์ต SSH หลักและบริดจ์ระบบไฟล์ระยะไกลเดียวกันกับ แบ็กเอนด์ SSH ทั่วไป โดยเพิ่มวงจรชีวิตเฉพาะของ OpenShell (sandbox create/get/delete, sandbox ssh-config) และโหมด workspace แบบ mirror ที่เป็นทางเลือก
ข้อกำหนดเบื้องต้น
- ติดตั้ง CLI
openshellและอยู่บนPATH(หรือตั้งค่าพาธแบบกำหนดเองผ่านplugins.entries.openshell.config.command) - บัญชี OpenShell ที่มีสิทธิ์เข้าถึง sandbox
- OpenClaw Gateway กำลังรันบนโฮสต์
เริ่มต้นอย่างรวดเร็ว
- เปิดใช้ Plugin และตั้งค่าแบ็กเอนด์ sandbox:
{
agents: {
defaults: {
sandbox: {
mode: "all",
backend: "openshell",
scope: "session",
workspaceAccess: "rw",
},
},
},
plugins: {
entries: {
openshell: {
enabled: true,
config: {
from: "openclaw",
mode: "remote",
},
},
},
},
}
-
รีสตาร์ท Gateway ในรอบถัดไปของ agent OpenClaw จะสร้าง sandbox OpenShell และส่งการเรียกใช้เครื่องมือผ่าน sandbox นั้น
-
ตรวจสอบ:
openclaw sandbox list
openclaw sandbox explain
โหมด workspace
นี่คือการตัดสินใจที่สำคัญที่สุดเมื่อใช้ OpenShell
mirror
ใช้ plugins.entries.openshell.config.mode: "mirror" เมื่อคุณต้องการให้ workspace ในเครื่องยังเป็นแหล่งอ้างอิงหลัก
พฤติกรรม:
- ก่อน
execOpenClaw จะซิงก์ workspace ในเครื่องเข้าไปยัง sandbox OpenShell - หลัง
execOpenClaw จะซิงก์ workspace ระยะไกลกลับมายัง workspace ในเครื่อง - เครื่องมือไฟล์ยังคงทำงานผ่านบริดจ์ sandbox แต่ workspace ในเครื่อง ยังคงเป็นแหล่งข้อมูลจริงระหว่างรอบ
เหมาะที่สุดสำหรับ:
- คุณแก้ไขไฟล์ในเครื่องนอก OpenClaw และต้องการให้การเปลี่ยนแปลงเหล่านั้นปรากฏใน sandbox โดยอัตโนมัติ
- คุณต้องการให้ sandbox OpenShell ทำงานใกล้เคียงกับแบ็กเอนด์ Docker มากที่สุด
- คุณต้องการให้ workspace ของโฮสต์สะท้อนการเขียนใน sandbox หลังแต่ละรอบ exec
ข้อแลกเปลี่ยน: มีต้นทุนการซิงก์เพิ่มเติมก่อนและหลังแต่ละ exec
remote
ใช้ plugins.entries.openshell.config.mode: "remote" เมื่อคุณต้องการให้
workspace ของ OpenShell กลายเป็นแหล่งอ้างอิงหลัก
พฤติกรรม:
- เมื่อ sandbox ถูกสร้างครั้งแรก OpenClaw จะ seed workspace ระยะไกลจาก workspace ในเครื่องหนึ่งครั้ง
- หลังจากนั้น
exec,read,write,editและapply_patchจะทำงาน กับ workspace OpenShell ระยะไกลโดยตรง - OpenClaw จะไม่ ซิงก์การเปลี่ยนแปลงระยะไกลกลับมายัง workspace ในเครื่อง
- การอ่านสื่อในช่วง prompt ยังคงทำงานได้ เพราะเครื่องมือไฟล์และสื่ออ่านผ่าน บริดจ์ sandbox
เหมาะที่สุดสำหรับ:
- sandbox ควรอยู่ฝั่งระยะไกลเป็นหลัก
- คุณต้องการลดภาระการซิงก์ต่อรอบ
- คุณไม่ต้องการให้การแก้ไขในเครื่องของโฮสต์เขียนทับสถานะ sandbox ระยะไกลโดยไม่รู้ตัว
การเลือกโหมด
mirror |
remote |
|
|---|---|---|
| workspace หลัก | โฮสต์ในเครื่อง | OpenShell ระยะไกล |
| ทิศทางการซิงก์ | สองทาง (ทุก exec) | seed ครั้งเดียว |
| ภาระต่อรอบ | สูงกว่า (อัปโหลด + ดาวน์โหลด) | ต่ำกว่า (ดำเนินการระยะไกลโดยตรง) |
| เห็นการแก้ไขในเครื่องไหม? | ใช่ ใน exec ถัดไป | ไม่ จนกว่าจะ recreate |
| เหมาะที่สุดสำหรับ | เวิร์กโฟลว์การพัฒนา | agent ที่รันระยะยาว, CI |
อ้างอิงการตั้งค่า
การตั้งค่า OpenShell ทั้งหมดอยู่ใต้ plugins.entries.openshell.config:
| คีย์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
mode |
"mirror" หรือ "remote" |
"mirror" |
โหมดการซิงก์ workspace |
command |
string |
"openshell" |
พาธหรือชื่อของ CLI openshell |
from |
string |
"openclaw" |
แหล่งที่มาของ sandbox สำหรับการสร้างครั้งแรก |
gateway |
string |
— | ชื่อ Gateway ของ OpenShell (--gateway) |
gatewayEndpoint |
string |
— | URL endpoint ของ Gateway OpenShell (--gateway-endpoint) |
policy |
string |
— | ID policy ของ OpenShell สำหรับการสร้าง sandbox |
providers |
string[] |
[] |
ชื่อ provider ที่จะแนบเมื่อ sandbox ถูกสร้าง |
gpu |
boolean |
false |
ขอทรัพยากร GPU |
autoProviders |
boolean |
true |
ส่ง --auto-providers ระหว่างการสร้าง sandbox |
remoteWorkspaceDir |
string |
"/sandbox" |
workspace หลักที่เขียนได้ภายใน sandbox |
remoteAgentWorkspaceDir |
string |
"/agent" |
พาธเมานต์ workspace ของ agent (สำหรับการเข้าถึงแบบอ่านอย่างเดียว) |
timeoutSeconds |
number |
120 |
timeout สำหรับการดำเนินการ CLI openshell |
การตั้งค่าระดับ sandbox (mode, scope, workspaceAccess) กำหนดค่าใต้
agents.defaults.sandbox เช่นเดียวกับแบ็กเอนด์อื่น ดู
Sandboxing สำหรับเมทริกซ์ทั้งหมด
ตัวอย่าง
การตั้งค่า remote ขั้นต่ำ
{
agents: {
defaults: {
sandbox: {
mode: "all",
backend: "openshell",
},
},
},
plugins: {
entries: {
openshell: {
enabled: true,
config: {
from: "openclaw",
mode: "remote",
},
},
},
},
}
โหมด Mirror พร้อม GPU
{
agents: {
defaults: {
sandbox: {
mode: "all",
backend: "openshell",
scope: "agent",
workspaceAccess: "rw",
},
},
},
plugins: {
entries: {
openshell: {
enabled: true,
config: {
from: "openclaw",
mode: "mirror",
gpu: true,
providers: ["openai"],
timeoutSeconds: 180,
},
},
},
},
}
OpenShell ต่อ agent พร้อม Gateway แบบกำหนดเอง
{
agents: {
defaults: {
sandbox: { mode: "off" },
},
list: [
{
id: "researcher",
sandbox: {
mode: "all",
backend: "openshell",
scope: "agent",
workspaceAccess: "rw",
},
},
],
},
plugins: {
entries: {
openshell: {
enabled: true,
config: {
from: "openclaw",
mode: "remote",
gateway: "lab",
gatewayEndpoint: "https://lab.example",
policy: "strict",
},
},
},
},
}
การจัดการวงจรชีวิต
sandbox OpenShell จัดการผ่าน CLI sandbox ปกติ:
# List all sandbox runtimes (Docker + OpenShell)
openclaw sandbox list
# Inspect effective policy
openclaw sandbox explain
# Recreate (deletes remote workspace, re-seeds on next use)
openclaw sandbox recreate --all
สำหรับโหมด remote recreate สำคัญเป็นพิเศษ: มันจะลบ
workspace ระยะไกลหลักสำหรับ scope นั้น การใช้งานครั้งถัดไปจะ seed
workspace ระยะไกลใหม่จาก workspace ในเครื่อง
สำหรับโหมด mirror การ recreate ส่วนใหญ่จะรีเซ็ตสภาพแวดล้อมการเรียกใช้ระยะไกล เพราะ
workspace ในเครื่องยังคงเป็นแหล่งอ้างอิงหลัก
เมื่อใดควร recreate
recreate หลังจากเปลี่ยนค่าเหล่านี้:
agents.defaults.sandbox.backendplugins.entries.openshell.config.fromplugins.entries.openshell.config.modeplugins.entries.openshell.config.policy
openclaw sandbox recreate --all
การเพิ่มความแข็งแกร่งด้านความปลอดภัย
OpenShell pin fd ของ root workspace และตรวจสอบตัวตนของ sandbox ซ้ำก่อนการอ่านแต่ละครั้ง ดังนั้นการสลับ symlink หรือ workspace ที่ถูกเมานต์ใหม่จะไม่สามารถเปลี่ยนทิศทางการอ่านออกจาก workspace ระยะไกลที่ตั้งใจไว้ได้
ข้อจำกัดปัจจุบัน
- ไม่รองรับเบราว์เซอร์ sandbox บนแบ็กเอนด์ OpenShell
sandbox.docker.bindsไม่มีผลกับ OpenShell- ปุ่มปรับแต่ง runtime เฉพาะ Docker ใต้
sandbox.docker.*มีผลเฉพาะกับแบ็กเอนด์ Docker เท่านั้น
วิธีทำงาน
- OpenClaw เรียก
openshell sandbox create(พร้อมแฟล็ก--from,--gateway,--policy,--providers,--gpuตามที่กำหนดค่า) - OpenClaw เรียก
openshell sandbox ssh-config <name>เพื่อรับรายละเอียดการเชื่อมต่อ SSH สำหรับ sandbox - core เขียนการตั้งค่า SSH ไปยังไฟล์ชั่วคราวและเปิดเซสชัน SSH โดยใช้ บริดจ์ระบบไฟล์ระยะไกลเดียวกันกับแบ็กเอนด์ SSH ทั่วไป
- ในโหมด
mirror: ซิงก์จากในเครื่องไปยังระยะไกลก่อน exec, รัน, ซิงก์กลับหลัง exec - ในโหมด
remote: seed หนึ่งครั้งตอนสร้าง จากนั้นทำงานโดยตรงบน workspace ระยะไกล
ที่เกี่ยวข้อง
- Sandboxing -- โหมด, scope และการเปรียบเทียบแบ็กเอนด์
- Sandbox vs Tool Policy vs Elevated -- การดีบักเครื่องมือที่ถูกบล็อก
- Multi-Agent Sandbox and Tools -- การ override ต่อ agent
- Sandbox CLI -- คำสั่ง
openclaw sandbox