数据截至 (上游 commit 548b159b30ee)
04 — agent 入口与安全护栏
本章讲什么: agent-browser 给 AI 提供了三种用法——纯 CLI、MCP 工具、和把 LLM 直接塞进来的
chat模式。它们共享同一套动作。最后讲两道安全护栏:域名白名单和动作策略。
4.1 三个 agent 入口
同一套动作(第 02 章 execute_command 那 150+ 个 handle_*),对外有三张脸:
| 入口 | 谁用 | 形态 | 文件 |
|---|---|---|---|
| CLI | 任何能跑 shell 的 agent | agent-browser click @e2 | cli/src/main.rs |
| MCP server | 支持 MCP 的客户端(Claude 等) | JSON-RPC over stdio,工具化 | cli/src/mcp.rs |
| chat | 终端里直接对话 | 自然语言 → 内置 LLM 循环 | cli/src/chat.rs、stream/chat.rs |
核心理念:一处实现,三处复用。AGENTS.md 把它列为硬规则——任何 CLI 命令/标志变更,必须同步更新 MCP,且加测试证明两面对齐。
4.2 MCP server:复用 CLI 解析器
MCP(Model Context Protocol)让 agent 客户端以「工具」形式调用 agent-browser。run_mcp(cli/src/mcp.rs:492)起一个 JSON-RPC 服务,stdout 专门留给换行分隔的 JSON-RPC(mcp.rs 文件头注释),分发三个标准方法:
initialize → 握手,回报支持的协议版本 (mcp.rs:608 initialize_result)
tools/list → 列出可用工具 (mcp.rs:610 list_tools)
tools/call → 执行某工具 (mcp.rs:611 call_tool)
关键设计:MCP 工具不另写一套逻辑,而是尽量把调用喂回 CLI 的解析器,再走同一个 daemon。这样 CLI 和 MCP 行为天然一致。
这种一致性不是靠自觉,而是靠测试钉死。cli/src/native/parity_tests.rs 就是专门证明「CLI 面和 MCP 面对同一命令产生一致行为」的回归测试——AGENTS.md 的「CLI/MCP Parity」一节把它写成贡献者必守的纪律。
4.3 chat:把 LLM 装进 CLI 的自动循环
chat 是最「全自动」的入口:用户说人话,内置 LLM 自己决定调哪些 agent-browser 命令。它需要 AI_GATEWAY_API_KEY,否则直接退出(chat.rs:run_chat 开头)。
系统提示怎么约束模型
get_system_prompt(cli/src/native/stream/chat.rs:124)拼出系统提示,几条硬规则很说明设计意图:
(系统提示节选,chat.rs:139 附近)
- 每个浏览器动作都必须真的调用 agent_browser 工具,绝不能假装做了
- 一条命令一次工具调用,不许用 && 或 ; 串联
- 不许加 --json
- 不许跑非 agent-browser 程序
- 截图省略路径(自动内联显示),且不要再用 markdown 图片语法重复贴
这些规则在收紧模型的行动空间:防止它幻觉「我已经点了」、防止它串命令绕过单步审计、防止它执行任意程序。