Claude Code does too much itself, and calls it done too soon. Flight Deck fixes that.
Flight Deck is a package of skills and hooks for Claude Code. It fixes nine default weaknesses at once: no delegation, no sense of model tier or effort, no pushback on over-engineering, loose testing discipline, a short memory, no cost discipline, and verbose unfocused reports. Install it once, and mission control becomes the default.
One prompt installs it.
Paste this into a fresh Claude Code session.
Install the Flight Deck skill package for me from https://github.com/CaseReed/flight-deck, following these steps exactly and stopping for confirmation where noted.
1. Detect the platform first: macOS, Linux, WSL, or native Windows, and, on native Windows, whether Git Bash (Git for Windows) is available. Tell me what you detected. This decides four things for the rest of the install: the config directory (~/.claude on macOS, Linux, and WSL; %USERPROFILE%\.claude on native Windows; use CLAUDE_CONFIG_DIR instead of either if that environment variable is set), whether files get copied rather than symlinked (copy on native Windows, since symlinked skill folders are known to be unreliable there and need Developer Mode or an elevated mklink /D; copy everywhere else too, for consistency, unless I ask you to symlink instead), whether chmod +x applies (skip it on native Windows without Git Bash, since it does not apply the same way there; it still applies as usual on macOS, Linux, WSL, and native Windows with Git Bash), and which hook set to offer later (the three bash hooks on macOS, Linux, WSL, and native Windows with Git Bash; only the PowerShell fanout guard on native Windows without Git Bash).
2. Clone the repo into a temporary directory (for example /tmp/flight-deck, or a Windows temp folder on native Windows) and read its README.md, CLAUDE-md-activation.md, skills/, and hooks/ so you know what you are installing.
3. Check for an existing install first, at the config directory resolved in step 1. Look for the skills/mission-control/, skills/test-discipline/, skills/code-craft/, and skills/design-fidelity/ folders under it, check whether its CLAUDE.md already has a Flight Deck activation block, and check whether its output-styles/concise.md already exists. If everything is already in place, tell me and stop there. Do not re-run steps or overwrite anything that is already installed.
4. Copy the skill folders. Copy skills/mission-control/, skills/test-discipline/, skills/code-craft/, and skills/design-fidelity/ from the clone into the resolved skills directory. If any of these folders already exists there, show me a diff against the incoming version before doing anything, and ask whether to overwrite, skip, or merge. Never overwrite silently. Also copy output-styles/concise.md into the resolved output-styles directory, with the same safety: if it already exists, show me a diff before overwriting.
5. Update the resolved CLAUDE.md. Read CLAUDE-md-activation.md from the clone. If that CLAUDE.md does not exist yet, show me its full proposed contents and ask before creating it. If it exists and already contains this activation block (or an equivalent one covering the same triggers and opt-outs), tell me and make no change. Otherwise, show me the exact diff you intend to apply, including where it gets appended, and wait for my explicit confirmation before writing anything.
6. Offer the hooks, do not install them on your own. Read hooks/HOOKS.md from the clone. On macOS, Linux, WSL, or native Windows with Git Bash, offer all three: verify-reminder.sh, fable5-fanout-guard.sh, and flight-deck-update-check.sh. Show me what each does and the exact JSON that would be added to settings.json to register them (verify-reminder.sh and fable5-fanout-guard.sh go under PreToolUse, flight-deck-update-check.sh goes under SessionStart). Base each hook's path on the config directory resolved in step 1, not a hardcoded $HOME/.claude; write $HOME/.claude only when that is what step 1 actually resolved to. In that JSON, the command path must be wrapped in escaped double quotes (for example "command": "\"$HOME/.claude/hooks/fable5-fanout-guard.sh\""), never left bare: an unquoted path word-splits the moment the config directory contains a space, and the resulting failure is non-blocking, so the hook would silently never run. And tell me they need jq on PATH to run, installed with brew install jq on macOS, your distro's package manager on Linux or WSL, or winget install jqlang.jq on native Windows (flight-deck-update-check.sh additionally needs curl). On native Windows without Git Bash, offer only the PowerShell fanout guard, fable5-fanout-guard.ps1. Tell me verify-reminder.sh and flight-deck-update-check.sh are bash only and will not be installed in this setup, which is an acceptable gap since one is a non-blocking reminder and the other a non-blocking release notice, so their absence costs a nudge, not a safeguard. Show me this exact registration JSON for the PowerShell guard, which needs no jq, using exec form (command is the powershell.exe interpreter itself, args a literal array, no shell in between) with the last args element set to the actual absolute path of fable5-fanout-guard.ps1 under the config directory resolved in step 1 (args does not expand $env: variables, so do not leave a placeholder there):
{"hooks": {"PreToolUse": [{"matcher": "Agent|Workflow", "hooks": [{"type": "command", "command": "powershell.exe", "args": ["-NoProfile", "-ExecutionPolicy", "Bypass", "-File", "<resolved config directory>\\hooks\\fable5-fanout-guard.ps1"]}]}]}}
Ask which of the offered hooks, if any, I want.
Only once I confirm: copy the chosen hook script(s) into the resolved hooks directory, and make each copied script executable with chmod +x if that applies per the decision from step 1. If settings.json already has content in the relevant section, show me the diff before writing it, otherwise just apply the change. Before reporting a bash hook as registered, check that jq is installed and on PATH, and warn me if it is not, using the platform-appropriate install command above; the PowerShell guard needs no such check.
7. Finish with a plain summary: which platform you detected, which files you copied, what, if anything, got appended to CLAUDE.md, whether the Concise output style was copied and that it stays off until I run /output-style Concise, and which hooks, if any, got registered. For anything I declined, say it was skipped and how to run it later. Then remove the temporary clone.
Do not write to CLAUDE.md or settings.json without showing me the change first and getting a yes. If the package is already installed, say so and stop instead of repeating the steps.Nine default weaknesses. One fix each.
Out of the box, Claude Code runs everything itself, treats every task the same, and forgets what it already knows. Flight Deck reroutes each of these to the crew station built for it.
Delegation
Runs everything itself, one thread at a time
Splits work into lots and delegates each to a subagent, in parallel
Model tier
Same tier for a typo fix and an architecture call
Routes each lot to the tier its difficulty earns: cheap for mechanical work, default for most of it, top tier reserved for judgment calls
Reasoning effort
One fixed effort level for everything
Calibrates effort per lot alongside the tier
Over-engineering
Adds abstraction layers, defensive code, and tests nobody asked for
Pushes back by default: no layer until a second real use case exists, no guard against inputs that cannot occur
Testing discipline
Calls it "done" on the strength of a diff
Picks the proof before writing code, runs the repository's own named check, cites the output
Memory and docs
Re-derives what is already known, skips the project's own notes
Recalls persistent memory and reads local docs before planning anything substantial
Cost
No sense of what a session is spending
Keeps the top tier in planning and verification only; execution goes to the cheapest tier that clears the bar
Verbosity
Buries the answer under preamble and filler in analyses, reports, and explanations
Leads with the conclusion and keeps output tight, detail on request: a Concise output style across Claude Code, plus a concision rule inside mission-control
Frontend fidelity
Trusts one screenshot glance and calls a broken UI fine
Renders through the Playwright MCP, describes each region, runs a breakage checklist, and cites evidence before a pass
Shipped and evolving.
Flight Deck keeps moving after install. Here is what changed recently, pulled straight from GitHub.
1.13.0
Added
skills/workspace-discipline/SKILL.mdis a new skill covering five rules on confirming repository root, branch, and worktree state before a write, each tied to a real incident.hooks/workspace-guard.shis a new non-blockingPreToolUsehook nudging toward explicit-path staging on indiscriminategit add/git stage, and separately ongit commit -a/-am/--all, each with its own reminder. A plaingit commit,git commit -m, orgit commit --amendstays quiet, and it ships with no PowerShell counterpart, followingverify-reminder.sh's precedent since it gates nothing.tools/test-workspace-guard.shis a new 37-case test suite exercisingworkspace-guard.sh's staging and commit reminders across matching, non-matching, and off-topicBashcommands, plus a reduced-PATH run matchingtools/doctor.sh's own environment..gitignoregains adocs/rule keeping local design and planning notes untracked, since they quote incident material from private repositories rather than public ones.
Changed
skills/test-discipline/SKILL.mdextends its never-asserted-from-memory rule to claims about external systems: an API's behavior, a flag, a library version, or whether a practice is current.skills/mission-control/SKILL.mdandskills/design-fidelity/SKILL.mdreplace their own restated source-checking instructions with a pointer totest-discipline's rule, keeping only their local specifics.skills/mission-control/SKILL.md's concision section now also governs merge-request and pull-request descriptions, tickets, and messages written for a team, not only its own reports.skills/mission-control/SKILL.md's worktree explanation keeps its existing summary intact and adds a pointer to the newworkspace-disciplineskill for full lifecycle doctrine. Nothing was removed, so the file grows rather than shrinks, and the summary alone still suffices whenworkspace-disciplineis not installed.skills/mission-control/SKILL.md's PLAN step 3 now flags that a clean file split can still hide a shared invariant, a count, an enumeration, or a dependency one lot's file assumes. It must be named and assigned to a lot's done criteria or checked at VERIFY, and a corrective lot given only known occurrences must find every one itself.README.md,tools/doctor.sh, andRELEASING.mdnow enumerate the fifth skill and fourth hook everywhere the package lists its components by hand.RELEASING.md's doctor confirmation step now cites a count verified against a real full-install fixture rather than computed by hand.
Fixed
hooks/workspace-guard.sh's matching now fires when a flag abuts a closing quote, such asbash -c "git add -A", which previously slipped through undetected. The accepted trade is one narrow new false positive on a quoted string containing a control operator, documented in the script and inhooks/HOOKS.md.hooks/workspace-guard.shnow blanks quoted-m/-am/--messagecontent and tightens the flag group betweengitand the subcommand, closing the quoted-flag andgit checkout stage .false positives.tools/doctor.sh's hook-execution check and its jq-missing fallback had both omittedworkspace-guard.sh, so a registered but non-running hook still reported healthy. Two stale comments naming only twoPreToolUsehooks are corrected to name three.README.mdandtools/doctor.shtold users to run the deprecated/output-stylecommand in six places, including doctor's remediation text; all now point to/configor theoutputStylesetting. The command was deprecated in Claude Code v2.1.73 and removed in v2.1.91.tools/doctor.sh's hook-execution check now catches a registered hook that starts, fails mid-run on a missing dependency, and still exits 0, since every shipped hook is documented fail-open. A broken hook like this previously reported as healthy and left the exit code unaffected; it now reports BROKEN and fails the check.hooks/workspace-guard.shnow recognizes aVAR=valueprefix beforegitand a quoted flag argument likegit -C "dir"as valid segment starts, closing two missed reminders. It also blanks a-mmessage flag whose quote abuts it with no space, such as-m"docs: explain the -a flag".
1.12.0
Added
RELEASING.mddocuments the release sequence step by step, with the reason each step sits where it does, after 1.11.0 nearly shipped a staleVERSIONfile.tools/check-release.shverifies on every invocation that theVERSIONfile matches the CHANGELOG's top section, and the tag too when one is passed, exiting 1 with a per-failure fix. It needs only bash, grep and sed, so it behaves identically locally and on a runner..github/workflows/release-check.yml, the repo's first CI workflow, runs that script on pushes tomain, on pull requests, and onv*tags, plus on demand with a tag argument so the tag path can be exercised without creating a tag.maincarries no branch protection, so the check reports a mismatch rather than blocking it.tools/check-published.shverifies the tag is annotated and pushed, the GitHub release is published with a body matching CHANGELOG.md, and the badge carries the right version. Run it by hand as the last release step; it needsghauthenticated and skips itsgh-dependent checks visibly otherwise.- mission-control's VERIFY phase gains a rule that a correction is not done until every place stating the old truth is fixed, not only the one found first.
- mission-control's VERIFY phase gains a rule to verify a mechanism by triggering it for real rather than reimplementing its rules, unless the trigger is destructive, costly, or irreversible.
- test-discipline gains a fifth procedure step requiring a metric from an angle the work did not target: a count against a known total, or an independently drawn sample.
- code-craft's runtime-cost section gains a rule to measure a suspected cost center before launching an optimization effort on it, distinct from fixing one of the four named triggers by reading.
1.11.0
Added
skills/mission-control/SKILL.mdgains a routing-grid rule sending any lot that judges an image toopus, one tier above the same lot on text, and splitting a browser tour between mechanical capture and the read of the frames.
Changed
skills/design-fidelity/SKILL.mdstates in its composition contract that capturing frames and scoring them are separate lots at separate tiers, and that the scoring pass keeps a pinned model when mission-control is absent.README.mddocuments the visual-judgment tier bump under Usage, beside the routing paragraph, with the reason it exists: the tiers share one image pipeline and separate on reasoning, not on perception.CLAUDE-md-activation.mdcarries the same rule into its routing bullet, so a project pasting the activation block into its own CLAUDE.md gets the tier bump without installing anything further.
1.10.0
Added
skills/code-craft/is a new skill owning the shape and runtime cost of a code change, through four cuts on scope, documentation, defensive coding, and abstractions.- code-craft also carries the runtime-cost triggers, the idiom rules, and the trust boundary that keeps minimalism off untrusted input, auth, payments, and irreversible actions.
tools/make-badges.pymerges the README badges into a single svg, since GitHub renders README images as block elements and strips inline styles, which stacks separate badges one per line. Run it after each release, as the version badge is baked into the image.
Changed
README.mdis reorganised around a banner hero, a badge strip and tables, with the installer and uninstall prompts, the manual steps, the Windows detail and the ultracode discussion folded into details blocks. Both prompts are byte-identical to 1.9.1.- The install and uninstall steps and the "What it does" and "What's inside" tables in
README.mdnow cover the fourth skill, code-craft, alongside test-discipline and design-fidelity. - Over-engineering doctrine that lived redundantly across mission-control's SKILL.md, CLAUDE-md-activation.md, and the trailing line of test-discipline's Proportionality section is consolidated into code-craft, and several files now route to it by name.
skills/mission-control/references/rationale.mddrops "The pricing argument" section because its payoff-scales-with-the-tier-gap claim survives inREADME.md, not because the file restates it earlier.skills/mission-control/references/rationale.mdfolds "The opusplan lineage" into one sentence under History instead of keeping its own heading.skills/mission-control/SKILL.mddrops its frontier-model framing paragraph and its four-symptom over-delivery restatement in favor of invoking code-craft, landing at 237 lines, still over the file's own ~200-line target.- The same edit also deleted the routing-grid bullet stating "
opusstays the exception", now restored as a short clause inside the "torn between two tiers" bullet. skills/design-fidelity/SKILL.mdandREADME.mdadd code-craft to the build contract, the degradation clause, and the sibling-skill list, alongside mission-control and test-discipline.skills/mission-control/README.mdupdates its install step and code-lot paragraph to name code-craft alongside test-discipline as a mandatory companion skill.
Removed
- The completed
docs/plans/anddocs/specs/design-fidelity planning documents, superseded by the shipped skill.
Fixed
- The README hero pointed at
flight-deck-x-banner.png, a gitignored social-media asset, so it resolved to a 404 on GitHub; a resized copy now ships at.github/assets/banner.jpg. - The README's opening paragraph counted two skills where the package ships four, undercounting by two once code-craft and design-fidelity are included.
tools/doctor.sh's required skill-folder check omittedcode-craft, so an install missing only that folder still passed clean; the enumeration comment and loop now include it.- The installer prompt's step 6 hook registration JSON hardcoded
$HOME/.claude, ignoring theCLAUDE_CONFIG_DIRoverride from step 1; README andhooks/HOOKS.mdnow reference the resolved config directory.
1.9.1
Added
- A README section positions Flight Deck next to Claude Code's
ultracodesetting:ultracoderaises reasoning effort and grants standing orchestration permission, while Flight Deck governs what that orchestration may spend and how its output is checked.
Fixed
- Unquoted
$HOMEin the hook registration JSON (hooks/HOOKS.md,skills/mission-control/README.md) broke silently on any platform, in every release, when the home or config path contained a space: the hook died non-blocking, so the fanout guard could appear installed while enforcing nothing. The path is now quoted everywhere; the PowerShell guard'sargsarray was never affected. - The installer prompt in
README.mdnow states the quoting requirement for the hooks' registration JSON, with the one-line reason, so an assistant generating that JSON at install time cannot reintroduce the bug. tools/doctor.shnow invokes each registered hook with a harmless no-op payload in a sandboxedPATH, confirming no shell-level path error and naming the quoting fix on failure; it skips rather than false-passing an unparseable command.- Both guards' settings.json fallback now honors
CLAUDE_CONFIG_DIR, matchingtools/doctor.sh, so a relocated config directory reads consistently everywhere the fallback applies. - The PowerShell guard now decodes stdin as UTF-8 explicitly instead of the console input codepage, so a non-ASCII payload (an accented word, a non-Latin path) no longer risks mis-decoding under Windows PowerShell 5.1.
Flight Deck evolves. No spam, just new versions.
Leave your email and I'll let you know when a new axis, skill or hook ships. Nothing else.