ART - Agent Realtime Transport (智能体实时传输协议)

License: CC BY-SA 4.0 Protocol Version Status

AI智能体的缺失传输层
移动优先 • 实时流式传输 • 跨设备会话 • 以人为本的设计


🎯 什么是ART?

ART (Agent Realtime Transport) 是一个开放协议,实现了在本地机器上运行的AI智能体与移动设备用户之间的双向实时交互。它填补了强大的命令行智能体(如Claude Code、Codex CLI、Gemini CLI)与移动优先世界之间的鸿沟。


📦 三大核心组件

ART由三个相互连接的组件组成,协同工作:

┌─────────────────────────────────────────────────────────────────────────────┐
│                          您的开发机器                                       │
│   ┌─────────────────────────────────────────────────────────────────────┐   │
│   │                         ART Hook (@art/hook)                        │   │
│   │  ┌─────────────────┐     ┌──────────────────────────────────────┐   │   │
│   │  │   AI智能体       │     │  Hook进程                          │   │   │
│   │  │  Claude Code    │◄───►│  • 捕获stdout/stderr               │   │   │
│   │  │  Codex CLI      │     │  • 向stdin注入用户命令              │   │   │
│   │  │  Gemini CLI     │     │  • 维护Broker连接                   │   │   │
│   │  │  任意CLI工具     │     │  • A2UI适配器(智能体到UI)            │   │   │
│   │  └─────────────────┘     └───────────────┬──────────────────────┘   │   │
│   └──────────────────────────────────────────│──────────────────────────┘   │
└──────────────────────────────────────────────│──────────────────────────────┘
                                               │
                                               │ WebSocket (WSS)
                                               │ 双向流式传输
                                               ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│                         云端服务器                                          │
│   ┌─────────────────────────────────────────────────────────────────────┐   │
│   │                      ART Broker (@art/broker)                       │   │
│   │                                                                     │   │
│   │  • 会话管理    - 创建、恢复、移交、销毁会话                          │   │
│   │  • 消息路由    - Hook与Player之间的消息路由                          │   │
│   │  • 流多路复用  - stdout、stderr、thinking、a2ui                     │   │
│   │  • A2UI路由    - 管理UI界面和用户行为                                │   │
│   │  • 连接管理    - 处理重连、离线队列                                  │   │
│   │  • 推送通知    - 重要事件通知用户                                    │   │
│   │                                                                     │   │
│   └───────────────────────────────────┬─────────────────────────────────┘   │
└───────────────────────────────────────│─────────────────────────────────────┘
                                        │
                                        │ WebSocket (WSS)
                                        │ 双向流式传输
                                        ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│                          用户的移动设备                                     │
│   ┌─────────────────────────────────────────────────────────────────────┐   │
│   │                    ARTplayer (微信小程序)                            │   │
│   │                                                                     │   │
│   │  • 实时显示    - 终端 + A2UI融合渲染                                 │   │
│   │  • 命令输入    - 向智能体发送指令                                    │   │
│   │  • 任务管理    - 提交、监控、取消任务                                │   │
│   │  • A2UI组件    - 按钮、输入框、卡片、表单                            │   │
│   │  • 历史记录    - 查看和恢复过去的会话                                │   │
│   │  • 离线支持    - 断线时排队命令                                      │   │
│   │  • 二维码移交  - 扫码即时恢复会话                                    │   │
│   │                                                                     │   │
│   └─────────────────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────────────────┘

🔄 组件角色与职责

ART Hook (@art/hook)

角色: 智能体I/O桥接器
运行环境: 开发者的机器 (Linux/macOS)
包位置: packages/hook/

职责描述
进程包装包装任意CLI进程(智能体、bash、python等)
输出捕获捕获被包装进程的所有stdout/stderr
输入注入将远程用户的命令写入进程stdin
Broker连接维持与Broker的持久WebSocket连接
自动重连网络故障时自动重连
A2UI适配智能识别场景并生成A2UI界面
# 用法
art-hook --broker wss://art.example.com -- claude-code
art-hook --broker wss://art.example.com -- bash
art-hook --broker wss://art.example.com -- python my_agent.py

支持的CLI智能体

ART Hook可以包装任何命令行AI智能体。以下是我们主要支持的CLI智能体:

智能体厂商类型安装方式状态说明
Claude CodeAnthropicCLI智能体npm install -g @anthropic-ai/claude-code⭐ 核心支持最成熟的AI编程助手
Codex CLIOpenAICLI智能体npm install -g @openai/codex⭐ 核心支持GitHub官方出品,与Copilot深度集成
Gemini CLIGoogleCLI智能体npm install -g @google/gemini-cli⭐ 核心支持Google Gemini 2.5 Pro 驱动
iFlowiFlow.AICLI智能体curl -fsSL https://gitee.com/iflow-ai/iflow-cli/raw/main/install.sh | bash⭐ 核心支持中国AI编程助手

注意: 基于IDE的工具如Cursor、Windsurf或GitHub Copilot不是CLI智能体,需要不同的集成方式。


ART Broker (@art/broker)

角色: 云端中继与会话管理器
运行环境: 云服务器
包位置: packages/broker/

职责描述
会话管理创建、恢复、移交、销毁会话
消息路由Hook与Player之间的消息路由
流多路复用处理多种流类型(stdout、stderr、thinking、a2ui)
连接管理跟踪连接的客户端,处理重连
任务管理跟踪任务状态、进度、完成情况
推送通知发送重要事件通知
// 启动Broker
import { ARTBroker } from "@art/broker";

const broker = new ARTBroker();
broker.start({ port: 8080 });

ARTplayer (微信小程序)

角色: 用户界面
运行环境: 用户的移动设备
位置: apps/artplayer/

职责描述
实时显示实时显示智能体输出
命令输入允许用户发送指令
任务提交向智能体提交新任务
任务监控查看任务进度和状态
历史记录查看和恢复过去的会话
离线队列断线时排队命令

🔀 交互流程

流程1: 智能体输出 → 用户显示

┌──────────┐    ┌──────────┐    ┌──────────┐    ┌──────────┐
│  智能体   │───►│ ART Hook │───►│  Broker  │───►│ARTplayer │
│ (stdout) │    │ (捕获)   │    │ (路由)   │    │(显示)    │
└──────────┘    └──────────┘    └──────────┘    └──────────┘

1. 智能体写入stdout: "正在构建项目..."
2. ART Hook通过进程包装器捕获输出
3. ART Hook发送stream.data到Broker
4. Broker通过WebSocket转发到ARTplayer
5. ARTplayer在实时UI中显示

消息示例:

{
  "art_version": "1.0",
  "jsonrpc": "2.0",
  "method": "stream.data",
  "params": {
    "stream_id": "stream_abc123",
    "stream_type": "stdout",
    "content": "正在构建项目...\n",
    "sequence": 42
  },
  "session_id": "sess_xyz789"
}

流程2: 用户命令 → 智能体执行

┌──────────┐    ┌──────────┐    ┌──────────┐    ┌──────────┐
│ARTplayer │───►│  Broker  │───►│ ART Hook │───►│  智能体   │
│ (输入)   │    │ (路由)   │    │ (注入)   │    │ (stdin)  │
└──────────┘    └──────────┘    └──────────┘    └──────────┘

1. 用户在ARTplayer中输入命令: "修复登录bug"
2. ARTplayer发送task.submit到Broker
3. Broker路由到连接的ART Hook
4. ART Hook将命令写入智能体的stdin
5. 智能体接收并处理指令

🎨 A2UI (Agent-to-UI) - 动态界面渲染

ARTP现在支持 A2UI - 一个协议扩展,使AI智能体能够直接在移动设备上渲染动态用户界面。

什么是A2UI?

A2UI允许智能体发送结构化UI组件(按钮、表单、卡片),而不仅仅是文本,创造丰富的交互体验:

┌─────────────────────────────────────────────────────────────┐
│                    A2UI渲染流程                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  智能体决策              A2UI消息            移动端UI        │
│  ┌─────────┐            ┌─────────────┐       ┌─────────┐  │
│  │"我需要   │───────────▶│ {           │──────▶│[确认]   │  │
│  │ 用户     │            │   type:     │       │[取消]   │  │
│  │ 确认"    │            │   "form",   │       │         │  │
│  └─────────┘            │   ...       │       │您确定   │  │
│                         │ }           │       │要执行吗?│  │
│                         └─────────────┘       └─────────┘  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

支持的组件

组件类型描述
按钮org.a2ui.button带动作的交互按钮
输入框org.a2ui.input带数据绑定的文本输入
卡片org.a2ui.card带标题、内容、动作的容器
表单org.a2ui.form带验证的多字段表单

融合渲染模式

ARTplayer支持双模式渲染 - 在终端输出和A2UI界面之间无缝切换:

  • 终端模式: 传统文本流显示
  • 分屏模式: 终端 + A2UI并排显示
  • A2UI模式: 全屏动态界面

📊 消息粒度

流类型

类型描述示例
stdout智能体标准输出"正在构建...\n"
stderr智能体错误输出"警告: 已弃用的API"
thinking智能体推理过程"正在分析代码库..."
progress任务完成百分比{ "percent": 50 }
artifact生成的文件/代码{ "path": "/output.py" }
a2uiA2UI结构化UI更新{ "type": "surfaceUpdate", ... }

任务状态

pending → running → completed
                 ↘  failed
                 ↘  cancelled
                 ↘  waiting_approval → approved → running

🛠️ 快速开始

1. 启动Broker (云端)

cd packages/broker
npm run dev
# Broker运行在 ws://localhost:8080

2. 启动ART Hook (本地机器)

# 全局安装(构建后)
npm link --workspace=@art/hook

# 运行任意命令
art-hook --broker ws://localhost:8080 -- bash

3. 连接ARTplayer (移动端)

  1. 打开微信开发者工具
  2. 导入 apps/artplayer/
  3. app.js 中配置broker URL
  4. 在移动设备上预览

📋 协议规范

消息格式 (JSON-RPC 2.0扩展)

interface ARTMessage {
  // 标准JSON-RPC 2.0
  jsonrpc: "2.0";
  id?: string | number;
  method?: string;
  params?: any;
  result?: any;
  error?: ErrorObject;
  
  // ART扩展
  art_version: "1.0";
  session_id?: string;
  
  // 流式传输
  stream?: boolean;
  stream_id?: string;
  stream_sequence?: number;
  stream_end?: boolean;
}

核心方法

命名空间方法方向描述
sessioncreate任意 → Broker创建新会话
sessionresume任意 → Broker恢复现有会话
sessionhandoff任意 → Broker将会话转移到另一设备
sessiondestroy任意 → Broker结束会话
tasksubmitPlayer → Hook提交任务指令
taskstatus任意 → Broker获取任务状态
taskapprovePlayer → Hook批准待定操作
taskcancelPlayer → Hook取消运行中的任务
streamdataHook → Player流式输出数据
streamsubscribePlayer → Broker订阅流
terminalinputPlayer → Hook发送原始终端输入 (stdin)
terminalresizePlayer → Hook调整远程终端PTY大小
agentlistPlayer → Hook列出可用智能体
agentstart/stopPlayer → Hook管理智能体进程生命周期
capabilitieslist任意发现功能/方法
a2uisurface.createHook → Broker创建A2UI界面
a2uisurface.updateHook → Broker更新A2UI组件
a2uiuserActionPlayer → Hook发送用户交互事件

🔐 安全模型

┌─────────────────────────────────────────────────────────────┐
│                    安全层                                    │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  传输层:  WSS (TLS 1.3)                                     │
│  会话层:  JWT令牌, 设备绑定                                  │
│  端到端:  X25519密钥交换, AES-256-GCM                       │
│  认证:    访问令牌 (15分钟) + 刷新令牌 (30天)               │
│                                                             │
└─────────────────────────────────────────────────────────────┘

🏛️ 设计原则

  1. 移动优先 — 每个设计决策都考虑移动网络限制
  2. 双向通信 — 真正的双向通信,不仅仅是监控
  3. 弹性设计 — 自动重连、离线队列、会话恢复
  4. 智能体无关 — 与任何AI智能体架构兼容,不依赖内部实现
  5. 默认安全 — 端到端加密是内置的,不是可选的
  6. A2UI原生 — 内置支持动态UI渲染

📁 项目结构

ARTP/
├── packages/
│   ├── protocol/          # @art/protocol - 类型定义和常量
│   │   └── src/a2ui.ts    # A2UI类型定义
│   ├── broker/            # @art/broker   - 云端中继服务器
│   │   └── src/a2ui-router.ts  # A2UI界面管理
│   └── hook/              # @art/hook     - 本地智能体桥接CLI
│       └── src/a2ui/      # A2UI适配器和场景检测器
├── apps/
│   ├── artplayer/         # 微信小程序客户端
│   │   ├── components/a2ui/    # A2UI组件 (按钮, 输入框, 卡片)
│   │   ├── utils/a2ui-engine.js    # A2UI消息解析器
│   │   └── utils/fused-renderer.js # 终端 + A2UI融合渲染器
│   └── a-flow/            # 替代小程序 (开发中)
├── art.0017.eu.cc_nginx/  # 服务器部署配置
├── docs/                  # 文档
│   └── ARTP-A2UI-Fusion-Analysis-Report.md
├── Dockerfile             # 容器构建
├── docker-compose.yml     # Docker Compose配置
└── package.json           # Monorepo根

🚀 部署

ARTP 包含三个主要组件。各组件的部署方式如下:

组件部署方式部署者使用方式
ART Hook自行部署用户在本地机器上安装
ART Broker官方SaaSARTP 团队使用官方服务
ARTplayer官方SaaSARTP 团队微信小程序(扫码使用)

部署 ART Hook(自行部署)

ART Hook 必须安装在您运行 AI 智能体的本地机器上。

# 从 npm 安装
npm install -g @art/hook

# 或本地安装
npm install @art/hook

使用方法:

# 包装您的 CLI 智能体
art-hook --broker wss://art.0017.eu.cc -- claude-code

# 或其他任何 CLI 工具
art-hook --broker wss://art.0017.eu.cc -- bash
art-hook --broker wss://art.0017.eu.cc -- python my_agent.py

使用官方服务

Broker(官方)

使用官方 Broker 服务,无需自行部署:

wss://art.0017.eu.cc

ARTplayer(官方)

扫描下方二维码使用官方微信小程序:

ARTplayer 二维码
扫码打开 ARTplayer

环境变量(Hook)

变量描述默认值
ART_BROKER_URL默认 Broker WebSocket 地址-
ART_SESSION_ID默认会话 ID-

📜 许可证

本项目采用 CC BY-SA 4.0 许可证。


ART — 连接AI智能体与移动世界
为智能体AI时代而生