Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Generate TypeScript/JavaScript project scaffolding with npm/pnpm/yarn, Jest/Vitest, ESLint/Prettier, and bundling (Vite/Rollup/esbuild).
.claude/skills/williamzujkowski-typescript-tooling-specialist/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | 107% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 49% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 115% | 0% |
| case-08 | ✓→✓ | = Same ✓ | 94% | 0% |
| case-12 | ✓→✓ | = Same ✓ | 178% | 0% |
Trigger conditions:
Not for:
mobile-cicd-generator)Time normalization:
NOW_ET using NIST/time.gov semantics (America/New_York, ISO-8601)NOW_ET for all citation access datesInput validation:
project_type must be one of: library, cli, api, react, vue, monorepopackage_manager must be one of: npm, pnpm, yarntypescript_version must be one of: 5.3, 5.4, 5.5project_name must be valid npm package name (lowercase, hyphens allowed)Source freshness:
Fast path for common cases:
project-name/ src/ index.ts tests/ index.test.ts package.json tsconfig.json .gitignore README.md
json { "name": "project-name", "version": "0.1.0", "type": "module", "main": "./dist/index.js", "types": "./dist/index.d.ts", "scripts": { "build": "tsc", "test": "jest", "lint": "eslint src" }, "devDependencies": { "typescript": "^5.5.0", "@types/node": "^20.0.0" } }
json { "compilerOptions": { "target": "ES2022", "module": "ESNext", "moduleResolution": "bundler", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "declaration": true, "outDir": "./dist" }, "include": ["src"], "exclude": ["node_modules", "dist"] }
Decision: If only basic scaffolding needed → STOP at T1; otherwise proceed to T2.
Extended configuration with testing and build tools:
Jest accessed 2025-10-26 json { "devDependencies": { "jest": "^29.7.0", "@types/jest": "^29.5.0", "ts-jest": "^29.1.0" }, "scripts": { "test": "jest", "test:watch": "jest --watch", "test:coverage": "jest --coverage" } }
jest.config.js: javascript export default { preset: 'ts-jest', testEnvironment: 'node', roots: ['<rootDir>/tests'], testMatch: ['**/*.test.ts'], collectCoverageFrom: ['src/**/*.ts'], coverageThreshold: { global: { branches: 80, functions: 80, lines: 80 } } };
Vitest (alternative, faster) accessed 2025-10-26 json { "devDependencies": { "vitest": "^1.6.0" }, "scripts": { "test": "vitest run", "test:watch": "vitest" } }
ESLint + Prettier accessed 2025-10-26 json { "devDependencies": { "eslint": "^8.57.0", "@typescript-eslint/parser": "^7.0.0", "@typescript-eslint/eslint-plugin": "^7.0.0", "prettier": "^3.2.0", "eslint-config-prettier": "^9.1.0" } }
.eslintrc.json: json { "parser": "@typescript-eslint/parser", "plugins": ["@typescript-eslint"], "extends": [ "eslint:recommended", "plugin:@typescript-eslint/recommended", "prettier" ], "rules": { "@typescript-eslint/no-unused-vars": "error", "@typescript-eslint/explicit-function-return-type": "warn" } }
Vite (for libraries and apps) accessed 2025-10-26 javascript // vite.config.ts import { defineConfig } from 'vite'; import { resolve } from 'path';
export default defineConfig({ build: { lib: { entry: resolve(__dirname, 'src/index.ts'), name: 'MyLib', fileName: 'index' } } });
tsup (zero-config bundler) accessed 2025-10-26 json { "scripts": { "build": "tsup src/index.ts --format cjs,esm --dts" } }
React with Vite: json { "dependencies": { "react": "^18.3.0", "react-dom": "^18.3.0" }, "devDependencies": { "@vitejs/plugin-react": "^4.3.0", "@types/react": "^18.3.0", "@types/react-dom": "^18.3.0" } }
Vue with Vite: json { "dependencies": { "vue": "^3.4.0" }, "devDependencies": { "@vitejs/plugin-vue": "^5.0.0" } }
Deep configuration for monorepos and production:
pnpm Workspaces: yaml # pnpm-workspace.yaml packages:
Root package.json: json { "name": "monorepo", "private": true, "scripts": { "build": "pnpm -r build", "test": "pnpm -r test", "lint": "pnpm -r lint" } }
Turborepo accessed 2025-10-26 json { "devDependencies": { "turbo": "^2.0.0" } }
turbo.json: json { "pipeline": { "build": { "dependsOn": ["^build"], "outputs": ["dist/**"] }, "test": { "dependsOn": ["build"] } } }
json { "compilerOptions": { "baseUrl": ".", "paths": { "@/*": ["src/*"], "@utils/*": ["src/utils/*"], "@components/*": ["src/components/*"] } } }
.github/workflows/ci.yml name: CI on: push, pull_request] jobs: test: runs-on: ubuntu-latest steps:
with: node-version: 20 cache: 'pnpm'
json { "files": ["dist"], "exports": { ".": { "import": "./dist/index.js", "require": "./dist/index.cjs", "types": "./dist/index.d.ts" } }, "publishConfig": { "access": "public" } }
json { "devDependencies": { "@playwright/test": "^1.45.0" }, "scripts": { "test:e2e": "playwright test" } }
Package Manager Selection:
Project Type Structure:
Abort Conditions:
project_name (uppercase, special chars) → errorTool Version Selection:
Schema (JSON):
json{ "project_name": "string", "project_type": "library | cli | api | react | vue | monorepo", "typescript_version": "string", "package_manager": "npm | pnpm | yarn", "structure": { "directories": ["string"], "files": { "path/to/file": "file content (string)" } }, "commands": { "install": "string", "dev": "string", "build": "string", "test": "string", "lint": "string" }, "next_steps": ["string"], "timestamp": "ISO-8601 string (NOW_ET)" }
Required Fields:
Quick Start: TypeScript Library (29 lines)
typescript// examples/library-example.ts export interface CalculationResult { value: number; timestamp: Date; } export class Calculator { private history: number[] = []; add(a: number, b: number): CalculationResult { const value = a + b; this.history.push(value); return { value, timestamp: new Date() }; } multiply(a: number, b: number): CalculationResult { const value = a * b; this.history.push(value); return { value, timestamp: new Date() }; } getHistory(): readonly number[] { return Object.freeze([...this.history]); } clear(): void { this.history = []; } }
Additional Examples:
examples/cli-example.ts (28 lines) - shebang, args, file operationsexamples/api-example.ts (30 lines) - typed routes, middleware, error handlingTemplate Resources (see resources/)
tsconfig-library.json / tsconfig-react.json / tsconfig-node.jsonpackage-library.json / package-cli.json / package-api.jsonjest.config.js - Jest testing configurationToken Budgets:
Safety:
Auditability:
Determinism:
Performance:
Official Documentation (accessed 2025-10-26):
Build Tools:
Testing:
Best Practices:
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-06 | fail→pass | 15,277 | 15,163 | -1% | 1 | 1 | 0% | 3,911 | 8,095 | +107% | 0 | 0 | — |
case-01 | fail→fail | 15,478 | 12,149 | -22% | 1 | 1 | 0% | 3,830 | 6,930 | +81% | 0 | 0 | — |
case-02 | fail→fail | 24,674 | 13,313 | -46% | 1 | 1 | 0% | 6,173 | 7,093 | +15% | 0 | 0 | — |
case-03 | fail→fail | 7,379 | 8,279 | +12% | 1 | 1 | 0% | 1,691 | 5,900 | +249% | 0 | 0 | — |
case-04 | fail→pass | 23,143 | 19,888 | -14% | 1 | 1 | 0% | 6,268 | 9,365 | +49% | 0 | 0 | — |
case-05 | fail→pass | 13,077 | 15,062 | +15% | 1 | 1 | 0% | 3,685 | 7,930 | +115% | 0 | 0 | — |
case-07 | fail→fail | 13,645 | 12,535 | -8% | 1 | 1 | 0% | 2,792 | 6,969 | +150% | 0 | 0 | — |
case-08 | pass→pass | 14,676 | 6,001 | -59% | 1 | 1 | 0% | 2,597 | 5,043 | +94% | 0 | 0 | — |
case-09 | fail→fail | 15,336 | 14,182 | -8% | 1 | 1 | 0% | 3,491 | 7,381 | +111% | 0 | 0 | — |
case-10 | fail→fail | 24,410 | 16,943 | -31% | 1 | 1 | 0% | 6,181 | 8,091 | +31% | 0 | 0 | — |
case-11 | fail→fail | 9,495 | 14,823 | +56% | 1 | 1 | 0% | 2,315 | 7,328 | +217% | 0 | 0 | — |
case-12 | pass→pass | 8,055 | 8,894 | +10% | 1 | 1 | 0% | 2,146 | 5,975 | +178% | 0 | 0 | — |
case-13 | pass→pass | 9,559 | 7,087 | -26% | 1 | 1 | 0% | 1,658 | 5,299 | +220% | 0 | 0 | — |
case-14 | pass→pass | 6,316 | 4,020 | -36% | 1 | 1 | 0% | 1,168 | 4,793 | +310% | 0 | 0 | — |
case-15 | pass→pass | 2,028 | 1,674 | -17% | 1 | 1 | 0% | 270 | 4,270 | +1481% | 0 | 0 | — |
case-16 | pass→pass | 5,255 | 8,881 | +69% | 1 | 1 | 0% | 1,215 | 5,997 | +394% | 0 | 0 | — |
case-17 | pass→pass | 15,391 | 8,918 | -42% | 1 | 1 | 0% | 3,206 | 5,797 | +81% | 0 | 0 | — |
case-18 | pass→pass | 6,984 | 2,460 | -65% | 1 | 1 | 0% | 1,398 | 4,406 | +215% | 0 | 0 | — |
case-19 | pass→pass | 17,885 | 8,647 | -52% | 1 | 1 | 0% | 4,241 | 6,330 | +49% | 0 | 0 | — |
case-20 | pass→pass | 5,462 | 11,757 | +115% | 1 | 1 | 0% | 1,196 | 6,715 | +461% | 0 | 0 | — |
case-21 | pass→pass | 4,601 | 4,425 | -4% | 1 | 1 | 0% | 797 | 4,776 | +499% | 0 | 0 | — |
case-22 | pass→pass | 3,022 | 5,019 | +66% | 1 | 1 | 0% | 593 | 4,845 | +717% | 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 +14 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.