16 điểm bởi GN⁺ 2026-03-09 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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

 
GN⁺ 2026-03-09
Ý 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

    • Xin lỗi vì đã giới thiệu sớm. Tôi đã thử sau khi thấy một bình luận bạn để lại trước đây, và thấy hiệu quả quá tốt nên nghĩ là đáng để viết một bài giới thiệu
      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, .gitignore trong 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ư lldb hay pkill. Sẽ rất tốt nếu có thể điều khiển quyền chi tiết hơn
    • Tôi tò mò không biết có thể áp dụng cái này cho openclaw không. Chạy theo kiểu có thể truy cập từ máy local thì tiện, nhưng đồng thời cũng phát sinh vấn đề khó kiểm soát hơn
    • Tôi muốn biết khác biệt thực tế giữa chạy local và chạy trong container là gì
    • Ồ, đúng cái tôi đang tìm. Tôi đã cố chỉnh microsandbox cho phù hợp, nhưng cái này thực tế hơn nhiều
      Tô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?
    • Trớ trêu ở chỗ, chính vì tôi không tin AI nên mới quan tâm đến những dự án như thế này, nhưng để cài đặt thì lại phải tải và chạy file .sh từ một server bất kỳ, nghe cũng khá buồn cười
      Sẽ 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

    • Nhưng liệu đây có thể là một vấn đề về bản chất không thể giải quyết không? Tính năng và độ an toàn luôn xung đột, và con người rốt cuộc vẫn chọn vế đầu
    • Sandboxing ở mức file chỉ là cơ bản, cái thực sự khó là credential và kiểm soát mạng
      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

    • Vì vậy tôi làm nó bằng Bash — để tránh binary mù mờ
      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 .bashrc của tôi là đủ

    • Tôi dùng Bash vì khó mà tin tưởng binary Go hay Rust
      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
    • Tôi đang làm một OSS tên là Amika. Đây là công cụ giúp khởi chạy nhanh sandbox local hoặc từ xa, và tích hợp tốt với Git
      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
    • Tôi đã làm một dự án tên Treebeard. Nó kết hợp sandbox-exec, worktree và file system COW
      Có thể truy cập an toàn vào các file bị git-ignore. Liên kết Treebeard
    • Nhưng sandbox-exec chẳng phải đã deprecated rồi sao?
  • 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ó

    • Thật ra có cảm giác như ngay từ đầu nó đã ở trạng thái deprecated. Tài liệu về ngôn ngữ profile hầu như không có, phần lớn chỉ được hiểu ra nhờ reverse engineering
  • 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 domaintí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 startcontainer runcontainer exec, sau đó cài Node.js và Claude

    • Cảm ơn! Đây là lần đầu tôi biết Homebrew cũng có apple/container
  • Tô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

    • Ưu điểm của chạy local là quyền kiểm soát và quyền sở hữu. Cũng giống lý do người ta tự chạy Plex hay web server vậy
      Hơn nữa còn tránh được phí thuê bao
    • Tôi đã làm pixels để giải quyết vấn đề này. Nó có thể chạy trên TrueNAS SCALE hoặc Incus
      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

    • Là lỗi gõ thôi, tôi vừa sửa xong