- Công cụ cô lập agent AI cục bộ bằng sandbox native của macOS để chúng không thể thay đổi các thành phần bên ngoài hệ thống
- Mọi agent đều chạy trong môi trường sandbox độc lập, nên không thể truy cập thư mục home của người dùng hay các project khác
- Áp dụng mô hình truy cập Deny-first, chỉ cho phép đọc/ghi với những thư mục được cấp quyền rõ ràng
- Việc cài đặt hoàn tất chỉ với một script Bash duy nhất, có thể chạy ngay mà không cần build hay phụ thuộc bổ sung
- Có thể tự động hóa cấu hình sandbox-exec theo nguyên tắc đặc quyền tối thiểu thông qua tính năng tạo profile bằng LLM
Tổng quan
- Agent Safehouse là hệ thống sandbox chuyên cho macOS, bảo vệ để các agent AI chạy cục bộ không làm hỏng file hệ thống
- “Go full
--yolo. We've got you.” “Move fast, break nothing”
- Chặn rủi ro thực thi các lệnh ngoài ý muốn do bản chất xác suất của LLM
- Tất cả các agent phổ biến đều hoạt động trọn vẹn trong sandbox mà không ảnh hưởng đến hệ thống bên ngoài
- Áp dụng mô hình truy cập Deny-first, mặc định chặn mọi truy cập và chỉ cho phép các đường dẫn được cấp quyền rõ ràng
- Ví dụ:
~/my-project được phép đọc/ghi, còn ~/.ssh, ~/.aws, ~/other-repos thì bị từ chối truy cập
Cài đặt và chạy
- Việc cài đặt hoàn tất bằng cách tải một script shell duy nhất
- Dùng lệnh
curl để tải script, lưu vào ~/.local/bin/safehouse rồi cấp quyền thực thi
- Sau đó chạy agent mong muốn bằng lệnh
safehouse
- Ví dụ:
safehouse claude --dangerously-skip-permissions
- Mặc định, Safehouse cấp quyền đọc/ghi cho thư mục làm việc hiện tại (git root) và cho phép truy cập chỉ đọc vào thư mục toolchain
Ví dụ kiểm chứng sandbox
- Khi truy cập file nhạy cảm, thao tác sẽ bị chặn ở cấp kernel
- Khi chạy
safehouse cat ~/.ssh/id_ed25519, sẽ xuất hiện lỗi “Operation not permitted”
- Các thư mục project khác (
~/other-project) sẽ không hiển thị
- Thư mục project hiện tại vẫn có thể truy cập bình thường
Tự động hóa và tạo profile
- Có thể thêm hàm shell để mặc định chạy mọi agent bên trong Safehouse
- Ví dụ: định nghĩa hàm
safe() trong .zshrc hoặc .bashrc để tự động sandbox các lệnh claude, codex, amp, gemini
- Nếu muốn chạy mà không qua sandbox, gọi theo dạng
command claude
- Cung cấp tính năng tạo profile bằng LLM
- Các model như Claude, Codex, Gemini phân tích template của Safehouse để tạo profile sandbox-exec theo nguyên tắc đặc quyền tối thiểu
- Dựa trên thông tin thư mục home và toolchain để lưu vào đường dẫn
~/.config/sandbox-exec.profile
- Bao gồm quyền truy cập vào thư mục làm việc hiện tại và các lệnh tắt riêng cho từng agent
Bảo mật và ý nghĩa sử dụng
- Bảo vệ để các agent cục bộ dùng LLM không thể vô tình xóa file hoặc thay đổi hệ thống ngoài ý muốn
- Tận dụng cơ chế kiểm soát truy cập ở cấp kernel của macOS để cung cấp môi trường thực thi an toàn theo mặc định
- Dựa trên một script duy nhất nên dễ tích hợp vào workflow của developer
1 bình luận
Ý kiến trên Hacker News
Tôi không ngờ dự án mình làm lại được công khai sớm như vậy
1️⃣ Tôi thích agent chạy trực tiếp trên máy local. Không phải container hay server từ xa, mà chạy trên chính máy tôi đã tinh chỉnh kỹ thì thấy yên tâm hơn
2️⃣ Về bản chất thì đây là trình tạo policy cho sandbox-exec. Không có dependency, cũng không có ảo hóa. Thay vào đó, tôi đã dành rất nhiều thời gian để tìm ra quyền tối thiểu cần thiết để mỗi agent có thể làm những việc như tự động cập nhật, tích hợp keychain, dán hình ảnh, v.v. Nội dung điều tra liên quan được tổng hợp tại agent-safehouse.dev/docs/agent-investigations
3️⃣ Cũng không nhất thiết phải dùng toàn bộ dự án. Chỉ riêng Policy Builder cũng đủ để tạo policy sandbox-exec và đưa vào dotfiles để dùng
Trước giờ tôi cũng từng xem tài liệu về policy sandbox, nhưng đây là lần đầu thấy nó ở dạng ứng dụng có thể dùng ngay như vậy
Tuy vậy vẫn có vài điểm bất tiện — quyền truy cập vào
.gitconfig,.gitignoretrong thư mục home bị chặn, và do hạn chế truy cập tiến trình nên không thể bảo Claude chạy các lệnh nhưlldbhaypkill. Sẽ rất tốt nếu có thể điều khiển quyền chi tiết hơnTôi đã lướt qua website và script mà chưa thấy vấn đề gì đặc biệt. Có điểm cần lưu ý nào chưa được tài liệu hóa không?
.shtừ một server bất kỳ, nghe cũng khá buồn cườiSẽ tốt hơn nếu phát hành dưới dạng tarball. Với tarball, tôi có thể tự kiểm tra bên trong và xác minh xem nó có được tạo tự động trong CI hay không, nên đáng tin hơn
Thật mừng khi thấy những dự án như thế này, và tôi nghĩ hiện giờ sandboxing là bài toán lớn nhất
Người dùng ban đầu sẽ cứ thế chạy agent trên máy local, nhưng về lâu dài hay trong môi trường doanh nghiệp thì cách đó chắc chắn không ổn
Không chỉ dừng ở việc kiểm soát quyền mạng, file hay thực thi, mà còn phải xử lý các kịch bản phức tạp như test trình duyệt hay tạo tài nguyên cloud
Cuối cùng, cần một cách tiếp cận thực dụng tích hợp bảo mật, chi phí và kiểm soát quyền hạn
Tôi dùng một local daemon phát hành JWT sống ngắn để agent không phải trực tiếp cầm key. Cách này khá hợp với truy cập API, nhưng ở cấp file system thì vẫn có thể tạo vô hạn instance EC2
Vấn đề là rất khó so sánh, đánh giá nhiều sandbox khác nhau
Cái này có vẻ là wrapper cho sandbox-exec, mà dạo này kiểu wrapper như vậy xuất hiện khá nhiều
Thứ thực sự cần là tài liệu xác minh độ tin cậy và test tự động. Phần lớn sandbox đều thiếu tài liệu
Muốn tin tưởng thì phải có tài liệu chi tiết và bằng chứng nó thực sự hoạt động
Hồ sơ sandbox-exec cho từng agent được tách riêng trong thư mục profiles trên GitHub, nên rất dễ review
Tôi cũng đang chạy test E2E với agent thật
Ngay cả không dùng wrapper Safehouse, bạn vẫn có thể tự tạo policy quyền tối thiểu bằng Policy Builder
Ngoài ra tôi cũng cung cấp file hướng dẫn để LLM tự viết hồ sơ sandbox
Đây là một script wrapper cho sandbox-exec. Có nhiều preset được chuẩn bị sẵn nên khá tốt
90% của sandbox-exec là đặt đúng phạm vi, và 90% còn lại là hiểu được chuyện đó
Tuy nhiên, sẽ hay hơn nếu có thể sandbox theo kiểu overlay hoặc copy-on-write. Chỉ cần sửa môi trường tạm thời thay vì đụng vào
.bashrccủa tôi là đủOverlay FS thì khó trên macOS, nhưng tôi giải quyết bằng cách giới hạn quyền đọc bên ngoài CWD ở chế độ chỉ đọc, rồi dẫn nó làm việc trong thư mục tạm
Nó cũng có thể expose cổng TCP/UDP và chia sẻ với thành viên trong nhóm. Xem liên kết GitHub
Có thể truy cập an toàn vào các file bị git-ignore. Liên kết Treebeard
Một điều thú vị: sandbox-exec đã chính thức ở trạng thái deprecated từ macOS Sierra (2016)
Dù vậy nó vẫn đang được dùng khá hữu ích. App Sandbox của Apple không phù hợp với kiểu rule tùy biến như thế này
Mong là Apple đừng loại bỏ hoàn toàn nó
Cũng có dự án tên Sandvault. Nó kết hợp sandbox-exec với hệ thống người dùng Unix
Mỗi agent có một tài khoản người dùng không đặc quyền riêng, rồi tương tác qua sudo, SSH và thư mục chia sẻ
Liên kết GitHub của Sandvault
Tôi đã tạo một ứng dụng GUI cho macOS để có thể quản lý sandbox-exec một cách trực quan
Nó còn bao gồm lọc mạng theo domain và tính năng phát hiện bí mật
multitui.com
Chia sẻ cách dùng lệnh container của Apple để chạy Claude code bên trong Apple container
Thiết lập môi trường theo thứ tự
container system start→container run→container exec, sau đó cài Node.js và ClaudeTôi muốn biết vì sao bạn cho rằng chạy agent trên local lại tốt hơn.
Với đa số mọi người, có lẽ chạy từ xa sẽ hiệu quả hơn — vì không cần phải bật máy suốt
Hơn nữa còn tránh được phí thuê bao
Tôi đang tăng cường bảo mật, và với workflow AI thì nó đã đủ phù hợp
Liên kết GitHub của pixels
Tôi tự hỏi liệu “clunker” có phải là tiếng lóng mới của “clanker” không. Người bạn của một người bạn tên Roku hỏi vậy
Đúng lúc quá vì tôi đang khổ sở với bài toán sandboxing