Harness Academy
Tài liệu gốc 36 9 phútTiếng Việt + English
docs/notes/sandboxing_comparison_table.mdXem bản gốc
Ngôn ngữ bài đọc
Bản dịch tiếng Việt

Bản dịch đầy đủ theo đúng cấu trúc tài liệu; code, liên kết và định danh kỹ thuật được giữ nguyên.

Phương pháp hộp cát - decode so với khai thác tham chiếu (+ Codex)

Sự giao thoa giữa các phương pháp hộp cát được vận chuyển của bộ decode với các phương pháp của wiki nghiên cứu phân loại, đóng khung trên mỗi harness. Wiki giảm "hộp cát" thành hai trục trực giao (wiki/notes/execution-isolation-models.md):

  • Trục A — nơi lệnh chạy: máy này so với máy khác.
  • Trục B — có ranh giới hạt nhân: raw spawn so với tù hệ điều hành (Dây an toàn / bong bóng / container / microVM).

Mọi phương pháp dưới đây là một bước di chuyển trên lưới đó. Ba điểm trên đó: ① trực tiếp (không có ranh giới), ② hộp cát cục bộ (ranh giới cùng nằm trên máy chủ của bạn), ③ từ xa (máy khác) — trong đó ③ tiếp tục chia thành ③a di dời agent, ③b di dời máy chủ, ③c hoán đổi phần phụ trợ.


Sơ lược — phương pháp × khai thác

Phương phápmã Claudemã mởpiCodexdecode (của chúng tôi)
1. Chính sách và thực thichính sách (canUseTool) ******* Hệ điều hành tùchỉ chính sách (không có lớp thực thi)tool_call móc ****** tù bên ngoàiquy tắc nhắc nhở ++ phê duyệt Máy chủ ứng dụng hai chiềucổng cấp phép (chính sách) ++ container (thực thi)
2. không có/cục bộ/thang từ xa② mặc định · ① từ chối · ③a① chỉ · ② không có · ③b① mặc định · ② chọn tham gia · ③c② + ③ (thùng chứa đám mây cho mỗi tác vụ)SANDBOX_MODE = none(①) / docker(②) / modal(③c)
3. Cược cưỡng chếPHÒNG NGỪA (nhà tù)PHỤC HỒI (ảnh chụp nhanh git-shadow / hoàn tác)BÊN NGOÀI (nono/container)ngăn ngừa bằng container + phục hồi bằng PRBÊN NGOÀI + PHỤC HỒI (container là nhà tù; tàu chở git)
4. Vị trí I/OMẶT NẠ (bash tù; tập tin vẫn ở phía máy chủ)(không có tù; trực tiếp)ĐỔI BỘ (ExecutionEnv = FS & Vỏ)tất cả các công cụ đều chạy trong vùng chứaĐỔI BỘ (SandboxBackend đường may, nhiệm vụ 081)
5. Gia đình ở xa③a di dời agent③b di dời máy chủ③c hoán đổi phụ trợ③di dời (Máy chủ ứng dụng trên đám mây)③c trao đổi phần phụ trợ (phương thức)
6. Góc phần tư từ xa không tin cậy— (khoảng trống mở của wiki)— (khoảng trống mở)— (khoảng trống mở)ĐIỀN: hộp cát đám mây + bản sao repo + PRĐIỀN: docker/modal + --repo + bàn giao git phía máy chủ
(đi ra / bí mật)lọc proxy + danh sách cho phép + hỏi khi bỏ lỡ—danh sách cho phép tên miền chỉ mở rộng(chứa bên trong đám mây)không có sự hòa giải đầu ra; Hỗ trợ git phía máy chủ (không có tín dụng trong hộp cát) + chọn tham gia SANDBOX_GIT_TOKEN được tiêm trực tiếp, cả hai phần phụ trợ (ADR-0016)

Đọc nó: thứ nguyên ② là nơi các kho tham chiếu phân kỳ khó nhất (mã claude làm cho nó mặc định, pi chọn tham gia, mã mở sẽ từ chối nó). Góc phần tư từ xa không đáng tin cậy (hàng 6) là khoảng trống mà wiki nói lên tất cả ba để mở - Codex và decode là hai phần bổ sung của nó.


Chi tiết theo từng phương pháp

1. Tách chính sách khỏi việc thực thi

Bài học rút ra từ công cụ xây dựng số 1 của wiki: cho phép/từ chối/yêu cầu là lời khuyên; nhà tù là ranh giới. mã Claude nói nó ở dạng mã -- excludedCommands "là sự tiện lợi, KHÔNG phải là ranh giới an ninh."

  • mã claude: Lớp 1 canUseTool (chính sách) + Lớp 2 wrapWithSandbox (Thực thi hệ điều hành).
  • opencode: chỉ chính sách (yêu cầu/cho phép/từ chối + danh sách đường dẫn được bảo vệ TCC); không có lớp thực thi.
  • pi: tool_call hook = chính sách (có thể chặn); việc thực thi được đưa ra ngoài cốt lõi.
  • Codex: quy tắc cấp phép hộp cát thực hiện trong lời nhắc; Máy chủ ứng dụng tạm dừng giữa tác vụ và yêu cầu khách hàng cho phép/từ chối. Chính sách rõ ràng; vùng chứa đám mây đang được thực thi.
  • decode: cổng cấp phép (chế độ cho phép/yêu cầu/từ chối, ADR-0002) = chính sách; container = thực thi.

2. Thang không có/cục bộ/từ xa

  • claude-code: ① chỉ chọn không tham gia · ② mặc định (Seatbelt/bwrap) · ③a điều khiển từ xa.
  • opencode: ① mặc định & chỉ · ② không có theo thiết kế · ③b từ xa.
  • pi: ① mặc định · ② chọn tham gia (nono / sandbox ext) · ③c từ xa.
  • Codex: ② + ③ — vùng chứa cloud cho mỗi tác vụ (ranh giới hạt nhân trên một máy khác).
  • decode: bậc thang dưới dạng cấu hình — SANDBOX_MODE=none(①) / docker(② container địa phương) / modal(③c container từ xa).

3. Đặt cược thực thi: ngăn chặn, phục hồi và ngoại tác

Cột sống của wiki/comparisons/isolation-claude-code-vs-opencode.md.

  • claude-code = PREVENT: OS jail chặn thao tác không thể đảo ngược (trích xuất, ghi ngoài repository) ở kernel.
  • opencode = RECOVER: git-shadow snapshots hoàn tác các chỉnh sửa xấu — nhưng "hoàn tác đảo ngược việc ghi cục bộ, không bao giờ thoát ra."
  • pi = EXTERNALIZE: không có jail trong lõi; chạy vào trong nono/a container - env triển khai là nhà tù.
  • Codex = PREVENT-by-container + RECOVER-by-git: hộp cát đám mây là ranh giới; nó đề xuất PR mà bạn xem xét trước khi hợp nhất.
  • decode = EXTERNALIZE + RECOVER: giống như pi, container là nhà tù (chúng tôi không gửi seccomp); Giống như ý tưởng git của opencode, chúng tôi thêm chất nền phục hồi git — nhưng được chuyển đổi mục đích từ "hoàn tác" thành "ship" ( decode/<id> trao tay lại; sự hợp nhất là cổng thực).

4. Vị trí I/O: che giấu một fs so với trao đổi toàn bộ phần phụ trợ "dưới dạng một bộ"

Phương pháp được nâng cao trực tiếp nhất - cái nhìn sâu sắc về tiêu đề của pi (wiki/repos/pi/SANDBOX.md §3).

  • claude-code = MASK: nhà tù kết thúc quá trình bash; read/write/edit ở trên máy chủ - một fs, đeo mặt nạ. Remote chỉ di chuyển agent để mặt nạ cùng định vị.
  • opencode: không có tù; trực tiếp trên máy chủ.
  • pi = HOÁN ĐỔI BỘ: ExecutionEnv = FileSystem & Shell; ghi đè read+write+edit+bash cùng nhau. Cảnh báo của wiki: "việc chỉ xóa bash khiến agent đọc các tệp cục bộ về một cây từ xa."
  • Codex: tranh luận — bộ công cụ toàn bộ chạy bên trong vùng chứa (đã được di dời), do đó không có sự phân chia máy chủ/hộp cát để điều hòa.
  • decode = SWAP THE SET: mẫu của pi, đã được triển khai. của chúng tôi SandboxBackend đường may mang tập tin thực thi ++; tuyến đường nhiệm vụ 081 read/write/edit/glob/grep thông qua nó vào Không gian làm việc. Chúng tôi từ chối một cách rõ ràng giải pháp thay thế "phản chiếu fs hộp cát tới máy chủ" — lỗ mù xóa.

5. Gia đình từ xa: di dời người thực thi và hoán đổi phần phụ trợ

execution-isolation-models.md §③ chia cắt từ xa thành hai gia đình.

  • claude-code = ③a di dời agent (vòng lặp headless trên hộp điều khiển từ xa; chuyến đi tù).
  • opencode = ③b di dời MÁY CHỦ (chia tách máy khách/máy chủ; không bị bỏ tù ở phía xa).
  • pi = ③c hoán đổi BACKEND ​​(agent cục bộ; BashOperations/ExecutionEnv nhắm mục tiêu lại qua SSH/container).
  • Codex = ③a-family di dời: Máy chủ ứng dụng (tất cả logic cốt lõi) chạy trong vùng chứa đám mây; VS Code/máy khách web mỏng.
  • decode = ③c swap (họ pi) cho modal — khai thác vẫn ở trên máy của bạn, thực thi + vận hành tệp được ủy quyền cho hộp cát từ xa. Sự tương phản: Codex di chuyển bộ não vào đám mây; decode giữ bộ não cục bộ và hoán đổi tay.

6. Góc phần tư từ xa không đáng tin cậy: container + repo clone + git hand-back

Wiki nói rõ rằng cả ba kho tham chiếu đều để mở - "không phải mỗi lệnh Các ảnh chụp nhanh dây an toàn/bwrap cũng như chỉ hoàn tác cách ly hoàn toàn máy chủ mà bạn không tin cậy — đó là nơi chứa các vùng chứa (Docker), microVM (Firecracker), gVisor enter."

  • claude-code / opencode / pi: không gửi nó.
  • Codex HOÀN TOÀN NÓ: "mỗi tác vụ chạy trong hộp cát đám mây riêng biệt, được tải sẵn repository của bạn"; một nhân viên cung cấp repository đã được kiểm tra cho vùng chứa, chạy Máy chủ ứng dụng, truyền phát tới trình duyệt, trạng thái trên máy chủ → đề xuất PR.
  • decode ĐIỀN NÓ: vùng chứa (docker/modal) + --repo nhân bản vào /workspace + bàn giao git phía máy chủ (decode/<id> chi nhánh). Chế độ modal của chúng tôi tương tự trực tiếp với hộp cát đám mây của Codex.
    • Sự khác biệt: Codex chạy agent bên trong đám mây và đề xuất PR từ đó; decode hoán đổi phần phụ trợ để tiếp cận vùng chứa (kiểu pi) và thực hiện git Push phía máy chủ - chuyển giao lại không đặt thông tin xác thực nào vào hộp cát (ADR-0012 §8). Chúng tôi đã gửi một proxy thông tin xác thực (mitmproxy tiêm token sau egress — một họ hàng của tính năng dàn xếp proxy egress lọc của claude-code, được đảo ngược từ filter thành inject) và đã xóa nó trong ADR-0016: nó chỉ hoạt động ở một trong ba chế độ sandbox, egress vẫn hợp tác và modal đã được chèn trực tiếp cùng một token. decode hiện không có tính năng dàn xếp đầu ra ** - gần nhất với ô "được chứa bên trong đám mây" của Codex. Để mô hình tự đẩy là chọn tham gia SANDBOX_GIT_TOKEN, được đưa trực tiếp vào Worker env trong cả hai phần phụ trợ và mô hình có thể đọc nó (PAT có phạm vi, có thể hủy bỏ).

Tổng hợp

Wiki đã dự đoán một góc phần tư mà ba khai thác tham chiếu của nó không đạt tới — ranh giới hạt nhân + một góc phần tư khác máy + mã không đáng tin cậy. Codex và decode là hai phần bổ sung cho khoảng trống đó và chúng phân chia thành chính xác hai trục tên wiki:

  1. Gia đình từ xa — Codex di dời (③a) toàn bộ agent vào vùng chứa đám mây; decode hoán đổi phụ trợ (③c, pi-style) vào docker/modal.
  2. Vai trò Git — Codex đề xuất PR từ bên trong đám mây; decode đẩy một nhánh phía máy chủ vì vậy bí mật không bao giờ vào hộp cát.

Mọi thứ khác được decode được xây dựng là sự kết hợp lại của các khai thác tham chiếu: "hoán đổi tập hợp" của pi (Phương pháp 4)

  • "chính sách ≠ thực thi" của claude-code (Phương pháp 1) + "git làm chất nền an toàn" của opencode (Phương pháp 3), với các thùng chứa/phương thức lấp đầy góc phần tư từ xa không đáng tin cậy.
Mục lục nguồn