TECHDEV · Flagship · Công cụ mã nguồn mở
agent-seatbelt
Lớp chính sách trung lập nhà cung cấp và bằng chứng chống giả mạo nằm phía trên runtime agent bạn đang dùng. Mọi hành động của agent — gọi tool, egress mạng, tra cứu DNS, truy cập file, dùng credential — đều do một engine chính sách xác định quyết định, chạy ngoài tiến trình agent, và mọi quyết định, kể cả quyết định từ chối, đều ghi vào sổ bằng chứng append-only, hash-chained mà bạn có thể kiểm chứng bằng một lệnh offline.
Python · Policy pack OPA/Rego · Apache-2.0 · Python ≥ 3.11 + binary OPA (giai đoạn 1 phát triển với OPA 1.21) · Phần còn lại chỉ là thư viện chuẩn Python · Không có LLM nào phán quyết trong đường quyết định.
Vấn đề mà công cụ trả lời
Bạn chạy AI agent với credential thật trên hệ thống thật. README mô tả một đánh giá độc lập về một runtime hàng đầu, trong đó cơ chế chặn vẫn đứng vững, nhưng audit trail có lỗ hổng: một truy vấn DNS bị chặn không để lại bất kỳ event nào, audit export âm thầm không ghi gì, và các tool call bên trong sandbox không bao giờ được ghi lại. Khi sự cố xảy ra, bạn không thể trả lời câu hỏi duy nhất quan trọng — agent đã làm chính xác những gì, và chúng ta đã chặn những gì? — từ những bản ghi đáng tin, vì bản ghi rải rác khắp runtime, gateway và console, và một số còn có thể bị sửa sau khi ghi.
Seatbelt là lớp còn thiếu, theo cách README nói: một điểm chính sách và một sổ bằng chứng duy nhất xuyên suốt các runtime, với độ bao phủ được kiểm tra, không phải được tuyên bố. Quy tắc cốt lõi: hành động của agent mà không có bản ghi bằng chứng là lỗi hệ thống, không phải chi tiết nhỏ — sổ đối chiếu những gì kỳ vọng với những gì quan sát được, và một lần chạy sẽ công khai thất bại khi thiếu bản ghi.
Công cụ làm gì
- Chính sách xác định tại biên. Tool call, egress, DNS, truy cập file, ngân sách và cấp credential do các policy pack OPA/Rego quyết định, chạy ngoài tiến trình agent. Không có LLM nào phán quyết trong đường quyết định.
- Ghi cả hai chiều. Cho phép và từ chối đều thành bản ghi bằng chứng, kèm chế độ thực thi và hash của đúng policy pack đã quyết định.
- Sổ chống giả mạo. NDJSON append-only với hash chain, checkpoint đã ký và Merkle root neo ngoài thư mục sổ. Đổi một byte, verifier sẽ chỉ đúng bản ghi bị sửa.
- Kế toán độ bao phủ. Mỗi adapter công bố một coverage manifest. Sau một lần chạy, accountant đối chiếu sổ với ground truth độc lập; thiếu bản ghi thì lần chạy thất bại bằng văn bản.
- Credential theo từng lần chạy + từng hành động. Broker cấp quyền dùng credential cho một lần chạy, một hành động, một đích. Model không bao giờ thấy secret thô; sổ chỉ ghi việc cấp hoặc từ chối, không bao giờ ghi giá trị. Tên DNS bị từ chối được ghi đã che (chỉ digest) để sổ không bao giờ trở thành bản sao của những gì nó đã chặn.
- Kiểm chứng offline bằng một lệnh. Tính toàn vẹn chuỗi, chữ ký checkpoint, anchor ngoài, báo cáo bao phủ và quét secret thô trên toàn bộ bundle — không cần server, không cần tin runtime.
Adapter (giai đoạn 1)
| Adapter | Điểm biên | Tín hiệu gốc |
|---|---|---|
| Claude Code | Hook CLI PreToolUse (seatbelt hook) + resolver tap + broker/budget qua daemon | Event OpenTelemetry, đưa vào cùng một sổ |
| NVIDIA OpenShell | Decision API của daemon + MCP proxy + egress proxy + resolver tap | Export OCSF, đưa vào và đối chiếu với chính bản ghi của Seatbelt |
Mỗi adapter công bố coverage manifest trong repo (adapters/claude-code/coverage-manifest.json và adapters/openshell/coverage-manifest.json).
Cách dùng
README không có package npm và không có lệnh cài đặt — công cụ chạy từ source. Điều kiện: Python ≥ 3.11 và binary OPA (giai đoạn 1 phát triển với OPA 1.21); phần còn lại chỉ là thư viện chuẩn Python. Đường golden path mất khoảng 2 phút:
export PYTHONPATH="$PWD/src"
export OPA_BIN=/path/to/opa
# Credential DEMO GIẢ cho workload mẫu. Không bao giờ dùng credential thật:
# broker đọc nó từ môi trường, và nó không bao giờ được tới
# agent hay sổ.
export SEATBELT_SECRET_BILLING_API='DEMO-SECRET-billing-9c1f'
D=/tmp/seatbelt-demo; mkdir -p "$D/run" "$D/anchors" "$D/ws" "$D/bundle"
# 1. Khởi động API đích mẫu và daemon Seatbelt
python3 examples/ops-assistant/target_server.py 18741 &
python3 -m seatbelt.cli serve --run-dir "$D/run" --run-id demo-1 \
--adapter openshell --workspace "$D/ws" --policies policies \
--opa-bin "$OPA_BIN" --key-file "$D/operator-key.txt" \
--anchor-dir "$D/anchors" --state-file "$D/state.json" &
sleep 2
# 2. Chạy workload mẫu sạch qua các điểm biên của Seatbelt
python3 examples/ops-assistant/agent.py --mode openshell \
--scenario clean --state-file "$D/state.json" --workspace "$D/ws" \
--ground-truth "$D/ground-truth.ndjson" \
--transcript "$D/transcript.json" --target-port 18741
# 3. Dừng daemon, đối chiếu bao phủ, đóng gói + kiểm chứng bundle
kill %2; sleep 1
python3 -m seatbelt.cli coverage --run-dir "$D/run" \
--ground-truth "$D/ground-truth.ndjson" --key-file "$D/operator-key.txt" \
--adapter openshell --anchor-path "$D/anchors/anchors.ndjson"
cp "$D/run/ledger.ndjson" "$D/run/coverage-report.json" \
"$D/anchors/anchors.ndjson" "$D/bundle/"
printf '%s\n' "$SEATBELT_SECRET_BILLING_API" 'CANARY-SECRET-7f3a9d2e' \
> "$D/secrets.txt"
python3 -m seatbelt.cli verify --bundle "$D/bundle" \
--key-file "$D/operator-key.txt" --secrets-file "$D/secrets.txt" \
--ground-truth "$D/ground-truth.ndjson"Lệnh chép đúng từ quickstart của README. Verifier in {"ok": true, ...} và thoát với mã 0. Thử scenario planted để xem năm vi phạm được gài sẵn vừa bị chặn vừa được ghi lại, rồi đổi bất kỳ byte nào trong bundle/ledger.ndjson và chạy lại bước verify — nó sẽ thất bại, chỉ đúng bản ghi bị sửa. Demo là một phiên terminal thật duy nhất, ghi lại đúng lúc chạy: bash docs/demo/run_demo.sh chạy workload sạch, rồi workload gài sẵn, đối chiếu bao phủ, kiểm chứng bundle bằng chứng offline, rồi đổi một byte trong bản sao của sổ và xem verifier thất bại, chỉ đúng bản ghi bị sửa. Văn bản phiên thô: docs/demo/typescript.txt trong repo.
Số liệu đã đo (README)
- Acceptance giai đoạn 1: hook CLI, MCP proxy, egress proxy, DNS tap, broker, ledger, accountant và verifier được đo end-to-end bằng
verification/run_acceptance.py— mọi kiểm tra đều đạt (kết quả đầy đủ trongverification/results.md). - Lần chạy OpenShell 0.1.5 trực tiếp: trên GitHub Actions runner (docker driver), sandbox khởi động và chạy lệnh thật; một event shorthand gốc cho việc từ chối DNS đã được bắt (
NET:REFUSE … DENIED, lý dopolicy_dns_ineligible); độ bao phủ phía Seatbelt đạt 13/13 so với ground truth độc lập (workflow.github/workflows/openshell-live.yml; hồ sơ đầy đủ trong release dossier). - Lỗ hổng đã đo, README nêu rõ: với
ocsf_json_enabledđặt đúng như nhà cung cấp hướng dẫn, OCSF-JSON export của runtime cho ra 0 bản ghi trong cả hai lần chạy trực tiếp, nên luồng JSON gốc vẫn chưa có gì để đưa vào. - Demo: workload sạch (mọi hành động được cho phép và ghi lại) + workload gài sẵn (năm vi phạm được gài sẵn vừa bị chặn vừa được ghi lại) + kiểm chứng bundle offline + trường hợp sửa 1 byte làm kiểm chứng thất bại.
- Bộ test: test unit + component + concurrency — 23 test (theo layout trong README).
README không công bố số liệu độ trễ, throughput hay benchmark timing, nên trang này không đưa số liệu nào như vậy.
Đây KHÔNG phải gì — và đối thủ hơn chúng ta ở đâu
- Không phải sandbox. Seatbelt không có isolation — theo thiết kế, và sẽ không bao giờ có. Nếu bạn cần sandbox, hãy chạy một runtime của đối thủ dưới Seatbelt. OpenShell và nono mới là bên cung cấp isolation thật; Seatbelt thì không.
- nono đã ship audit hash-chained cho agent trước Seatbelt (bên trong sandbox của nó). Infisical Agent Vault là sản phẩm thương mại hoàn thiện, có hỗ trợ. Tuyên bố của Seatbelt hẹp hơn: hợp nhất chính sách, bằng chứng, cấp credential và độ bao phủ đã kiểm chứng trên một lớp trung lập duy nhất.
- So sánh, như README nêu: Seatbelt là lớp chính sách + bằng chứng phía trên runtime (trung lập runtime: một sổ xuyên suốt các runtime; ghi hành động bị từ chối theo hợp đồng, kèm kiểm tra bao phủ; cấp credential theo từng lần chạy + từng hành động trong cùng một sổ). OpenShell là runtime sandbox (không trung lập runtime; event shorthand có sẵn natively, nhưng OCSF-JSON export đã tài liệu hoá đo được 0 bản ghi trên 0.1.5 nên không có gì tới được sổ ngoài; không có kiểm chứng bao phủ tương đương đã công bố; credential được inject tại egress bên trong sandbox). nono là sandbox có audit chống giả mạo (không trung lập runtime; ghi hành động bị từ chối bên trong sandbox; không có kiểm chứng bao phủ tương đương đã công bố). Infisical Agent Vault là credential broker, thương mại, Preview (trung lập runtime một phần — chỉ proxy HTTP(S); audit log cho các call qua broker; không kiểm chứng bao phủ; cấp theo từng service bundle).
Giới hạn (README nêu rõ)
- Lỗ OCSF ở trên là của runtime, không phải khoảng trống do tái dựng: file sink của supervisor theo tài liệu nằm trên tmpfs mà chính tài liệu của nhà cung cấp nói công cụ ngoài không đọc được. Đóng lỗ đó chính là lý do boundary recorder tồn tại.
- Đường hook Claude Code được chạy qua giao thức hook thật (JSON vào stdin, JSON quyết định ra stdout) qua subprocess; một phiên Claude Code tương tác trực tiếp vẫn đang chờ xác thực Anthropic của owner.
- Phạm vi giai đoạn 1 là hai adapter trên. Giai đoạn 2 (roadmap README): adapter E2B; niêm phong export từ công cụ quan sát thành bằng chứng kiểm chứng được; broker bao phủ cho mẫu database/SSH; đo lại bao phủ của OpenShell trên các Linux driver còn lại (docker driver đã đo trực tiếp ở giai đoạn 1), công bố; cảnh báo phong phú hơn. Giai đoạn 3: thêm runtime, neo minh bạch công khai, chế độ CI làm cổng kiểm tra agent.
Bố cục repo (README): src/seatbelt/ (daemon, PDP client, ledger, broker, proxy, verifier); policies/ (policy pack Rego v1 + data); adapters/ (adapter claude-code/ và openshell/ + manifest); examples/ (workload mẫu ops-assistant, sạch + gài sẵn); verification/ (harness acceptance giai đoạn 1 và kết quả đã đo); docs/ (kiến trúc, threat model, demo); tests/ (23 test). Tài liệu thêm trong repo: kiến trúc và trust model, policy pack v1, README của cả hai adapter, workload mẫu, kết quả acceptance giai đoạn 1, release dossier, chính sách bảo mật.
Giấy phép
Apache-2.0 — xem LICENSE trong repo.
Công cụ liên quan
Các công cụ mã nguồn mở khác của TECHDEV: sessguard, runverdict, gheist-guard, vetgate, context-diet, ci-failure-detective, devsecops-os, env-doctor, skill-audit, logtrim, testguard, breakcheck, keymap, memgraph, ggufit, leaseguard, factfence, jsonfold
Đóng góp ý kiến
Bình chọn cho công cụ này, đề xuất tính năng, hoặc thảo luận với các vận hành khác trên bảng cộng đồng.