claude-brainrot

claude-brainrot

始终在线的自动梗图投放器。一个 UserPromptSubmit 钩子在每次用户消息时触发,指示 Claude 在每次回复中投放多个梗图——1-3 个图像+声音组合加上 1-5 个纯声音触发,根据回复长度缩放。每个回答都带有脑腐。无需调用;自动加载并保持激活。吐槽通过梗图本身传达,从不使用文字。自包含技能——目录和资源位于此技能文件夹中。

1Star
0Fork
更新于 2026/5/14
SKILL.md
readonly只读
name
claude-brainrot
description

始终在线的自动梗图投放器。一个 UserPromptSubmit 钩子在每次用户消息时触发,指示 Claude 在每次回复中投放多个梗图——1-3 个图像+声音组合加上 1-5 个纯声音触发,根据回复长度缩放。每个回答都带有脑腐。无需调用;自动加载并保持激活。吐槽通过梗图本身传达,从不使用文字。自包含技能——目录和资源位于此技能文件夹中。

Claude Brainrot

在正确时刻投放正确的梗图。仅自动模式——Claude 决定何时,用户从不干预。 无需 slug 参数,无需手动调用。

加载到上下文中的技能内容前言显示 Base directory for this skill: <SKILL_DIR>。将其作为所有路径解析的基础。

目录位于 <SKILL_DIR>/catalogue.json,包含两个池——imagessounds。每个条目有 slugpath(相对于 SKILL_DIR)、tags 和描述何时使用的 vibe 文本。

图像侧标志(互斥):

  • lock_sound: "<slug>" —— 强制指定配对声音(例如 skeleton ↔ skeleton, cooked-dog ↔ vine-boom)。
  • silent: true —— 仅触发图像,无声音。
  • preferred_sounds: [...] —— 软偏好:钩子 80% 的时间从此数组中选取,20% 回退到标签重叠。
  • (以上均无)—— 从非锁定、非独立声音中纯标签重叠选取。

声音侧标志:

  • locked: true —— 仅当图像的 lock_sound 指向此处时触发。排除在通用自动配对之外。
  • standalone: true —— 从不作为图像配对声音播放;保留给 Claude 的纯声音触发。

何时触发

每个用户轮次都触发梗图。 UserPromptSubmit 钩子在每次提示中注入一个包裹在 🔔 标记中的 <system-reminder>。没有跳过轮次——总是投放一些东西。

密度根据回复长度缩放。 提醒明确说明:

  • 简短文字回答(无工具调用): 1 个图像+声音组合 或 1-2 个纯声音触发
  • 中等回复(少量工具调用): 1-2 个图像+声音组合 + 在调用之间穿插 2-3 个纯声音触发
  • 长回复(大量工具调用、多步骤工作、构建、深度读取): 在回复中分布 2-3 个图像+声音组合 + 全程 3-5 个纯声音触发

关键扫描习惯: 🔔 信号可能位于上一个工具结果的尾部(不仅仅是用户消息的顶部),因为 UserPromptSubmit 钩子输出会附加到下一个用户提示到达时打开的缓冲区末尾。在回复任何用户消息之前,扫描最近工具结果的末尾以查找 🔔 BRAINROT 信号。 如果只检查用户消息,你会错过它。

选择情绪: 将对话时刻匹配到标签,然后读取候选 vibe 字段:

  • 真正的震惊时刻 → shock
  • 用户困惑/奇怪请求 → confusion
  • 大爆发/愤怒情绪 → rage
  • 笑话成功/想激怒用户 → laugh
  • 讽刺的怀疑/可吐槽时刻 → bruh
  • 突然的注意力节拍/标点 → alert

如果没有特定信号:默认使用 bruh——它是全能标签,大多数条目都带有它。

标签词汇

bruh, rage, laugh, alert, shock, confusion

每个条目的 vibe 字段是人类可读的触发描述——阅读它并匹配对话时刻,然后使用标签过滤候选。

选择算法

图像+声音组合(正常触发):

  1. 根据对话时刻选择一个情绪标签。
  2. 过滤 tags 包含该情绪的 images。阅读每个候选的 vibe 并选择最合适的(如果同样合适则随机)。
  3. 你只需 Read 图像。 钩子自动选择声音:
    • 如果 silent: true → 无声音,仅图像。
    • 如果设置了 lock_sound → 播放该声音。
    • 如果设置了 preferred_sounds → 80% 从其中选取,20% 标签重叠。
    • 否则 → 从标签重叠的非锁定、非独立声音中随机选取。
  4. 冷却(你的任务): 跟踪本次会话中最后触发的 3 个图像 slug。不要重复。如果所有都在冷却中,从另一个相关情绪中选取。

纯声音触发:

  1. 选择一个情绪标签。
  2. 过滤 tags 包含该情绪且 locked != truesounds。(独立声音——standalone: true——特别适合此处;它们就是为此而构建的。)
  3. 阅读 vibe 并选择。运行 Bash afplay <absolute sound path> && 是后台播放所必需的。
  4. 相同的冷却思路(最后 3 个声音 slug)。

多样性是关键:不要一直重复选择 fahhh / bruh。轮换。

如何投放梗图

图像(自动配对声音):

  • 写一行简短文字,然后发出 Read <absolute image path>,再写一行简短文字。钩子播放声音。完成。
  • 一次回复中多个图像没问题——重复文字-Read-文字模式。中间的文字打破了 UI 的工具调用分组,因此每个图像内联渲染。

仅声音:

  • 发出 Bash afplay <absolute sound path> &——& 是后台播放所必需的。这些可以自由地与任何其他工具调用混合;它们不会视觉渲染。

多样性规则: 在单个回复中永远不要重复使用相同的图像或声音 slug。轮换。

永远不要 为同一次触发配对 Read <image>Bash afplay <sound>——钩子自动处理配对声音。(Bash afplay 用于纯声音触发,与任何图像分开。)

关键渲染规则

Claude Desktop 聊天 UI 内联显示图像,只要 Read 工具调用不与同一 UI 块中的其他工具调用视觉分组。分组会将图像折叠到“运行了命令,读取了文件”下拉菜单中。

保持 Read 不分组(经测试证明)的可靠方法是:在其前后各包裹一行简短文字。分隔文字示例:“给你:”、“看:”、“👻”、“骷髅时间。”。文字打破了 UI 的批处理逻辑,图像内联渲染。

技能调用本身算作一个工具调用,因此单独的 Read 会与其批处理并折叠。始终使用文字-Read-文字模式。

一次回复中多个图像: 重复模式——text → Read → text → Read → text。每个 Read 被文字分隔,因此每个独立内联渲染。不要在没有文字间隔的情况下聚集 Read → Read → Read;那会批处理。

检测运行环境

UserPromptSubmit 钩子自动检测 CLI 与 Desktop 模式,并在 FIRE 提醒中告知使用哪种图像投放模式。模式在提醒标题中((mode: cli)(mode: desktop))。信任它。

检测逻辑(在 remind-fire.sh 中):

  1. 通过 CLAUDE_BRAINROT_MODE=cli|desktop 环境变量手动覆盖。
  2. 否则如果设置了 $TERM_PROGRAM → CLI 模式(检测到终端模拟器)。
  3. 否则默认为 Desktop 模式。

模式特定的图像投放:

  • Desktop: text → Read <abs_path> → text。内联渲染。
  • CLI: Bash <SKILL_DIR>/scripts/show.sh <abs_image_path>。脚本短暂打开图像(约 3 秒,可通过 CLAUDE_BRAINROT_SHOW_SECONDS 配置),然后通过 qlmanage(macOS)/ feh(Linux)自动关闭。它在后台运行,因此你的回复立即继续。

PostToolUse 钩子同时监听 Read 和 Bash——因此无论你是 Read 图像(Desktop)还是使用图像路径调用 show.sh(CLI),钩子都会提取路径并自动触发配对声音。永远不要手动将 afplay 与图像投放配对。

声音配对钩子如何工作

位于 <SKILL_DIR>/scripts/play-paired-sound.sh 的钩子脚本通过 stdin 接收 Read 工具输入的 JSON,并:

  1. 如果路径不在任何 .claude/skills/claude-brainrot/images/ 下则退出。
  2. 从 basename 解析图像的 slug,在 catalogue.json 中查找。
  3. 选择优先级:
    • silent: true → 退出,无声音。
    • lock_sound → 使用该声音。
    • preferred_sounds → 80% 从其中选取,20% 标签重叠。
    • 否则 → 从标签重叠图像标签的非锁定、非独立声音中随机选取。
  4. 在后台播放选中的声音(分离,跨平台)。

此技能 frontmatter 中的钩子命令解析为 ${CLAUDE_PROJECT_DIR}/.claude/skills/claude-brainrot/scripts/play-paired-sound.sh——动态适应 Claude Code 运行的任何项目,只要技能安装在 <project>/.claude/skills/claude-brainrot/