[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6BY44A49QK44MSAENCEPMVH":3,"skill-same:01M6BY44A49QK44MSAENCEPMVH":49},{"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":22,"linkOnly":23,"markdownContent":24,"markdownBody":25,"frontMatter":26,"refName":28,"commitSha":29,"skillDirectory":30,"forksCount":31,"repositoryHtmlUrl":32,"repositoryHomepageUrl":6,"ownerHtmlUrl":33,"ownerBlogUrl":34,"ownerDescription":6,"updatedAt":35,"install":36,"resources":48},"01M6BY44A49QK44MSAENCEPMVH","add-oclif-command",null,"Add a new OCLIF command to a CLI package with proper base class, flags, args, and post-creation steps","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\u002Fadd-oclif-command\u002FSKILL.md",[],[19,20,21],"add oclif command","cli","package","2026-11-10 10:12:30",false,"---\nname: add-oclif-command\ndescription: Add a new OCLIF command to a CLI package with proper base class, flags, args, and post-creation steps\ndisable-model-invocation: true\n---\n\n## Add a New OCLIF Command\n\nGuided workflow to add a command to an existing CLI package.\n\n### Step 1: Gather Info\n\nAsk the user for:\n- **Target CLI package**: cli, dill-cli, repopo, or sort-tsconfig\n- **Command name**: e.g., `status` or `git\u002Fstatus` (slash = topic nesting)\n- **Description**: one-line summary\n- **Base class**: `CommandWithConfig` (default) or `GitCommand` (for git operations) — both from `@tylerbu\u002Fcli-api`\n- **Flags and args**: what inputs does the command need?\n\n### Step 2: Create the Command File\n\nCreate `packages\u002F\u003Cpkg>\u002Fsrc\u002Fcommands\u002F\u003Cname>.ts`:\n\n```typescript\nimport { Args, Flags } from \"@oclif\u002Fcore\";\nimport { CommandWithConfig } from \"@tylerbu\u002Fcli-api\";\n\nexport default class CommandName extends CommandWithConfig\u003Ctypeof CommandName> {\n\tpublic static override readonly description = \"Description here\";\n\n\tpublic static override readonly flags = {\n\t\t\u002F\u002F Add flags here\n\t\t...CommandWithConfig.flags,\n\t};\n\n\tpublic static override readonly args = {\n\t\t\u002F\u002F Add args here\n\t};\n\n\tpublic override async run(): Promise\u003Cvoid> {\n\t\tconst { args, flags } = this;\n\t\t\u002F\u002F Implementation\n\t}\n}\n```\n\nFor git commands, use `GitCommand` instead — it provides `this.git` (simple-git instance).\n\n### Step 3: Build and Verify\n\n```bash\n# Compile\npnpm nx run \u003Cpkg>:build:compile\n\n# Test with dev binary\n.\u002Fpackages\u002F\u003Cpkg>\u002Fbin\u002Fdev.js \u003Ccommand> --help\n\n# Regenerate manifest\npnpm nx run \u003Cpkg>:build:manifest\n\n# Regenerate README\npnpm nx run \u003Cpkg>:build:readme\n```\n\n### Step 4: Update Snapshots (if applicable)\n\n```bash\n# Regenerate command snapshots\n.\u002Fpackages\u002F\u003Cpkg>\u002Fbin\u002Fdev.js snapshot:generate --filepath test\u002Fcommands\u002F__snapshots__\u002Fcommands.json\n\n# Verify snapshots match\n.\u002Fpackages\u002F\u003Cpkg>\u002Fbin\u002Fdev.js snapshot:compare --filepath test\u002Fcommands\u002F__snapshots__\u002Fcommands.json\n```\n\n### Step 5: Final Checks\n\n```bash\n# Full build to ensure everything links\npnpm nx run \u003Cpkg>:build\n\n# Run tests\npnpm nx run \u003Cpkg>:test\n\n# Policy check\n.\u002Fpackages\u002Frepopo\u002Fbin\u002Fdev.js check\n```\n\n### Conventions\n- Use tabs for indentation\n- Keep commands focused — one responsibility per command\n- Use `this.log()` for stdout, `this.warn()` for warnings, `this.error()` for fatal errors (exits)\n- Prefer flags over positional args for optional inputs\n- Always spread `...BaseClass.flags` to inherit base flags\n","## Add a New OCLIF Command\n\nGuided workflow to add a command to an existing CLI package.\n\n### Step 1: Gather Info\n\nAsk the user for:\n- **Target CLI package**: cli, dill-cli, repopo, or sort-tsconfig\n- **Command name**: e.g., `status` or `git\u002Fstatus` (slash = topic nesting)\n- **Description**: one-line summary\n- **Base class**: `CommandWithConfig` (default) or `GitCommand` (for git operations) — both from `@tylerbu\u002Fcli-api`\n- **Flags and args**: what inputs does the command need?\n\n### Step 2: Create the Command File\n\nCreate `packages\u002F\u003Cpkg>\u002Fsrc\u002Fcommands\u002F\u003Cname>.ts`:\n\n```typescript\nimport { Args, Flags } from \"@oclif\u002Fcore\";\nimport { CommandWithConfig } from \"@tylerbu\u002Fcli-api\";\n\nexport default class CommandName extends CommandWithConfig\u003Ctypeof CommandName> {\n\tpublic static override readonly description = \"Description here\";\n\n\tpublic static override readonly flags = {\n\t\t\u002F\u002F Add flags here\n\t\t...CommandWithConfig.flags,\n\t};\n\n\tpublic static override readonly args = {\n\t\t\u002F\u002F Add args here\n\t};\n\n\tpublic override async run(): Promise\u003Cvoid> {\n\t\tconst { args, flags } = this;\n\t\t\u002F\u002F Implementation\n\t}\n}\n```\n\nFor git commands, use `GitCommand` instead — it provides `this.git` (simple-git instance).\n\n### Step 3: Build and Verify\n\n```bash\n# Compile\npnpm nx run \u003Cpkg>:build:compile\n\n# Test with dev binary\n.\u002Fpackages\u002F\u003Cpkg>\u002Fbin\u002Fdev.js \u003Ccommand> --help\n\n# Regenerate manifest\npnpm nx run \u003Cpkg>:build:manifest\n\n# Regenerate README\npnpm nx run \u003Cpkg>:build:readme\n```\n\n### Step 4: Update Snapshots (if applicable)\n\n```bash\n# Regenerate command snapshots\n.\u002Fpackages\u002F\u003Cpkg>\u002Fbin\u002Fdev.js snapshot:generate --filepath test\u002Fcommands\u002F__snapshots__\u002Fcommands.json\n\n# Verify snapshots match\n.\u002Fpackages\u002F\u003Cpkg>\u002Fbin\u002Fdev.js snapshot:compare --filepath test\u002Fcommands\u002F__snapshots__\u002Fcommands.json\n```\n\n### Step 5: Final Checks\n\n```bash\n# Full build to ensure everything links\npnpm nx run \u003Cpkg>:build\n\n# Run tests\npnpm nx run \u003Cpkg>:test\n\n# Policy check\n.\u002Fpackages\u002Frepopo\u002Fbin\u002Fdev.js check\n```\n\n### Conventions\n- Use tabs for indentation\n- Keep commands focused — one responsibility per command\n- Use `this.log()` for stdout, `this.warn()` for warnings, `this.error()` for fatal errors (exits)\n- Prefer flags over positional args for optional inputs\n- Always spread `...BaseClass.flags` to inherit base flags\n",{"name":5,"description":7,"disable-model-invocation":27},true,"main","77276eebb35d712fe74fbae30800230ea0dcefb9",".claude\u002Fskills\u002Fadd-oclif-command",1,"https:\u002F\u002Fgithub.com\u002Ftylerbutler\u002Ftools-monorepo","https:\u002F\u002Fgithub.com\u002Ftylerbutler","https:\u002F\u002Ftylerbutler.com","2026-11-15 02:02:30",{"source":8,"skillName":5,"commands":37,"prompt":47,"zipAvailable":27},[38,41,44],{"tool":39,"command":40},"npx","npx skills add tylerbutler\u002Ftools-monorepo --skill add-oclif-command",{"tool":42,"command":43},"bunx","bunx skills add tylerbutler\u002Ftools-monorepo --skill add-oclif-command",{"tool":45,"command":46},"pnpm","pnpm dlx skills add tylerbutler\u002Ftools-monorepo --skill add-oclif-command","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Ftylerbutler\u002Ftools-monorepo\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fadd-oclif-command\u002FSKILL.md",[],[50,63,75,85,97,106],{"skillNo":51,"name":52,"nameZh":6,"description":53,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":54,"categories":55,"keywords":56,"publishedAt":22},"01M6BY4Q9V1GKP9ZXTY2DNHHRW","scaffold-package","Scaffold a new package in the monorepo with correct conventions, configs, and policy compliance","https:\u002F\u002Fgithub.com\u002Ftylerbutler\u002Ftools-monorepo\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fscaffold-package\u002FSKILL.md",[],[57,21,58,59,60,61,62],"scaffold package","scaffold","monorepo","correct","compliance","policy",{"skillNo":64,"name":65,"nameZh":6,"description":66,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":67,"categories":68,"keywords":69,"publishedAt":22},"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",[],[70,71,72,61,73,74,62],"release check","release","validate","sync","test",{"skillNo":76,"name":77,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":22},"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",[],[82,83,84],"changeset","pr changeset check","pr",{"skillNo":86,"name":87,"nameZh":6,"description":88,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":89,"categories":90,"keywords":91,"publishedAt":22},"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",[],[92,93,94,59,95,96],"post edit conventions","code","writing","coding","repository",{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":103,"publishedAt":22},"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",[],[104,20,105],"oclif command guide","packages",{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":112,"publishedAt":22},"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",[],[113,114,115,116,117],"nx task guide","architecture","tasks","how","orchestration"]