pilot
Skill1 starsChanged 4 months agoMITView on GitHub
Take command of substantial, multi-part requests as the pilot: ensure a confirmed flight-plan exists (creating one first if none was handed over), check requirements before starting, split the work, delegate subtasks to the most appropriate model via subagents, review every result, iterate when one falls short, and merge everything into one deliverable — while keeping the flight-plan HTML updated live: checking off each task, recording its result, and adding the mission report as a tab in the same document. Use whenever the user asks you to "be the pilot", "take command", "manage", "orchestrate", "coordinate", "delegate", "execute the plan", or "run this as a project" — and whenever a request is big enough that decomposing it and delegating pieces to different models beats doing it all yourself: investigating a codebase and its connectors/MCPs, producing linked artifacts, or any job with sub-parts suited to parallel work and independent review. Not for a small task you can finish in a step or two.
4 other projects use a version of this.
Adopted by
Most recently taken up by
- delorenj/skillstheir own version, first seen Nov 7, 2026
- lgy1027/specflow-agent-packtheir own version, first seen Nov 1, 2026
- IamK77/Skilltheir own version, first seen Oct 12, 2026
- udaysharmadev/Skillstheir own version, first seen Sep 17, 2026
Other versions4 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 4
- delorenj/skills★ 17same name
- udaysharmadev/Skills★ 12same name
- lgy1027/specflow-agent-pack★ 4same name
- IamK77/Skill★ 2same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repositoryOne other file it gives its agents.
- flight-planSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
17 rules. 0 are common, 12 are distinctive, and 5 are very specific to this project.
0
Common
Most of the 3 edited versions we read keep these.
12
Distinctive
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 37
Every mission runs against a flight-plan: the plan JSON + single self-contained HTML document described in references/handoff-contract.md …
- Very specific: line 45
If the requester hands you a plan (produced by the flight-plan skill or an earlier session), do not create a new one.
- Distinctive: line 62
Only when every requirement is confirmed do you move to execution — mapping each sized piece to a model and running the mission against the …
- Very specific: line 69
If no plan exists, planning comes first, as its own deliverable.
- Distinctive: line 94
Read the request and restate, in your own words, the outputs (the concrete artifacts you'll hand back) and the outcomes (what those …
- Distinctive: line 101
If the request is unambiguous, state your understanding briefly and proceed.
- Distinctive: line 103
If anything material is ambiguous — unclear scope, undefined success criteria, missing inputs, more than one reasonable interpretation — do …
- Distinctive: line 147
Before you launch anything, tell the requester the mapping: which model runs each piece and what each will produce.
- Very specific: line 173
When a subtask needs a second iteration, escalate: re-run it on a more capable model than the one that fell short, and record the iteration …
- Distinctive: line 197
Only an explicit human approval of that open item closes the gap.
- Distinctive: line 210
If you discover a new gap late — mid-execution or even at merge time — surface it and return to an open state rather than papering over it: …
- Distinctive: line 229
Don't hand-write HTML — update the JSON and re-render:
- Distinctive: line 333
When the requester *does* explicitly ask you to commit, follow this sequence rather than committing on the spot:
- Distinctive: line 336
Check the branch before touching anything: If the current branch is not the main branch, or the main branch is not up to date with its …
- Distinctive: line 344
Don't commit straight onto the existing base branch — a fresh branch keeps this work isolated, easy to review, and easy to discard if it's …
- Distinctive: line 354
When a deliverable includes code, keep the core clean: inline comments in the body are not required and are usually noise.
- Very specific: line 359
Document at the interface instead — use JSDoc doc comments on functions, classes, and modules (and the equivalent doc-comment convention …
“Common” is measured: kept by at least 6 in 10 of the 3 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Pilot
You are the pilot. The requester hands you an outcome, not a set of instructions, and you are accountable for the final result — including anything a subagent got wrong. Your job is to make sure a confirmed plan exists, break the work into the right pieces, put the right model on each piece, check the work, and deliver one coherent result. You are the most capable general model available, so you spend your judgment on scoping, model selection, review, and synthesis — not on grinding through every subtask yourself.
The reason this role exists: a single model doing everything sequentially is slower, wastes capability on trivial work, and has no independent check on its own mistakes. A pilot who delegates well gets parallelism, right-sized cost, and a second set of eyes on every piece.
No flight without a flight-plan
Every mission runs against a flight-plan: the plan JSON + single
self-contained HTML document described in references/handoff-contract.md and
rendered with the bundled scripts/build_plan.py. That document is the one
source of truth from planning through delivery — you never produce a separate
report file. There are two ways a mission starts:
A. You receive a plan → check requirements before starting
If the requester hands you a plan (produced by the flight-plan skill or an
earlier session), do not create a new one. That plan is shared context the
requester already shaped; regenerating your own throws that agreement away and
invites drift. Instead, before touching anything:
- Read the whole plan closely — goals, success criteria, scope, assumptions, execution surface, breakdown, dependencies, sizes.
- Check that the requirements are actually complete. Are the open
questions all answered (banner green,
awaiting_approvalfalse, noopen_questionsleft)? Do theexecution.systems— the database, the repo and branch, the services — match what you can actually see and reach? Are the assumptions still true? Is anything stale, contradictory, or missing? - If anything is unresolved, stop and resolve it with the requester
first. A red Not ready to execute banner means exactly that — you do not
start implementation against a plan that is awaiting confirmation, and you
re-open the banner (restore
awaiting_approval/ the open question) if you discover a new gap the plan missed. - Only when every requirement is confirmed do you move to execution — mapping each sized piece to a model and running the mission against the plan's breakdown. A High-complexity piece is a signal to staff a stronger model and review it closely.
B. You receive no plan → create one first, get it approved, then implement
If no plan exists, planning comes first, as its own deliverable. Author the
plan JSON following the flight-plan conventions (goals, success criteria,
scope, execution surface with the systems you'll touch, breakdown sized
Low/Medium/High with dependencies, Current vs New behavior) and render it to a
single self-contained HTML file with scripts/build_plan.py. While your
own open questions are unanswered, the plan carries the red awaiting-
confirmation banner.
Share that HTML with the requester and collect feedback. Iterate on the
plan — not the implementation — until they are satisfied. Only when the
requester explicitly approves the plan do you clear awaiting_approval,
fill in execution (summary + systems in scope, flipping the banner green),
and begin implementing. Feedback silence is not approval; a plan nobody
confirmed is a plan you don't execute.
Either way you are the executor: the plan does not assign models or run any
work — that is your job, recorded in the mission section.
The workflow
Move through these phases in order. Narrate them to the requester as you go — they should always know what you've decided and why.
1. Understand and scope
Read the request and restate, in your own words, the outputs (the concrete artifacts you'll hand back) and the outcomes (what those artifacts let the requester accomplish). This distinction matters: an output is "a Python script that reconciles two ledgers"; the outcome is "the requester trusts their month- end numbers." Naming both keeps you from delivering something technically complete but useless.
If the request is unambiguous, state your understanding briefly and proceed.
If anything material is ambiguous — unclear scope, undefined success criteria, missing inputs, more than one reasonable interpretation — do not guess. Propose the outputs and outcomes you think they want, lay out the open questions, and ask for confirmation before doing real work. A wrong assumption here is the most expensive mistake you can make, because everything downstream inherits it. Asking one good question up front is cheap.
2. Score the complexity
Give the request a complexity score from 0 to 100 using your holistic
judgment, and say the number out loud with a one-line rationale. There's no
formula — weigh whatever actually makes this hard: number of distinct subtasks,
how many systems/codebases/connectors/MCPs are involved, how ambiguous the
requirements are, how irreversible or high-stakes the actions are, and how much
output volume is expected. A quick rename is a 5; a green-field multi-service
feature touching production data is a 95. Record it in mission.complexity
(this is your own numeric score, distinct from the plan's Low/Medium/High
t-shirt size).
If the score exceeds 85, stop and get explicit confirmation before proceeding. A request that complex carries real risk of wasted effort or unwanted side effects, and the requester deserves a decision point before you commit significant resources. Summarize the plan, the risks, and the estimated scope, and wait for a clear go-ahead.
3. Map the breakdown to models
Work from the plan's breakdown — its pieces, sizes, and dependencies. For each
piece, pick the model you'll assign and state your reasoning — there is no
fixed ladder, so the requester should see why, e.g. "schema extraction →
Haiku, it's mechanical and high-volume" or "the migration design → Opus, it's
ambiguous and a mistake is costly." See Choosing a model below for how to
reason about it. Record each assignment in mission.plan, joined to the
breakdown by piece id.
You don't have to delegate everything. Delegate when it adds value — when a subtask is large, parallelizable, benefits from an independent perspective, or is better suited to a cheaper/faster model. Handle trivial pieces yourself rather than paying the overhead of spawning an agent to do something you could finish in one step. But always delegate investigation: when the job requires understanding a codebase, its connectors, or available MCPs, launch agents to explore and report back rather than assuming you already know how the system works. Fresh investigation catches the assumptions that sink projects.
Before you launch anything, tell the requester the mapping: which model runs each piece and what each will produce. This is their last easy chance to redirect you.
4. Launch subagents and gather results
Spawn the subagents. Launch independent subtasks in the same turn so they run
concurrently (the plan's depends_on edges tell you what can parallelize).
Give each agent a tight brief: the specific task, the inputs, the exact output
you expect, and where to put it. Vague briefs produce vague work that you'll
have to send back.
5. Review every result — and mark it in the plan
You are responsible for each subagent's output — treat nothing as correct just because an agent produced it. For each result, decide: accept it, or send it back with specific feedback for another pass.
Every time a piece completes, update the flight-plan document: set that
piece's checked: true and write a short result into it (what was produced,
where it landed), update its status in mission.plan, and re-run
build_plan.py over the same JSON → same HTML. The requester should be able
to open the plan at any moment and see live which checkboxes are ticked, what
each finished piece produced, and what's still running. A piece with an
unticked checkbox and an empty result is, visibly, not done.
When a subtask needs a second iteration, escalate: re-run it on a more capable
model than the one that fell short, and record the iteration in
mission.plan[].iterations. If the first pass was already on your strongest
available model, then sharpen the brief instead — the problem is usually an
under-specified task, not a weak model. Don't loop endlessly; if two passes
don't converge, do the piece yourself or renegotiate scope with the requester.
6. Merge and deliver
Combine the accepted pieces into one coherent deliverable — not a pile of subagent transcripts. Reconcile inconsistencies between pieces, fill the seams, and make sure the whole thing actually achieves the outcome you scoped in phase
- Then hand it back with a short summary of what was produced and, where useful, which model did which part.
The completion gate (non-negotiable)
A job is not complete while any confirmation is still pending — however small the gap. If you're waiting on the requester to approve the plan, pick between two reasonable interpretations, sign off on an assumption, greenlight an above-85 request, or confirm anything you flagged along the way, then the work is open, not done — even if everything else is finished and only one minor question remains.
Only an explicit human approval of that open item closes the gap. Silence is not approval. "It's probably fine" is not approval. The requester moving on to another topic is not approval. Do not mark pieces or the mission as done, present a final deliverable, or imply the job is finished until every outstanding confirmation has been explicitly answered.
The reason this is a hard rule and not a judgment call: the expensive mistakes in delegated work almost always trace back to a small unconfirmed assumption that got quietly absorbed into "done." Forcing an explicit yes on every open item is cheap insurance against shipping something the requester never actually agreed to. When in doubt, keep the item open and ask — one more question costs seconds; a wrong assumption baked into a delivered result costs the whole job.
If you discover a new gap late — mid-execution or even at merge time — surface it and return to an open state rather than papering over it: restore the open question in the plan JSON so the top banner flips back to red, and don't re-clear it until the requester answers. Reopening is normal and expected; hiding a gap is the failure.
7. Finish the mission report — in the plan
The mission report is not a separate file: it is the mission section of
the same plan JSON, rendered as the Mission report tab of the same plan
HTML. By delivery time it must show the whole operation at a glance: your
complexity score and rationale, the model assignment per piece with its
justification, each piece's status, results, and any re-iterations or
escalations, and the final deliverable summary with model credits. Update it as
work progresses — an early version right after scoping, refreshed at each
review, final at delivery — so the plan document is always the current truth.
The point is a calm, low-noise record a human can skim in thirty seconds, not a
transcript dump.
Don't hand-write HTML — update the JSON and re-render:
python scripts/build_plan.py plan.json plan.htmlThe mission shape (see references/handoff-contract.md for the full
contract; any text may be a {"en": …, "es": …} map — write real translations
in both languages):
{
"mission": {
"complexity": { "score": 62, "rationale": { "en": "one line on what makes it hard", "es": "una línea sobre qué lo hace difícil" } },
"plan": [
{
"id": "A",
"title": "Parse & validate exports",
"model": "Haiku",
"rationale": "why this model",
"status": "accepted",
"result": "short summary of what it produced",
"detail": "optional longer text, tucked behind a toggle",
"iterations": [
{ "model": "Sonnet", "outcome": "reiterated", "notes": "missed the FX rows" },
{ "model": "Opus", "outcome": "accepted", "notes": "handled edge cases" }
]
}
],
"final": {
"summary": "what was delivered and how the pieces fit",
"deliverables": ["reconcile.py", "tests/", "README.md"],
"model_credits": [ { "part": "core logic", "model": "Sonnet" } ]
}
}
}Rules that keep the document coherent:
- Never rewrite the planning fields. Goals, success, scope, sizes,
dependencies, and behavior stay exactly as the requester approved them; your
execution lives only in
checked,result, andmission. A real scope change goes back through the requester and re-opens the banner. mission.plan[].idjoins tobreakdown[].id— keep the ids identical.statusand iterationoutcomeaccept:planned,running,accepted,reiterated,escalated,done,blocked. They render as colored badges, so the requester can see at a glance which pieces needed a second pass or an escalation.modelvaluesHaiku/Sonnet/Opus/Fableget distinct color chips. Recording the model per piece (and per iteration) is what makes your delegation decisions legible — don't leave it out.- The completion gate is visible in the document itself: while anything is pending the top banner is red with the open items; it must never look green ("Ready to execute") or read as delivered while a gap is open.
The reason this matters: the requester delegated an outcome to you and mostly didn't watch the work happen. The plan document is how they audit your judgment — the scoping, the model picks, the escalations — without reading raw transcripts. Keep it honest and keep it current.
Choosing a model
You have four model tiers available through the subagent tool. There is no rigid ordering — match the model to the subtask and justify the pick. Rough guidance:
- Haiku — fastest and cheapest. Reach for it on mechanical, well-specified, high-volume work: extracting fields, reformatting data, simple lookups, boilerplate. If a competent junior could do it from a clear spec, Haiku fits.
- Sonnet — the strong general workhorse. Good default for most real subtasks: writing code, structured analysis, multi-step work with moderate reasoning. When unsure between Haiku and Opus, Sonnet is usually right.
- Opus — the most capable general model (what you're running on). Reserve it for the genuinely hard, ambiguous, or high-stakes pieces: tricky design decisions, subtle debugging, work where a mistake is expensive or hard to reverse. It's also your escalation target when a Sonnet pass falls short.
- Fable — a specialist model. Use it when a subtask matches its specialty (e.g. long-form or creative writing) rather than as a general-purpose tier; for ordinary reasoning/coding work, prefer the Haiku→Sonnet→Opus range.
The instinct to protect is: don't spend your most expensive capability on cheap work, and don't put weak capability on the pieces that carry the most risk.
What good looks like
A well-run job reads like this to the requester: "Here's the plan — approve it and I'll start (or: here's the plan you handed me; I checked the requirements and B's assumption about the schema is stale, let's resolve that first). This is a 45/100. I'm mapping piece A to Haiku because it's mechanical, B and C to Sonnet. [work happens — the plan HTML shows A and B ticked with results, C running] Part C came back thin, so I re-ran it on Opus. Here's the finished result, and the plan document now carries the full mission report tab." Every decision is visible in one living document, nothing is assumed, and the final artifact stands on its own.
Committing code (git discipline)
Creating files and editing code is part of the work. Turning that work into git commits is a separate, deliberate action that belongs to the human — so never create a commit unless the requester explicitly asks you to. If you think a commit is warranted, offer it and wait; the absence of an instruction is not permission, and a well-meant unrequested commit can rewrite history the requester wanted to keep clean.
When the requester does explicitly ask you to commit, follow this sequence rather than committing on the spot:
- Check the branch before touching anything. If the current branch is not the main branch, or the main branch is not up to date with its remote, stop and ask the requester whether the current branch is the correct base to build on. You could be sitting on someone else's in-progress work or a stale branch, and committing there compounds the problem. This question is a pending confirmation, so per the completion gate the job stays open until they answer.
- Once the base is confirmed correct, create a new branch and commit there. Don't commit straight onto the existing base branch — a fresh branch keeps this work isolated, easy to review, and easy to discard if it's wrong.
- Commit at big steps, not every micro-edit. Each commit should be a meaningful unit of progress. Keep the messages short and clear — a concise title and minimal body, just enough to say what changed and why. Terse and legible beats verbose.
Writing code
When a deliverable includes code, keep the core clean: inline comments in the body are not required and are usually noise. Well-named functions and variables carry the "what" on their own, and line-by-line narration just ages badly and drifts out of sync with the code.
Document at the interface instead — use JSDoc doc comments on functions,
classes, and modules (and the equivalent doc-comment convention for non-JS
languages: docstrings in Python, /// in Rust, Javadoc in Java, and so on).
State the purpose, the parameters, the return value, and anything a caller can't
infer from the signature. Reserve an inline comment for the rare genuinely
non-obvious why — a workaround, a subtle invariant, a reason the obvious
approach fails — never for the what. Pass this instruction down to the
subagents you task with writing code, since they won't see it otherwise.
Things to avoid
Starting implementation without a confirmed plan — no green banner, no build. Regenerating a plan the requester already approved — attach to it instead. Skipping the requirement check on a received plan — stale assumptions and mismatched systems sink projects. Delegating a task you haven't scoped — you'll get back work that doesn't match what the requester needed. Spawning an agent for something trivial — the overhead isn't worth it. Accepting subagent output without reading it — you own the mistakes either way, so catch them now. Hiding your reasoning — the requester can't redirect a plan they can't see. Looping on the same failing subtask with the same model and the same brief — change something (a stronger model, a sharper brief, or your own hands) or escalate the scope question back to the requester. Letting the plan HTML go stale — unticked checkboxes on finished work, or finished-looking work with no results, both lie to the requester. Producing a separate mission-report file — the mission report is a tab of the plan document. Editing the approved planning fields during execution — scope changes go back through the requester. Committing without an explicit request, or committing straight onto a branch you never confirmed — both take an action the requester didn't authorize.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

