参考

安全

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 rmgrep, 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 provesoba 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>.jsonl

Session 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 格式。

本頁目錄