Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ Repo: https://github.com/openclaw/acpx

- Agents/built-ins: bump the default Claude ACP adapter range to `@agentclientprotocol/claude-agent-acp@^0.37.0`. Thanks @trumpyla.
- Runtime/embedding: surface cost, token usage breakdowns, and advertised command metadata on runtime status/events. Thanks @DaniAkash.
- Agents/built-ins: add `fast-agent` as a built-in fast-agent ACP adapter via `uvx fast-agent-mcp acp`.

### Breaking

Expand Down
37 changes: 19 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -341,24 +341,25 @@ unless `agentSessionId` is present.

Built-ins:

| Agent | Adapter | Wraps |
| ---------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
| `pi` | [pi-acp](https://github.com/svkozak/pi-acp) | [Pi Coding Agent](https://github.com/mariozechner/pi) |
| `openclaw` | native (`openclaw acp`) | [OpenClaw ACP bridge](https://github.com/openclaw/openclaw) |
| `codex` | [codex-acp](https://github.com/agentclientprotocol/codex-acp) | [Codex CLI](https://codex.openai.com) |
| `claude` | [claude-agent-acp](https://github.com/agentclientprotocol/claude-agent-acp) | [Claude Code](https://claude.ai/code) |
| `gemini` | native (`gemini --acp`) | [Gemini CLI](https://github.com/google/gemini-cli) |
| `cursor` | native (`cursor-agent acp`) | [Cursor CLI](https://cursor.com/docs/cli/acp) |
| `copilot` | native (`copilot --acp --stdio`) | [GitHub Copilot CLI](https://docs.github.com/copilot/how-tos/copilot-chat/use-copilot-chat-in-the-command-line) |
| `droid` | native (`droid exec --output-format acp`) | [Factory Droid](https://www.factory.ai) |
| `iflow` | native (`iflow --experimental-acp`) | [iFlow CLI](https://github.com/iflow-ai/iflow-cli) |
| `kilocode` | `npx -y @kilocode/cli acp` | [Kilocode](https://kilocode.ai) |
| `kimi` | native (`kimi acp`) | [Kimi CLI](https://github.com/MoonshotAI/kimi-cli) |
| `kiro` | native (`kiro-cli-chat acp`) | [Kiro CLI](https://kiro.dev) |
| `opencode` | `npx -y opencode-ai acp` | [OpenCode](https://opencode.ai) |
| `qoder` | native (`qodercli --acp`) | [Qoder CLI](https://docs.qoder.com/cli/acp) |
| `qwen` | native (`qwen --acp`) | [Qwen Code](https://github.com/QwenLM/qwen-code) |
| `trae` | native (`traecli acp serve`) | [Trae CLI](https://docs.trae.cn/cli) |
| Agent | Adapter | Wraps |
| ------------ | --------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
| `pi` | [pi-acp](https://github.com/svkozak/pi-acp) | [Pi Coding Agent](https://github.com/mariozechner/pi) |
| `openclaw` | native (`openclaw acp`) | [OpenClaw ACP bridge](https://github.com/openclaw/openclaw) |
| `codex` | [codex-acp](https://github.com/agentclientprotocol/codex-acp) | [Codex CLI](https://codex.openai.com) |
| `claude` | [claude-agent-acp](https://github.com/agentclientprotocol/claude-agent-acp) | [Claude Code](https://claude.ai/code) |
| `gemini` | native (`gemini --acp`) | [Gemini CLI](https://github.com/google/gemini-cli) |
| `cursor` | native (`cursor-agent acp`) | [Cursor CLI](https://cursor.com/docs/cli/acp) |
| `copilot` | native (`copilot --acp --stdio`) | [GitHub Copilot CLI](https://docs.github.com/copilot/how-tos/copilot-chat/use-copilot-chat-in-the-command-line) |
| `droid` | native (`droid exec --output-format acp`) | [Factory Droid](https://www.factory.ai) |
| `fast-agent` | `uvx fast-agent-mcp acp` | [fast-agent](https://fast-agent.ai) |
| `iflow` | native (`iflow --experimental-acp`) | [iFlow CLI](https://github.com/iflow-ai/iflow-cli) |
| `kilocode` | `npx -y @kilocode/cli acp` | [Kilocode](https://kilocode.ai) |
| `kimi` | native (`kimi acp`) | [Kimi CLI](https://github.com/MoonshotAI/kimi-cli) |
| `kiro` | native (`kiro-cli-chat acp`) | [Kiro CLI](https://kiro.dev) |
| `opencode` | `npx -y opencode-ai acp` | [OpenCode](https://opencode.ai) |
| `qoder` | native (`qodercli --acp`) | [Qoder CLI](https://docs.qoder.com/cli/acp) |
| `qwen` | native (`qwen --acp`) | [Qwen Code](https://github.com/QwenLM/qwen-code) |
| `trae` | native (`traecli acp serve`) | [Trae CLI](https://docs.trae.cn/cli) |

`factory-droid` and `factorydroid` also resolve to the built-in `droid` adapter.

Expand Down
9 changes: 9 additions & 0 deletions agents/FastAgent.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# FastAgent

- Built-in name: `fast-agent`
- Default command: `uvx fast-agent-mcp acp`
- Upstream: https://fast-agent.ai/acp

`acpx fast-agent` starts fast-agent through its ACP entrypoint. It requires `uvx` on `PATH`.

Configure model/provider settings through fast-agent environment variables, fast-agent configuration, or an `acpx` agent override with additional `fast-agent-mcp acp` arguments.
2 changes: 2 additions & 0 deletions agents/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ Built-in agents:
- `cursor -> cursor-agent acp`
- `copilot -> copilot --acp --stdio`
- `droid -> droid exec --output-format acp` (`factory-droid` and `factorydroid` also resolve to `droid`)
- `fast-agent -> uvx fast-agent-mcp acp`
- `iflow -> iflow --experimental-acp`
- `kilocode -> npx -y @kilocode/cli acp`
- `kimi -> kimi acp`
Expand All @@ -25,6 +26,7 @@ Harness-specific docs in this directory:
- [Claude](Claude.md): built-in `claude -> npx -y @agentclientprotocol/claude-agent-acp`
- [Copilot](Copilot.md): built-in `copilot -> copilot --acp --stdio`
- [Droid](Droid.md): built-in `droid -> droid exec --output-format acp` with `factory-droid` and `factorydroid` aliases
- [fast-agent](FastAgent.md): built-in `fast-agent -> uvx fast-agent-mcp acp`
- [Cursor](Cursor.md): built-in `cursor -> cursor-agent acp`
- [Gemini](Gemini.md): built-in `gemini -> gemini --acp`
- [iFlow](Iflow.md): built-in `iflow -> iflow --experimental-acp`
Expand Down
47 changes: 29 additions & 18 deletions docs/agents.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,24 +9,25 @@ The default agent for top-level commands like `acpx exec …` and `acpx prompt

## Built-in registry

| Agent | Adapter command | Wraps |
| ---------- | ---------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
| `pi` | `npx pi-acp` | [Pi Coding Agent](https://github.com/mariozechner/pi) |
| `openclaw` | `openclaw acp` | [OpenClaw ACP bridge](https://github.com/openclaw/openclaw) |
| `codex` | `npx -y @agentclientprotocol/codex-acp` | [Codex CLI](https://codex.openai.com) |
| `claude` | `npx -y @agentclientprotocol/claude-agent-acp` | [Claude Code](https://claude.ai/code) |
| `gemini` | `gemini --acp` | [Gemini CLI](https://github.com/google/gemini-cli) |
| `cursor` | `cursor-agent acp` | [Cursor CLI](https://cursor.com/docs/cli/acp) |
| `copilot` | `copilot --acp --stdio` | [GitHub Copilot CLI](https://docs.github.com/copilot/how-tos/copilot-chat/use-copilot-chat-in-the-command-line) |
| `droid` | `droid exec --output-format acp` | [Factory Droid](https://www.factory.ai) |
| `iflow` | `iflow --experimental-acp` | [iFlow CLI](https://github.com/iflow-ai/iflow-cli) |
| `kilocode` | `npx -y @kilocode/cli acp` | [Kilocode](https://kilocode.ai) |
| `kimi` | `kimi acp` | [Kimi CLI](https://github.com/MoonshotAI/kimi-cli) |
| `kiro` | `kiro-cli-chat acp` | [Kiro CLI](https://kiro.dev) |
| `opencode` | `npx -y opencode-ai acp` | [OpenCode](https://opencode.ai) |
| `qoder` | `qodercli --acp` | [Qoder CLI](https://docs.qoder.com/cli/acp) |
| `qwen` | `qwen --acp` | [Qwen Code](https://github.com/QwenLM/qwen-code) |
| `trae` | `traecli acp serve` | [Trae CLI](https://docs.trae.cn/cli) |
| Agent | Adapter command | Wraps |
| ------------ | ---------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
| `pi` | `npx pi-acp` | [Pi Coding Agent](https://github.com/mariozechner/pi) |
| `openclaw` | `openclaw acp` | [OpenClaw ACP bridge](https://github.com/openclaw/openclaw) |
| `codex` | `npx -y @agentclientprotocol/codex-acp` | [Codex CLI](https://codex.openai.com) |
| `claude` | `npx -y @agentclientprotocol/claude-agent-acp` | [Claude Code](https://claude.ai/code) |
| `gemini` | `gemini --acp` | [Gemini CLI](https://github.com/google/gemini-cli) |
| `cursor` | `cursor-agent acp` | [Cursor CLI](https://cursor.com/docs/cli/acp) |
| `copilot` | `copilot --acp --stdio` | [GitHub Copilot CLI](https://docs.github.com/copilot/how-tos/copilot-chat/use-copilot-chat-in-the-command-line) |
| `droid` | `droid exec --output-format acp` | [Factory Droid](https://www.factory.ai) |
| `fast-agent` | `uvx fast-agent-mcp acp` | [fast-agent](https://fast-agent.ai/) |
| `iflow` | `iflow --experimental-acp` | [iFlow CLI](https://github.com/iflow-ai/iflow-cli) |
| `kilocode` | `npx -y @kilocode/cli acp` | [Kilocode](https://kilocode.ai) |
| `kimi` | `kimi acp` | [Kimi CLI](https://github.com/MoonshotAI/kimi-cli) |
| `kiro` | `kiro-cli-chat acp` | [Kiro CLI](https://kiro.dev) |
| `opencode` | `npx -y opencode-ai acp` | [OpenCode](https://opencode.ai) |
| `qoder` | `qodercli --acp` | [Qoder CLI](https://docs.qoder.com/cli/acp) |
| `qwen` | `qwen --acp` | [Qwen Code](https://github.com/QwenLM/qwen-code) |
| `trae` | `traecli acp serve` | [Trae CLI](https://docs.trae.cn/cli) |

`factory-droid` and `factorydroid` also resolve to the built-in `droid` adapter.

Expand Down Expand Up @@ -123,6 +124,16 @@ If your Cursor install exposes ACP as `agent acp` instead of `cursor-agent acp`,
- Default command: `droid exec --output-format acp`
- Upstream: [factory.ai](https://www.factory.ai)

### fast-agent

- Built-in name: `fast-agent`
- Default command: `uvx fast-agent-mcp acp`
- Upstream: https://fast-agent.ai/acp

`acpx fast-agent` starts fast-agent through its ACP entrypoint. It requires `uvx` on `PATH`.

Configure model/provider settings through fast-agent environment variables, fast-agent configuration, or an `acpx` agent override with additional `fast-agent-mcp acp` arguments.

### Qoder

- Built-in name: `qoder`
Expand Down
2 changes: 1 addition & 1 deletion docs/install.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Some older Corepack builds bundled with supported Node.js versions have stale
package-signing keys and fail while preparing current pnpm releases. Installing
pnpm with npm avoids that bootstrap failure.

`acpx` itself does not need a global install of every adapter. Built-in adapters that ship as npm packages (`pi-acp`, `@agentclientprotocol/codex-acp`, `@agentclientprotocol/claude-agent-acp`, `@kilocode/cli`, `opencode-ai`) are auto-fetched with `npx` on first use.
`acpx` itself does not need a global install of every adapter. Built-in adapters that ship as npm packages (`pi-acp`, `@agentclientprotocol/codex-acp`, `@agentclientprotocol/claude-agent-acp`, `@kilocode/cli`, `opencode-ai`) are auto-fetched with `npx` on first use. The `fast-agent` built-in uses `uvx fast-agent-mcp acp`, so it requires `uvx` on `PATH`.

## Global install (recommended)

Expand Down
1 change: 1 addition & 0 deletions skills/acpx/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ Friendly agent names resolve to commands:
- `cursor` -> `cursor-agent acp`
- `copilot` -> `copilot --acp --stdio`
- `droid` -> `droid exec --output-format acp` (`factory-droid` and `factorydroid` also resolve to `droid`)
- `fast-agent` -> `uvx fast-agent-mcp acp`
- `iflow` -> `iflow --experimental-acp`
- `kilocode` -> `npx -y @kilocode/cli acp`
- `kimi` -> `kimi acp`
Expand Down
1 change: 1 addition & 0 deletions src/agent-registry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ export const AGENT_REGISTRY: Record<string, string> = {
cursor: "cursor-agent acp",
copilot: "copilot --acp --stdio",
droid: "droid exec --output-format acp",
"fast-agent": "uvx fast-agent-mcp acp",
iflow: "iflow --experimental-acp",
kilocode: "npx -y @kilocode/cli acp",
kimi: "kimi acp",
Expand Down
6 changes: 6 additions & 0 deletions test/agent-registry.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,11 @@ test("kiro built-in uses kiro-cli-chat directly", () => {
assert.equal(resolveAgentCommand("kiro"), "kiro-cli-chat acp");
});

test("fast-agent built-in runs the ACP entrypoint through uvx", () => {
assert.equal(AGENT_REGISTRY["fast-agent"], "uvx fast-agent-mcp acp");
assert.equal(resolveAgentCommand("fast-agent"), "uvx fast-agent-mcp acp");
});

test("listBuiltInAgents preserves the required example prefix and alphabetical tail", () => {
const agents = listBuiltInAgents();
assert.deepEqual(agents, Object.keys(AGENT_REGISTRY));
Expand All @@ -63,6 +68,7 @@ test("listBuiltInAgents preserves the required example prefix and alphabetical t
]);
assert.deepEqual(agents.slice(7), [
"droid",
"fast-agent",
"iflow",
"kilocode",
"kimi",
Expand Down
Loading