亚马逊AWS官方博客

让 Kiro 和 Claude Code 响应 IM 消息:用 ACP Bridge 打造异步 AI 编程工作流

摘要:AI 编程助手如 Kiro CLI、Claude Code 能力日益强大,但使用场景局限于本地终端,难以满足移动办公和团队协作需求。本文介绍 ACP Bridge——一个将本地 CLI 编程助手通过 ACP 协议暴露为 HTTP 服务的桥接工具,结合 OpenClaw Gateway 和 AWS 基础设施,实现从 Discord 消息触发异步 AI 编程任务的完整闭环。


一、背景

近年来, AI 编程助手的能力突飞猛进。 Kiro CLIClaude Code 等工具已经能够完成从代码重构到架构分析的复杂任务。然而,这些工具的使用场景大多局限于开发者本地终端——打开 CLI ,输入指令,等待结果。对于个人开发者来说,这已经足够;但对于团队协作或移动办公场景,这种工作方式存在明显瓶颈:你必须守在电脑前。

在笔者的日常工作中,有一个常见场景:在手机上收到一条消息,想让 Kiro 帮忙重构某个模块,然后继续去开会,等回来时结果已经推送到 Discord 频道里。这个看似简单的需求,在现有工具链中却颇难实现。

本文将介绍 ACP Bridge ,一个将本地 CLI 编程助手通过标准化的 ACP 协议对外暴露为 HTTP 服务的桥接工具,并结合 OpenClaw Gateway 和 AWS 基础设施,实现从 Discord 消息到异步 AI 编程任务 的完整闭环。

二、挑战:本地 CLI 工具的协作困境

在尝试打通 CLI 工具与即时通讯的过程中,笔者遇到了以下几个核心问题:

  • 同步阻塞: Kiro 、 Claude Code 等 CLI 工具默认阻塞式运行,复杂任务可能需要数分钟甚至更长,无法直接集成进消息流
  • 无远程入口: CLI 工具没有 HTTP API ,无法被外部系统调用
  • 协议不统一:不同 CLI 工具的输入输出格式差异较大,集成成本高
  • 通知缺失:任务完成后没有主动推送机制,用户必须轮询或手动查看
  • 权限问题:非交互模式下, Claude Code 等工具遇到文件写入或 shell 执行时会弹出权限确认,导致进程卡住或崩溃

三、技术背景: ACP 协议与 OpenClaw

3.1 ACP ( Agent Client Protocol )

ACP ( Agent Client Protocol ) 是专为 CLI AI Agent 设计的标准化通信协议,基于 stdio JSON-RPC 实现双向通信,支持结构化事件流( thinking / tool_call / text / status ),是将本地 CLI Agent 接入更大生态的关键桥梁。

从这个项目的角度来看, Kiro 比 Claude Code 更好测试,主要原因在于 ACP 模式的支持程度:

  • Kiro CLI 原生支持 ACP — kiro-cli acp –trust-all-tools 直接走 stdio JSON-RPC 双向通信,进程池可以直接管理, session 复用、多轮对话、结构化事件流( thinking/tool_call/text/status )都是开箱即用的。
  • Claude Code 需要适配器 — 配置里用的是 claude-agent-acp 而不是原生 claude ,说明 Claude Code 本身不直接支持 ACP 协议,需要一个额外的 adapter 层来桥接。多一层就多一个出问题的地方。
  • Permission 卡住问题 — 项目里专门做了 session/request_permission 的自动回复 allow_always ,这是为了解决 Claude 会弹权限确认导致进程挂住的问题。 Kiro 的 –trust-all-tools 直接跳过了这个环节,测试流程更顺畅。
  • 进程管理更简单 — Kiro 直接就是一个 CLI 进程,启动快、行为可预测。 Claude Code 那边经过 adapter 转换,进程生命周期、错误恢复、崩溃重建都更复杂。

总结就是: Kiro 是 ACP 原生公民, Claude Code 是通过适配层接入的,测试链路短、坑少、行为更确定。

3.2 OpenClaw Gateway

OpenClaw 是一个自托管的 AI Agent 网关,可将 WhatsApp 、 Telegram 、 Discord 等即时通讯平台与 AI Agent 打通。其内置了 acpx 插件,理论上可以在 OpenClaw 会话内直接调用 Kiro 、 Claude Code 等 ACP 工具。

然而, acpx 插件存在一些设计上的局限:

  • 无异步支持:所有调用均为同步模式,复杂任务会阻塞整个 OpenClaw 会话,导致超时或卡死
  • 无法远程调用:目前官方 apcx 主要是 stdio 模式,这样 cli 工具只能和 OpenClaw 捆绑在一个宿主机上,导致扩展性受限
  • 权限模式受限 :默认 permissionMode=approve-reads ,任何写操作或 shell 执行都会触发 AcpRuntimeError ,在无 TTY 的场景下 Claude Code 直接崩溃
  • 无回调机制:没有内置的任务完成推送,结果只能同步等待
  • 进程生命周期绑定 Session :子进程与 OpenClaw 会话强耦合,缺乏独立的进程池管理
  • 无任务监控:没有卡住检测和自动重试机制

ACP Bridge 正是为填补这些空白而生。

四、整体架构

ACP Bridge 部署在 Amazon EC2 上,作为独立的 HTTP 服务运行,与 OpenClaw Gateway 保持分离部署。这种隔离设计有充分理由: OpenClaw 持有 Discord 、 Feishu 等平台的访问凭据,与代码执行环境( ACP Bridge )同机部署存在安全风险。

[图1]

项目已开源: https://github.com/aws-samples/sample-acp-bridge

五、安全注意事项

本文配置在设计上已内置了基础安全隔离,以下是关键决策说明:

  • IAM 最小权限:EC2 实例默认仅授予 Amazon Bedrock 模型调用权限,不预置 DynamoDB、S3 等其他服务的访问能力。若需扩展持久化存储等功能,按需单独附加对应 Policy,避免宽泛授权。
  • 网络隔离 : OpenClaw Gateway 不直接对外暴露,前置 ALB 配合 Amazon Cognito 做身份认证,收敛公网入口; ACP Bridge 与 CLI Agent 均部署在 VPC 内网,不挂公网 IP ,通过 IP 白名单 + Bearer Token 双重校验与 Gateway 通信。
  • 适用范围:上述配置适合个人开发者和小团队的内网部署场景。 企业级生产环境可进一步结合 AWS WAF 加固 ALB 入口、使用 Secrets Manager 管理 Token 轮换,以及将 ACP Bridge 容器化至 Fargate 强化执行隔 离

六、核心模块解析

6.1 ACP 进程池( Process Pool )

ACP Bridge 为每个 (agent, session_id) 对维护一个独立的 CLI 子进程。相同 session 的多轮对话复用同一进程,上下文自动保持;子进程崩溃后自动重建(用户会收到提示);空闲超过 TTL 后自动清理。

pool:
  max_processes: 20    # 全局进程上限
  max_per_agent: 10    # 单个 agent 最大并发

这与 acpx 最大的区别在于:进程生命周期与 OpenClaw 会话完全解耦, Bridge 侧的进程可以持续运行,不受上层对话重置的影响。

6.2 异步任务管理器( Async Job Manager )

这是 ACP Bridge 的核心能力:提交任务立即返回 job_id , Bridge 在后台异步执行,完成后通过 webhook 回调推送结果到 Discord 。

# src/jobs.py - 核心流程
# 1. 提交任务 → 立即返回 job_id
# 2. 后台执行 agent 调用
# 3. 完成后 POST OpenClaw /tools/invoke
# 4. OpenClaw 用 message tool 推送到 Discord

Job 监控机制:

  • 每 60 秒巡查一次所有进行中的 job
  • 超过 10 分钟未完成自动标记为 failed 并通知用户
  • Webhook 发送失败自动重试,直到成功或 job 过期

6.3 Claude 权限自动处理

Claude Code 在非交互模式下频繁遇到 session/request_permission 请求,导致进程卡住。 ACP Bridge 的 agents.py 实现了自动回复 allow_always 的逻辑,彻底解决了这个问题——这也是 acpx 插件默认未处理的痛点之一。

# src/agents.py - Claude 权限自动处理
if event.get("method") == "session/request_permission":
    await process.stdin.write(json.dumps({
        "id": event["id"],
        "result": {"action": "allow_always"}
    }))

6.4 双重安全认证

security:
  auth_token: "${ACP_BRIDGE_TOKEN}"  # 支持环境变量引用
  allowed_ips:
    - "10.0.1.79"   # OpenClaw Gateway IP
    - "127.0.0.1"

Bearer Token + IP 白名单双重认证, /health 端点免认证用于负载均衡探活, webhook 回调 token 独立配置。

七、部署与配置

7.1 环境准备

ACP Bridge 运行在 Amazon EC2 (推荐 t3.medium 及以上),需要:

  • Python >= 3.12
  • uv 包管理器
  • 已安装的 CLI Agent ( kiro-cli 、 claude-agent-acp )
git clone https://github.com/aws-samples/sample-acp-bridge
cd acp-bridge
cp config.yaml.example config.yaml
# 编辑 config.yaml 填入 OpenClaw Gateway 地址和 token
uv sync
uv run main.py

7.2 核心配置

server:
  host: "0.0.0.0"
  port: 8001
  session_ttl_hours: 24

webhook:
  url: "http://<openclaw-ip>:18789/tools/invoke"
  token: "<OPENCLAW_GATEWAY_TOKEN>"

agents:
  kiro:
    enabled: true
    mode: "acp"
    command: "kiro-cli"
    acp_args: ["acp", "--trust-all-tools"]
    working_dir: "/tmp"
  claude:
    enabled: true
    mode: "acp"
    command: "claude-agent-acp"
    working_dir: "/tmp"

八、使用演示

8.1 同步 / 流式调用

export ACP_BRIDGE_URL=http://<bridge-ip>:8001
export ACP_TOKEN=<your-token>

# 列出可用 agents
./skill/acp-client.sh -l

# 同步调用
./skill/acp-client.sh "帮我分析这个项目的目录结构"

# 流式调用(实时输出)
./skill/acp-client.sh --stream "优化这段 SQL 查询"

# Markdown 卡片格式(适合 IM 展示)
./skill/acp-client.sh --card -a kiro "重构 utils.py"

# 多轮对话(保持上下文)
SESSION_ID=$(uuidgen)
./skill/acp-client.sh -s $SESSION_ID "第一轮:分析问题"
./skill/acp-client.sh -s $SESSION_ID "第二轮:根据分析给出方案"

8.2 异步任务:提交即走, Discord 收结果

# 提交一个耗时的重构任务
curl -X POST http://<bridge>:8001/jobs \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "agent_name": "kiro",
    "prompt": "帮我重构 src/payment 模块,拆分职责,补充单元测试",
    "discord_target": "user:<your-discord-user-id>",
    "callback_meta": {"account_id": "default"}
  }'
# → {"job_id": "550e8400-e29b-41d4-a716-446655440000", "status": "pending"}

提交后立即返回 job_id ,你可以放心去开会。 Kiro 在后台完成任务后, Discord 私信会自动收到结果推送。

8.3 查询任务状态

curl http://<bridge>:8001/jobs/<job_id> \
  -H "Authorization: Bearer <token>"

8.4 测试案例

同步任务:让远端的 kiro cli 去同步画一个 ascii log

[图2]

异步任务:让远端的 claude code 去计算一个斐波那契数列

[图3]

九、在 AWS 上的扩展方向

ACP Bridge 本身轻量,但 AWS 提供了多种方式将其扩展为生产级方案:

9.1 OpenClaw 的多种托管选项

  • Amazon EC2 :当前推荐方案,完全可控,适合个人和小团队。 t3.medium 足以支撑日常使用
  • Amazon Bedrock AgentCore : AWS 推出的托管 Agent 运行时,内置 Runtime 、 Observability 、 Identity 等能力,大幅降低 Agent 基础设施管理成本,适合企业级部署
  • AWS Fargate :将 ACP Bridge 容器化部署,免运维,适合需要弹性伸缩的场景

9.2 用 DynamoDB 持久化任务队列

当前 ACP Bridge 的 Job 状态存储在内存中,服务重启后任务历史丢失。一个自然的扩展是引入 Amazon DynamoDB 作为持久化存储层:

# 扩展思路:用 DynamoDB Table 替换内存 dict
# Table: acp-bridge-jobs
# Key: job_id (String)
# Attributes: status, agent_name, prompt, created_at,
#             completed_at, result, discord_target

import boto3
dynamodb = boto3.resource('dynamodb', region_name='us-east-1')
table = dynamodb.Table('acp-bridge-jobs')

# 提交任务时写入
table.put_item(Item={
    'job_id': job_id,
    'status': 'pending',
    'agent_name': agent_name,
    'created_at': int(time.time())
})

DynamoDB 的优势在于:按需付费、自动扩展、支持 TTL 自动清理过期任务,无需额外维护数据库服务。

十、应用场景

  • 个人开发者:在手机 Discord 上发一条消息,让 Kiro 在服务器后台处理代码任务,完成后直接收通知
  • 团队 Code Review 辅助 :提交 PR 时自动触发 Claude Code 分析,结果推送到 Discord 频道
  • 异步代码生成流水线:将 ACP Bridge 集成进 CI/CD ,耗时的代码生成和重构任务异步完成
  • 多 Agent 编排 :作为 OpenClaw skills 的底层能力,支持多个 Agent 协同完成复杂任务

十一、结论

ACP Bridge 通过将本地 CLI AI 编程助手标准化为 HTTP 服务,并引入异步任务队列和 Discord 推送机制,有效弥补了现有工具链在协作和远程调用场景下的不足。结合 AWS EC2Bedrock AgentCoreDynamoDB 等服务,开发者可以灵活选择从个人轻量部署到企业级高可用的不同方案。在笔者看来,随着 AI 编程工具的持续进化,这类” AI 工具网关”将成为现代开发工作流中不可或缺的基础设施。

前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。

十二、参考链接

十三、结语

➡️ 下一步行动:

相关产品:

  • Amazon CLI — 用于管理 AWS 服务的统一工具
  • Amazon Kiro — AI 驱动的 IDE
  • Amazon EC2 — 安全且可调整大小的计算容量,支持几乎所有工作负载
  • Amazon Bedrock — 用于构建生成式人工智能应用程序和代理的端到端平台
  • Amazon DynamoDB — 适用于任何规模的工作负载的无服务器分布式 NoSQL 数据库

相关文章:

*前述特定亚马逊云科技生成式人工智能相关的服务目前在亚马逊云科技海外区域可用。亚马逊云科技中国区域相关云服务由西云数据和光环新网运营,具体信息以中国区域官网为准。

本篇作者

万曦

亚马逊云科技解决方案架构师,负责基于亚马逊云科技的云计算方案的咨询和架构设计。坚实的AWS Builder文化拥抱者。拥有超过12年的游戏研发经验,参与过数个游戏项目的管理和开发,对于游戏行业有深度理解和见解。


AWS 架构师中心:云端创新的引领者

探索 AWS 架构师中心,获取经实战验证的最佳实践与架构指南,助您高效构建安全、可靠的云上应用