11:05Maximilian Schwarzmüller
Log in to leave a comment
No posts yet
编辑器代写代码的时代已经结束了。现在,像 Claude Code 这样的 Agent 可以直接打开终端、遍历文件系统并修改代码。这虽然方便,但同时也令人不寒而栗。一次提示词注入(Prompt Injection)就可能导致 .env 文件或 SSH 密钥泄露。我们需要具体的控制方法,在赋予 Agent 自主性的同时,确保它不会越界。
Agent 的天性是为了执行命令而扫描整个项目。如果放任不管,它极有可能读取到敏感的配置信息。最可靠的防御措施是在项目根目录下创建一个 Agent 专用规则文件。
CLAUDE.md 或 .agent-rules 文件。.env、~/.ssh、~/.aws/credentials 等路径,必须写入 deny 规则,让 Agent 根本无法窥视。--allowedTools 选项,仅允许必要的功能。这种方式可以只激活 Bash、Read、Write 等最基础的工具。在 Claude Code 的权限模式中,使用要求所有写入操作均需用户批准的 Default 模式,可以从物理上阻断源代码泄露的风险。仅通过一个配置文件,就能充分防止 Agent 在未经许可的情况下将环境变量发送到外部的事故。
以 Agent 为中心的工具会自行制定并执行计划。问题出在当它陷入逻辑错误时。找不到解决方案的 Agent 可能会陷入无限循环并不断重复 API 调用,瞬间产生数十美元的账单。根据 Anthropic 的研究数据,仅在提示词中设置明确的终止条件(Exit Criteria),就能将运行时间减少多达 62%。
为了防止费用飙升,必须在提示词中直接设计“断路器”:
npm test 或通过特定的单元测试作为结束的绝对标准。.cursorrules 文件中使用 Glob 模式,限制 Agent 仅读取特定目录规则(如 src/api/**/*),可以防止不必要的 Token 浪费。通过设置这些终止关卡,可以抑制因指令模糊而产生的 Token 消耗,每月平均可节省 40% 以上的 API 费用。
Agent 直接修改本地文件的方式虽然快,但很危险。因为未经验证的代码可能会破坏主分支。Shopify 工程团队在运行其 Agent 工具 Sidekick 时,引入了通过独立模型对结果进行交叉验证的方法。我们也应该分离出 Agent 专属的工作区域。
最干净的方法是使用 git worktree。创建一个专门用于 Agent 会话的独立目录和分支并交付任务。完成后,要求它运行 git diff 并提交摘要报告,并使用 Playwright 或 Vitest 等工具自动运行单元测试。通过这个过程,可以在减少 70% 人工评审时间的同时,确保只有经过验证的代码才会合并到主分支。
Agent 编写代码的速度比人类打字快得多。此时,如果开启了 VS Code 的 editor.formatOnSave 功能,文件格式可能会在 Agent 编写代码的过程中被强制更改,从而导致文本匹配错误。这就像是工具被自己的脚绊倒了。
此外,Agent 运行的非交互式 Shell 往往无法读取 .zshrc 中设置的环境变量,导致工具运行失败。
.vscode/settings.json 中,将 editor.formatOnSave 设置为 false。.zshrc 移至 .zshenv 文件,因为无论 Shell 如何启动,该文件都会被加载。Husky 配置 Pre-commit Hook,使得只有在 Agent 完成工作并提交时,Linter 和 Formatter 才会运行。如果你不想看到 Agent 因为找不到环境变量而傻傻站着,就必须从 Shell 设置开始重新检查。
| 设置分类 | 文件名 | 建议设置内容 | Agent 可见性 |
|---|---|---|---|
| 全局环境变量 | .zshenv | PATH, API_KEY, SDK 路径 | 在所有会话中加载 |
| 交互式设置 | .zshrc | alias, prompt, theme | 运行 Agent 时可能被忽略 |
| 登录设置 | .zprofile | 系统全局初始化脚本 | 仅在登录 Shell 中有效 |