You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
flowchart LR
U[用户] --> A[bash-agent]
A --> L[LLM]
L -->|工具调用与参数| A
A -->|内置工具调用| T[内置工具]
A -->|外部 CLI 调用| X[mcpc / oapi]
T -->|工具结果| A
X -->|结构化结果| A
X --> M[MCP Server]
X --> O[OpenAPI 服务]
M -->|MCP 工具结果| X
O -->|API 响应| X
A -->|下一轮上下文或最终结果| L
A --> R[用户]
flowchart TB
subgraph 核心运行时
A[bash-agent]
S[session / compact / loop 状态]
A --- S
end
subgraph 外部扩展层
C[mcpc]
CS[MCP session / daemon / 连接状态]
O[oapi]
OS[OpenAPI spec / 请求映射]
C --- CS
O --- OS
end
A -->|CLI 参数或 JSON 输入| C
C -->|CLI 输出或 JSON 结果| A
A -->|CLI 参数或 JSON 输入| O
O -->|CLI 输出或 JSON 结果| A
C --> MCP[MCP Server]
O --> API[外部 HTTP API]
Loading
核心运行时不持有 MCP 的 session、daemon、连接或外部 API 的 spec 状态;这些状态由独立工具自行维护,双方通过稳定的 CLI/JSON 契约通信。
背景
我希望
bash-agent的核心保持简洁,专注于当前已经明确的职责:因此不建议直接在
bash-agent内置完整的 MCP 客户端或其他复杂的外部扩展协议。为什么不直接集成 MCP
MCP 集成并不只是增加几个 tool 定义,还需要在 agent 内维护一整套额外的生命周期和状态,例如:
这些能力只有部分用户会使用,但会直接增加核心程序的体积、内存占用、实现复杂度和长期维护成本,也会让核心 agent loop 和外部服务生命周期发生不必要的耦合。
bash-agent更适合作为一个精简、稳定的 agent runtime,而不是同时承担 MCP runtime、连接管理器和外部服务编排器。建议的架构边界
建议将外部扩展能力拆分为独立工具:
mcpc:独立的 MCP CLI,负责 MCP server 连接、session、daemon、stdio 子进程和 Streamable HTTP 等状态。oapi:独立的 OpenAPI CLI,负责外部 HTTP API 的 spec、operation 和请求参数映射。bash-agent:只通过 CLI 调用这些外部工具,不在自身内部维护 MCP 的 state、进程和连接状态。数据流与职责边界
1. 核心 agent loop 与外部扩展
flowchart LR U[用户] --> A[bash-agent] A --> L[LLM] L -->|工具调用与参数| A A -->|内置工具调用| T[内置工具] A -->|外部 CLI 调用| X[mcpc / oapi] T -->|工具结果| A X -->|结构化结果| A X --> M[MCP Server] X --> O[OpenAPI 服务] M -->|MCP 工具结果| X O -->|API 响应| X A -->|下一轮上下文或最终结果| L A --> R[用户]bash-agent只负责 agent loop、LLM 交互和工具结果回传;mcpc与oapi负责各自的外部协议和连接细节。2. 状态归属与调用边界
flowchart TB subgraph 核心运行时 A[bash-agent] S[session / compact / loop 状态] A --- S end subgraph 外部扩展层 C[mcpc] CS[MCP session / daemon / 连接状态] O[oapi] OS[OpenAPI spec / 请求映射] C --- CS O --- OS end A -->|CLI 参数或 JSON 输入| C C -->|CLI 输出或 JSON 结果| A A -->|CLI 参数或 JSON 输入| O O -->|CLI 输出或 JSON 结果| A C --> MCP[MCP Server] O --> API[外部 HTTP API]核心运行时不持有 MCP 的 session、daemon、连接或外部 API 的 spec 状态;这些状态由独立工具自行维护,双方通过稳定的 CLI/JSON 契约通信。
这样可以达到:
bash-agent保持最小体积和较低内存占用。参考实现
这个方向可以参考 busyagent 的实现:
lloydzhou/busyagent#4
该 PR 在 BusyBox 风格的
agentutils中加入了mcpc、oapi(以及轻量的jq),并抽出共享的agent_common层。这样busyagent(可理解为嵌入 BusyBox 的 bash-agent)可以和这些独立 applet 配合使用,同时不需要把 MCP 的完整生命周期塞进 agent 本身。其中
mcpc负责 daemon 和 MCP session,oapi负责 OpenAPI API 调用;agent 侧只需要把它们当作外部 CLI 能力使用。希望讨论的问题
bash-agent核心之外?bash-agent侧是否只需要提供文档和稳定的 CLI 调用方式,而不增加 MCP 专用的内部状态管理?mcpc、oapi与bash-agent之间的最小 CLI/JSON 输出契约?bash-agent中增加一个非常薄的“外部 CLI 工具”入口,还是直接复用现有的 Bash/tool 调用能力即可?非目标
这个 issue 不提议在
bash-agent中实现完整 MCP 协议栈、MCP daemon、长连接管理或外部 API 编排;重点是确认核心边界,以及mcpc+oapi与 agent 之间的组合方式。