Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when generating project structure for new bundle-plugins, adding or removing platform support (Claude Code, Cursor, Codex, OpenCode, Gemini CLI, OpenClaw), updating platform manifests, or migrating hooks and configuration between platforms
.claude/skills/odradekai-scaffolding/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 202% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 26% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 134% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 101% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 332% | 0% |
Generate new bundle-plugin projects and manage platform support across their lifecycle. Handles initial project generation (greenfield) and ongoing platform adaptation (add, fix, migrate, remove).
Core principle: Generate only what's needed. Every platform, every file has a reason to exist. This skill generates structure only — it does not run its own scripts. Validation is delegated to bundles-forge:auditing; version checks to bundles-forge bump-version.
Skill type: Hybrid — follow the generation/adaptation process rigidly, but mode selection and component choices are flexible based on user context.
Announce at start: "I'm using the scaffolding skill to generate your project / add <platform> support / remove <platform> support / add <component> / remove <component>]."
Determine the operation based on context:
bundles-forge:blueprinting) → New Project flowFor new projects, first select a mode:
Lean plugin for marketplace distribution:
| File | Purpose | |------|---------| | .claude-plugin/plugin.json | Plugin identity and metadata | | skills/<skill-name>/SKILL.md | One directory per skill | | README.md | Installation instructions and skill catalog | | LICENSE | Default MIT unless specified |
No hooks, no bootstrap, no version infrastructure. Add these later by re-running scaffolding in platform adaptation mode.
Generated for all intelligent-mode projects regardless of platform selection:
| File | Purpose | |------|---------| | package.json | Project identity and version | | README.md | Installation per platform, skill catalog | | LICENSE | Default MIT unless specified | | .gitignore | node_modules, .worktrees, OS files | | .version-bump.json | Version sync manifest | | skills/<skill-name>/SKILL.md | One directory per skill |
| Platform | Files | |----------|-------| | Claude Code | .claude-plugin/plugin.json, hooks/hooks.json, hooks/run-hook.cmd, hooks/session-start | | Cursor | .cursor-plugin/plugin.json, hooks/hooks-cursor.json, hooks/session-start | | Codex | .codex/INSTALL.md, AGENTS.md | | OpenCode | .opencode/plugins/<name>.js, .opencode/INSTALL.md | | Gemini CLI | gemini-extension.json, GEMINI.md |
For platform-specific wiring details, read references/platform-adapters.md.
| File | Purpose | |------|---------| | skills/using-<project>/SKILL.md | Meta-skill: instruction priority, skill routing table | | skills/using-<project>/references/ | Per-platform tool mappings |
| Component | Files | When to Include | |-----------|-------|-----------------| | Executables | bin/<tool-name> | Skills reference CLI tools (see references/external-integration.md decision tree) | | MCP servers | .mcp.json | Skills need external service integration (see references/external-integration.md decision tree) | | LSP servers | .lsp.json | Skills involve language-specific code intelligence (see references/external-integration.md LSP section) | | Output styles | output-styles/<style>.md | Custom output formatting (see references/external-integration.md Output Styles section) | | Default settings | settings.json | Default agent activation (see references/external-integration.md Default Settings section) | | User configuration | userConfig in plugin.json | Skills need user-provided API keys, endpoints, or tokens — Claude Code only (see references/external-integration.md userConfig section) | | Marketplace entry | .claude-plugin/marketplace.json | Plugin targets marketplace distribution — declares plugin metadata for the marketplace index |
Minimal mode:
assets/platforms/claude-code/plugin.json templategit init + initial commit; validate manifest JSONIntelligent mode:
Phase 1 — Load context:
references/scaffold-templates.mdassets/ (infrastructure, docs, bootstrap)assets/platforms/<platform>/references/project-anatomy.mdPhase 2 — Generate:
<project-name>, <author-name>, etc.assets/mcp-json.md template and consult references/external-integration.md for transport selection and platform differences. When userConfig is specified, add the userConfig field to plugin.json with appropriate sensitive flags. When marketplace distribution is specified, generate .claude-plugin/marketplace.json with plugin metadata. When CI validation is specified, generate .github/workflows/validate-plugin.yml from templatePhase 3 — Finalize:
git init + initial commit; run bundles-forge bump-version --checkreferences/platform-adapters.md)references/platform-adapters.md for wiring detailsassets/platforms/<platform>/, replace <project-name> placeholders.version-bump.jsonsession-start (Bash) handles its JSON format via run-hook.cmd. For custom hooks beyond SessionStart, read references/hooks-configuration.mdbundles-forge bump-version --check, test hooks.version-bump.json — remove entries for deleted manifestssession-start if branches removedbundles-forge bump-version --check; run inspector validationAdd MCP servers, CLI executables, LSP servers, userConfig, output styles, or default settings to an existing project:
references/external-integration.md decision tree to choose the right integration level.mcp.json, .lsp.json, output-styles/, settings.json, or userConfig in plugin.json)plugin.json for platforms that require explicit paths (Cursor). For Claude Code, convention-based discovery handles most components automaticallyallowed-tools frontmatter for new CLI/MCP tools, add ${user_config.KEY} references where skills need user-provided valuesRemove MCP servers, CLI executables, or LSP servers from an existing project. Read references/external-integration.md "Optional Component Removal" section for step-by-step instructions covering:
.mcp.json, plugin.json mcpServers, skill references, README)bin/, allowed-tools, skill body).lsp.json, README)Step 1 — Deterministic checks (script): Run bundles-forge audit-skill <target-dir> to verify structure, manifests, version sync, and frontmatter. Review any critical or warning findings before proceeding.
Step 2 — Semantic inspection (agent): Dispatch the inspector agent (agents/inspector.md) for semantic validation that scripts cannot cover (template quality, hook logic coherence, design alignment). The inspector adjusts scope based on context:
If subagent dispatch is unavailable: Ask — "Subagents are not available. Run validation inline?" If confirmed, read agents/inspector.md and follow its instructions within this conversation, then report PASS/FAIL.
| Mistake | Fix | |---------|-----| | Generating all platforms regardless of design | Only create files for selected platforms | | Forgetting .version-bump.json entries | Every version-bearing manifest needs an entry | | Hardcoding author in templates | Pull from git config or ask | | Missing session-start or run-hook.cmd in hook config | Claude Code uses run-hook.cmd session-start; Cursor runs ./hooks/session-start directly; both require bash | | Bootstrap skill > 200 lines | Keep lean — extract to references/ | | Wrong hook format (PascalCase vs camelCase) | Claude Code: SessionStart, Cursor: sessionStart | | Copying template without customizing | Replace every <project-name> placeholder | | Using intelligent mode infrastructure for minimal | Minimal mode avoids over-engineering | | Using MCP when CLI suffices | Consult references/external-integration.md decision tree — prefer CLI for stateless, single-shot tools | | Using ../ paths to reference files outside the plugin | After marketplace install, plugins are cached — ../ paths break. Keep all files within the plugin root | | Writing persistent data to ${CLAUDE_PLUGIN_ROOT} | PLUGIN_ROOT changes on each update. Use ${CLAUDE_PLUGIN_DATA} for caches, installed dependencies, and generated state |
design-document (optional) — from bundles-forge:blueprinting with project mode, name, platforms, skill inventory, bootstrap strategy, and componentsproject-directory (optional) — existing bundle-plugin project root for platform adaptationtarget-platform (optional) — platform to add or removescaffold-output — generated project structure or adapted platform files. Consumed by the orchestrating skill (blueprinting or optimizing) for subsequent phasesinspector-report (optional) — validation report in .bundles-forge/blueprints/Called by:
Pairs with:
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-04 | fail→pass | 6,388 | 5,124 | -20% | 1 | 1 | 0% | 1,241 | 3,744 | +202% | 0 | 0 | — |
case-03 | fail→fail | 10,125 | 3,333 | -67% | 1 | 1 | 0% | 2,161 | 3,371 | +56% | 0 | 0 | — |
case-01 | fail→pass | 20,868 | 12,533 | -40% | 1 | 1 | 0% | 4,488 | 5,663 | +26% | 0 | 0 | — |
case-02 | fail→fail | 1,778 | 3,537 | +99% | 1 | 1 | 0% | 233 | 3,394 | +1357% | 0 | 0 | — |
case-05 | fail→fail | 8,078 | 3,503 | -57% | 1 | 1 | 0% | 1,594 | 3,385 | +112% | 0 | 0 | — |
case-06 | pass→pass | 7,160 | 2,460 | -66% | 1 | 1 | 0% | 1,395 | 3,291 | +136% | 0 | 0 | — |
case-07 | fail→pass | 10,223 | 7,617 | -25% | 1 | 1 | 0% | 1,782 | 4,174 | +134% | 0 | 0 | — |
case-08 | pass→pass | 7,323 | 4,346 | -41% | 1 | 1 | 0% | 1,366 | 3,642 | +167% | 0 | 0 | — |
case-09 | pass→pass | 9,773 | 6,236 | -36% | 1 | 1 | 0% | 1,636 | 3,920 | +140% | 0 | 0 | — |
case-10 | fail→fail | 7,660 | 2,151 | -72% | 1 | 1 | 0% | 1,365 | 3,200 | +134% | 0 | 0 | — |
case-11 | fail→pass | 10,162 | 5,209 | -49% | 1 | 1 | 0% | 1,945 | 3,908 | +101% | 0 | 0 | — |
case-12 | fail→fail | 22,234 | 3,836 | -83% | 1 | 1 | 0% | 1,088 | 3,473 | +219% | 0 | 0 | — |
case-13 | fail→fail | 11,415 | 6,379 | -44% | 1 | 1 | 0% | 2,239 | 3,967 | +77% | 0 | 0 | — |
case-14 | pass→pass | 8,821 | 3,613 | -59% | 1 | 1 | 0% | 1,732 | 3,478 | +101% | 0 | 0 | — |
case-15 | fail→pass | 4,637 | 3,307 | -29% | 1 | 1 | 0% | 790 | 3,410 | +332% | 0 | 0 | — |
case-16 | fail→fail | 13,090 | 3,085 | -76% | 1 | 1 | 0% | 2,260 | 3,306 | +46% | 0 | 0 | — |
case-17 | fail→pass | 16,182 | 5,378 | -67% | 1 | 1 | 0% | 2,571 | 3,727 | +45% | 0 | 0 | — |
case-18 | fail→pass | 14,745 | 3,339 | -77% | 1 | 1 | 0% | 2,169 | 3,387 | +56% | 0 | 0 | — |
case-19 | fail→fail | 13,839 | 6,915 | -50% | 1 | 1 | 0% | 2,308 | 3,957 | +71% | 0 | 0 | — |
case-20 | fail→fail | 3,351 | 12,469 | +272% | 1 | 1 | 0% | 556 | 4,269 | +668% | 0 | 0 | — |
case-21 | fail→pass | 10,947 | 10,950 | +0% | 1 | 1 | 0% | 1,630 | 4,553 | +179% | 0 | 0 | — |
case-22 | fail→fail | 14,379 | 17,638 | +23% | 1 | 1 | 0% | 2,435 | 5,769 | +137% | 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, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +36 percentage points is the difference between those two pass rates over the 21 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
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.