
一、拦截规则核心约束凭据不得通过以下三种通道传递通用 shell 参数git push https://tokenhost/repo临时文件 / heredoc$(cat EOF...)、/tmp/中转环境变量CREDENTIALvalue command检测器基于传递方式做启发式匹配不解析内容本身。即使参数里没有真实凭据只要命中可疑通道模式一律拦截。二、触发场景操作是否被拦原因git commit -m 短消息✅ 放行直接字面量参数git commit -m $(cat EOF...)❌ 拦截子 shell 展开 heredoc → 触发临时文件检测git commit -F /tmp/msg.txt❌ 拦截从临时文件读取内容CUSTOM_AUTHxxx git push❌ 拦截环境变量传凭据curl -H Authorization: Bearer xxx url❌ 拦截header 参数含认证信息最常见的误报git commit用 heredoc 写多行 message。这是开发者习惯写法但 heredoc 在 shell 内部的展开机制被检测器归类为临时文件通道。三、拦截后的行为命令不会执行AtomCode 返回错误[Error: Tool call blocked by security policy: credentials cannot be passed through generic shell arguments, temporary files, or environment variables]同时不回显被拦命令的完整内容防止凭据二次泄露弹出 Policy Intervention 恢复菜单Security decision required 1. I completed it externally ← 在外部终端手动执行后确认 2. Skip this step ← 跳过不执行 3. View safe instructions ← 查看安全操作指引 4. End task ← 结束当前任务这是fix(security): offer safe recovery after credential blocks2026-08-11引入的恢复合约在 v5.0.6 合并窗口定型。四、绕过方案方案 A改写命令形式推荐把 heredoc 改成直接多行字符串# ❌ 被拦 git commit -m $(cat EOF add vps module Co-Authored-By: ... EOF ) ✅ 放行 git commit -m add vps module Co-Authored-By: ...方案 B本机终端执行AtomCode 官方推荐路径。在独立终端里操作完全不受此策略约束。方案 C拆分操作先写文件再用git commit -F本机终端可行AtomCode 内仍可能被拦。五、版本演进时间线版本时间安全变更v5.02026-07-17审批增强地基安全模型主干定型v5.0.42026-08-04无人值守会话默认拒绝高风险 bashv5.0.52026-08-07含 safety-stop / ledger history文档锚点证实v5.0.62026-08-11~12credential-block 恢复合约定型完整拦截恢复菜单上线结论凭据通道拦截的启发式检测大概率在 v5.0.5 引入而你现在看到的完整拦截→恢复菜单→不回显体验是在 v5.0.62026-08-11的fix(security)系列 commit 中定型的。六、设计意图这是一条纵深防御策略保守优先宁可误拦正常操作不可漏放真实凭据通道检测而非内容检测不解析参数内容只看传递方式——避免凭据出现在日志/对话记录中不回显被拦命令不展示防止二次泄露引导外部操作强制用户去自己控制的终端完成敏感操作一句话总结AtomCode 用启发式规则封死了 AI 通过间接通道泄露凭据的所有路径代价是偶尔误拦正常的开发操作。