工具、隐私与隔离
Agent 拿到的是你的文件系统、你的凭据和你的 shell。先想清楚哪些数据会离开这台机器,再决定给它多大权限。
数据往哪里流
最常见的形态是 harness 在本地、推理在云端:每次请求把当前上下文发给模型供应商,包括你贴进去的代码、它读到的文件、命令输出。
更重的形态把索引和工作流也放上云,供应商可能因此拿到整个仓库和历史对话。这不是阴谋,是功能决定的——代码检索和长任务都需要服务端状态。
| 形态 | 本地 | 云端 |
|---|---|---|
| CLI agent | 文件、命令执行 | 对话、读到的文件内容 |
| IDE 补全 | 编辑器、缓冲区 | 光标附近代码、上下文 |
| 云端索引 | 少量 | 仓库快照、提交历史 |
使用前读两件事:数据是否用于训练、保留多久。企业内部代码通常有明确禁入规定,个人项目也该避免把 .env、私钥、客户数据放进上下文。敏感仓库直接关掉云端补全和云端索引,只在离线模型上工作。
另一个出口是工具输出:agent 跑一句 env、cat .env,内容就进了上下文并随请求发出,收窄工作目录比指望它自觉更实际。多数工具提供会话导出与用量记录,出事时能查到发过什么。
权限与 yolo mode
默认情况下 harness 会为每次工具调用请求确认,这是最后一道有效闸门。所谓 yolo mode 就是关掉它:
claude --dangerously-skip-permissions命令名字已经把风险写在脸上。跳过确认后,模型的一个错误判断就能删库、改 ~/.ssh/config、把 token 发到外网。它不会恶意,但会自信地做错。
- 开跑前确认在
git仓库、工作区干净、分支是新建的 - 把
rm -rf、git push --force、curl | sh配成 deny 规则 - 别指望弹窗,第十次确认时人已经在无脑按回车
隔离运行
要在无人值守下跑,就把 agent 关进容器或虚拟机。原则是最小暴露:只挂当前项目、不给宿主机凭据、不共享 ~/.ssh 与云平台 token。
docker run --rm -it \
-v "$PWD":/work -w /work \
--cap-drop ALL \
--security-opt no-new-privileges \
my-agent-image| 隔离级别 | 手段 | 挡得住 |
|---|---|---|
| 目录限制 | 工作目录、权限配置 | 误改项目外文件 |
| 容器 | Docker、devcontainer | 改系统配置、装全局包 |
| 虚拟机 | 独立内核 | 容器逃逸、内核级操作 |
| 断网 | --network none | 外传数据,但云端推理不可用 |
注意最后一行:云端模型需要网络,断网只适合本地模型,或者预先装好依赖的离线任务。想两者兼得,就让容器出网但只放行模型 API,其余流量走代理拒绝。
容器里默认没有你的 shell 历史和 SSH agent,别把 ~/.ssh、~/.aws、~/.config/gh 挂进去。也别挂 Docker socket,那等于让容器里的进程直接操纵宿主机。
本地模型
开源 agent(如 opencode)配开源模型可以完全离线,数据不出机器。现实约束是硬件:能跑前沿模型的机器很贵,消费级显卡上的模型在长任务、工具调用稳定性上仍有明显差距。
务实的做法是分层:敏感仓库用本地小模型做补全和检索,非敏感任务用云端强模型。本地方案的运维成本也不低,量化、显存、并发、上下文长度都得自己调。
选型
IDE 内置 agent 胜在与补全、诊断共享上下文;CLI agent 胜在能跑完整命令、能进 CI、能用 git worktree 并行。Claude Code、Codex 是闭源产品,opencode 是开源实现,能力与生态各有取舍。
别把约定只写进某个工具的私有配置,AGENTS.md 这类文件是跨工具的事实标准,换工具时成本最低。选工具先回答三个问题:能否限制可写目录、能否关掉联网与索引、日志落在哪里。试用一周再决定,别一上来就把团队流程绑死在某个产品上。