From 8b4eef61f057f06162dcb4ff682e9c68497167a5 Mon Sep 17 00:00:00 2001 From: xfanwu Date: Sun, 15 Mar 2026 18:32:02 +0000 Subject: [PATCH 1/3] acpx: add Kiro CLI as built-in ACP agent --- docs/tools/acp-agents.md | 4 ++-- extensions/acpx/skills/acp-router/SKILL.md | 11 ++++++----- .../acpx/src/runtime-internals/mcp-agent-command.ts | 1 + 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/docs/tools/acp-agents.md b/docs/tools/acp-agents.md index d8ac5b5f7d3..ad63b22f018 100644 --- a/docs/tools/acp-agents.md +++ b/docs/tools/acp-agents.md @@ -1,5 +1,5 @@ --- -summary: "Use ACP runtime sessions for Pi, Claude Code, Codex, OpenCode, Gemini CLI, and other harness agents" +summary: "Use ACP runtime sessions for Pi, Claude Code, Codex, Kiro, OpenCode, Gemini CLI, and other harness agents" read_when: - Running coding harnesses through ACP - Setting up thread-bound ACP sessions on thread-capable channels @@ -11,7 +11,7 @@ title: "ACP Agents" # ACP agents -[Agent Client Protocol (ACP)](https://agentclientprotocol.com/) sessions let OpenClaw run external coding harnesses (for example Pi, Claude Code, Codex, OpenCode, and Gemini CLI) through an ACP backend plugin. +[Agent Client Protocol (ACP)](https://agentclientprotocol.com/) sessions let OpenClaw run external coding harnesses (for example Pi, Claude Code, Codex, Kiro, OpenCode, and Gemini CLI) through an ACP backend plugin. If you ask OpenClaw in plain language to "run this in Codex" or "start Claude Code in a thread", OpenClaw should route that request to the ACP runtime (not the native sub-agent runtime). diff --git a/extensions/acpx/skills/acp-router/SKILL.md b/extensions/acpx/skills/acp-router/SKILL.md index 1b7944820b1..762ddc0aba8 100644 --- a/extensions/acpx/skills/acp-router/SKILL.md +++ b/extensions/acpx/skills/acp-router/SKILL.md @@ -1,25 +1,25 @@ --- name: acp-router -description: Route plain-language requests for Pi, Claude Code, Codex, OpenCode, Gemini CLI, or ACP harness work into either OpenClaw ACP runtime sessions or direct acpx-driven sessions ("telephone game" flow). For coding-agent thread requests, read this skill first, then use only `sessions_spawn` for thread creation. +description: Route plain-language requests for Pi, Claude Code, Codex, Kiro, OpenCode, Gemini CLI, or ACP harness work into either OpenClaw ACP runtime sessions or direct acpx-driven sessions ("telephone game" flow). For coding-agent thread requests, read this skill first, then use only `sessions_spawn` for thread creation. user-invocable: false --- # ACP Harness Router -When user intent is "run this in Pi/Claude Code/Codex/OpenCode/Gemini/Kimi (ACP harness)", do not use subagent runtime or PTY scraping. Route through ACP-aware flows. +When user intent is "run this in Pi/Claude Code/Codex/Kiro/OpenCode/Gemini/Kimi (ACP harness)", do not use subagent runtime or PTY scraping. Route through ACP-aware flows. ## Intent detection Trigger this skill when the user asks OpenClaw to: -- run something in Pi / Claude Code / Codex / OpenCode / Gemini +- run something in Pi / Claude Code / Codex / Kiro / OpenCode / Gemini - continue existing harness work - relay instructions to an external coding harness - keep an external harness conversation in a thread-like conversation Mandatory preflight for coding-agent thread requests: -- Before creating any thread for Pi/Claude/Codex/OpenCode/Gemini work, read this skill first in the same turn. +- Before creating any thread for Pi/Claude/Codex/Kiro/OpenCode/Gemini work, read this skill first in the same turn. - After reading, follow `OpenClaw ACP runtime path` below; do not use `message(action="thread-create")` for ACP harness thread spawn. ## Mode selection @@ -39,7 +39,7 @@ Do not use: - `subagents` runtime for harness control - `/acp` command delegation as a requirement for the user -- PTY scraping of pi/claude/codex/opencode/gemini/kimi CLIs when `acpx` is available +- PTY scraping of pi/claude/codex/kiro/opencode/gemini/kimi CLIs when `acpx` is available ## AgentId mapping @@ -48,6 +48,7 @@ Use these defaults when user names a harness directly: - "pi" -> `agentId: "pi"` - "claude" or "claude code" -> `agentId: "claude"` - "codex" -> `agentId: "codex"` +- "kiro" or "kiro cli" -> `agentId: "kiro"` - "opencode" -> `agentId: "opencode"` - "gemini" or "gemini cli" -> `agentId: "gemini"` - "kimi" or "kimi cli" -> `agentId: "kimi"` diff --git a/extensions/acpx/src/runtime-internals/mcp-agent-command.ts b/extensions/acpx/src/runtime-internals/mcp-agent-command.ts index 481c8156aca..d2c4f9044f4 100644 --- a/extensions/acpx/src/runtime-internals/mcp-agent-command.ts +++ b/extensions/acpx/src/runtime-internals/mcp-agent-command.ts @@ -6,6 +6,7 @@ const ACPX_BUILTIN_AGENT_COMMANDS: Record = { codex: "npx @zed-industries/codex-acp", claude: "npx -y @zed-industries/claude-agent-acp", gemini: "gemini", + kiro: "kiro-cli acp", opencode: "npx -y opencode-ai acp", pi: "npx pi-acp", }; From 238040973220c28ddcd9b7ae836e1bb3d4017e49 Mon Sep 17 00:00:00 2001 From: Xiaofan Wu Date: Mon, 16 Mar 2026 14:11:31 +0800 Subject: [PATCH 2/3] docs: complete Kiro additions across all agent lists --- docs/tools/acp-agents.md | 3 ++- extensions/acpx/skills/acp-router/SKILL.md | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/tools/acp-agents.md b/docs/tools/acp-agents.md index ad63b22f018..a8ec4e713c4 100644 --- a/docs/tools/acp-agents.md +++ b/docs/tools/acp-agents.md @@ -444,6 +444,7 @@ Current acpx built-in harness aliases: - `pi` - `claude` - `codex` +- `kiro` - `opencode` - `gemini` - `kimi` @@ -464,7 +465,7 @@ Core ACP baseline: dispatch: { enabled: true }, backend: "acpx", defaultAgent: "codex", - allowedAgents: ["pi", "claude", "codex", "opencode", "gemini", "kimi"], + allowedAgents: ["pi", "claude", "codex", "kiro", "opencode", "gemini", "kimi"], maxConcurrentSessions: 8, stream: { coalesceIdleMs: 300, diff --git a/extensions/acpx/skills/acp-router/SKILL.md b/extensions/acpx/skills/acp-router/SKILL.md index 762ddc0aba8..00b15944ab3 100644 --- a/extensions/acpx/skills/acp-router/SKILL.md +++ b/extensions/acpx/skills/acp-router/SKILL.md @@ -89,7 +89,7 @@ Call: ## Thread spawn recovery policy -When the user asks to start a coding harness in a thread (for example "start a codex/claude/pi/kimi thread"), treat that as an ACP runtime request and try to satisfy it end-to-end. +When the user asks to start a coding harness in a thread (for example "start a codex/claude/pi/kiro/kimi thread"), treat that as an ACP runtime request and try to satisfy it end-to-end. Required behavior when ACP backend is unavailable: @@ -183,6 +183,7 @@ ${ACPX_CMD} codex sessions close oc-codex- - `pi` - `claude` - `codex` +- `kiro` - `opencode` - `gemini` - `kimi` @@ -194,6 +195,7 @@ Defaults are: - `pi -> npx pi-acp` - `claude -> npx -y @zed-industries/claude-agent-acp` - `codex -> npx @zed-industries/codex-acp` +- `kiro -> kiro-cli acp` - `opencode -> npx -y opencode-ai acp` - `gemini -> gemini` - `kimi -> kimi acp` From 17925251e298d30e717454aa8d0ed9cb69c7de86 Mon Sep 17 00:00:00 2001 From: Xiaofan Wu Date: Mon, 16 Mar 2026 14:23:08 +0800 Subject: [PATCH 3/3] fix: add missing normalizeAgentId import in hooks --- src/gateway/hooks.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gateway/hooks.ts b/src/gateway/hooks.ts index d9e23060f04..c11595f8f18 100644 --- a/src/gateway/hooks.ts +++ b/src/gateway/hooks.ts @@ -5,7 +5,7 @@ import { listChannelPlugins } from "../channels/plugins/index.js"; import type { ChannelId } from "../channels/plugins/types.js"; import type { OpenClawConfig } from "../config/config.js"; import { readJsonBodyWithLimit, requestBodyErrorToText } from "../infra/http-body.js"; -import { parseAgentSessionKey } from "../routing/session-key.js"; +import { normalizeAgentId, parseAgentSessionKey } from "../routing/session-key.js"; import { normalizeMessageChannel } from "../utils/message-channel.js"; import { type HookMappingResolved, resolveHookMappings } from "./hooks-mapping.js"; import { resolveAllowedAgentIds } from "./hooks-policy.js";