Goose 是 Block(原 Square)开发的 Rust 编码 Agent 框架,采用 crate 模块化架构。核心设计理念:Extension 驱动 + ACP 协议 + 多层安全。
crates/goose/ — 核心 agent 逻辑、对话管理、provider 抽象crates/goose-cli/ — CLI 入口、session 管理、终端交互crates/goose-mcp/ — MCP 协议集成、server runner、自动可视化crates/goose-acp-macros/ — ACP 宏(自动派生 ACP trait)与常见认知不同,Goose 不是 Go 语言,而是纯 Rust 实现,利用 tokio 异步运行时。
核心循环在 agent.rs 的 reply() 和 reply_internal() 方法:
reply()(L1355)— 入口,处理 agent 事件流reply_internal()(L1576)— 内部循环,流式处理 LLM 响应BoxStream<AgentEvent>,全流式架构支持多种模式:Chat(纯对话)、Plan(规划不执行)、Code(自动执行)。Mode 通过 PromptManager 注入 system prompt。
crates/goose/src/acp/,提供 agent 间标准化通信。acp/server.rs — ACP 服务器实现acp/transport/ — HTTP + WebSocket 双传输层acp/tools/ — ACP 工具注册与调用acp/providers/ — Provider 抽象(支持多 LLM)goose-acp-macros 自动派生 ACP trait,减少样板代码ACP 使得 Goose agent 可以作为独立服务运行,被其他 agent 或客户端调用——这是走向 multi-agent 编排的基础。
Goose 的安全系统是其架构亮点,包含四层检测:
security/ 目录下实现permission_judge.rs — LLM 判断工具读写性质Goose 的 Extension 是动态加载的工具包,类似于 OpenClaw 的 Skill:
定义在 context_mgmt/mod.rs:
DEFAULT_COMPACTION_THRESHOLD = 0.8(80% 上下文窗口)定义在 crates/goose/src/prompts/system.md(43 行 Jinja 模板):
prompt_manager.rs 动态构建 system prompt:
render_template()subagent_handler.rs 实现子任务委派:
SubagentRunParams — 配置子 agent 运行参数run_subagent_task() — 异步执行子任务return_last_only 模式(只返回最后一条)CancellationToken 支持取消on_message 回调实时上报进度TaskConfig、max_turns 限制crates/goose/src/agents/agent.rs — 主循环 reply()/reply_internal()crates/goose/src/prompts/system.md — System prompt 模板crates/goose/src/prompt_manager.rs — Prompt 动态构建crates/goose/src/acp/ — ACP 协议实现crates/goose/src/context_mgmt/mod.rs — 自动 compactioncrates/goose/src/permission/ — 权限与安全系统crates/goose/src/agents/subagent_handler.rs — 子 agent 系统crates/goose-cli/src/session/mod.rs — CLI session 管理crates/goose-mcp/src/ — MCP 集成与自动可视化