# Claude技能管理仓库 `monorepo` `AI技能` `Next.js` `CLI工具` `自动化` English | [中文](./README.zh-CN.md) # adonis-skills `adonis-skills` 是一个以智能体为中心的技能仓库,采用 `pnpm + Turborepo + Next.js 16` monorepo 架构构建。 目标: - 让技能可通过 `npx skills add` 直接安装 - 提供展示技能元数据和安装命令的 Web UI - 为未来演进保留空间(更多技能、可选 npm 发布) **在线站点**: ## 当前状态 - 公开技能:`commit`、`staged-review-validator`、`tailwindcss-next-init`、`weekly-report` - Web 站点:`apps/web`(Next.js 16) - 技能目录:`skills/*` - 技能索引生成:`scripts/generate-skills-index.mjs` - 技能结构校验:`scripts/validate-skills.mjs` ## 仓库结构 ```txt . ├── apps/ │ └── web/ ├── skills/ │ ├── commit/ │ ├── staged-review-validator/ │ ├── tailwindcss-next-init/ │ └── weekly-report/ ├── scripts/ │ ├── generate-skills-index.mjs │ └── validate-skills.mjs ├── turbo.json ├── pnpm-workspace.yaml └── .github/workflows/ci.yml ``` ## 快速开始 ```bash pnpm install pnpm skills:validate pnpm skills:index pnpm dev ``` 在浏览器中打开 `http://localhost:3000`。 ## 安装技能 默认仓库标识符:`adonis0123/adonis-skills` ```bash npx skills add adonis0123/adonis-skills --skill weekly-report npx skills add adonis0123/adonis-skills --skill tailwindcss-next-init ``` 若仓库所有者发生变更: 1. 设置 `NEXT_PUBLIC_SKILLS_REPO=<新所有者>/adonis-skills`(例如写入 `.env.local`) 2. 重启 `pnpm dev`(或重新部署)以应用新值 ## 命令速查表(每条命令的作用) 下表说明 `package.json` 中各脚本的含义。 | 命令 | 实际执行 | 含义 / 使用场景 | | --- | --- | --- | | `pnpm dev` | `turbo run dev --filter=@adonis-skills/web` | 启动 Web 站点开发模式(仅 `apps/web`)。用于日常本地 UI 调试。 | | `pnpm build` | `turbo run build` | 运行 monorepo 构建任务。提交变更前确认仓库可正常构建时使用。 | | `pnpm lint` | `turbo run lint` | 执行代码风格/lint 检查。修改 TS/JS 文件后使用。 | | `pnpm typecheck` | `turbo run typecheck` | 运行 TypeScript 类型检查。修改类型/API 后使用。 | | `pnpm skills:new` | `node --experimental-strip-types ./scripts/create-skill.ts` | 创建新技能的交互式入口。自动执行:初始化 -> 快速校验 -> 完整校验 -> 刷新索引。 | | `pnpm skills:finalize -- ` | `node --experimental-strip-types ./scripts/finalize-skill.ts` | 对 `skills/*` 下已有或复制的技能执行标准 finalize 流程:`quick-validate` -> `validate` -> `index`。支持相对路径和绝对路径。 | | `pnpm skills:finalize:new [-- --dry-run]` | `node --experimental-strip-types ./scripts/finalize-new-skills.ts` | 自动模式:仅检测 `skills//SKILL.md` 状态为 `A` 或 `??` 的新增技能,逐个执行 finalize,然后暂存相关文件(`skills/` 及变更的技能索引)。若未发现新技能,则回退到 `skills:new` 并重新扫描。 | | `pnpm skills:init --path skills` | `python3 ./.agents/skills/repo-skill-creator/scripts/init_skill.py` | 仅初始化技能目录/模板内容(手动模式)。不需要完整自动化流程时使用。 | | `pnpm skills:quick-validate skills/` | `python3 ./.agents/skills/repo-skill-creator/scripts/quick_validate.py` | 校验单个技能(尤其是 frontmatter 合法性)。编辑单个技能后作为快速本地检查使用。 | | `pnpm skills:openai-yaml ` | `python3 ./.agents/skills/repo-skill-creator/scripts/generate_openai_yaml.py` | 为技能生成 `agents/openai.yaml`(OpenAI 技能接口元数据)。需要接口元数据时使用。 | | `pnpm skills:validate` | `turbo run skills:validate --filter=@adonis-skills/web` | 全仓库技能校验。提交/CI 前必须执行。 | | `pnpm skills:index` | `turbo run skills:index --filter=@adonis-skills/web` | 重新生成 `apps/web/src/generated/skills-index-lite.json` 和 `apps/web/src/generated/skills-detail-index.json`。添加或更新技能后执行,保持 Web 数据最新。 | | `pnpm skills:install:local` | `node --experimental-strip-types ./scripts/install-local-skills.ts` | 将 `skills/` 中的技能安装到本地 `.agents/skills`(支持交互式选择、`--all`、`--skill`)。用于本地智能体测试。 | | `pnpm skills:test:local` | `node --experimental-strip-types ./scripts/install-local-skills.ts --sync-llm` | 先本地安装,再同步到 `.claude/skills`。在本地 Claude/Codex 运行时中测试时使用。 | | `pnpm skills:sync:llm` | `node --experimental-strip-types ./scripts/sync-llm-skills.ts` | 原子性地将 `.agents/skills` 同步到 `.claude/skills`。仅需重新执行同步时使用。 | | `pnpm ruler:apply` | `pnpm dlx @intellectronica/ruler@latest apply --local-only --no-backup` | 根据 `.ruler/*` 生成/更新根目录产物(如 `AGENTS.md` 和 `CLAUDE.md`)。修改规则后执行。 | | `pnpm postinstall` | 条件性 postinstall 钩子(本地执行 `ruler:apply` 和 `skills:sync:llm`;CI 中跳过) | 由 `pnpm install` 触发:本地环境执行 `ruler:apply` 和 `skills:sync:llm`;CI 跳过。 | 注意: - 默认直接流程(无路径):`skills:finalize:new` - 新技能最常用流程:`skills:new` -> `skills:validate` -> `skills:index` - 最常用手动流程:`skills:init`(或手动复制)-> `skills:finalize -- ` ## 新技能标准流程(SOP) 自动模式(推荐,适用于已在 `skills/*` 下添加或复制了技能的情况): ```bash pnpm skills:finalize:new ``` 预演(dry-run): ```bash pnpm skills:finalize:new -- --dry-run ``` 推荐快捷路径: ```bash pnpm skills:new ``` 默认以交互式方式收集 `name`、`description`、可选资源目录,然后依次执行: 1. 初始化技能目录(默认路径:`skills/`) 2. 单技能快速校验(`skills:quick-validate`) 3. 全仓库校验(`skills:validate`) 4. 索引重新生成(`skills:index`) 非交互式创建示例: ```bash pnpm skills:new -- --name demo-skill --description "用于演示新技能工作流" --resources scripts,references --non-interactive ``` 手动模式(先初始化或复制,再 finalize): ```bash pnpm skills:init --path skills --resources scripts,references pnpm skills:finalize -- skills/ ``` 仅执行 finalize(无需重新初始化): ```bash # 相对路径 pnpm skills:finalize -- skills/code-inspector-init # 绝对路径(末尾 / 会自动处理) pnpm skills:finalize -- /Users/adonis/coding/adonis-skills2/skills/code-inspector-init/ # 仅预览命令,不实际执行 pnpm skills:finalize -- --dry-run skills/code-inspector-init ``` ## 本地交互式安装与测试 本仓库支持将 `skills/` 中的技能安装到 `.agents/skills`,并可选择同步到 `.claude/skills`。 ```bash # 默认:进入交互式菜单(选择 + 复选框) pnpm skills:install:local # 交互式安装后,一键同步到 .claude/skills pnpm skills:test:local ``` 交互式菜单流程: 1. 选择 `安装选定技能` / `安装全部技能` / `退出` 2. 若选择部分安装,进入多选列表(空格键勾选) 3. 确认并执行安装 同样支持非交互式模式: ```bash # 安装单个技能(如需多个可重复 --skill) pnpm skills:install:local -- --no-interactive --skill weekly-report # 安装全部 pnpm skills:install:local -- --no-interactive --all # 非交互式安装后同步 pnpm skills:test:local -- --no-interactive --skill weekly-report ``` 注意: - 安装命令底层使用 `npx skills add ./skills -a codex ...`,目标目录为 `.agents/skills` - `skills:test:local` 在安装后执行 `skills:sync:llm`,将 `.agents/skills` 镜像到 `.claude/skills` ## CI GitHub Actions 执行: - `pnpm install --frozen-lockfile` - `pnpm skills:validate` - `pnpm skills:index` - `pnpm --filter @adonis-skills/web run i18n -- --compile --strict` - `pnpm turbo run lint typecheck build --filter=@adonis-skills/web` 各步骤校验内容: - `install`:基于锁文件的一致性依赖安装 - `skills:validate`:`skills/*` 的 frontmatter/schema 合法性 - `skills:index`:重新生成 `apps/web/src/generated/skills-index.json` - `Prepare i18n Catalogs`:将 `src/locales/**/*.po` 编译为 `*.mjs`,并重新生成 `src/i18n/catalog-manifest.ts` - `lint/typecheck/build`:代码质量、TS 正确性及生产构建可用性 i18n 步骤为何必须执行: - 编译后的 Lingui 目录(`src/locales/**/*.mjs`)被 git 刻意忽略。 - `src/i18n/catalog-manifest.ts` 导入了这些 `.mjs` 文件。 - 若 CI 中未预先编译目录,`typecheck` 会因 `TS2307`("找不到模块 .../src/locales/.../*.mjs")而失败。 常见失败类别: - 依赖/安装问题(`pnpm install`) - 技能校验失败(`pnpm skills:validate`) - i18n 编译/翻译严格检查失败(`Prepare i18n Catalogs`) - TypeScript 模块/类型错误(`typecheck`) 排错规则: - 若看到 `TS2307` 错误路径指向 `src/locales/**/*.mjs`,请先执行 `pnpm --filter @adonis-skills/web run i18n -- --compile`,再重新运行 typecheck。 失败将阻断合并,以确保 main 分支始终可部署。 ## Vercel 部署(自动) 本仓库推荐的 Vercel 设置: - 安装命令:`pnpm install --frozen-lockfile` - 构建命令:`pnpm turbo run build --filter=@adonis-skills/web` - 输出目录:默认 Next.js 输出(无需手动覆盖) main 分支更新后,Vercel 自动部署。若出现问题版本,在 GitHub 回退到上一个绿色提交即可。 ## 未来计划 V1 仅支持 GitHub 安装流程。后续可添加 npm 发布支持(包括 GitHub Action 发布和回滚策略)。