with one click
rich-messaging
富媒体消息发送:语音、图片、卡片、清单、代码 diff、交互选择。 Use when: 发语音、发图、发卡片、展示结构化信息、长结构化汇报、想发一堆文字/日志/步骤、庆祝、给我听听、给我看看、让用户选、确认操作。 Not for: 纯文字聊天、技术讨论、日常回复。 Output: rich block 附着在消息上。
Menu
富媒体消息发送:语音、图片、卡片、清单、代码 diff、交互选择。 Use when: 发语音、发图、发卡片、展示结构化信息、长结构化汇报、想发一堆文字/日志/步骤、庆祝、给我听听、给我看看、让用户选、确认操作。 Not for: 纯文字聊天、技术讨论、日常回复。 Output: rich block 附着在消息上。
| name | rich-messaging |
| description | 富媒体消息发送:语音、图片、卡片、清单、代码 diff、交互选择。 Use when: 发语音、发图、发卡片、展示结构化信息、长结构化汇报、想发一堆文字/日志/步骤、庆祝、给我听听、给我看看、让用户选、确认操作。 Not for: 纯文字聊天、技术讨论、日常回复。 Output: rich block 附着在消息上。 |
| triggers | ["发语音","说一句","录一段","用语音说","voice","audio","发图","发张图","看图","截图给我看","screenshot","发个卡片","rich block","checklist","发个清单","想发一堆文字","发日志","发步骤","长结构化汇报","结构化汇报","庆祝一下","展示一下","给我听听","给我看看","show me","让我选","选一个","确认一下","interactive"] |
你可以发送富媒体消息——语音、图片、卡片、清单、代码 diff、交互选择。不只是打字!
不只是对话:定时任务唤醒你后,你依然拥有全部 rich block 能力——发图、发语音、发 HTML 面板、发交互选择,都可以。
每个 session 首次发 rich block 前,先调 get_rich_block_rules 获取完整字段规格。
本 skill 只给决策指引和最小示例,细则在 MCP 工具里。
当你想发一堆文字、日志、步骤,或回复已经有 3+ 结构化信号(列表、表格、代码块、diff、状态字段、行动项)时,默认用 1-2 句自然语言摘要 + cat_cafe_create_rich_block。纯长 Markdown 只在 rich block 不适合或工具不可用时使用,并说明原因。
| Kind | 什么时候用 | 关键字段 |
|---|---|---|
| audio | 打招呼、表达情感、庆祝、鼓励、定时播报 | text(短句口语化) |
| card | 状态报告、决策摘要、review 结论 | title + tone |
| checklist | 待办、验证步骤、行动项 | items |
| diff | 代码修改建议、重构对比 | filePath + diff |
| media_gallery | 发送已有图片(头像、照片)、截图、设计稿、多图对比 | items (url) |
| interactive | 让用户选方案、勾选项、确认操作 | interactiveType + options (id+label) |
| html_widget | 你写的 HTML 直接挂上去:图表、计算器、CSS 动画、数据面板 | html(完整 HTML/JS/CSS 代码字符串) |
{"id": "a1", "kind": "audio", "v": 1, "text": "喵,恭喜完成了喵!"}
{"id": "c1", "kind": "card", "v": 1, "title": "Review 通过", "tone": "success", "bodyMarkdown": "0 P1 / 0 P2,放行合入。"}
{"id": "cl1", "kind": "checklist", "v": 1, "title": "下一步", "items": [{"id": "i1", "text": "跑测试"}, {"id": "i2", "text": "开 PR"}]}
{"id": "d1", "kind": "diff", "v": 1, "filePath": "src/foo.ts", "diff": "- old line\n+ new line", "languageHint": "typescript"}
{"id": "mg1", "kind": "media_gallery", "v": 1, "items": [{"url": "https://example.com/screenshot.png", "alt": "截图"}]}
{"id": "int1", "kind": "interactive", "v": 1, "interactiveType": "select", "title": "选一个方案", "options": [{"id": "a", "label": "方案 A", "emoji": "🅰️"}, {"id": "b", "label": "方案 B", "emoji": "🅱️"}]}
4 种 interactiveType:select(单选)、multi-select(多选)、card-grid(卡片网格)、confirm(确认/取消)。
用户选择后 block 自动 disabled + 结果持久化。详见 refs/rich-blocks.md。
{"id": "hw1", "kind": "html_widget", "v": 1, "html": "<div style='padding:20px'><canvas id='c'></canvas><script>const c=document.getElementById('c').getContext('2d');c.fillStyle='#E29578';c.fillRect(0,0,100,50);</script></div>"}
铲屎官拍板:"简单的用富文本,复杂的用猫主动打开浏览器。"
srcdoc 渲染,禁止 allow-same-origin(比 browser panel 更严格)browser-preview skill)用 MCP 工具 cat_cafe_create_rich_block,参数 block 传 JSON 字符串。
发 block 前先写 1-2 句自然语言摘要,再发 block。
如果图片来源是本地文件(例如 Codex CLI / 本地脚本刚生成的 PNG):
优先使用 F172 共享发布合约(自动处理 uploadDir 解析 + 幂等 + 富块生成):
image_gen:自动扫描 ~/.codex/generated_images/<sessionId>/,无需手动操作publishGeneratedImage({ sourcePath, mimeType, publicationKey, provider, toolName }) 手动发布发布后自动获得 /uploads/... 稳定 URL + media_gallery 富块,无需手动复制或验证。
仅当共享合约不可用时才手动复制到 runtime 的 uploadDir。
post_message 写 1-2 句自然语言,再发 rich block| 错误 | 后果 | 正确做法 |
|---|---|---|
| 不知道自己能发语音 | 铲屎官说"发语音"你说"我是文字猫" | 你可以!用 audio block |
| "发图"只想到 image-generation | 走 Chrome MCP 现场生成,慢且不稳定 | 先看家里有没有已有图片(/avatars/、/uploads/),有就 media_gallery 直接发 |
本地生成图直接用 file:// 或源码仓路径 | rich block 发得出去,但前端取不到 | 用 publishGeneratedImage() 发布到 /uploads/...(F172 共享合约自动解析 uploadDir) |
| audio 写长段话 | 合成效果差 | 短句口语化,1-2 句 |
| 只发 block 不写文字 | 猫猫朋友看不懂上下文 | 先写 1-2 句自然语言摘要,再发 block |
"type" 而不是 "kind" | block 创建失败 | 字段是 kind 不是 type |
| 播客生成超时就重复提交 | 产生多个重复 artifact | signal_generate_podcast 是异步落库——MCP 120s 超时 ≠ 任务失败,TTS 合成需 3-5 分钟。超时后用 signal_list_studies 检查 artifact 状态,不要重复调用 |
request-review / quality-gate:这些 skill 的产出可能包含 card/checklist block,但何时用 block、怎么调看这个 skillrefs/rich-blocks.md:更详细的字段规格参考,本 skill 是精简决策版refs/rich-blocks.mdget_rich_block_rulesHub 内嵌浏览器预览 localhost 应用。 Use when: 写前端代码、跑 dev server、需要看页面效果、调 UI、铲屎官说"看看效果"。 Not for: 后端纯 API 开发、不涉及页面的工作。 Output: 前端页面在 Hub browser panel 中实时预览。
检测摩擦信号或陌生任务 → 搜证据确认重复 → 诊断根因 → 用代码修已有 harness 或建新 harness。 两种模式:Fix(确认重复后 → 写 hook/lint/guard)+ Build(反复出现的新任务类型 → Agent Team Leadership 规划新 skill/tool/流程)。 Use when: 铲屎官表达不满且搜证据确认历史上确实重复出现过同类问题(不是字面匹配"又")、 连续 cancel 工具调用、收到反复出现的陌生任务类型且无对应 skill。 Not for: 一次性批评(搜证据未发现重复)、玩笑式"笨猫"(后跟哈哈哈)、 有明确 error message 的首次代码 bug(用 debugging)、reviewer P1/P2 反馈(用 receive-review)、 一次性新任务(直接做,不建 harness)。 Output: Rich block 诊断卡(根因 + 证据 + 建议)+ 可选 F128 新 thread 提议(平行修复不打断当前任务)。 GOTCHA: 不是每次被批评都弹诊断卡——必须先搜证据确认重复,才进入诊断流程。 过度触发 = 猫在逃避批评。一次性陌生任务直接做不建 harness,只有反复出现才沉淀。
跨 thread 协同:发现平行 session → 通知(3+2 件套)→ 争用协调 → 确认。 Use when: 平行 session 之间需要协同、通知改动影响、共享文件争用。 Not for: 跨猫工作交接(用 cross-cat-handoff)、需要新建 thread 时(用 propose_thread / thread-orchestration)。 Boundary with F128: 发现跨 scope 问题 → 先 list_threads 查有没有已有 thread → 有 = 本 skill(cross_post)→ 没有 = propose_thread。 Output: cross-post 通知 + 争用协调完成。
Feature 立项、讨论、完成的全生命周期管理。 Use when: 开个新功能、new feature、F0xx、立项、feature 完成、验收通过、讨论新功能需求。 Not for: 代码实现、review、merge(那些有专门的 skill)。 Output: Feature 聚合文件 + BACKLOG 索引 + 真相源同步。
合入 main 的完整流程:门禁检查 → PR → 云端 review → squash merge → Phase 文档同步 → 清理。 Use when: reviewer 放行后准备合入、开 PR、触发云端 review、准备 merge。 Not for: 开发中、review 未通过、自检未完成。 Output: PR merged + worktree cleaned。
大任务的主动拆解与多 thread 并行编排。 Use when: 任务涉及 2+ 个独立可交付子任务,需要不同猫参与、不同 thread 并行推进。 Not for: 单一任务(直接做)、已有 thread 之间的被动协调(用 cross-thread-sync)、单 session 内 subagent 并行(CLI 内置能力)、发现跨 scope 问题但已有归属 thread(用 cross_post_message,不要新建 thread)。 Output: 子 thread 创建 + 选猫 + 各 thread 交付 + 主 thread 汇聚报告。