[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6BY4Q9V1GKP9ZXTY2DNHHRW":3,"skill-same:01M6BY4Q9V1GKP9ZXTY2DNHHRW":53},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":26,"linkOnly":27,"markdownContent":28,"markdownBody":29,"frontMatter":30,"refName":32,"commitSha":33,"skillDirectory":34,"forksCount":35,"repositoryHtmlUrl":36,"repositoryHomepageUrl":6,"ownerHtmlUrl":37,"ownerBlogUrl":38,"ownerDescription":6,"updatedAt":39,"install":40,"resources":52},"01M6BY4Q9V1GKP9ZXTY2DNHHRW","scaffold-package",null,"Scaffold a new package in the monorepo with correct conventions, configs, and policy compliance","tylerbutler\u002Ftools-monorepo","tylerbutler","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F19589?v=4","01M6BY414FRX1V1TCNCPMS81ZE","Tyler Butler","01M6BY4195PZPBKNQ8N9J1Z9WG",3,"MIT","https:\u002F\u002Fgithub.com\u002Ftylerbutler\u002Ftools-monorepo\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fscaffold-package\u002FSKILL.md",[],[19,20,21,22,23,24,25],"scaffold","package","scaffold package","policy","compliance","correct","monorepo","2026-11-10 10:12:30",false,"---\nname: scaffold-package\ndescription: Scaffold a new package in the monorepo with correct conventions, configs, and policy compliance\ndisable-model-invocation: true\n---\n\n## Scaffold a New Package\n\nCreate a new package in `packages\u002F` following all monorepo conventions.\n\n### Workflow\n\n1. **Gather info** - Ask the user for:\n   - Package name (with or without `@tylerbu\u002F` scope)\n   - Package type: `library`, `cli` (OCLIF), `docs` (Astro\u002FStarlight), or `remark-plugin`\n   - Brief description\n   - Whether it should be private (default: false, except docs sites which are always private)\n\n2. **Create directory** - `packages\u002F\u003Cfolder-name>\u002F`\n   - Folder name should match the unscoped package name\n\n3. **Create package.json** matching existing conventions:\n   - `\"type\": \"module\"`\n   - `\"license\": \"MIT\"`\n   - `\"author\": \"Tyler Butler \u003Ctyler@tylerbutler.com>\"`\n   - `\"bugs\": \"https:\u002F\u002Fgithub.com\u002Ftylerbutler\u002Ftools-monorepo\u002Fissues\"`\n   - `\"repository\": { \"type\": \"git\", \"url\": \"git+https:\u002F\u002Fgithub.com\u002Ftylerbutler\u002Ftools-monorepo.git\", \"directory\": \"packages\u002F\u003Cname>\" }`\n   - `\"homepage\"` pointing to GitHub tree\n   - Exports using `.\u002Fesm\u002F` output directory with types\n   - Scripts: `clean`, `build:compile`, `format`, `check:format`, `lint`, `test` as appropriate for the type\n   - `\"nx\": { \"targets\": { \"build\": {} } }` to enable Nx orchestration\n   - For CLIs: add `bin`, `oclif` config, `build:manifest`, `build:readme` scripts\n   - For docs sites: add `\"private\": true`, `build:site`, `dev`, `preview` scripts, `check:astro`\n\n4. **Create tsconfig.json**:\n   ```json\n   {\n     \"extends\": \"..\u002F..\u002Fconfig\u002Ftsconfig.strict.json\",\n     \"include\": [\"src\u002F**\u002F*\"],\n     \"compilerOptions\": {\n       \"rootDir\": \".\u002Fsrc\",\n       \"outDir\": \".\u002Fesm\",\n       \"types\": [\"node\"]\n     }\n   }\n   ```\n\n5. **Create vitest.config.ts** (for non-docs packages):\n   ```typescript\n   import { defineConfig, mergeConfig } from \"vitest\u002Fconfig\";\n   import defaultConfig from \"..\u002F..\u002Fconfig\u002Fvitest.config\";\n   const config = mergeConfig(defaultConfig, defineConfig({}));\n   export default config;\n   ```\n\n6. **Create src\u002Findex.ts** with a placeholder export\n\n7. **Create CLAUDE.md** with package-specific guidance (keep it concise - 20-30 lines)\n\n8. **Run setup commands**:\n   ```bash\n   pnpm install\n   .\u002Fpackages\u002Frepopo\u002Fbin\u002Fdev.js check --fix\n   pnpm syncpack:fix\n   ```\n\n9. **Verify** - Run `pnpm nx run \u003Cpackage>:build` to confirm the package builds\n\n### Key Constraints\n- Use tabs for indentation (not spaces)\n- Use `.mts` for TypeScript files if they need to be explicitly ESM (though `.ts` is fine with `\"type\": \"module\"`)\n- No `.js` file extensions - use `.mjs` or `.cjs`\n- Sort package.json keys (repopo enforces this)\n- Internal deps use `workspace:^` protocol\n","## Scaffold a New Package\n\nCreate a new package in `packages\u002F` following all monorepo conventions.\n\n### Workflow\n\n1. **Gather info** - Ask the user for:\n   - Package name (with or without `@tylerbu\u002F` scope)\n   - Package type: `library`, `cli` (OCLIF), `docs` (Astro\u002FStarlight), or `remark-plugin`\n   - Brief description\n   - Whether it should be private (default: false, except docs sites which are always private)\n\n2. **Create directory** - `packages\u002F\u003Cfolder-name>\u002F`\n   - Folder name should match the unscoped package name\n\n3. **Create package.json** matching existing conventions:\n   - `\"type\": \"module\"`\n   - `\"license\": \"MIT\"`\n   - `\"author\": \"Tyler Butler \u003Ctyler@tylerbutler.com>\"`\n   - `\"bugs\": \"https:\u002F\u002Fgithub.com\u002Ftylerbutler\u002Ftools-monorepo\u002Fissues\"`\n   - `\"repository\": { \"type\": \"git\", \"url\": \"git+https:\u002F\u002Fgithub.com\u002Ftylerbutler\u002Ftools-monorepo.git\", \"directory\": \"packages\u002F\u003Cname>\" }`\n   - `\"homepage\"` pointing to GitHub tree\n   - Exports using `.\u002Fesm\u002F` output directory with types\n   - Scripts: `clean`, `build:compile`, `format`, `check:format`, `lint`, `test` as appropriate for the type\n   - `\"nx\": { \"targets\": { \"build\": {} } }` to enable Nx orchestration\n   - For CLIs: add `bin`, `oclif` config, `build:manifest`, `build:readme` scripts\n   - For docs sites: add `\"private\": true`, `build:site`, `dev`, `preview` scripts, `check:astro`\n\n4. **Create tsconfig.json**:\n   ```json\n   {\n     \"extends\": \"..\u002F..\u002Fconfig\u002Ftsconfig.strict.json\",\n     \"include\": [\"src\u002F**\u002F*\"],\n     \"compilerOptions\": {\n       \"rootDir\": \".\u002Fsrc\",\n       \"outDir\": \".\u002Fesm\",\n       \"types\": [\"node\"]\n     }\n   }\n   ```\n\n5. **Create vitest.config.ts** (for non-docs packages):\n   ```typescript\n   import { defineConfig, mergeConfig } from \"vitest\u002Fconfig\";\n   import defaultConfig from \"..\u002F..\u002Fconfig\u002Fvitest.config\";\n   const config = mergeConfig(defaultConfig, defineConfig({}));\n   export default config;\n   ```\n\n6. **Create src\u002Findex.ts** with a placeholder export\n\n7. **Create CLAUDE.md** with package-specific guidance (keep it concise - 20-30 lines)\n\n8. **Run setup commands**:\n   ```bash\n   pnpm install\n   .\u002Fpackages\u002Frepopo\u002Fbin\u002Fdev.js check --fix\n   pnpm syncpack:fix\n   ```\n\n9. **Verify** - Run `pnpm nx run \u003Cpackage>:build` to confirm the package builds\n\n### Key Constraints\n- Use tabs for indentation (not spaces)\n- Use `.mts` for TypeScript files if they need to be explicitly ESM (though `.ts` is fine with `\"type\": \"module\"`)\n- No `.js` file extensions - use `.mjs` or `.cjs`\n- Sort package.json keys (repopo enforces this)\n- Internal deps use `workspace:^` protocol\n",{"name":5,"description":7,"disable-model-invocation":31},true,"main","77276eebb35d712fe74fbae30800230ea0dcefb9",".claude\u002Fskills\u002Fscaffold-package",1,"https:\u002F\u002Fgithub.com\u002Ftylerbutler\u002Ftools-monorepo","https:\u002F\u002Fgithub.com\u002Ftylerbutler","https:\u002F\u002Ftylerbutler.com","2026-11-06 00:26:46",{"source":8,"skillName":5,"commands":41,"prompt":51,"zipAvailable":31},[42,45,48],{"tool":43,"command":44},"npx","npx skills add tylerbutler\u002Ftools-monorepo --skill scaffold-package",{"tool":46,"command":47},"bunx","bunx skills add tylerbutler\u002Ftools-monorepo --skill scaffold-package",{"tool":49,"command":50},"pnpm","pnpm dlx skills add tylerbutler\u002Ftools-monorepo --skill scaffold-package","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Ftylerbutler\u002Ftools-monorepo\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fscaffold-package\u002FSKILL.md",[],[54,66,76,88,98,110],{"skillNo":55,"name":56,"nameZh":6,"description":57,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":58,"categories":59,"keywords":60,"publishedAt":26},"01M6BY4MV3T5NTQ5ZTQ2PKG4GS","release-check","Validate release readiness - changesets, policy compliance, build, test, and dependency sync","https:\u002F\u002Fgithub.com\u002Ftylerbutler\u002Ftools-monorepo\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Frelease-check\u002FSKILL.md",[],[61,62,23,63,64,65,22],"release check","release","validate","sync","test",{"skillNo":67,"name":68,"nameZh":6,"description":69,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":70,"categories":71,"keywords":72,"publishedAt":26},"01M6BY4KARPR8HM67XTAP6QK6G","pr-changeset-check","Check if PR has appropriate changesets before creating","https:\u002F\u002Fgithub.com\u002Ftylerbutler\u002Ftools-monorepo\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpr-changeset-check\u002FSKILL.md",[],[73,74,75],"pr changeset check","changeset","pr",{"skillNo":77,"name":78,"nameZh":6,"description":79,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":80,"categories":81,"keywords":82,"publishedAt":26},"01M6BY4H11FSTEB64W7JVD4W5E","post-edit-conventions","Monorepo coding conventions to follow when writing or editing code in this repository","https:\u002F\u002Fgithub.com\u002Ftylerbutler\u002Ftools-monorepo\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpost-edit-conventions\u002FSKILL.md",[],[83,25,84,85,86,87],"post edit conventions","coding","repository","code","writing",{"skillNo":89,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":94,"publishedAt":26},"01M6BY4EX1CAKF4FG9MNM3T91G","oclif-command-guide","Reference for OCLIF command patterns, base classes, and conventions used in CLI packages","https:\u002F\u002Fgithub.com\u002Ftylerbutler\u002Ftools-monorepo\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Foclif-command-guide\u002FSKILL.md",[],[95,96,97],"oclif command guide","packages","cli",{"skillNo":99,"name":100,"nameZh":6,"description":101,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":104,"publishedAt":26},"01M6BY4D2HXVXDG8TGZ7PG6X4G","nx-task-guide","Reference for Nx task architecture, orchestration patterns, and how to add or modify build tasks","https:\u002F\u002Fgithub.com\u002Ftylerbutler\u002Ftools-monorepo\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fnx-task-guide\u002FSKILL.md",[],[105,106,107,108,109],"nx task guide","tasks","orchestration","architecture","how",{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":116,"publishedAt":26},"01M6BY4BQ8KB6C1JJ1JAZMNRR0","nx-affected","Run Nx affected commands for the current changes","https:\u002F\u002Fgithub.com\u002Ftylerbutler\u002Ftools-monorepo\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fnx-affected\u002FSKILL.md",[],[117,118],"nx affected","run"]