Claude Code 和 Cursor 的策略执行:Kastra 是怎么做到的
模型层的护栏拦不住 AI 代理的危险操作——Kastra 在动作执行之前加了一个授权层,每条 shell 命令、文件写入、数据库查询都先过策略检查再执行。

Claude Code 删掉了 node_modules 又 force push 了 main 分支,Cursor 把 API key 写进了被追踪的文件——这些操作在模型看来都是"有帮助的",在策略层面是不被允许的。Kastra 的做法是在 AI 动作执行之前插入一个授权层:每条 shell 命令、文件写入、数据库查询、API 请求在到达目标系统之前都先过策略引擎,允许则放行,拒绝则阻断并记录。延迟 p99 低于 1 毫秒。
它解决的根本问题
AI 代理不是聊天机器人,它是一个有凭证的执行者,坐在你的基础设施里,有 token,有权限范围,有执行能力。当这个执行者无法可靠区分来自你的指令和藏在它读取的内容里的指令时(参考 GitLost 提示词注入漏洞),每段不受信任的文本都变成了潜在的命令。
模型层的护栏(prompt 里写"不要 rm -rf")是行为建议,不是访问控制。Kastra 要做的是基础设施层的授权——不管模型怎么"想",不满足策略的操作就是无法执行。
决策流程:每个动作走四步
1. 身份验证:确认是哪个代理发起的请求
2. 范围评估:这个动作是否在该代理的允许动词范围内
3. 护栏匹配:是否命中已定义的策略规则
4. 签名记录:决策结果写入只追加的审计日志(ed25519 签名)
这四步的总耗时 p99 低于 1ms,不影响正常开发体验。
Kastra Edge:管控开发者笔记本上的代理
Kastra Edge 是一个本地守护进程,拦截 Claude Code、Codex CLI、Cursor 终端里的每一条 shell 命令和文件操作。
典型拦截案例:
rm -rf /var/lib/postgres→ 命中destructive.shell策略 → 拒绝fs.write .env.production→ 命中secrets.protect策略 → 拒绝git push --force origin main→ 命中destructive.git策略 → 暂停,等待人工确认
策略用纯文本 DSL 写,版本化管理,像代码一样审查。每个团队成员的笔记本上执行同一套策略。
Kastra Recon:先审计,再执行
如果你还没有部署 Kastra 但想知道你的代理历史上做过什么危险操作——Recon 扫描本地代理历史记录,输出每个风险操作的分类和建议策略草稿。
$ kastra-edge scan
scanning local history · redacting on-device…
✗ secret API key 写入了被追踪的文件
✗ destroy git push --force origin main
✗ prod psql <prod-host> — 读取了 users 表
✗ exfil curl <url> | sh
5 条策略已起草并自验证
这对于"我们还没有代理治理,但想知道从哪里开始"的团队特别有用:先扫历史,看到风险分布,再决定优先执行哪些策略。
和模型护栏、observability 工具的区别
| 维度 | 模型护栏(prompt) | 可观测性工具 | Kastra |
|---|---|---|---|
| 执行时机 | 生成时(事前建议) | 执行后(事后记录) | 执行前(事前决策) |
| 绕过可能性 | 高(prompt 注入可绕过) | 不适用 | 低(基础设施层) |
| 审计价值 | 无强制力的日志 | 有记录但无阻断 | 签名、可重放、可导出 SIEM |
| 适用范围 | 该次会话 | 全局 | 全局,多代理 |
适合哪些场景
- 金融/医疗/合规场景:需要证明每个 AI 动作都经过授权,有可审计的完整记录
- 多人团队使用 Claude Code/Cursor:统一策略,防止不同成员的代理做出不一致的危险操作
- 构建自主代理系统:代理有网络访问、数据库写入、第三方 API 调用权限时,策略引擎是基础设施,不是可选项
对于个人开发者的日常开发,Kastra 的 free tier 覆盖单人使用场景,本地 Edge 安装不需要账号。
常见问题
问:策略配置复杂吗? 答:基础策略是纯文本 DSL,类似写 .gitignore 规则。Recon 扫描之后会自动起草策略草稿,可以在此基础上修改。进阶场景可以用 TypeScript SDK 自定义策略评估逻辑。
问:它会减慢 Claude Code 的响应速度吗? 答:不会。策略决策 p99 低于 1ms,相比 LLM 生成的耗时完全可以忽略。
问:和 Claude 内置的沙箱有什么区别? 答:Claude Code 的沙箱由模型行为决定,可以被有创意的 prompt 绕过(参考 GitLost 案例)。Kastra 的控制在模型输出层之外的基础设施层,不依赖模型遵守规则。