在群里说一句"蓝火帮我修 X",Claude Code 真去把活干了,全程实时回写到聊天。
当前版本:v2.18.0 · 单一仓库即部署单元 · cnb.cool 单 remote
| 🏫 教学机构 | 👨🏫 讲师 | 📧 联系方式 | 💬 QQ群 | 📺 配套视频 |
|---|---|---|---|---|
| 逸寻智库 | Job | support@huo15.com | 1093992108 | 📺 B站视频 |
蓝火媒桥 = 给 OpenClaw 群里的 LLM(贾维斯/任意 agent)装一根真桥,让它能:
底层是 OpenClaw chat ↔ Claude Code CLI 的多媒体任务桥(图/音/视频转文字 + claude -p stream-json + SSE 实时事件回写 + SQLite 任务库 + web dashboard)。
| 名字 | 含义 |
|---|---|
| 蓝火 | 与 OpenClaw 龙虾的"小火苗"宠物互文——龙虾是宿主,蓝火是替它"出门干活"的精灵 |
| 媒桥 | 多模态消息(图/音/视频)→ 文字 → Claude Code 的桥 |
| 代号 | cc-media-bridge(仓库/MCP/CLI 沿用,向后兼容) |
| 触发词 | 蓝火 / 虾任务 / 龙任务 / cc 任务 / cc task / 媒桥 都路由到本 skill |
下文一律用 蓝火 作为产品名,媒桥 作为技术组件称呼,cc-media-bridge 作为代号。
LLM 是不可靠的执行者——它会编造、会跳工具、会"用常识替你决定"。蓝火媒桥不靠"教育 LLM",靠结构性钉死它的选择空间:
| harness 层级 | 谁负责 | 干啥 |
|---|---|---|
| L1 · 工具命名 | MCP cc_session_list / cc_recent_tasks / cc_my_tasks | 名字直接匹配用户语义,名字本身就是路由信号 |
| L2 · 工具 schema | 移除已废弃工具 | cc_task_list 等已完全从 MCP_TOOLS 拿掉——LLM 看不到=调不到=不可能编 |
| L3 · 响应注入 | 工具 response 含 _render_markdown_COPY_VERBATIM + _anti_hallucination | LLM 拿到结构化指令,不能用"自己的话"覆盖 |
| L4 · pre-fetch hook | enhance plugin before_prompt_build | 检测"蓝火+查询"模式 → 自动 fetch 真数据 → 注入 system prompt——LLM 看到 trusted 数据,没有"要不要调工具"这个决定 |
| L5 · SKILL 命令式 | 头部 ⚠️ MANDATORY + 反模式列表 | "看到关键字 → 唯一动作",零思考路径 |
| L6 · sanitizer | 入参/出参三层闸门 | LLM 编出来的 target/url/userid 不经 sanitize 不放行 |
每加一层都不是"再多教一遍",是让错路径根本走不通。L4 是项目最核心的反幻觉杠杆:用户问"我的蓝火任务",hook 已经把真实 session 列表灌进 system prompt,LLM 只能 copy 真数据回复——hallucination 不可能发生(不是"概率降低")。
张三 在 wecom 群: "@蓝火 修一下登录里 refresh_token 的 bug"
机器人 → 🦞 蓝火任务已建档 (cc-20260507-093021-...)
机器人 → 🚀 Claude Code 接活了 (sonnet)
机器人 → 🔧 调用 Read:src/auth/login.py
机器人 → 🔧 调用 Grep:refresh_token in src/auth/
机器人 → 💬 我准备把 refresh_token 的轮换逻辑挪到 ...
机器人 → 🔧 调用 Edit:src/auth/login.py
机器人 → 🔧 调用 Bash:pytest tests/test_auth.py
机器人 → ✅ 完成 · 用时 47.3s · 8 工具 · $0.12
机器人 → [Claude Code 的最终结果文本]
李四 5 分钟后问"我的蓝火任务列下" → 自动看到自己派的任务(不是张三的)。
https://keepermac.huo15.com/lanhuo
v2.18.0 起每张卡片标题都是 AI 一句中文摘要(sonnet 抽,≤60 字),扫一眼就知每条会话干了啥——不再需要点开看 first_user 一句话猜。
?task=cc-XXX 直链# 派活
cc-media-task --desc "重构 user 模块,将 ORM 改 raw SQL"
cc-media-task --desc "修这个 UI bug" --image error.png
cc-media-task --desc "" --video bug-walkthrough.mp4
# 实时跟踪
cc-media-task --tail cc-20260507-093021-a3f2
# AI 摘要(v2.18.0)
cc-summarize-sessions --limit 20 # 给最近 20 个 session 生成一句摘要
cc-summarize-sessions --session-id <UUID> # 单条
Claude Desktop / Claude Code CLI 通过 MCP 调(双路在 setup.sh 里都注册):
"列我今天的虾任务" → cc_session_list(自动按 sender 过滤) "总结下昨天那个 PPT 会话" → cc_session_summarize "搜索 refactoring 相关的对话内容" → cc_session_search_content(FTS5 全文)
| 改进 | 影响 |
|---|---|
AI 一句中文摘要 (session_summaries 表 + cc-summarize-sessions) | dashboard 卡片标题从"first_user 60 字截断"升级到"sonnet 自动总结的 1 句话"——卡片含金量肉眼可见提升 |
| Summarizer LaunchAgent | 每小时整点跑一次,新会话自动有摘要,不用手动触发 |
MCP cc_session_summarize | 用户问"帮我总结下 XX 会话"时贾维斯一键生成;带 mtime 缓存(jsonl 没改不重跑) |
/cc-sessions 响应含 summary 字段 | dashboard 实时拿;search 关键字也匹配摘要内容 |
| 组件 | 位置 | 作用 |
|---|---|---|
| SKILL.md | skill/ | OpenClaw 技能:识别多模态消息 + 调度 cc-media-task + 轮询事件实时回写聊天 |
| server.py | mcp-server/ | 三模服务器:HTTP API + 任务/事件存储 (SQLite WAL + 11 个 schema migration) + SSE + MCP stdio + watchdog |
| cc-media-task | bin/ | Bash 入口:转写媒体 → 调度 Claude Code → 持久化结果 |
| cc-stream-relay | bin/ | Python helper:解析 stream-json → 批量推事件到 server |
| cc-summarize-sessions | bin/ | v2.18.0 AI 摘要器:扫 jsonl → sonnet → session_summaries 表 |
| cc-app-control / cc-auto-auth | bin/ | macOS UI Scripting 控 Claude Desktop App + 自动点授权弹窗(v2.3+) |
你在飞书/Telegram/WhatsApp/wecom 发消息(文字+图+音+视频)
│
▼
┌────────────────────┐
│ OpenClaw chat │ ← 入站消息带 sender_id / channel
│ + 蓝火 SKILL │ ← 触发词命中 → 派活
└────┬───────────────┘
│
├──[查询模式]── enhance plugin before_prompt_build hook
│ ├── 检测"蓝火+任务/列表/历史"模式
│ ├── HTTP fetch /cc-sessions 拿真数据
│ └── prependContext 注入 system prompt
│ → LLM 看到 trusted 数据,必须按它回复(harness L4)
│
└──[派活模式]── cc-media-task → claude -p stream-json
├── 媒体 → vision/whisper/ffmpeg → 文字
├── 合并 prompt
├── claude -p --output-format stream-json
└── cc-stream-relay 解析 → 批量推事件
│
▼
┌──────────────────────────────────┐
│ mcp-server/server.py :18790 │
│ ├── HTTP API + SSE │
│ ├── SQLite tasks.db (WAL) │
│ ├── /lanhuo dashboard (单页) │
│ └── MCP stdio (cc_session_*) │
└──────────────────────────────────┘
│
▼
keepermac.huo15.com/lanhuo (frpc 反代)
# 1. 前置依赖(一次性)
brew install ffmpeg jq python3 # macOS
npm install -g @anthropic-ai/claude-code
pipx install openai-whisper # 可选,处理语音/视频
# 2. clone 仓库到稳定路径
git clone https://cnb.cool/huo15/ai/openclaw-media-bridge \
~/workspace/projects/openclaw/openclaw-media-bridge
cd ~/workspace/projects/openclaw/openclaw-media-bridge
# 3. 一键安装(幂等可重跑)
bash setup.sh
# 4. 重启 OpenClaw / Claude 让它们读到新 skill / MCP
# OpenClaw menubar app → Restart Gateway
# Claude Desktop App → Quit & Reopen
# Claude Code CLI → 退出当前会话再开新的
setup.sh 完成:
claude_desktop_config.jsonclaude mcp add -s user 注册到 Claude Code CLIbin/* 到 ~/.local/bin~/.openclaw/workspace*/skills/skills/cc-media-bridge/bash update.sh # = git pull + 同步 SKILL + 重启 server + 刷 summarizer plist + 重启 OpenClaw gateway
git pull 后 bin/* 立即生效(symlink);server.py / SKILL.md / 两个 LaunchAgent plist 由 update.sh 自动重启。
bash uninstall.sh # 撤销所有装机改动;不删 repo,不删任务 DB
admin 跟贾维斯说: "给小明开账号 alice / abc123,让他看 CLAUDE媒桥初探"
贾维斯:
1. cc_user_create("alice","abc123","user") → 已建
2. cc_user_grant_session("alice","CLAUDE媒桥初探")
→ 模糊匹配到 e4f03da6...
3. cc_user_login_link("alice","abc123")
→ 返 markdown 链接
4. 回 IM: "✅ 已建 alice 账号。登录: [蓝火 dashboard · alice](https://keepermac.huo15.com/lanhuo?u=alice&upwd=abc123)"
| 身份 | 触发 | 看到 |
|---|---|---|
| super-admin | dashboard_password (默认 huo15.com) | 全部,绕 ACL |
| admin user | role=admin | 全部 |
| 普通 user | role=user | allowed_sessions ∪ cwd_prefix 命中的 |
cwd_prefix 比 session_id 白名单可持续——配一次"该 cwd 下未来所有会话"自动可见。
会话/任务
cc_session_list(limit, cwd_filter, q) — 列 CC 全部 jsonl + cc-media-task 元数据 + AI 摘要cc_recent_tasks / cc_my_tasks — cc_session_list 别名(语义路由)cc_session_get(session_id, limit) — 单条完整对话流(user/assistant/thinking/tool_use/tool_result)cc_session_search_content(q) — FTS5 全文搜对话内容(带 <mark> 高亮 snippet)cc_session_summarize(session_id, force_refresh) — v2.18.0 AI 一句中文摘要(缓存 + 按需重跑)cc_session_export(session_id, format) — Markdown 导出cc_session_share(session_id) / cc_session_share_list / cc_session_share_revoke — 公开 share 链接cc_session_rename(session_id, custom_title) — CLI 命名cc_task_get / cc_task_status / cc_task_events / cc_task_tail / cc_task_cancel — 任务详情/事件流/取消(注:cc_task_list / cc_task_search / cc_task_summary 已 v2.16.1 移除,统一走 cc_session_list)多用户
cc_user_create / set_role / grant_session / grant_cwd / grant_bulk / revoke / list / get / delete / login_linkcc_admin_list / add / remove记忆 / 公告 / 版本
cc_memory_add / list / search — 跨任务记忆(按 owner/topic 召回)cc_announce_set / get / clear — dashboard 顶栏公告cc_skill_version_probe — 检测当前会话 SKILL 是否落后cc_dashboard_url — 一键拿 dashboard 入口# 任务
POST /tasks 创建(含 owner_id)
GET /tasks?status=&platform=&owner_id=
GET /tasks/:id
POST /tasks/:id/{status,cancel,result}
DELETE /tasks/:id
GET /search?q=&owner_id=
# 事件
POST /tasks/:id/events 单条
POST /tasks/:id/events/batch 批量(推荐,relay 用)
GET /tasks/:id/events?since=N&wait=8 长轮询
GET /tasks/:id/stream SSE
DELETE /tasks/:id/events
# CC 原生 sessions
GET /cc-sessions?limit=&q= v2.18.0 含 summary 字段
GET /cc-sessions/:id
GET /cc-sessions/:id/export?format=md
GET /search-content?q= FTS5 全文
# 多用户
POST /users / GET /users / DELETE /users/:name
POST /me/password 自助改密
# Admin
POST /admin/gc 手工触发 watchdog
GET /announcement 公开公告(无 auth)
GET /version 诊断(含 schema_version)
每个 cc-media-bridge 装机后体验完全一致——4 件套保证:
SCHEMA_MIGRATIONS = [(1, "...", SQL), ...]scripts/defaults.json — 默认 config 单一来源,setup 时 cp~/.openclaw/workspace*/cc-media-task --doctor 23 项检查 + 修复命令openclaw-media-bridge/
├── setup.sh # 一键装机(双 LaunchAgent + MCP 注册 + skill 部署)
├── update.sh # git pull + 重启 + 同步
├── uninstall.sh # 反向卸载
├── skill/
│ ├── SKILL.md # OpenClaw 技能(含 harness L1/L5 命令式约束)
│ └── install-to-workspaces.sh # 自动扫所有 workspace*/
├── mcp-server/
│ └── server.py # HTTP + SSE + MCP + dashboard + watchdog(~5400 行)
├── bin/
│ ├── cc-media-task # 派活入口
│ ├── cc-stream-relay # stream-json 解析 + 批量推事件
│ ├── cc-summarize-sessions # v2.18.0 AI 摘要器
│ ├── cc-app-control # macOS Claude Desktop UI 控
│ └── cc-auto-auth # 自动点授权弹窗
├── scripts/
│ ├── defaults.json # 默认 config 模板
│ └── com.cc-media-bridge.summarizer.plist.template # v2.18.0
├── CLAUDE.md # 仓内开发指引(架构 + 事件 schema + 版本史)
└── README.md # 本文件
DB:~/.openclaw-media-bridge/tasks.db(WAL + 11 schema versions);不在仓内、卸载不删。