安全
SOBA Agent 的权限、信任级别、项目信任和安全模式。
SOBA 会按信任级别分类代理操作,包括工具调用和 shell 命令,并在危险动作前请求用户确认。
1. 信任级别
每个工具调用或 shell 命令都会得到三个级别之一:
| 级别 | 行为 | 示例 |
|---|---|---|
| safe | 自动执行 | read, ls, git status, npm test |
| normal | 无需确认,执行并记录 | write, edit, git commit, bun install |
| dangerous | 需要用户确认 | rm, sudo, curl, git push |
2. 权限模式
三个模式通过 TrustManager.setPermissionMode() 设置:
| 模式 | 行为 |
|---|---|
| ask(默认) | 每个 dangerous 命令都会请求确认 |
| repo | 当前 repo 内的 dangerous 命令无需重复确认;外部、网络和特权命令仍然需要确认 |
| full | 当前会话结束前,所有 dangerous 操作都无需重复确认 |
3. Shell 命令分类
内置规则列表由 runtime trust policy 维护。
Dangerous:需要确认
删除:rm, rm -rf, rmdir, unlink, shred, srm
权限:sudo, chown, chmod 777
网络:curl, wget, nc, ssh, scp
Git:git push, git reset
可能阻塞代理的开发服务器:bun run dev, npm run dev, npx vite
脚本快捷方式:node -e, bun -e, python -c, ruby -e
移动到项目外:mv ... /tmp/, mv ... $HOME/
文件系统:mkfs.*, dd if=
重定向到设备:> /dev/sda
Normal:无需询问
写入:write, edit, mkdir, cp, 项目内的 mv, touch, chmod
Git:git add, git commit, git checkout
包管理器:bun install, npm install, yarn install, pnpm install
构建:make, cargo, go, docker, docker-compose
Safe:始终允许
读取:read, ls, cat, head, tail, wc
搜索:不带 -delete 或 -exec rm 的 grep, rg, find
Git:git status, git log, git diff, git branch
测试和脚本:npm test, npm run, bun test, bun run
信息:echo, pwd, which, env, date, whoami
重定向:> /dev/null
4. 确认危险操作
当代理调用 dangerous 命令时,用户会看到带有选项的确认提示:
| 决定 | 动作 |
|---|---|
| deny (n) | 拒绝 |
| once (y) | 允许一次 |
| session (s) | 允许整个会话;同一个命令不会再次请求确认 |
| repo (r) | 启用 repo 模式 |
| full (f) | 为所有 dangerous 操作启用完整会话模式 |
确认提示也可以显示更安全的 alternatives。SOBA 当前会为常见风险模式建议 least-privilege rewrites,包括与 build
命令串联的 destructive cleanup,以及远程 git push。这些 alternatives 会写入 proof permission receipt,
这样之后 soba prove 和 soba verify 可以显示实际批准或拒绝的内容。
5. Direct shell 命令(!)
在 TUI 中,!command 会直接执行命令,不经过 AI。执行前仍然会进行安全检查。
6. Skills 的项目信任
项目中的 .soba/skills/ skills 在首次使用前需要批准。
存储位置:~/.soba/project-trust.json。
Slash 命令:
| 命令 | 动作 |
|---|---|
/project-trust status | 显示当前项目的信任状态 |
/project-trust approve | 批准项目 |
/project-trust revoke | 撤销信任 |
7. 自定义规则
TrustManager 可以添加和删除规则:
trustManager.addToolRule("my-tool", "dangerous");
trustManager.addCommandRule("my-cmd ", "safe");
trustManager.removeToolRule("my-tool");8. 审计
所有代理动作都会写入会话 JSONL。查看 shell 命令:
grep '"name":"bash"' ~/.soba/sessions/<session-id>.jsonlSession JSONL 中的 conversation items 会保留 user/model content 以支持 resume,因此应把该文件视为敏感的本地数据。 Flight/debug sidecars 会脱敏 secret-bearing keys,以及持久化 prompt/output 字符串中可识别的 credentials, 但仍不应把 credentials 粘贴到会话中。
Proof receipts 会在 .soba/evidence/ 中增加独立的本地 audit artifact。新 receipts 会递归脱敏、使用 SHA-256
digest sealing,并在 POSIX 系统上以仅所有者可读写的权限保存。soba verify 可以检测篡改,并拒绝与 denied
tool call 关联的 successful evidence。这不会把 workspace 变成 sandbox,也不能代替谨慎的 credential 处理;
redaction 无法识别所有可能的 secret 格式。

