src/skills/ 只有 3 个文件,管理 botmux 内置桥接技能(教 CLI 会话如何使用 botmux 命令与飞书交互)的定义与投递。用户自定义技能是独立体系(src/core/skills/* + services/skill-registry-store.ts),见文末。使用视角见 skill-cli。

内置技能清单(definitions.ts,82KB)

每个技能就是一份可直接落盘的 SKILL.md 模板字符串。契约:必须只用 botmux <subcmd> shell 命令(CLI 是规范接口)、不依赖 MCP 工具(不是每个 CLI 都接了 MCP)、frontmatter 只留 name + description。

BUILTIN_SKILLS(definitions.ts:1508)共 11 个:

技能用途
botmux-send发消息(图文/附件/卡片/@mention/—attention 举手)
botmux-history / botmux-quoted拉会话历史 / 按 id 读单条消息
botmux-schedule话题内定时提醒
botmux-bots列出群内可协作机器人
botmux-handoff多 bot 接力交棒
botmux-chat-rename改群名
botmux-workflow / botmux-workflow-createv3 Workflow 运行 / v2 迁移维护
botmux-orchestrate多 bot 长期项目编排
botmux-goal-askv3 goal-mode 文件式 ask 协议

条件安装(不进 BUILTIN_SKILLS):botmux-ask(ASK_SKILL,仅当 CLI 不支持 hook 问答时装,asksViaHook 的适配器不装)、botmux-whiteboard(仅白板功能开启时装,关闭则删目录,不给模型看已关闭的能力)。RETIRED_SKILL_NAMES(botmux-thread-messages / botmux-needs-help / botmux-worker-budget)由 installer 在升级时清理残留。

三种投递通道(injection-mode.ts)

按适配器能力(非硬编码 id 列表)分类 SkillInjectionSupport:

  1. dynamic — claude 家族(claude-code / seed / relay,适配器声明 pluginDir):installer.ensurePluginSkills 把技能物化为一个 Claude Code plugin({pluginDir}/.claude-plugin/plugin.json name=botmux + skills/<name>/SKILL.md),每次 spawn 用 --plugin-dir 按会话注入,绝不写全局 ~/.claude/skills。模式开关对它们不适用。
  2. global skillsDir — codex / gemini / opencode / cursor / coco / traex / pi / oh-my-pi / mtr / kiro-cli / genius / grok 等只认全局技能目录的 CLI。三种注入模式 global | prompt | off,解析顺序:per-bot skillInjection(bots.json)→ 机器级 skills.builtinInjection(config.json)→ 默认 prompt。
    • global:装进 CLI 全局目录(原生发现,但用户手动跑的独立 codex/gemini 也会看到并可能误触发)。安装决策按目录而非 cliId(shouldInstallGlobalSkills,多个 CLI 共享 ~/.trae/skills 这类目录,取 bot 并集)。
    • prompt(默认):不落全局盘,把紧凑技能目录注入会话 prompt(session-manager buildBuiltinSkillCatalogBlock),模型按需 botmux skill show <name> 拉全文——会话级隔离,零泄漏。<botmux_routing> 块已完整覆盖的 history/quoted/bots 不进目录以控成本。
    • off:只留路由提示 + botmux --help 指针。
  3. none — 无技能机制的适配器(antigravity / aiden / hermes / mir / mira / codex-app 等)。

注入时机与清理

  • worker-pool ensureCliSkills(src/core/worker-pool.ts:1889)在每次会话 spawn 前执行:pluginDir 路径物化 plugin + 装 hook(installHook / ensureAskHook)+ 按需装 ask 技能;global 路径按模式决定是否写共享目录,且 prompt/off 模式下每次 spawn 清掉共享目录里的 botmux-* 残留(运行时从 global 切回 prompt 立即生效,不等 daemon 重启;只动 botmux- 命名空间,不碰用户技能)。白板技能每次 spawn 重新评估开关,不进 once-cache。
  • prompt 侧:session-manager 组装新话题 prompt 时,对非 claude 家族按模式插入技能目录块 / help 指针。

会话内命令

  • botmux skill list / show <name>(src/core/skills/cli-session-command.ts):列本会话可用技能(用户自定义 manifest + 内置目录)、按需读内置技能全文——prompt 模式的拉取端。
  • botmux skills ...(src/core/skills/cli-admin-command.ts):机器级管理——从 git/local 安装用户技能包、注入模式默认值设置、技能引用分析等。

用户自定义技能(discovery / package / policy / manifest-store / claude-plugin-delivery 等)与内置技能生命周期刻意解耦:installer 注释明确「只管 botmux-owned bridge/ask skills」。

相关:skill-cli、adapters、cli、hooks