Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Generate oclif CLI framework projects with plugin support, topics, hooks, and TypeScript. Creates enterprise-grade CLI applications with extensibility.
.claude/skills/a5c-ai-oclif-scaffolder/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 22% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 64% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 32% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 24% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 45% | 0% |
Generate a complete oclif CLI application with plugin architecture, topics, and enterprise patterns.
Invoke this skill when you need to:
| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | projectName | string | Yes | Name of the CLI project (kebab-case) | | description | string | Yes | Short description of the CLI | | commands | array | No | List of commands to scaffold | | plugins | boolean | No | Enable plugin support (default: true) | | topics | array | No | Command topics/namespaces |
json{ "commands": [ { "name": "deploy", "description": "Deploy application", "topic": "app", "flags": [ { "name": "env", "char": "e", "required": true }, { "name": "force", "char": "f", "allowNo": true } ], "args": [ { "name": "service", "required": true } ] } ], "topics": [ { "name": "app", "description": "Application commands" }, { "name": "config", "description": "Configuration management" } ] }
<projectName>/
├── package.json
├── tsconfig.json
├── .gitignore
├── README.md
├── bin/
│ ├── dev.js # Development entry
│ └── run.js # Production entry
├── src/
│ ├── index.ts # Plugin exports
│ ├── commands/
│ │ ├── app/
│ │ │ ├── deploy.ts # app:deploy command
│ │ │ └── status.ts # app:status command
│ │ └── config/
│ │ ├── get.ts # config:get command
│ │ └── set.ts # config:set command
│ ├── hooks/
│ │ ├── init.ts # Init hook
│ │ └── prerun.ts # Pre-run hook
│ └── lib/
│ ├── base-command.ts # Base command class
│ └── config.ts # Configuration
└── test/
└── commands/
└── app/
└── deploy.test.tstypescriptimport { Command, Flags } from '@oclif/core'; import { Config } from './config'; export abstract class BaseCommand extends Command { static baseFlags = { verbose: Flags.boolean({ char: 'v', description: 'Enable verbose output', }), config: Flags.string({ char: 'c', description: 'Path to config file', }), }; protected config!: Config; async init(): Promise<void> { const { flags } = await this.parse(this.constructor as typeof BaseCommand); this.config = new Config(flags.config); } protected log(message: string): void { this.logToStderr(message); } }
typescriptimport { Args, Flags } from '@oclif/core'; import { BaseCommand } from '../../lib/base-command'; export default class Deploy extends BaseCommand { static description = 'Deploy application to environment'; static examples = [ '<%= config.bin %> <%= command.id %> my-service -e production', '<%= config.bin %> <%= command.id %> my-service --force', ]; static flags = { ...BaseCommand.baseFlags, env: Flags.string({ char: 'e', description: 'Target environment', required: true, options: ['development', 'staging', 'production'], }), force: Flags.boolean({ char: 'f', description: 'Force deployment without confirmation', allowNo: true, }), }; static args = { service: Args.string({ description: 'Service to deploy', required: true, }), }; async run(): Promise<void> { const { args, flags } = await this.parse(Deploy); this.log(`Deploying ${args.service} to ${flags.env}`); if (flags.force) { this.log('Force mode enabled'); } // Deployment logic this.log('Deployment complete!'); } }
typescriptimport { Hook } from '@oclif/core'; const hook: Hook<'init'> = async function (options) { // Initialization logic process.stdout.write(`Initializing ${options.config.name}...\n`); }; export default hook;
json{ "dependencies": { "@oclif/core": "^3.0.0", "@oclif/plugin-help": "^6.0.0", "@oclif/plugin-plugins": "^4.0.0" }, "devDependencies": { "@oclif/test": "^3.0.0", "@types/node": "^20.0.0", "typescript": "^5.0.0", "ts-node": "^10.0.0", "mocha": "^10.0.0", "chai": "^4.0.0" } }
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 25,068 | 18,528 | -26% | 1 | 1 | 0% | 4,919 | 5,995 | +22% | 0 | 0 | — |
case-02 | fail→fail | 15,950 | 17,266 | +8% | 1 | 1 | 0% | 3,877 | 5,846 | +51% | 0 | 0 | — |
case-03 | fail→pass | 17,939 | 21,739 | +21% | 1 | 1 | 0% | 4,213 | 6,922 | +64% | 0 | 0 | — |
case-04 | fail→fail | 18,558 | 19,806 | +7% | 1 | 1 | 0% | 3,984 | 6,597 | +66% | 0 | 0 | — |
case-05 | fail→fail | 11,718 | 8,407 | -28% | 1 | 1 | 0% | 1,977 | 3,215 | +63% | 0 | 0 | — |
case-06 | fail→fail | 8,605 | 9,996 | +16% | 1 | 1 | 0% | 1,885 | 3,846 | +104% | 0 | 0 | — |
case-07 | fail→pass | 14,933 | 9,975 | -33% | 1 | 1 | 0% | 2,743 | 3,625 | +32% | 0 | 0 | — |
case-08 | fail→pass | 11,014 | 5,047 | -54% | 1 | 1 | 0% | 2,131 | 2,638 | +24% | 0 | 0 | — |
case-09 | fail→fail | 9,092 | 7,417 | -18% | 1 | 1 | 0% | 1,478 | 2,912 | +97% | 0 | 0 | — |
case-10 | fail→fail | 4,531 | 2,854 | -37% | 1 | 1 | 0% | 830 | 2,264 | +173% | 0 | 0 | — |
case-11 | fail→pass | 9,305 | 4,845 | -48% | 1 | 1 | 0% | 1,815 | 2,631 | +45% | 0 | 0 | — |
case-12 | fail→pass | 14,717 | 6,263 | -57% | 1 | 1 | 0% | 2,774 | 2,937 | +6% | 0 | 0 | — |
case-13 | fail→pass | 14,201 | 3,091 | -78% | 1 | 1 | 0% | 2,112 | 2,302 | +9% | 0 | 0 | — |
case-14 | fail→pass | 9,640 | 6,736 | -30% | 1 | 1 | 0% | 1,866 | 2,791 | +50% | 0 | 0 | — |
case-15 | fail→pass | 7,691 | 5,509 | -28% | 1 | 1 | 0% | 1,351 | 2,710 | +101% | 0 | 0 | — |
case-16 | fail→pass | 8,233 | 3,724 | -55% | 1 | 1 | 0% | 1,658 | 2,386 | +44% | 0 | 0 | — |
case-17 | fail→fail | 4,657 | 3,650 | -22% | 1 | 1 | 0% | 972 | 2,403 | +147% | 0 | 0 | — |
case-18 | fail→pass | 8,010 | 2,782 | -65% | 1 | 1 | 0% | 1,477 | 2,181 | +48% | 0 | 0 | — |
case-19 | fail→fail | 10,586 | 7,868 | -26% | 1 | 1 | 0% | 2,151 | 3,278 | +52% | 0 | 0 | — |
case-20 | fail→fail | 5,501 | 1,552 | -72% | 1 | 1 | 0% | 1,001 | 1,889 | +89% | 0 | 0 | — |
case-21 | fail→fail | 7,037 | 3,194 | -55% | 1 | 1 | 0% | 1,323 | 2,267 | +71% | 0 | 0 | — |
case-22 | fail→pass | 3,720 | 2,454 | -34% | 1 | 1 | 0% | 783 | 2,160 | +176% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +55 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.