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