AI Agent又删我数据库?我直接写了个安全拦截器(附项目源码)

AI Agent又删我数据库?我直接写了个安全拦截器

当我用Claude Code开发时,AI Agent两次清掉了我的本地数据库。第一次我以为是意外,第二次我发现这是系统性问题。于是我想:能不能做一个工具,在Agent执行危险命令前帮我拦一下?结果这个"自救"项目变成了一套完整的AI Agent安全拦截框架。分享给同样被Agent坑过的朋友们。


一、第一次:我以为是个意外

我在用Claude Code开发一个客服类的agent项目。那天我让Agent同步一下数据库结构。

它执行了:

css 复制代码
npx prisma migrate reset --force

表结构同步完成。我打开数据库客户端,本地开发库的数据全没了

半个月的测试数据、调试记录、模拟订单,瞬间蒸发。

"以后不要用--force写入铁律中禁止执行",我在对话里叮嘱它。(但是我并没有去检查到底有没有写入.CLAUDE中)

"好的,我记住了",它答应得诚恳。

二、第二次:我发现Agent的记忆是幻觉

一周后,另一个功能模块,另一个上下文。

它又执行了同样的命令。本地数据库再次被清空。

这次我认真了。我让Agent把禁令写进项目记忆、写进对话开头、写进系统提示,写到.claude.md中。并把所有文件都仔仔细细检查了确保ai都记上了。

突然做上述事情的时候我明白了一件事:

AI Agent没有"谨慎"这种情感。它只有概率。

你说的话它"听"了,但上下文一换、任务一复杂、token压力大的时候,"遵守禁令"的概率就下降了。它不是故意不听话,它是注意力缺失------和人类一样,只是没有人类的谨慎。

而且Agent的"记忆"是幻觉: - 当前session答应的事,新session重置 - 复杂任务里,禁令被上下文挤到后面 - 同样的命令换条路径执行,它"没认出来"

我不能把自己的数据安全交给一个黑盒的概率。

而且这是第二次了。第一次我以为是意外,第二次我明白了这是系统性问题。

然后我开始想:这种痛点在各种Agent CLI里都有。Hermes、OpenCode、Codex CLI......我自己就用 Claude Code + Hermes,那我不是要配两套安全规则?N个平台就要N套代码,维护地狱。


三、通用安全规则?救不了我

Claude Code有内置安全。但它们的逻辑是防"常识性危险":

危险操作 通用安全 我的日常
rm -rf / ✅ 拦截 基本遇不到
prisma migrate reset --force 不认识 每周可能遇到
docker system prune -a 不认识 清理环境常用
npx prisma db push --force 不认识 开发同步常用

通用安全防的是"所有人都能看出来的危险"。但我的技术栈里------Prisma、Docker、NestJS------那些真正会毁掉半天工作的操作,它根本看不见。

而且每个开发者的技术栈五花八门。你用Prisma,他用Django ORM,我用TypeORM------通用安全不可能覆盖所有人的具体工具链

我需要的是不管Agent记不记得,命令执行前必须停一下,让我看一眼


四、这不是我一个人的问题

2026年4月27日,开发者 jeremyccrane 的AI Agent在生产环境执行了 DROP DATABASE,数据永久丢失。HN 450+赞同,620+评论。

我的两次事故都是在本地开发环境,数据还能重建。但他的事故是在生产环境。 两件事指向同一个问题:AI Agent的权限边界怎么控制?


五、Aegis是什么

我做了个工具叫 Aegis (希腊神话里的神盾)。它是一个AI Agent安全拦截器 ,核心思路是进程级Hook

c 复制代码
AI Agent (Claude Code/Hermes/Codex)
    │
    ▼ stdin/stdout Hook
Aegis 拦截进程
    │
    ├─ 匹配你的自定义规则
    ├─ 命中 → WebSocket推送到前端 → 你点允许/拒绝
    └─ 没命中 → 直接放行

进程级Hook是Agent CLI的"公共插座" 。不管插的是谁,Aegis都能拦截。一个命令aegis start,全搞定。

为什么不做Skill/Plugin?因为Agent CLI越来越多,N个平台就要N套代码,维护地狱。进程级Hook一套搞定所有。

Aegis界面截图


六、Aegis的规则系统

Aegis内置了6套规则覆盖常见场景,但真正重要的是你自己写的规则

因为每个人的技术栈五花八门: - 我用Prisma + NestJS + Docker - 你用Django + PostgreSQL + K8s - 他用Rust + SQLite + Nix

通用规则不可能知道你的具体危险在哪里。

我的Prisma规则

yaml 复制代码
# ~/.aegis/rules/my-prisma.yaml
name: "my-prisma"
version: "1.0"
rules:
  - id: my/prisma-migrate-reset
    description: "migrate reset --force 会清空数据库数据"
    action: review
    reason: "这个命令会删除所有数据并重新应用迁移"
    conditions:
      binary: "npx"
      argumentPatterns: ["prisma.*migrate.*reset", "--force"]

  - id: my/prisma-db-push-force
    description: "db push --force 直接覆盖结构"
    action: review
    reason: "强制推送可能丢失未同步的schema变更"
    conditions:
      binary: "npx"
      argumentPatterns: ["prisma.*db.*push", "--force"]

改完规则文件,不用重启:

复制代码
aegis rules reload

查看当前有的规则

复制代码
aegis rules list

创建rule文件,可以让自己的agent根据文件和自己项目的技术栈来创建编写需要阻拦的规则

csharp 复制代码
# 创建自己命名的规则文件
aegis rules new your-file

你自己的规则,优先级最高。 相同id的规则会覆盖内置规则。


七、Aegis的核心设计

1. 实时审批界面

Vue3前端,WebSocket实时推送:

  • 看到Agent正在执行什么命令
  • 一键允许 / 拒绝
  • 30秒超时自动拒绝(防止你不在时Agent悄悄跑)

整体流程gif展示

2. 进程级Hook:跨平台拦截

Aegis不依赖任何Agent CLI的Plugin/Skill接口,而是直接Hook进程的stdin/stdout:

css 复制代码
Claude Code       ──┐
Hermes(计划中)   ───────┼──→ Aegis拦截进程 ──→ 规则匹配 ──→ 审批弹窗
Codex CLI(计划中)────┘

为什么用进程级Hook?

方案 覆盖范围 维护成本
Claude Code Plugin 仅Claude Code
Hermes Skill 仅Hermes
进程级Hook 所有Agent CLI 一次搞定

一个aegis start,Claude Code、Hermes、Codex、OpenCode全拦截。

3. 自定义规则:你的技术栈你做主

Aegis内置6套通用规则,但真正救命的是你自己写的规则

每个人的技术栈五花八门:

  • 我用Prisma + NestJS + Docker
  • 你用Django + PostgreSQL + K8s
  • 他用Rust + SQLite + Nix

通用规则不可能知道你的具体危险在哪里。

YAML配置,热重载,优先级最高:

yaml 复制代码
# ============================================================
# Aegis 自定义规则示例 (Selector DSL v2.0)
# 将此文件复制到 ~/.aegis/rules/ 并重命名(去掉 example- 前缀)
# 修改后运行 `aegis rules reload` 或重启服务生效
# 完整 DSL 文档: docs/rules-authoring.md
# ============================================================

name: "my-custom-rules"
version: "2.0"

rules:
  # ----------------------------------------------------------
  # 示例1: 禁止删除指定目录(block = 直接拒绝,无法审批)
  # ----------------------------------------------------------
  - id: custom/rm-data-dir
    description: "禁止删除 data/ 目录"
    example: "rm -rf data/"
    category: "filesystem"
    severity: "block"
    action: "block"
    reason: "data/ 目录包含重要数据,不可删除"
    selector:
      binary: rm
      arguments:
        - pattern: "data/"

  # ----------------------------------------------------------
  # 示例2: 生产部署需要审批(review = 弹出审批弹窗)
  # ----------------------------------------------------------
  - id: custom/deploy-prod
    description: "生产环境部署需人工确认"
    example: "sh deploy.sh prod"
    category: "deploy"
    severity: "error"
    action: "review"
    reason: "部署到生产环境前需要人工确认"
    selector:
      binary: sh
      arguments:
        - pattern: "deploy.*prod"
bash 复制代码
aegis rules reload  # 改完即生效,不用重启

八、我现在怎么开发

  1. aegis start 启动(后台挂着)
  2. 打开多个Claude Code,正常开发
  3. Agent要执行prisma migrate reset --force
  4. Aegis拦截,浏览器弹窗
  5. 我看一眼: "哦这次确实需要reset,允许""等等,这会把我的测试数据清掉,拒绝"
  6. Agent根据结果继续或报错

我不再依赖Agent"记住"什么。我依赖的是:危险操作必须过我这一关。


九、未来规划

多agent支持

  • 目前就写了claudeCode的hook,后续写hermes、codex、openClaw的hook慢慢都支持上
  • window环境的hook支持 目前开源版本就mac环境

Session记录

  • 完整的执行日志:Agent做了什么、Aegis拦了什么、我批了什么
  • 时间线回放

代码Diff链

  • Agent修改前自动保存diff快照
  • 不满意一键回滚,不用git rebase
  • 确认对了再干净地commit

为什么不用git commit解决? 我不想每个Agent小改动都commit,我不想git历史全是"fix by AI" × 20。我要commit之前的缓冲带


十、一句话

AI Agent的官方安全防的是"所有人都能看出来的危险"。Aegis防的是"只有你的技术栈里的人才懂的暗礁"。

Agent不是故意害你。它只是黑盒,会走神。

Aegis就是那张网:在它走神的时候,帮你拦一下。


MIT 开源:github.com/yezannnnn/a...

arduino 复制代码
npm i -g ai-aegis
aegis setup
aegis start

然后正常用你的Agent。危险来时,Aegis会叫你。

相关推荐
GitCode官方3 小时前
头号 Builder 集结|出海 Agent 开造!大疆 Pocket4 等你赢!
人工智能·agent·atomgit
雪碧聊技术3 小时前
上午题_信息安全
安全
DreamWear3 小时前
Claude Context:让 AI 编程助手真正"看见"整个代码库
人工智能·agent
一拳一个娘娘腔3 小时前
入门必看:CVE-2026-31431(Copy Fail)漏洞全解析,700字节脚本拿下Root权限
linux·安全
DreamWear3 小时前
Agent Skills:给 AI 编码代理装上高级工程师的工作纪律
人工智能·agent
欧雷殿3 小时前
AI 原生团队搭建:一人也能做人生 CEO
后端·agent·aiops
@insist1234 小时前
信息安全工程师-漏洞管理核心认知体系必考点解析
网络·安全·软考·信息安全工程师·软件水平考试
深海鱼在掘金4 小时前
深入浅出 LangChain —— 第十四章:可观测性与生产运维
人工智能·langchain·agent
阿荻在肝了5 小时前
Agent学习八:LangGraph学习-小结
python·学习·agent