[中文正文内容]

coder / agentapi Public

用于 Claude Code, Goose, Aider 和 Codex 的 HTTP API

License

MIT license

coder/agentapi

main BranchesTags

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, AiderCodex

你可以使用 AgentAPI:

Quickstart

  1. 通过以下任一方式安装 agentapi
    • releases page 下载最新的 release binary
    • 或者从源代码构建:
go install github.com/coder/agentapi@latest
  1. 验证安装:
agentapi --help

在 macOS 上,如果系统提示无法验证 binary,请转到 System Settings -> Privacy & Security,单击“Open Anyway”,然后再次运行该命令。

  1. 运行一个 Claude Code server (假设 claude 已安装在你的系统上并且在 PATH 中):
agentapi server -- claude

如果你收到一个错误,提示 claude 不在 PATH 中,但你可以从 shell 运行它,请尝试 which claude 获取完整路径并使用它代替。

  1. 向 agent 发送消息:
curl -X POST localhost:3284/message \
 -H "Content-Type: application/json" \
 -d '{"content": "Hello, agent!", "type": "user"}'
  1. 获取会话历史记录:
curl localhost:3284/messages
  1. 尝试 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:

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:

为了从 terminal output 中解析单独的 messages,我们采取以下步骤:

  1. 在发送任何 user messages 之前的初始 terminal output 被视为 agent 的第一个 message。
  2. 当 user 通过 API 发送 message 时,在发送任何 keystrokes 之前会拍摄 terminal 的快照。
  3. 然后将 user message 提交给 agent。 从此以后,任何时候 terminal output 发生变化,都会拍摄一个新的快照。 将其与初始快照进行 diff,并且任何出现在初始内容下方的新文本都被视为 agent 的下一个 message。
  4. 如果在发送新的 user message 之前 terminal output 再次发生变化,则会更新 agent message。

这使我们可以将 terminal output 分成一系列 messages。

Removing TUI elements from agent messages

每个 agent message 都包含一些对最终 user 没有用的额外位:

AgentAPI 会自动删除这些内容。

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 之间切换而无需更改他们的代码。