Skip to content

Commit f1a601d

Browse files
committed
feat: add fast-agent built-in adapter
1 parent 1e7ff65 commit f1a601d

10 files changed

Lines changed: 123 additions & 37 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ Repo: https://github.com/openclaw/acpx
1111
- Tooling: add Slophammer TypeScript quality gates for coverage, complexity,
1212
unsafe types, mutation testing, DRY checks, and dependency boundaries.
1313
- Agents/built-ins: switch the default Codex adapter to `@agentclientprotocol/codex-acp`, with Codex model selection handled through advertised ACP model ids, and bump the default Claude ACP adapter range.
14+
- Agents/built-ins: add `fast-agent` as a built-in EvalState fast-agent ACP adapter via `uvx fast-agent-acp`.
1415

1516
### Breaking
1617

README.md

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -340,24 +340,25 @@ unless `agentSessionId` is present.
340340

341341
Built-ins:
342342

343-
| Agent | Adapter | Wraps |
344-
| ---------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
345-
| `pi` | [pi-acp](https://github.com/svkozak/pi-acp) | [Pi Coding Agent](https://github.com/mariozechner/pi) |
346-
| `openclaw` | native (`openclaw acp`) | [OpenClaw ACP bridge](https://github.com/openclaw/openclaw) |
347-
| `codex` | [codex-acp](https://github.com/agentclientprotocol/codex-acp) | [Codex CLI](https://codex.openai.com) |
348-
| `claude` | [claude-agent-acp](https://github.com/agentclientprotocol/claude-agent-acp) | [Claude Code](https://claude.ai/code) |
349-
| `gemini` | native (`gemini --acp`) | [Gemini CLI](https://github.com/google/gemini-cli) |
350-
| `cursor` | native (`cursor-agent acp`) | [Cursor CLI](https://cursor.com/docs/cli/acp) |
351-
| `copilot` | native (`copilot --acp --stdio`) | [GitHub Copilot CLI](https://docs.github.com/copilot/how-tos/copilot-chat/use-copilot-chat-in-the-command-line) |
352-
| `droid` | native (`droid exec --output-format acp`) | [Factory Droid](https://www.factory.ai) |
353-
| `iflow` | native (`iflow --experimental-acp`) | [iFlow CLI](https://github.com/iflow-ai/iflow-cli) |
354-
| `kilocode` | `npx -y @kilocode/cli acp` | [Kilocode](https://kilocode.ai) |
355-
| `kimi` | native (`kimi acp`) | [Kimi CLI](https://github.com/MoonshotAI/kimi-cli) |
356-
| `kiro` | native (`kiro-cli-chat acp`) | [Kiro CLI](https://kiro.dev) |
357-
| `opencode` | `npx -y opencode-ai acp` | [OpenCode](https://opencode.ai) |
358-
| `qoder` | native (`qodercli --acp`) | [Qoder CLI](https://docs.qoder.com/cli/acp) |
359-
| `qwen` | native (`qwen --acp`) | [Qwen Code](https://github.com/QwenLM/qwen-code) |
360-
| `trae` | native (`traecli acp serve`) | [Trae CLI](https://docs.trae.cn/cli) |
343+
| Agent | Adapter | Wraps |
344+
| ------------ | --------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
345+
| `pi` | [pi-acp](https://github.com/svkozak/pi-acp) | [Pi Coding Agent](https://github.com/mariozechner/pi) |
346+
| `openclaw` | native (`openclaw acp`) | [OpenClaw ACP bridge](https://github.com/openclaw/openclaw) |
347+
| `codex` | [codex-acp](https://github.com/agentclientprotocol/codex-acp) | [Codex CLI](https://codex.openai.com) |
348+
| `claude` | [claude-agent-acp](https://github.com/agentclientprotocol/claude-agent-acp) | [Claude Code](https://claude.ai/code) |
349+
| `gemini` | native (`gemini --acp`) | [Gemini CLI](https://github.com/google/gemini-cli) |
350+
| `cursor` | native (`cursor-agent acp`) | [Cursor CLI](https://cursor.com/docs/cli/acp) |
351+
| `copilot` | native (`copilot --acp --stdio`) | [GitHub Copilot CLI](https://docs.github.com/copilot/how-tos/copilot-chat/use-copilot-chat-in-the-command-line) |
352+
| `droid` | native (`droid exec --output-format acp`) | [Factory Droid](https://www.factory.ai) |
353+
| `fast-agent` | `uvx fast-agent-acp` | [EvalState fast-agent](https://github.com/evalstate/fast-agent) |
354+
| `iflow` | native (`iflow --experimental-acp`) | [iFlow CLI](https://github.com/iflow-ai/iflow-cli) |
355+
| `kilocode` | `npx -y @kilocode/cli acp` | [Kilocode](https://kilocode.ai) |
356+
| `kimi` | native (`kimi acp`) | [Kimi CLI](https://github.com/MoonshotAI/kimi-cli) |
357+
| `kiro` | native (`kiro-cli-chat acp`) | [Kiro CLI](https://kiro.dev) |
358+
| `opencode` | `npx -y opencode-ai acp` | [OpenCode](https://opencode.ai) |
359+
| `qoder` | native (`qodercli --acp`) | [Qoder CLI](https://docs.qoder.com/cli/acp) |
360+
| `qwen` | native (`qwen --acp`) | [Qwen Code](https://github.com/QwenLM/qwen-code) |
361+
| `trae` | native (`traecli acp serve`) | [Trae CLI](https://docs.trae.cn/cli) |
361362

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

agents/FastAgent.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# FastAgent
2+
3+
- Built-in name: `fast-agent`
4+
- Default command: `uvx fast-agent-acp`
5+
- Upstream: https://github.com/evalstate/fast-agent
6+
7+
`acpx fast-agent` starts EvalState fast-agent through its ACP entrypoint. It requires `uvx` on `PATH`.
8+
9+
Configure model/provider settings through fast-agent environment variables, fast-agent configuration, or an `acpx` agent override with additional `fast-agent-acp` arguments.

agents/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ Built-in agents:
1010
- `cursor -> cursor-agent acp`
1111
- `copilot -> copilot --acp --stdio`
1212
- `droid -> droid exec --output-format acp` (`factory-droid` and `factorydroid` also resolve to `droid`)
13+
- `fast-agent -> uvx fast-agent-acp`
1314
- `iflow -> iflow --experimental-acp`
1415
- `kilocode -> npx -y @kilocode/cli acp`
1516
- `kimi -> kimi acp`
@@ -25,6 +26,7 @@ Harness-specific docs in this directory:
2526
- [Claude](Claude.md): built-in `claude -> npx -y @agentclientprotocol/claude-agent-acp`
2627
- [Copilot](Copilot.md): built-in `copilot -> copilot --acp --stdio`
2728
- [Droid](Droid.md): built-in `droid -> droid exec --output-format acp` with `factory-droid` and `factorydroid` aliases
29+
- [FastAgent](FastAgent.md): built-in `fast-agent -> uvx fast-agent-acp`
2830
- [Cursor](Cursor.md): built-in `cursor -> cursor-agent acp`
2931
- [Gemini](Gemini.md): built-in `gemini -> gemini --acp`
3032
- [iFlow](Iflow.md): built-in `iflow -> iflow --experimental-acp`

docs/agents.md

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,24 +9,25 @@ The default agent for top-level commands like `acpx exec …` and `acpx prompt
99

1010
## Built-in registry
1111

12-
| Agent | Adapter command | Wraps |
13-
| ---------- | ---------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
14-
| `pi` | `npx pi-acp` | [Pi Coding Agent](https://github.com/mariozechner/pi) |
15-
| `openclaw` | `openclaw acp` | [OpenClaw ACP bridge](https://github.com/openclaw/openclaw) |
16-
| `codex` | `npx -y @agentclientprotocol/codex-acp` | [Codex CLI](https://codex.openai.com) |
17-
| `claude` | `npx -y @agentclientprotocol/claude-agent-acp` | [Claude Code](https://claude.ai/code) |
18-
| `gemini` | `gemini --acp` | [Gemini CLI](https://github.com/google/gemini-cli) |
19-
| `cursor` | `cursor-agent acp` | [Cursor CLI](https://cursor.com/docs/cli/acp) |
20-
| `copilot` | `copilot --acp --stdio` | [GitHub Copilot CLI](https://docs.github.com/copilot/how-tos/copilot-chat/use-copilot-chat-in-the-command-line) |
21-
| `droid` | `droid exec --output-format acp` | [Factory Droid](https://www.factory.ai) |
22-
| `iflow` | `iflow --experimental-acp` | [iFlow CLI](https://github.com/iflow-ai/iflow-cli) |
23-
| `kilocode` | `npx -y @kilocode/cli acp` | [Kilocode](https://kilocode.ai) |
24-
| `kimi` | `kimi acp` | [Kimi CLI](https://github.com/MoonshotAI/kimi-cli) |
25-
| `kiro` | `kiro-cli-chat acp` | [Kiro CLI](https://kiro.dev) |
26-
| `opencode` | `npx -y opencode-ai acp` | [OpenCode](https://opencode.ai) |
27-
| `qoder` | `qodercli --acp` | [Qoder CLI](https://docs.qoder.com/cli/acp) |
28-
| `qwen` | `qwen --acp` | [Qwen Code](https://github.com/QwenLM/qwen-code) |
29-
| `trae` | `traecli acp serve` | [Trae CLI](https://docs.trae.cn/cli) |
12+
| Agent | Adapter command | Wraps |
13+
| ------------ | ---------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
14+
| `pi` | `npx pi-acp` | [Pi Coding Agent](https://github.com/mariozechner/pi) |
15+
| `openclaw` | `openclaw acp` | [OpenClaw ACP bridge](https://github.com/openclaw/openclaw) |
16+
| `codex` | `npx -y @agentclientprotocol/codex-acp` | [Codex CLI](https://codex.openai.com) |
17+
| `claude` | `npx -y @agentclientprotocol/claude-agent-acp` | [Claude Code](https://claude.ai/code) |
18+
| `gemini` | `gemini --acp` | [Gemini CLI](https://github.com/google/gemini-cli) |
19+
| `cursor` | `cursor-agent acp` | [Cursor CLI](https://cursor.com/docs/cli/acp) |
20+
| `copilot` | `copilot --acp --stdio` | [GitHub Copilot CLI](https://docs.github.com/copilot/how-tos/copilot-chat/use-copilot-chat-in-the-command-line) |
21+
| `droid` | `droid exec --output-format acp` | [Factory Droid](https://www.factory.ai) |
22+
| `fast-agent` | `uvx fast-agent-acp` | [EvalState fast-agent](https://github.com/evalstate/fast-agent) |
23+
| `iflow` | `iflow --experimental-acp` | [iFlow CLI](https://github.com/iflow-ai/iflow-cli) |
24+
| `kilocode` | `npx -y @kilocode/cli acp` | [Kilocode](https://kilocode.ai) |
25+
| `kimi` | `kimi acp` | [Kimi CLI](https://github.com/MoonshotAI/kimi-cli) |
26+
| `kiro` | `kiro-cli-chat acp` | [Kiro CLI](https://kiro.dev) |
27+
| `opencode` | `npx -y opencode-ai acp` | [OpenCode](https://opencode.ai) |
28+
| `qoder` | `qodercli --acp` | [Qoder CLI](https://docs.qoder.com/cli/acp) |
29+
| `qwen` | `qwen --acp` | [Qwen Code](https://github.com/QwenLM/qwen-code) |
30+
| `trae` | `traecli acp serve` | [Trae CLI](https://docs.trae.cn/cli) |
3031

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

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

127+
### Fast Agent
128+
129+
- Built-in name: `fast-agent`
130+
- Default command: `uvx fast-agent-acp`
131+
- Upstream: [EvalState fast-agent](https://github.com/evalstate/fast-agent)
132+
- Requires `uvx` on `PATH`. Configure fast-agent model/provider settings through environment variables, fast-agent configuration, or an `acpx` agent override with additional `fast-agent-acp` arguments.
133+
126134
### Qoder
127135

128136
- Built-in name: `qoder`

docs/install.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ Some older Corepack builds bundled with supported Node.js versions have stale
2121
package-signing keys and fail while preparing current pnpm releases. Installing
2222
pnpm with npm avoids that bootstrap failure.
2323

24-
`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.
24+
`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-acp`, so it requires `uvx` on `PATH`.
2525

2626
## Global install (recommended)
2727

skills/acpx/SKILL.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ Friendly agent names resolve to commands:
8686
- `cursor` -> `cursor-agent acp`
8787
- `copilot` -> `copilot --acp --stdio`
8888
- `droid` -> `droid exec --output-format acp` (`factory-droid` and `factorydroid` also resolve to `droid`)
89+
- `fast-agent` -> `uvx fast-agent-acp`
8990
- `iflow` -> `iflow --experimental-acp`
9091
- `kilocode` -> `npx -y @kilocode/cli acp`
9192
- `kimi` -> `kimi acp`

src/agent-registry.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ export const AGENT_REGISTRY: Record<string, string> = {
4444
cursor: "cursor-agent acp",
4545
copilot: "copilot --acp --stdio",
4646
droid: "droid exec --output-format acp",
47+
"fast-agent": "uvx fast-agent-acp",
4748
iflow: "iflow --experimental-acp",
4849
kilocode: "npx -y @kilocode/cli acp",
4950
kimi: "kimi acp",

test/agent-registry.test.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,11 @@ test("kiro built-in uses kiro-cli-chat directly", () => {
4949
assert.equal(resolveAgentCommand("kiro"), "kiro-cli-chat acp");
5050
});
5151

52+
test("fast-agent built-in runs the ACP entrypoint through uvx", () => {
53+
assert.equal(AGENT_REGISTRY["fast-agent"], "uvx fast-agent-acp");
54+
assert.equal(resolveAgentCommand("fast-agent"), "uvx fast-agent-acp");
55+
});
56+
5257
test("listBuiltInAgents preserves the required example prefix and alphabetical tail", () => {
5358
const agents = listBuiltInAgents();
5459
assert.deepEqual(agents, Object.keys(AGENT_REGISTRY));
@@ -63,6 +68,7 @@ test("listBuiltInAgents preserves the required example prefix and alphabetical t
6368
]);
6469
assert.deepEqual(agents.slice(7), [
6570
"droid",
71+
"fast-agent",
6672
"iflow",
6773
"kilocode",
6874
"kimi",

0 commit comments

Comments
 (0)