除了 OpenClaw,你还有另外一种选择

15 min

项目地址:https://github.com/CritasWang/chat-cc


AI 编程工具的两种思路

当我们谈论 AI 辅助编程工具时,大多数人第一时间想到的是 IDE 插件——安装、授权、在编辑器里调用。这条路线已经相当成熟:GitHub Copilot、Cursor、Windsurf,都是典型代表。

但还有另一种思路:不动 IDE,通过即时通讯工具远程操控 AI 编程助手

你在会议室开会,手机弹出一条飞书消息,随手输入 /ask 帮我把用户登录接口改成 JWT 认证,几十秒后,Claude Code 已经在你的服务器上完成了修改。你甚至不需要打开笔记本电脑。

这两种思路没有高下之分,解决的是不同场景下的不同问题。今天,我们来聊聊第二种思路的一个具体实现——ChatCC


OpenClaw 是什么

在展开 ChatCC 之前,先简单说说 OpenClaw。

OpenClaw 是一个运行在本地设备上的通用个人 AI 助手,支持 20+ 消息平台(WhatsApp、Telegram、Slack、Discord、飞书等),可接入 ChatGPT、Claude、Gemini 等多个模型,提供日常 AI 对话、语音交互、技能系统扩展等能力。

如果你需要一个跨平台的统一 AI 助手,OpenClaw 是一个不错的选择。

但如果你的需求是:远程控制本地 Claude Code、移动端操作、不依赖特定 IDE、与团队飞书工作流深度整合——那么 ChatCC 可能更适合你。


ChatCC 是什么

ChatCC 是一个用 Go 编写的飞书机器人服务。Chat(聊天)+ CC(Claude Code + Command),名字本身就概括了它的核心理念:

通过飞书消息远程操控 Claude Code 和本地程序。

ChatCC 运行在你本地或服务器上,通过飞书开放平台的 WebSocket 长连接与飞书云端保持实时通信。当你在飞书中 @机器人 或发送命令消息时,ChatCC 接收到请求,调用本地安装的 Claude Code 执行任务,再将结果回复给你。

整个过程不需要公网 IP,不需要开放任何防火墙端口,WebSocket 长连接从内网主动发出,对网络环境没有特殊要求。


核心特性详解

1. 双模式 Claude Code 集成

ChatCC 提供两种截然不同的交互模式,满足不同场景需求:

无状态模式(/ask

/ask 解释一下这个项目的目录结构
/ask --cwd /path/to/project 帮我写单元测试
/ask @server 查看最近的错误日志

每次调用独立执行,底层使用 claude -p 一次性调用。适合快速查询、代码解释、单次任务。默认超时 50 分钟,足以处理复杂的代码分析任务。

持久会话模式(/session + /s

/session start @myproject    # 启动 tmux 持久会话
/s 先看看 README              # 发送消息到活跃会话
/s 现在帮我重构 auth 模块      # 继续上下文对话
/session status               # 查看当前会话详情
/session list                 # 列出所有活跃会话
/session stop                 # 关闭会话

持久会话模式基于 tmux,Claude Code 在 tmux 窗格中持续运行,保留完整的对话上下文。适合需要多轮交互的复杂开发任务。

两种模式可以灵活切换,非命令消息会自动路由:有活跃 tmux 会话时发给会话,否则作为 /ask 处理。

2. 交互式输入智能处理

当 Claude Code 在会话中遇到交互式提示(如确认操作、yes/no 问题等)时,ChatCC 会自动检测并提示你:

⚠️ 检测到交互式提示,Claude Code 正在等待输入。
💡 请使用 /s 命令发送您的响应。

系统能识别 (y/n)[yes/no]continue?press enter 等常见交互模式,你只需通过 /s yes/s n 回应即可。这个功能让远程操控 Claude Code 变得更加顺畅——你不会因为错过一个确认提示而导致任务卡住。

3. Claude Code Hooks 双向回调

ChatCC 在 9876 端口启动一个 HTTP 服务,提供 /notify/health 端点。

这意味着 Claude Code 在执行过程中可以主动向飞书推送消息——文件修改、任务完成、重要决策点……你不需要盯着终端,飞书消息会主动告诉你 Claude Code 正在做什么。

在 Claude Code 配置 Hooks:

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "curl -sS http://localhost:9876/notify -H 'Content-Type: application/json' -d '{\"event\":\"file_changed\",\"message\":\"Claude 修改了文件\",\"chat_id\":\"oc_xxx\"}'"
          }
        ]
      }
    ]
  }
}

Hook HTTP API 支持 POST 通知和 GET 健康检查:

POST http://localhost:9876/notify
Content-Type: application/json

{
  "event": "task_complete",
  "message": "任务已完成: 重构了认证模块",
  "chat_id": "oc_xxx"       // 可选,指定推送到哪个飞书聊天
}

这是真正的双向通信:你控制 Claude Code,Claude Code 也能主动汇报进度。

4. 安全控制体系

对于一个能远程执行代码的工具,安全设计至关重要。ChatCC 提供了多层安全控制:

  • 用户白名单:只有配置中列出的飞书用户 ID 才能使用机器人
  • 群组白名单:可限制机器人只在指定群聊中响应
  • Shell 命令白名单/shell 命令只能执行预先配置的允许命令
  • 危险模式开关/danger on|off 动态控制 Claude Code 的权限绕过行为
  • 嵌套会话保护:自动过滤 CLAUDECODEANTHROPIC_* 等环境变量,避免在 Claude Code 环境中启动子进程时出现嵌套检测错误

即便机器人 Token 泄露,未授权用户也无法通过机器人执行任何操作。

5. 长消息智能分块

Claude Code 的输出经常很长。ChatCC 会自动将超过 3500 字符的消息分块发送,避免消息截断导致信息丢失。分块时会智能选择段落、句子边界,确保内容完整性,每条分块消息标注序号(如 [1/3], [2/3], [3/3])。

分块大小可自定义:

max_chunk_size: 3500    # 默认 3500 字符

6. 后台运行与日志管理

ChatCC 编译为单个二进制文件,内置完整的守护进程支持:

chatcc start --config config.local.yaml    # 后台启动
chatcc stop                                 # 停止
chatcc restart --config config.local.yaml   # 重启
chatcc status                               # 查看状态
chatcc console --config config.local.yaml   # 前台运行(调试用)

日志按天滚动,自动 gzip 压缩历史日志(logs/chatcc-YYYY-MM-DD.log.gz),不需要额外配置 logrotate。console 模式日志直接输出到终端,方便调试。

7. 热重载与项目别名

修改配置文件后,发送 /reload 命令,配置立即生效,无需重启服务、无需重连飞书。

项目别名让你不需要记忆绝对路径:

projects:
  server: "/home/user/projects/backend"
  devops: "/home/user/infrastructure"
  web: "/home/user/projects/frontend"

配置好后,直接用 /ask @server/session start @devops 即可。使用 /project(或 /p)命令可以随时查看所有已配置的项目别名。


完整命令列表

命令说明示例
/ask <提示词>Claude Code 无状态问答/ask 帮我看看有什么文件
/ask --cwd <目录> <提示词>指定工作目录/ask --cwd /path/to/project 分析结构
/ask @别名 <提示词>用项目别名/ask @server 看看迁移方案
/session start [目录]启动 tmux 持久会话/session start @webapp
/session status查看当前会话详情/session status
/session list列出所有活跃会话/session list
/session kill <会话名>终止指定会话/session kill cc-chat-xxx
/session stop关闭当前会话/session stop
/s <消息>发送到活跃会话/s 帮我重构这个函数
/shell <命令>执行白名单 shell 命令/shell docker ps
/project/p查看已配置的项目别名/project
/status查看系统状态和活跃会话/status
/danger on|off切换权限绕过模式/danger on
/reload热重载配置文件/reload
/help [命令]帮助信息/help ask

非命令消息:如有活跃 tmux 会话则发送到会话,否则等同 /ask


ChatCC vs OpenClaw 对比

理解两个工具各自的定位和优势,有助于做出正确选择。

维度OpenClawChatCC
定位通用个人 AI 助手,支持多平台专注飞书的 Claude Code 远程控制网关
核心功能多模型 AI 对话(ChatGPT/Claude/Gemini)Claude Code 专用执行环境(本地开发工具)
消息平台20+ 平台(WhatsApp/Telegram/Slack 等)仅飞书(深度集成)
技术栈Node.jsGo(单二进制部署)
本地执行主要调用 AI API直接在本地执行 Claude Code(tmux 持久会话)
配置复杂度多平台 + 多模型认证仅需飞书 app_id/app_secret
目标用户需要跨平台 AI 助手的个人用户需要远程控制开发环境的开发者

选择 ChatCC 的场景

  • 你需要通过飞书远程控制本地 Claude Code,访问本地文件系统,执行代码分析和自动化任务
  • 你的团队深度使用飞书作为协作工具,希望开发工作流与飞书打通
  • 你在企业内网环境工作,需要从外部安全访问内网开发机
  • 你希望在移动端或非编码场景(会议、外出)也能操控 Claude Code
  • 你追求轻量部署——单平台、单二进制、5 分钟部署完成
  • 你管理多个服务器/项目,希望通过统一的飞书界面远程控制

选择 OpenClaw 的场景

  • 你需要跨平台统一 AI 助手——在 WhatsApp、Telegram、Slack 等多平台使用同一个 AI
  • 你需要多模型 AI 对话——同时使用 OpenAI、Claude、Gemini,支持故障转移和自动切换
  • 你需要语音和多模态交互能力
  • 团队熟悉 Node.js/TypeScript 生态,希望二次开发

两者并不互斥。完全可以用 OpenClaw 做日常 AI 助手处理通用对话,同时在服务器上运行 ChatCC 处理 Claude Code 相关的开发任务:

WhatsApp/Telegram ──→ OpenClaw ──→ 日常 AI 对话
飞书             ──→ ChatCC   ──→ 远程控制 Claude Code

各司其职,互不干扰。


快速上手

第一步:创建飞书自建应用

  1. 登录飞书开放平台,创建一个企业自建应用
  2. 添加「机器人」能力
  3. 在「权限管理」中开启以下权限:
    • im:message(接收消息)
    • im:message:send_as_bot(发送消息)
    • im:message:patch(更新消息)
  4. 在「事件订阅」中选择 WebSocket 模式,订阅 im.message.receive_v1 事件
  5. 发布应用版本
  6. 获取 App ID 和 App Secret

第二步:安装 Claude Code

npm install -g @anthropic-ai/claude-code

确保 claude 命令可在 PATH 中访问。

第三步:安装 ChatCC

git clone https://github.com/CritasWang/chat-cc.git
cd chat-cc
go build -o chatcc .

或直接下载发布版二进制文件。

第四步:配置

cp config.yaml config.local.yaml

编辑 config.local.yaml

feishu:
  app_id: "cli_xxxxxxxxxxxxxxxx"
  app_secret: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

security:
  allowed_users:
    - "your_feishu_user_id"
  allowed_shells:
    - "git status"
    - "git log --oneline -10"
    - "docker ps"

# 超时配置(分钟)
claude_ask_timeout: 50
claude_session_timeout: 50

projects:
  server: "/home/user/backend"
  web: "/home/user/frontend"

也支持环境变量方式配置:

export FEISHU_APP_ID="cli_xxx"
export FEISHU_APP_SECRET="xxx"

第五步:启动

./chatcc start --config config.local.yaml
./chatcc status

在飞书中找到你的机器人,发送 /help,开始使用。


进阶用法

配置 Claude Code Hooks 回调

~/.claude/settings.json 中配置 Hooks,让 Claude Code 主动回报进度:

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit|Bash",
        "hooks": [
          {
            "type": "command",
            "command": "curl -sS http://localhost:9876/notify -H 'Content-Type: application/json' -d '{\"event\":\"file_changed\",\"message\":\"Claude 修改了文件\",\"chat_id\":\"oc_xxx\"}'"
          }
        ]
      }
    ]
  }
}

每次 Claude Code 完成文件写入或执行命令后,你的飞书会收到通知。

群聊协作模式

将机器人加入团队群聊,配置群聊 ID 到白名单,团队成员都可以 @机器人 发起任务。任务执行过程和结果对整个群组可见——这在结对编程或代码 Review 场景中非常有用。

结合 tmux 调试

ChatCC 的会话模式本质上管理的是 tmux 会话,你也可以直接登录服务器查看 tmux 中 Claude Code 的实时输出,双向调试非常方便:

# 通过 /session list 查看会话名
tmux attach -t cc-chat-xxx

同时 ChatCC 支持 console 前台模式,日志直接输出到终端,便于排查问题。


总结

OpenClaw 和 ChatCC 代表了两种不同的设计哲学:

  • OpenClaw:通用 AI 助手,跨平台统一入口,覆盖多种模型和交互方式
  • ChatCC:专注开发者场景,让飞书成为 Claude Code 的远程控制台

如果你的工作流已经深度整合飞书,如果你需要远程控制开发环境,如果你想让 AI 编程任务变得可观测、可协作——不妨试试 ChatCC。

它的安装部署只需 5 分钟,单二进制文件、零依赖(除了 Go 和 Claude Code),代码完全开源可审计,WebSocket 架构意味着你不需要改动任何网络配置。对于个人开发者和小团队来说,这是一个轻量、灵活、实用的选择。

项目地址:https://github.com/CritasWang/chat-cc