Install any skill in seconds. Free to start, no credit card required.
Get Started Free →One-time starter-kit setup: detects optional AI engines (Codex, Gemini), confirms each with you, writes the engines config, and optionally personalizes how Claude writes for you. Safe to re-run anytime.
.claude/skills/chrisblattman-kit-setup/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-13 | ✗→✓ | ▲ Improved | 1% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 75% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 9% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 14% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 10% | 0% |
Everything in this kit works on Claude alone. This skill records which optional extra engines exist on this machine, so other kit skills can offer second opinions. Detect, then confirm. Never ask the user what subscriptions or plans they have, and never list, describe, or ask about tools that weren't detected.
One Bash call:
bashcommand -v codex; command -v gemini; date +%Y-%m-%d
For each CLI found, run a quick <tool> --version; if that fails, say it looks installed but isn't currently working, record it as unavailable, and move on — don't troubleshoot here. Version output only means "detected," not "usable."
One short yes/no question per tool that was found — and nothing about tools that weren't:
If nothing was found, skip the questions entirely. Either way, close Phase 1 with one line: "If you later install the Codex or Gemini CLI, run /kit-setup again."
For each detected tool the user accepts, create one private temp directory with mktemp -d, then run one tiny smoke test through the shipped wrapper:
bashsmoke_dir="$(mktemp -d)" printf 'Reply with exactly: starter-kit-ok\n' | bash "${CLAUDE_PLUGIN_ROOT}/scripts/codex-run.sh" "$smoke_dir/codex.txt" light printf 'Reply with exactly: starter-kit-ok\n' | bash "${CLAUDE_PLUGIN_ROOT}/scripts/gemini-run.sh" "$smoke_dir/gemini.txt"
If the wrapper succeeds and the output is non-empty, mark the engine available: true. If it fails, mark it unavailable but preserve what happened, for example { "available": false, "detected": true, "auth_unverified": true }. Keep the user-facing message plain: "I found Codex/Gemini, but it did not answer a test prompt yet. Everything still works on Claude."
Target: ~/.claude/starter-kit/engines.json. Run mkdir -p ~/.claude/starter-kit first. If the file already exists, Read it and preserve any fields you don't recognize — newer kit versions may have added some. Schema (full contract: ${CLAUDE_PLUGIN_ROOT}/references/engines-contract.md):
json{ "schema_version": 1, "codex": { "available": true }, "gemini": { "available": false }, "oracle": { "available": false }, "paste_loop": ["chatgpt", "gemini"], "updated": "<today, YYYY-MM-DD>" }
available: true only if the CLI was detected, the user said yes, and the smoke test returned a non-empty answer.{ "available": false, "user_declined": true } so a re-run doesn't quietly switch it back on.paste_loop: write the default shown above on first write; keep any existing value on re-runs.oracle: always write { "available": false } — the field is reserved for a future release; this version doesn't probe or enable it.Ask once: "Want to spend two minutes personalizing how I write for you? Five quick questions — totally skippable."
If yes, ask one at a time, conversationally:
Then write ~/.claude/starter-kit/my-preferences.md: start from the template at ${CLAUDE_PLUGIN_ROOT}/references/prompt-preferences-TEMPLATE.md and fill it in from their answers. If the template is missing, write a simple file with one short section per question. If they skip, say they can run /kit-setup again anytime — and don't offer a second time this run.
Two or three sentences, no jargon, no JSON. Pattern:
> "You're set up. Everything runs on Claude — that's the normal setup and it all works."
Add one sentence per enabled engine (e.g. "Codex is also connected, so you can ask it for second opinions with /codex.") and one if preferences were saved. If nothing extra was found, the first sentence is the whole report.
Safe anytime. Re-detect and update engines.json: a newly installed tool gets confirmed (Phase 1, step 2) and added; a removed one gets marked unavailable; unknown fields and paste_loop are preserved. If my-preferences.md already exists, offer to update it rather than starting over.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 7,769 | 2,265 | -71% | 1 | 1 | 0% | 1,266 | 1,455 | +15% | 0 | 0 | — |
case-02 | fail→fail | 3,734 | 5,364 | +44% | 1 | 1 | 0% | 483 | 1,423 | +195% | 0 | 0 | — |
case-12 | fail→fail | 14,849 | 1,585 | -89% | 1 | 1 | 0% | 2,599 | 1,468 | -44% | 0 | 0 | — |
case-13 | fail→pass | 9,709 | 2,301 | -76% | 1 | 1 | 0% | 1,540 | 1,556 | +1% | 0 | 0 | — |
case-03 | fail→fail | 11,546 | 4,551 | -61% | 1 | 1 | 0% | 1,611 | 1,407 | -13% | 0 | 0 | — |
case-04 | pass→pass | 9,455 | 7,749 | -18% | 1 | 1 | 0% | 1,815 | 2,664 | +47% | 0 | 0 | — |
case-05 | pass→pass | 11,296 | 7,166 | -37% | 1 | 1 | 0% | 1,901 | 2,395 | +26% | 0 | 0 | — |
case-06 | pass→pass | 8,229 | 5,299 | -36% | 1 | 1 | 0% | 1,386 | 2,077 | +50% | 0 | 0 | — |
case-07 | fail→pass | 5,493 | 1,819 | -67% | 1 | 1 | 0% | 841 | 1,472 | +75% | 0 | 0 | — |
case-08 | fail→pass | 10,192 | 4,597 | -55% | 1 | 1 | 0% | 1,873 | 2,037 | +9% | 0 | 0 | — |
case-09 | pass→pass | 9,248 | 2,141 | -77% | 1 | 1 | 0% | 1,364 | 1,566 | +15% | 0 | 0 | — |
case-10 | fail→pass | 9,032 | 2,913 | -68% | 1 | 1 | 0% | 1,572 | 1,790 | +14% | 0 | 0 | — |
case-11 | fail→pass | 8,647 | 2,903 | -66% | 1 | 1 | 0% | 1,497 | 1,651 | +10% | 0 | 0 | — |
case-14 | fail→pass | 9,000 | 2,646 | -71% | 1 | 1 | 0% | 1,474 | 1,658 | +12% | 0 | 0 | — |
case-15 | fail→pass | 10,598 | 3,803 | -64% | 1 | 1 | 0% | 1,623 | 1,882 | +16% | 0 | 0 | — |
case-16 | fail→pass | 13,463 | 1,975 | -85% | 1 | 1 | 0% | 2,088 | 1,561 | -25% | 0 | 0 | — |
case-17 | pass→pass | 9,197 | 3,993 | -57% | 1 | 1 | 0% | 1,535 | 1,861 | +21% | 0 | 0 | — |
case-18 | fail→fail | 11,221 | 3,272 | -71% | 1 | 1 | 0% | 1,855 | 1,792 | -3% | 0 | 0 | — |
case-19 | fail→pass | 8,436 | 3,092 | -63% | 1 | 1 | 0% | 1,326 | 1,832 | +38% | 0 | 0 | — |
case-20 | pass→pass | 9,690 | 2,952 | -70% | 1 | 1 | 0% | 1,446 | 1,702 | +18% | 0 | 0 | — |
case-21 | pass→pass | 8,978 | 2,955 | -67% | 1 | 1 | 0% | 1,467 | 1,618 | +10% | 0 | 0 | — |
case-22 | fail→pass | 10,390 | 3,202 | -69% | 1 | 1 | 0% | 1,696 | 1,793 | +6% | 0 | 0 | — |
case-23 | pass→pass | 7,782 | 2,068 | -73% | 1 | 1 | 0% | 1,263 | 1,553 | +23% | 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. 23 cases were attempted, and 21 counted toward the lift figure. The other 2 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 +43 percentage points is the difference between those two pass rates over the 21 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.