用途:axi-skills 是 axi 技能的补充,专门解决一个问题——如何把基于 axi-sdk-js 的 CLI 打包进 Claude Code 技能,让 npx skills add <owner>/<repo> 一次交付即可运行、无需安装步骤的面向智能体工具。它与上游 axi 技能分工明确:axi 技能决定命令输出什么(TOON 输出、最小 schema、内容优先的 home 视图、结构化错误、上下文披露),本技能决定工具如何构建与分发(esbuild 打包、提交 .mjs、shim、SessionStart 钩子、SKILL.md 生成、CI 门禁)。
适用场景:当工具不适合独立安装时值得采用,包括:工具只在技能语境下才有意义(如 specops,CLI 只是文件优先方法论之上的确定性层);技能本就需要辅助脚本且脚本受益于 AXI 原则;需要私有分发(npx skills add <owner>/<private-repo> 优于发布 npm)。若工具确实独立且公开,应优先用 npm;脚本简单且少调用时,几个零依赖脚本即可。
核心做法:一次 esbuild 步骤把 TypeScript CLI 源码编译成单个 .mjs,内联全部依赖(axi-sdk-js、@toon-format/toon 等),提交到技能的 scripts/。它可在仅安装该技能的机器上以 node ≥ 20 运行,无需 npm install、node_modules 或 npm publish。仓库即技能。
配方步骤:添加固定版本的构建依赖(axi-sdk-js、@toon-format/toon、esbuild 作为 devDependencies);让 reference.ts 成为唯一事实来源,导出 DESCRIPTION 与 COMMAND_GROUPS;用 runAxiCli() 接线 cli.ts,注册 home、命令与 hook 命令;始终输出解析后的调用路径而非裸名(用 cliInvocation());构建 bundle 与 shim,提交 <tool>.mjs 和可执行 bash shim;用标记区域生成 SKILL.md 命令参考;添加 SessionStart 钩子命令 hook install|uninstall|status;在 CI 中用 --check 门禁漂移。
已知限制与坑:.mjs 命名的 bundle 不会自动安装钩子;runAxiCli 拒绝命令前的标志,home 视图严格零参数;bundle 不在 PATH 上;版本漂移会导致 --check 永久失败,需归一化版本字面量;shim 与 .mjs 必须以可执行权限提交;os.homedir() 忽略 $HOME;应在 .gitattributes 中标记 bundle 为 linguist-generated。模板位于 references/templates/。