Skip to content

halflifezyf2680/command-cli-agent

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Command CLI Agent

Command CLI Agent 是一个很小的工具。

它做的事情很简单:

  • Weixin / Telegram / QQ 变成原生 agent 的外部对话框
  • 让你直接把消息送到 codex / claude / opencode
  • 顺手提供一个本地 TUI 来做登录、切 backend、启停服务和看状态

它不是新的主脑,也不是新的 orchestrator。

主脑永远在原生 agent backend。cca 只是一个对话框。

为什么会有这个工具

如果你已经在深度使用 codex cliclaude codeopen code,通常就不会太想再套一层更重的编排框架。

这个工具的想法就是:

  • 不去重做 OpenClaw / Hermes 那种平台
  • 不去重新定义 agent
  • 只做一层薄薄的外部对话框

快速安装

建议 Windows 10/11。从 GitHub Release 下载 command-cli-agent-<version>.tgz 后执行:

npm install -g .\command-cli-agent-<version>.tgz
cca

安装后运行 cca 即可进入控制中心。

cca status 可以在不启动 TUI 的情况下快速查看所有频道的服务状态。

账号连接见 账号连接指南

可靠性

会话持久化

每个对话会话以确定性密钥(channel + account + 对话类型 + 对方 ID + 群组 ID + 工作目录)存入 session-store.json,所有读写通过互斥锁串行化,不会因并发写入损坏数据。

网关重启时自动恢复所有会话,不同后端的恢复策略不同:

  • Codex 后端:与 app-server 交叉验证线程存活状态。已加载且仍在运行的 thread 直接恢复(用户无感),丢失的 thread 自动轮换创建新的
  • Claude / OpenCode 后端:重启后子进程必然丢失,直接清除孤儿状态(卡在 running 的会话重置为 idle),下次对话从新线程开始
  • 隔离绑定:每个会话创建时绑定到指定后端,不会被错误路由

消息调度

  • 同会话串行:同一个对话内的消息通过 Promise 链严格按顺序执行,不会并行冲突
  • 跨会话并行:不同对话的 Promise 链完全独立,一个用户的长任务不会阻塞其他用户
  • 5 秒去重:相同消息 5 秒内重复投递自动丢弃(最多缓存 100 条),防止网络重传导致重复处理
  • 轮询不阻塞:消息投递是 fire-and-forget 的,即使后端响应很慢,新消息也能继续被接收和调度

看门狗

双层守护机制,确保服务始终可用:

  • 进程级看门狗:supervisor 每秒检测网关进程存活状态,崩溃后自动重启(500ms 起步线性退避,上限 10s,连续崩溃 5 次后放弃并报警)
  • Turn 级 idle 看门狗:运行时持续记录 backend activity。只有子进程超过配置阈值无输出/无进度才判定为卡死并中断;持续活跃的长任务不会因为跑满 10 分钟被硬杀。Claude 后端中断采用 SIGINT → 5s → SIGKILL 两阶段清理,并保留后端自身的长时间安全网
  • 独占锁:supervisor 启动时获取排他文件锁(原子创建 + PID 验证 + 陈旧锁自动恢复),防止意外启动多个 supervisor 导致重复消息
  • 运行时开关:可在 TUI 或聊天命令中随时启用/禁用看门狗,无需重启 supervisor

控制中心

运行 cca 后,默认进入控制中心 TUI。左侧页签,右侧面板,底部快捷键提示。支持中/英双语(L 切换)。

 CCA CONTROL CENTER                        ZH   Weixin  |  Telegram  |  QQ   Q/ESC
+-- 页面 ----------++-- 频道概览 ------------------------------------------+
| 1 总览           || > Weixin    状态=running                             |
| 2 登录           ||   Telegram  状态=running                             |
| 3 后端           ||                                                      |
| 4 服务           ||  配置    data/weixin-gateway.json                    |
| 5 日志           ||  账号    *********@im.bot                            |
| 6 系统           ||  地址    https://ilinkai.weixin.qq.com               |
| 7 工作空间       ||  令牌    wxid_*****************a3f7                  |
|                  ||  存储    data/weixin-gateway                        |
|                  ||  更新    2026/4/1 1:30:00                           |
|                  ||                                                     |
|                  ||  后端    CLAUDE                                     |
|                  ||  看门狗  ENABLED                                    |
|                  ||                                                     |
|                  ||                                                     |
|                  ||                                                     |
|                  ||                                                     |
|                  ||                                                     |
+------------------+------------------------------------------------------+
 R 刷新
 就绪
 ←→ 频道  Tab 面板  ? 帮助  F 刷新  Q 退出

全局快捷键

按键 功能
Q / Ctrl+C 退出
切换频道(Weixin / Telegram / QQ)
Tab 切换侧边栏 / 主面板焦点
F 强制刷新
? 帮助覆盖层

页签说明

页签 功能 快捷键
OVERVIEW 频道状态、后端、看门狗概览 R 刷新
LOGIN 微信扫码登录 / Telegram 配置 token / QQ 官方机器人配置提示 微信: Enter 扫码;TG: T token I account U username M 模式;QQ: O 平台 A AppID S Secret M 模式
BACKEND 切换 codex / opencode / claude C O L 快捷切换,或 + Enter
SERVICE 启动 / 停止 / 重启网关服务 E 启动 S 停止 R 重启
LOGS 查看 supervisor 日志 R 刷新
SYSTEM 看门狗开关、语言切换、自启动 W 看门狗 L 语言
WORKSPACE 工作空间管理(树形 + 详情双面板) Enter 激活 n 新建 d 删除 c 切换 r 重置

聊天命令

在微信、Telegram 或 QQ 对话中直接发送斜杠命令控制网关。QQ 客户端如果不好输入 /,可以直接发送裸命令,例如 mode agentbackend claudews list

通用命令(微信 + Telegram + QQ)

命令 功能
/help 查看可用命令列表
/status 查看当前会话状态(线程、后端、队列深度)
/interrupt 中断当前正在执行的任务
/reset 重置当前会话线程,下次对话从新线程开始

模式、后端与工作空间命令

命令 功能
/mode 查看当前交互模式(cli / agent
/mode cli 切回 CLI 直连模式
/mode agent 切到 Agent Worker 模式
/backend 查看当前后端
/backend codex 切换到 Codex 后端
/backend claude 切换到 Claude 后端
/backend opencode 切换到 OpenCode 后端
/worker status 查看当前对话的 Agent Worker 模式状态
/worker current <任务> 将一条任务按短期连续任务投递给 Agent Worker
/worker quest <任务> 将一条任务按持久队列任务投递给 Agent Worker
/worker urgent <任务> 将一条任务按紧急任务投递给 Agent Worker
/ws 查看当前工作空间
/ws list 列出所有工作空间(回复数字快速切换或 d+数字 删除)
/ws create <name> 新建工作空间
/ws delete <name> 删除工作空间
/ws switch <name> 切换工作空间
/ws cd <dir> 设置工作目录
/ws reset 重置工作空间会话

Agent Worker

Agent Worker 是 agent 交互模式使用的 workspace 协议。cca 只做网关和心跳投递,任务规划由后端 LLM 根据 workspace 内的协议文件完成。

Worker workspace 会生成 AGENT_WORKER.mdQUEST.md.worker/CURRENT_TASK.md.worker/STATE.jsonlogs/WORKER-LOG.md。长期调研、报告、编码或并行任务必须把 PROGRESS.mdnotes/findings/ 等产物写入文件;聊天通道只用于简短进度、状态、阻塞点和产物路径。CCA 会提示后端不要把中间文档正文大段发送到微信 / Telegram / QQ。

心跳机制

切换到 /mode agent 后,channel gateway(微信 / Telegram / QQ)自动以 60 秒间隔发送心跳 prompt。心跳包含当前时间戳,LLM 据此判断是否有到期的定时任务需要执行。

  • 定时提醒:在 .worker/CURRENT_TASK.md 中记录 trigger_at 时间,心跳到达时 LLM 比较时间戳,到期则回复提醒内容(用户会收到消息)
  • 多轮延续:LLM 可将未完成任务留在 CURRENT_TASK.md,每次心跳自动继续
  • 空闲抑制:如果没有可执行任务,LLM 回复 [HEARTBEAT_IDLE],系统自动拦截不发送给用户
  • 忙碌排队提示:同一会话已有任务运行时,新消息仍会入队,同时用户会收到“当前请求已排队”的简短提示,可用 /status 查看或 /interrupt 中断
  • 协议校验:Worker 回复会携带隐藏 sentinel,CCA 用它判断后端是否仍遵守 worker 协议;若协议上下文稀释,下一轮会提示后端重新读取 workspace 协议

worker.heartbeatIntervalMs 可在 gateway 配置文件中自定义心跳间隔(默认 60000 毫秒)。

初始化一个 worker workspace:

cca worker init D:\AgentWorkspace

初始化会生成:

  • AGENT_WORKER.md:Agent Worker 身份、调度和安全规则
  • QUEST.md:持久任务队列
  • .worker/CURRENT_TASK.md:短期连续任务
  • .worker/STATE.json:worker 状态
  • .worker/PAUSE_REASON.md:紧急任务暂停原因
  • logs/WORKER-LOG.md:完成记录
  • AGENTS.md / .claude/CLAUDE.md:后端入口 shim
  • projects/ / output/ / logs/

单次试跑:

cca worker once .\data\agent-worker.json

常驻心跳:

cca worker start .\data\agent-worker.json

媒体文件

微信和 Telegram 双向支持图片、语音、视频和文件收发。QQ 当前使用官方机器人接口,默认通过官方 WebSocket 长连接接收消息,并通过 OpenAPI 文本回复;不需要公网 IP 或云服务器。QQ 媒体消息当前会把官方临时 URL / 元数据传给后端并发送接收确认,尚未自动下载到本地。

QQ 出站文本有额外保护:最终回复和错误回复不会复用可能过期的入站 msg_id/event_id,超长文本会被限制在稳定可发送范围内并提示查看工作区产物,避免客户端出现“消息加载失败”。

接收(用户 → 后端)

用户在微信发送媒体后,网关自动下载、解密并保存到本地 media/ 目录,将文件路径附带到发给后端的消息中:

  • 图片:PNG, JPG, JPEG, GIF, WEBP, BMP
  • 语音:SILK 格式自动转码为 WAV
  • 视频:MP4, MOV, WEBM, MKV, AVI
  • 文件:PDF, DOC, DOCX, XLS, XLSX, PPT, PPTX, TXT, CSV, ZIP, TAR, GZ

单文件上限 100MB。

发送(后端 → 用户)

后端回复中的媒体文件(本地路径或远程 URL)会被自动上传并发送给用户:

  • 微信:根据 MIME 类型自动走 CDN 上传流程,支持图片、视频、文件
  • Telegram:通过 Multipart FormData 发送,自动识别为 sendPhoto / sendVideo / sendDocument

账号连接

Weixin 扫码登录、Telegram Bot Token、QQ 官方机器人 WebSocket / Webhook 的连接方式见 账号连接指南

About

A small CLI that turns Weixin and Telegram into external conversation surfaces for Codex, Claude Code, and OpenCode.

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors