close

OpenShell

Mã nguồn mở bởi NVIDIA

OpenShell là môi trường chạy agent AI trong sandbox cách ly, do NVIDIA phát hành mã nguồn mở. Bạn khai báo trong một chính sách (policy) agent được đọc file nào, gọi lệnh nào, kết nối tới đâu, và OpenShell chặn mọi thứ nằm ngoài chính sách đó.

OpenShell dùng để làm gì?

  • Chạy agent lập trình như OpenCode trong sandbox riêng, không đụng tới dữ liệu và mạng của máy chủ
  • Giới hạn agent được đọc thư mục nào, gọi system call nào và kết nối tới máy chủ nào
  • Giữ khoá API ngoài tầm nhìn của agent, chỉ gắn vào yêu cầu gửi tới địa chỉ đã duyệt
  • Duyệt hoặc từ chối từng quyền truy cập mới mà agent cần trong lúc chạy
  • Quản lý nhiều sandbox qua gateway, triển khai trên Kubernetes bằng Helm

Cần biết trước khi dùng

  • Cần chú ýHướng dẫn cài có dạng "curl … | sh": chạy script từ Internet trực tiếp, nên đọc script trước khi chạy.
  • Lưu ýKhông tìm thấy docker-compose hay Dockerfile ở thư mục gốc: chưa thể gắn nút Deploy tự động.
  • Lưu ýTino chưa kiểm thử việc cài ứng dụng này lên VPS.

Kiểm tra tự động ngày 04/11/2026 từ dữ liệu GitHub, OSV.dev và docker-compose. Đây không phải chứng nhận bảo mật; Tino không phát triển hay bảo trì repo này.

OpenShell là gì?

Agent AI làm được nhiều việc nhất khi được đọc file, cài gói, gọi API và dùng khoá truy cập, nhưng đó cũng là lúc rủi ro lớn nhất: một agent bị lừa bằng prompt có thể đọc bí mật hoặc gửi dữ liệu ra ngoài. OpenShell giải quyết bằng cách cho mỗi agent chạy trong một sandbox cách ly và áp chính sách ở tầng nhân hệ điều hành cho mọi lần truy cập file, gọi hệ thống và kết nối mạng.

Agent không thấy khoá thật. OpenShell lưu khoá trong kho riêng và chỉ gắn vào yêu cầu gửi tới địa chỉ được phép. Khi agent cần tới một địa chỉ chưa có trong chính sách, yêu cầu bị chặn và OpenShell soạn sẵn một luật đề xuất. Trước khi bạn duyệt, bộ chứng minh chính sách (policy prover) dùng kiểm chứng hình thức để đánh dấu những thay đổi mở thêm quyền rủi ro, ví dụ mang khoá tới máy chủ mới.

Kiến trúc gồm gateway (lớp điều khiển sandbox, chính sách và quyền truy cập), supervisor và sandbox. Bản cài cục bộ chạy gateway như dịch vụ người dùng tại https://127.0.0.1:17670 và tự nhận runtime có sẵn: Docker, Podman hoặc máy ảo nhẹ (MicroVM). Có SDK Python, TypeScript, Go, Rust để ứng dụng kết nối tới gateway.

OpenShell thu thập dữ liệu đo đạc ẩn danh (số đếm vận hành, không gồm prompt, khoá hay nội dung). Tắt bằng biến OPENSHELL_TELEMETRY_ENABLED=false trên gateway. Giấy phép Apache 2.0.

Nên dùng khi

  • Bạn cho agent lập trình chạy tự động trên VPS và muốn giới hạn nó chỉ được truy cập thư mục dự án và vài địa chỉ cần thiết
  • Agent cần dùng khoá API nhưng bạn không muốn khoá lộ ra trong môi trường của agent
  • Bạn vận hành nhiều agent cùng lúc và cần một nơi quản lý chính sách, sandbox và quyền truy cập
  • Bạn muốn duyệt từng quyền mới mà agent xin thay vì cấp toàn quyền từ đầu

Không nên dùng khi

  • Bạn không muốn chạy lệnh cài kiểu curl | sh: script cài đặt lấy từ GitHub và chạy thẳng trong shell, nên đọc script trước khi chạy
  • Máy chỉ có Windows: bản Windows gốc qua MXC còn đang phát triển, chạy trong WSL 2 vẫn là thử nghiệm
  • Bạn cần môi trường không gửi dữ liệu đo đạc mà chưa kịp cấu hình: telemetry ẩn danh bật mặc định
  • Bạn coi sandbox là bảo đảm tuyệt đối: một chính sách viết quá rộng hoặc bấm duyệt hết đề xuất (approve-all, nhất là với --include-security-flagged) vẫn mở đường cho agent
  • Triển khai Kubernetes mà CNI không thực thi NetworkPolicy: README ghi đây là điều kiện bắt buộc
  • Bạn không quen quản trị dịch vụ systemd, TLS và runtime container; dự án mới ở nhánh 0.1.x

Tính năng chính

  • Sandbox cách ly cho từng agent, áp chính sách ở tầng nhân cho file, system call và mạng
  • Kiểm tra mọi kết nối mạng ra khỏi sandbox theo chính sách
  • Kho khoá (provider): khoá chỉ được gắn vào yêu cầu tới địa chỉ đã duyệt
  • Policy advisor soạn luật đề xuất khi agent bị chặn; policy prover kiểm chứng hình thức trước khi duyệt
  • Luật đã duyệt nạp nóng vào sandbox đang chạy, không cần khởi động lại
  • Runtime: Docker, Podman, MicroVM; triển khai Kubernetes bằng Helm
  • SDK Python, TypeScript, Go, Rust và bộ skill cho agent lập trình
  • Giấy phép Apache 2.0

Cách cài đặt OpenShell

  1. Cài CLI, policy prover và gateway cục bộ Chạy trên Linux hoặc macOS Apple Silicon đã có Docker (Docker Engine 28.0 trở lên), Podman 5.x hoặc ảo hoá phần cứng. Script chọn gói phù hợp (Debian, RPM, Homebrew) và khởi động gateway. Muốn cài một bản cố định, đặt OPENSHELL_VERSION bằng tag phát hành.
    curl -LsSf https://raw.githubusercontent.com/NVIDIA/OpenShell/main/install.sh | sh
  2. Kiểm tra CLI kết nối được gateway Trên Linux, gateway chạy như dịch vụ systemd của người dùng tại https://127.0.0.1:17670.
    openshell status
  3. Giữ gateway chạy sau khi đăng xuất (Linux, VPS) Cần trên VPS để gateway không dừng khi phiên SSH đóng.
    sudo loginctl enable-linger $USER
  4. Tạo sandbox thử Ảnh mặc định là Ubuntu tối giản, chưa có agent nào bên trong.
    openshell sandbox create --name demo
  5. Chạy agent đầu tiên (OpenCode với OpenRouter) Đặt biến OPENROUTER_API_KEY trước khi tạo provider. OpenShell lưu khoá trong kho riêng và chỉ gửi tới openrouter.ai. Ví dụ dùng model miễn phí nên không cần nạp tiền OpenRouter.
    openshell profile import \
      --url https://raw.githubusercontent.com/NVIDIA/OpenShell/main/providers/openrouter.yaml
    
    openshell provider create \
      --name openrouter \
      --type openrouter \
      --from-existing
    
    openshell sandbox create \
      --name my-agent \
      --from ghcr.io/anomalyco/opencode:latest \
      --provider openrouter \
      -- opencode -m openrouter/nvidia/nemotron-3.5-lightning:free

Lệnh chép từ README của dự án. Đọc kỹ trước khi chạy và đối chiếu với README mới nhất, vì lệnh có thể đổi theo phiên bản.

Biến môi trường quan trọng

BiếnÝ nghĩa
OPENSHELL_VERSIONTag phiên bản cần cài khi chạy install.sh; pre là bản thử nghiệm mới nhất, dev là bản dựng theo nhánh main
OPENSHELL_INSTALL_METHODĐặt snap để cài gói snap thay vì Debian hoặc RPM trên Linux
OPENSHELL_TELEMETRY_ENABLEDĐặt false trên gateway để tắt dữ liệu đo đạc ẩn danh (Helm dùng server.telemetryEnabled=false)
~/.config/openshell/gateway.tomlFile cấu hình gateway, ví dụ ghim runtime bằng compute_driver
OPENSHELL_SANDBOX_RUNTIME_IMAGE / OPENSHELL_SUPERVISOR_IMAGEĐặt trong ~/.config/openshell/gateway.env để chỉ định ảnh sandbox và supervisor tin cậy
OPENROUTER_API_KEYKhoá OpenRouter cho ví dụ chạy agent đầu tiên; được lưu vào kho khoá của OpenShell

Cách dùng sau khi cài

  1. Xem đề xuất quyền đang chờKhi agent bị chặn, chạy openshell rule get my-agent --status pending để xem các luật đề xuất, gom theo máy chủ, cổng và chương trình gọi.
  2. Duyệt hoặc từ chối từng luậtDùng openshell rule approve my-agent --chunk-id để duyệt, hoặc openshell rule reject kèm --reason để từ chối. Luật đã duyệt nạp nóng vào sandbox.
  3. Cẩn thận với duyệt hàng loạtopenshell rule approve-all bỏ qua đề xuất bị gắn cờ bảo mật, trừ khi thêm --include-security-flagged. Chỉ dùng khi đã đọc danh sách.
  4. Theo dõi gatewayTrên Linux: systemctl --user status openshell-gateway, xem log bằng journalctl --user -u openshell-gateway -f.
  5. Viết chính sách riêngKhi agent cần thêm thư mục, kho gói hay máy chủ công cụ, tạo sandbox policy riêng theo tài liệu Policies thay vì nới rộng chính sách mặc định.

Cập nhật và sao lưu

Cài bản mới bằng cách chạy lại install.sh, có thể đặt OPENSHELL_VERSION để chọn phiên bản. Bản snap cập nhật qua snap refresh. Kubernetes dùng helm upgrade --install với phiên bản chart tương ứng. Khi lên 0.1.x, đọc hướng dẫn nâng cấp 0.1.0 của dự án.

Dữ liệu gateway gồm file cấu hình ~/.config/openshell/gateway.toml, cơ sở dữ liệu và thư mục TLS (chứa khoá CA, khoá client, khoá ký JWT của sandbox). Sao lưu các thư mục này và giữ kín.

Câu hỏi thường gặp

OpenShell có kèm sẵn agent AI không?

Không. Ảnh sandbox mặc định là Ubuntu tối giản. Bạn chọn ảnh có sẵn agent, ví dụ ảnh OpenCode trong hướng dẫn chạy agent đầu tiên, hoặc tự dựng ảnh chứa agent và công cụ cần dùng.

Gateway có mở ra Internet không?

Bản cài cục bộ cho gateway nghe tại https://127.0.0.1:17670, chỉ truy cập được từ chính máy đó. Muốn quản lý từ xa hay chạy nhiều máy, tài liệu hướng dẫn triển khai gateway trên Kubernetes bằng Helm.

OpenShell có gửi dữ liệu về NVIDIA không?

Có thu dữ liệu đo đạc ẩn danh về loại thao tác và số đếm. README ghi không gồm tên sandbox, đường dẫn, prompt, khoá hay nội dung. Tắt bằng OPENSHELL_TELEMETRY_ENABLED=false trên gateway.

Chạy được trên VPS không có ảo hoá lồng không?

Được nếu VPS có Docker Engine 28.0 trở lên hoặc Podman 5.x. Runtime MicroVM mới cần KVM. Gateway tự nhận runtime có sẵn; muốn ghim, đặt compute_driver trong gateway.toml.

Ứng dụng liên quan

Miễn trừ trách nhiệm

Tino không phát triển, không sở hữu và không liên kết với OpenShell hay nhóm phát triển NVIDIA. Tên, logo và nhãn hiệu thuộc về chủ sở hữu tương ứng; việc nhắc tới chỉ để mô tả, không có nghĩa là dự án xác nhận hay hợp tác với Tino.

OpenShell được phân phối theo giấy phép Apache-2.0 của nhóm phát triển. Tino không bảo đảm về tính năng, bảo mật hay mức độ phù hợp của phần mềm; bạn tự chịu trách nhiệm khi cài đặt, cấu hình và sử dụng.

Lệnh cài và thông tin trên trang lấy từ tài liệu công khai của dự án tại thời điểm cập nhật và có thể đã thay đổi. Đọc tài liệu chính thức và sao lưu dữ liệu trước khi chạy trên máy chủ thật.