JTBack to home
Open source · Claude Code package

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.

Install

One prompt installs it.

Paste this into a fresh Claude Code session.

installer prompt
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.
The problem, axis by axis

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

Changelog

Shipped and evolving.

Flight Deck keeps moving after install. Here is what changed recently, pulled straight from GitHub.

v1.13.0

1.13.0

7 Aug 2026

Added

  • skills/workspace-discipline/SKILL.md is 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.sh is a new non-blocking PreToolUse hook nudging toward explicit-path staging on indiscriminate git add/git stage, and separately on git commit -a/-am/--all, each with its own reminder. A plain git commit, git commit -m, or git commit --amend stays quiet, and it ships with no PowerShell counterpart, following verify-reminder.sh's precedent since it gates nothing.
  • tools/test-workspace-guard.sh is a new 37-case test suite exercising workspace-guard.sh's staging and commit reminders across matching, non-matching, and off-topic Bash commands, plus a reduced-PATH run matching tools/doctor.sh's own environment.
  • .gitignore gains a docs/ 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.md extends 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.md and skills/design-fidelity/SKILL.md replace their own restated source-checking instructions with a pointer to test-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 new workspace-discipline skill for full lifecycle doctrine. Nothing was removed, so the file grows rather than shrinks, and the summary alone still suffices when workspace-discipline is 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, and RELEASING.md now 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 as bash -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 in hooks/HOOKS.md.
  • hooks/workspace-guard.sh now blanks quoted -m/-am/--message content and tightens the flag group between git and the subcommand, closing the quoted-flag and git checkout stage . false positives.
  • tools/doctor.sh's hook-execution check and its jq-missing fallback had both omitted workspace-guard.sh, so a registered but non-running hook still reported healthy. Two stale comments naming only two PreToolUse hooks are corrected to name three.
  • README.md and tools/doctor.sh told users to run the deprecated /output-style command in six places, including doctor's remediation text; all now point to /config or the outputStyle setting. 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.sh now recognizes a VAR=value prefix before git and a quoted flag argument like git -C "dir" as valid segment starts, closing two missed reminders. It also blanks a -m message flag whose quote abuts it with no space, such as -m"docs: explain the -a flag".
Read full notes on GitHub
v1.12.0

1.12.0

3 Aug 2026

Added

  • RELEASING.md documents the release sequence step by step, with the reason each step sits where it does, after 1.11.0 nearly shipped a stale VERSION file.
  • tools/check-release.sh verifies on every invocation that the VERSION file 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 to main, on pull requests, and on v* tags, plus on demand with a tag argument so the tag path can be exercised without creating a tag. main carries no branch protection, so the check reports a mismatch rather than blocking it.
  • tools/check-published.sh verifies 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 needs gh authenticated and skips its gh-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.
Read full notes on GitHub
v1.11.0

1.11.0

29 Jul 2026

Added

  • skills/mission-control/SKILL.md gains a routing-grid rule sending any lot that judges an image to opus, 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.md states 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.md documents 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.md carries 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.
Read full notes on GitHub
v1.10.0

1.10.0

28 Jul 2026

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.py merges 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.md is 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.md now 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.md drops "The pricing argument" section because its payoff-scales-with-the-tier-gap claim survives in README.md, not because the file restates it earlier.
  • skills/mission-control/references/rationale.md folds "The opusplan lineage" into one sentence under History instead of keeping its own heading.
  • skills/mission-control/SKILL.md drops 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 "opus stays the exception", now restored as a short clause inside the "torn between two tiers" bullet.
  • skills/design-fidelity/SKILL.md and README.md add code-craft to the build contract, the degradation clause, and the sibling-skill list, alongside mission-control and test-discipline.
  • skills/mission-control/README.md updates its install step and code-lot paragraph to name code-craft alongside test-discipline as a mandatory companion skill.

Removed

  • The completed docs/plans/ and docs/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 omitted code-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 the CLAUDE_CONFIG_DIR override from step 1; README and hooks/HOOKS.md now reference the resolved config directory.
Read full notes on GitHub
v1.9.1

1.9.1

24 Jul 2026

Added

  • A README section positions Flight Deck next to Claude Code's ultracode setting: ultracode raises reasoning effort and grants standing orchestration permission, while Flight Deck governs what that orchestration may spend and how its output is checked.

Fixed

  • Unquoted $HOME in 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's args array was never affected.
  • The installer prompt in README.md now 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.sh now invokes each registered hook with a harmless no-op payload in a sandboxed PATH, 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, matching tools/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.
Read full notes on GitHub
Stay in the loop

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.