Show HN: AgentAPI - 用于 Claude Code, Goose, Aider 和 Codex 的 HTTP API
[中文正文内容]
coder / agentapi Public
用于 Claude Code, Goose, Aider 和 Codex 的 HTTP API
License
coder/agentapi
Folders and files
Name| Name| Last commit message| Last commit date ---|---|---|---
Latest commit
History
119 Commits .github/workflows| .github/workflows .vscode| .vscode chat| chat cmd| cmd lib| lib .gitignore| .gitignore LICENSE| LICENSE README.md| README.md go.mod| go.mod go.sum| go.sum main.go| main.go openapi.json| openapi.json View all files
Repository files navigation
AgentAPI
通过 HTTP API 控制 Claude Code, Goose, Aider 和 Codex。
你可以使用 AgentAPI:
- 构建一个用于 coding agents 的统一聊天界面
- 作为 MCP 服务器中的后端,允许一个 agent 控制另一个 coding agent
- 创建一个工具,向 agent 提交 pull request 评论
- 以及更多!
Quickstart
- 通过以下任一方式安装
agentapi
:- 从 releases page 下载最新的 release binary
- 或者从源代码构建:
go install github.com/coder/agentapi@latest
- 验证安装:
agentapi --help
在 macOS 上,如果系统提示无法验证 binary,请转到
System Settings -> Privacy & Security
,单击“Open Anyway”,然后再次运行该命令。
- 运行一个 Claude Code server (假设
claude
已安装在你的系统上并且在PATH
中):
agentapi server -- claude
如果你收到一个错误,提示
claude
不在PATH
中,但你可以从 shell 运行它,请尝试which claude
获取完整路径并使用它代替。
- 向 agent 发送消息:
curl -X POST localhost:3284/message \
-H "Content-Type: application/json" \
-d '{"content": "Hello, agent!", "type": "user"}'
- 获取会话历史记录:
curl localhost:3284/messages
- 尝试 https://coder.github.io/agentapi/chat 上的演示 web 聊天界面。 即使它托管在 GitHub Pages 上,该聊天也会连接到你运行在
localhost:3284
上的 AgentAPI server。
如果你在 Safari 上连接到 demo chat 时遇到问题,很可能是因为它阻止了仅 HTTP 连接到 localhost。 该 demo 可能会在不同的浏览器中工作。
CLI Commands
agentapi server
运行一个 HTTP server,让你控制一个 agent。 如果你想使用其他参数启动一个 agent,请在 --
标志后传递完整的 agent 命令。
agentapi server -- claude --allowedTools "Bash(git*) Edit Replace"
你也可以使用 agentapi
运行 Aider 和 Goose agents:
agentapi server -- aider --model sonnet --api-key anthropic=sk-ant-apio3-XXX
agentapi server -- goose
OpenAPI schema 位于 openapi.json。 默认情况下,server 在端口 3284 上运行。 此外,server 在 http://localhost:3284/openapi.json 上公开相同的 OpenAPI schema,并在 http://localhost:3284/docs 上的文档 UI 中公开可用的 endpoints。
有 4 个 endpoints:
- GET
/messages
- 返回与 agent 的会话中的所有 messages 的列表 - POST
/message
- 向 agent 发送 message。 当返回 200 response 时,AgentAPI 检测到 agent 开始处理该 message - GET
/status
- 返回 agent 的当前状态,可以是“stable”或“running” - GET
/events
- 来自 agent 的 events 的 SSE stream:message 和 status 更新
agentapi attach
附加到正在运行的 agent 的 terminal session。
agentapi attach --url localhost:3284
按 ctrl+c
从 session 中分离。
How it works
AgentAPI 运行一个 in-memory terminal emulator。 它将 API 调用转换为适当的 terminal keystrokes,并将 agent 的 outputs 解析为单独的 messages。
Splitting terminal output into messages
有两种类型的 messages:
- User messages:由 user 发送到 agent
- Agent messages:由 agent 发送到 user
为了从 terminal output 中解析单独的 messages,我们采取以下步骤:
- 在发送任何 user messages 之前的初始 terminal output 被视为 agent 的第一个 message。
- 当 user 通过 API 发送 message 时,在发送任何 keystrokes 之前会拍摄 terminal 的快照。
- 然后将 user message 提交给 agent。 从此以后,任何时候 terminal output 发生变化,都会拍摄一个新的快照。 将其与初始快照进行 diff,并且任何出现在初始内容下方的新文本都被视为 agent 的下一个 message。
- 如果在发送新的 user message 之前 terminal output 再次发生变化,则会更新 agent message。
这使我们可以将 terminal output 分成一系列 messages。
Removing TUI elements from agent messages
每个 agent message 都包含一些对最终 user 没有用的额外位:
- message 开头的 user 的 input。 Coding agents 通常会将 input 回显给 user,使其在 terminal 中可见。
- message 末尾的 input box。 这是 user 通常输入他们 input 的地方。
AgentAPI 会自动删除这些内容。
- 对于 user input,我们删除包含 user 上一个 message 中的文本的行。
- 对于 input box,我们查找 message 末尾包含常见 TUI 元素(例如
>
或------
)的行。
What will happen when Claude Code, Goose, Aider, or Codex update their TUI?
将 terminal output 分成一系列 messages 应该仍然有效,因为它不依赖于 TUI 结构。 可能需要更新用于删除额外位的逻辑以考虑新元素。 AgentAPI 仍然可用,但一些额外的 TUI 元素可能会在 agent messages 中变得可见。
Roadmap
根据反馈,我们正在考虑以下功能:
Long-term vision
在短期内,AgentAPI 解决了如何以编程方式控制 coding agents 的问题。 随着时间的推移,我们希望看到主要的 agents 发布适当的 SDK。 有人可能会想知道那时是否仍然需要 AgentAPI。 我们认为这取决于 agent 供应商是否决定标准化一个通用的 API,或者每个供应商都坚持使用专有格式。
在前一种情况下,我们将弃用 AgentAPI,转而使用官方 SDK。 在后一种情况下,我们的目标是将 AgentAPI 打造成为一个通用的 adapter,用于控制任何 coding agent,因此使用 AgentAPI 的开发人员可以在 agents 之间切换而无需更改他们的代码。