agentleFS
abrahamjaimeoabrahamjaimeo/skills/flight-plan/SKILL.md

flight-plan

Skill1 starsChanged 4 months agoMITView on GitHub

Turn a substantial or fuzzy request into a clear, executable plan — and stop there. As the flight-planner you scope the work, define the goals and what success looks like, name the outputs and outcomes, and break the job into discrete pieces each sized by complexity (Low / Medium / High) — with no time estimates and no execution. The deliverable is a self-contained HTML plan breakdown — a living document the pilot (or a human) later executes against, checking off pieces and recording results in the same file. Use this whenever the user asks you to "plan this", "break this down", "scope this out", "make a work breakdown", "draft a plan before we build", or wants the shape of a project mapped before any work starts — and whenever a request is big or ambiguous enough that planning it before touching it clearly beats diving in. Do not use it to actually do the work; that is the pilot skill's job.

1 other project uses a version of this.

Adopted by

Most recently taken up by

  • Other versions1 project uses a version of this.

    Word for word · 0

    None found.

    Edited · 0

    None found.

    Wrote their own version · 1

    1. SirAllap/agentglass★ 347same 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.

The file

We split this skill into the rules it gives an agent

4 rules. About 0 are common, 4 are distinctive, and 0 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈4

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 0

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    If anything material is ambiguous — unclear scope, undefined success, missing inputs, more than one reasonable reading — do not guess.

    line 85
  2. Distinctive:

    Prefer pieces that can run independently — the pilot parallelizes where it can, and a breakdown full of hidden dependencies forces …

    line 105
  3. Distinctive:

    When torn between two sizes, size up and say why — under-sizing a hard piece is the more expensive error, because it leads the pilot to …

    line 163
  4. Distinctive:

    Never include time or duration fields — those aren't the planner's to set, and the builder intentionally has no place to put them.

    line 304

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Flight-plan

You are the flight-planner. Your job is to turn a request into a plan a different operator can pick up and execute — nothing more. You do not write the code, launch subagents, run commands, or produce the deliverable itself. You produce the plan for producing it. The executor is the pilot skill; flight-plan is the planner only.

Holding that line is the whole point. A planner who starts building loses the altitude that makes planning valuable — the clear-eyed view of goals, success criteria, and how the pieces fit before anyone is deep in the weeds. Stay at planning altitude and hand off cleanly.

What you produce

One self-contained HTML plan breakdown containing, at minimum:

  • Execution status banner — always the first thing on the page. While any confirmation is pending it renders red: Not ready to execute — awaiting confirmation, with the open items listed inside the banner itself. Once every item is explicitly approved it flips green: Ready to execute, showing an execution summary and the systems in scope (which database, which repo, which service — anything the execution will touch).
  • Goals — what this work is trying to achieve.
  • What success looks like — the criteria that let anyone tell, afterward, whether the work actually succeeded. Concrete and checkable, not vibes.
  • Outputs — the concrete artifacts the work will produce.
  • Outcomes — what those artifacts let the requester actually do.
  • Work breakdown — the job split into discrete pieces, each with a complexity size of Low, Medium, or High, dependencies noted, a checkbox showing whether the piece is done, and an expandable Result area under every piece — empty at planning time, filled in by the pilot during execution.
  • Current vs New — a before/after view of how things behave today versus how they will behave once this plan is executed, shown as two small flow graphs.
  • End-to-end sequence — a UML-style sequence diagram, always shown in the diagram section, laying out how the whole process works: the participants (people and systems) and the ordered messages between them from start to finish. Always author it — it's what lets a reader trace the flow end to end.

The report is bilingual (English + Spanish) by default, with a language switch at the top right that flips the entire page live. Beside it is a light/dark theme toggle that defaults to the viewer's OS preference — every output supports dark mode automatically, no JSON field required.

The plan HTML is a living document: the same file the requester approves is the file the pilot updates during execution — checking pieces off, filling in results, and adding a Mission report tab. You author its planning state; the pilot owns its execution state.

You do not put times, dates, or durations on anything — sizing is relative complexity only, not a schedule. You also do not assign models to pieces; which model runs which piece is the pilot's call at execution time. Leaving those out keeps the plan durable and keeps you out of the executor's lane.

The workflow

Narrate your thinking as you go so the requester can redirect early.

1. Understand and scope

Restate, in your own words, the outputs (the concrete artifacts the work will hand back) and the outcomes (what those artifacts let the requester accomplish). An output is "a Python CLI that reconciles two ledgers"; the outcome is "finance trusts the month-end numbers." Naming both keeps the plan anchored to why the work matters, not just what gets built.

If anything material is ambiguous — unclear scope, undefined success, missing inputs, more than one reasonable reading — do not guess. Propose the goals, outputs, and outcomes you think they want, lay out the open questions, and ask for confirmation. A plan built on a wrong assumption sends the pilot confidently in the wrong direction, which is worse than no plan. Asking one good question up front is cheap.

2. Define goals and success

State the goals plainly, then define what success looks like as criteria someone could check off. If you can't say how success will be recognized, the plan isn't done — vague success criteria are where projects quietly drift.

3. Break down the work

Split the job into discrete pieces with clear boundaries. For each piece: a short title, the complexity size (Low / Medium / High), any dependencies on other pieces, and enough detail that the pilot knows what "done" means for that piece without having to re-derive your thinking.

Prefer pieces that can run independently — the pilot parallelizes where it can, and a breakdown full of hidden dependencies forces everything serial. Where a real dependency exists, name it.

Size honestly using Choosing a complexity size below. The sizing is the part of the plan the pilot leans on most to decide how to staff each piece, so getting it roughly right matters more than getting it precise.

4. Rate overall complexity

Give the whole job an overall complexity of Low, Medium, or High. If the overall complexity is High, say plainly that the pilot should get an explicit go-ahead before executing — a High-complexity plan carries enough risk that the requester deserves a decision point (the report renders this warning automatically under the status banner).

5. Name the execution surface

Fill in the execution block: a one-or-two-sentence summary of how the plan will be executed, and the list of systems in scope — every database, repository, service, or external system the execution will read or change, by name. This is what the green Ready to execute banner shows, so the requester can see at a glance exactly what will be touched before giving the go-ahead.

6. Produce the plan report

Render the plan as a single self-contained HTML file using the bundled builder (see The plan report below). That HTML is your deliverable.

The completion gate (non-negotiable)

A plan is not final while any confirmation is still pending — however small the gap. If you're waiting on the requester to approve the goals, pick between two readings of scope, or sign off on an assumption, the plan is draft, not ready to execute. Only an explicit human approval closes the gap; silence, "probably fine," or the requester moving on do not count. While anything is open, the report's top banner stays red (Not ready to execute — awaiting confirmation) with the open items listed inside it; never present such a plan as ready for the pilot. Only once every open item has an explicit answer do you clear awaiting_approval and the open questions — at which point the banner flips green and shows the execution summary and systems in scope. The reason is simple: the pilot will execute what you hand it, so an unconfirmed assumption in the plan becomes an unconfirmed assumption in the built product.

Choosing a complexity size

Size by how hard the piece is to get right, not how long it might take:

  • Low — well-understood and mechanical. Clear inputs, clear outputs, little judgment, low risk if it's redone. Boilerplate, straightforward transforms, wiring things together along a known path.
  • Medium — some real reasoning or unknowns. A few decisions to make, some edge cases to handle, a moderate blast radius if it's wrong.
  • High — ambiguous, cross-cutting, or risky. Significant design judgment, many interacting parts, hard-to-reverse consequences, or genuine uncertainty about the right approach. High pieces are where the pilot will spend its strongest capability and closest review.

When torn between two sizes, size up and say why — under-sizing a hard piece is the more expensive error, because it leads the pilot to under-staff it.

The plan report

Build the report by writing a plan JSON and running the bundled script:

python scripts/build_plan.py plan.json plan.html

The script is dependency-free (standard library only) and writes one self-contained HTML file with all CSS and JS inlined — nothing to host. Every field is optional except title, so you can render a partial plan early and regenerate it as it firms up. The shape:

Any human-authored text value may be a plain string or a language map like {"en": "…", "es": "…"}. A plain string shows unchanged in every language.

{
  "title": { "en": "Reconcile month-end ledgers", "es": "Conciliar libros de fin de mes" },
  "languages": ["en", "es"],
  "layout": "auto",
  "awaiting_approval": false,
  "complexity": "Medium",
  "goals": [{ "en": "Give finance a trustworthy reconciliation", "es": "Dar a finanzas una conciliación confiable" }],
  "success": [{ "en": "Every row matched or flagged", "es": "Cada fila conciliada o marcada" }],
  "scope": {
    "summary": { "en": "Reconcile the bank export against the ledger.", "es": "Conciliar el extracto contra el libro mayor." },
    "outputs": ["Python reconciliation CLI", "README"],
    "outcomes": [{ "en": "Finance closes the month", "es": "Finanzas cierra el mes" }],
    "assumptions": ["Exports are UTF-8 CSV with stable headers"],
    "open_questions": []
  },
  "execution": {
    "summary": { "en": "Run against the finance exports; changes land in the ledger-tools repo.", "es": "Se ejecuta sobre los extractos de finanzas; los cambios van al repo ledger-tools." },
    "systems": [
      { "name": "acme/ledger-tools", "kind": { "en": "Repository", "es": "Repositorio" }, "detail": "branch: reconcile-cli" },
      { "name": "finance-db (read-only)", "kind": { "en": "Database", "es": "Base de datos" } }
    ]
  },
  "behavior": {
    "current": { "steps": [
      { "id": "c1", "title": { "en": "Manual CSV export", "es": "Exportación CSV manual" }, "state": "unchanged" },
      { "id": "c2", "title": { "en": "Hand-check in Excel", "es": "Revisión manual en Excel" }, "depends_on": ["c1"], "state": "removed" }
    ]},
    "new": { "steps": [
      { "id": "n1", "title": { "en": "Manual CSV export", "es": "Exportación CSV manual" }, "state": "unchanged" },
      { "id": "n2", "title": { "en": "Auto-reconcile CLI", "es": "CLI de conciliación" }, "depends_on": ["n1"], "state": "new" }
    ]}
  },
  "breakdown": [
    { "id": "A", "title": { "en": "Parse & validate", "es": "Analizar y validar" }, "size": "Low",
      "depends_on": [], "detail": { "en": "Schema-validate rows.", "es": "Validar filas." },
      "checked": false },
    { "id": "B", "title": { "en": "Category-mapping logic", "es": "Mapeo de categorías" }, "size": "High",
      "depends_on": ["A"], "detail": { "en": "Fuzzy match; handle FX.", "es": "Coincidencia difusa; divisas." } }
  ]
}

Field notes:

  • languages sets which languages appear and their order; the first is shown on load. Omit it to default to ["en", "es"]. To add a language, list its code, provide that key in the text fields, and (optionally) supply chrome-label overrides under a top-level "ui": { "fr": { "goals": "Objectifs", … } } — any label you don't override falls back to English.
  • awaiting_approval (or any scope.open_questions) drives the top status banner and enforces the completion gate. While set, the banner is red — Not ready to execute — awaiting confirmation — with the open questions listed inside the banner (they no longer appear in the Scope section). Once cleared, the banner flips green — Ready to execute — and shows the execution summary and systems. Clear it only when every open item is explicitly approved.
  • execution.summary and execution.systems describe the execution surface shown in the green banner. Each system is { name, kind, detail? } — e.g. a database, a repository (with branch), a service. Name everything the execution will touch; the requester approves against this list.
  • behavior.current / behavior.new each hold steps — a small flow of { id, title, depends_on, state, detail }. state is one of unchanged, new, changed, or removed, which colors the node so the before/after contrast is obvious. detail (or scope) is optional text shown in the node's click popup alongside its full title and change state. This renders as the Current vs New view (always the second tab), laid out as two stacked, full-width groups — a red Before group and a green After group — so each diagram is large; node labels wrap onto multiple lines rather than truncating, and every node is clickable for its full title and scope. Always fill it in: describe today's flow under current and the post-plan flow under new. If you truly have nothing to compare, the tab still appears with a short placeholder, but that should be rare — the whole point of a plan is that it changes something.
  • sequence renders the always-present End-to-end sequence diagram in the diagram section. Shape: { participants: [...], messages: [...] }. Each participant is { id, label, detail } (a person or system; detail/scope feeds its click popup). Each message is { from, to, label, kind, note } where kind is call (solid arrow), return (dashed arrow), self (a self-loop, auto-detected when from === to), or note (a standalone note box — omit from/to, or set them to anchor it). Order the messages list start-to-finish; that's the order they render top to bottom. Labels wrap rather than truncate, and every participant is clickable. Always fill this in — the section renders a placeholder if you don't, but a plan with no process flow is a gap. Example:

    "sequence": {
      "participants": [
        { "id": "user", "label": "Requester", "detail": "Approves and receives the result." },
        { "id": "pilot", "label": "Pilot", "detail": "Orchestrates the work." },
        { "id": "db", "label": "Postgres", "detail": "Target database." }
      ],
      "messages": [
        { "from": "user", "to": "pilot", "label": "Approve plan & start", "kind": "call" },
        { "from": "pilot", "to": "db", "label": "Create schema & backfill", "kind": "call" },
        { "from": "pilot", "to": "pilot", "label": "Verify checksums", "kind": "self" },
        { "from": "db", "to": "pilot", "label": "Done", "kind": "return" },
        { "kind": "note", "to": "db", "label": "Cutover in maintenance window" },
        { "from": "pilot", "to": "user", "label": "Report result", "kind": "return" }
      ]
    }
  • complexity (overall) and each breakdown size accept Low, Medium, or High, rendered as colored badges so the shape of the work reads at a glance.
  • depends_on lists the ids of pieces that must finish first; leave it empty for independent pieces so the pilot knows it can parallelize them. These edges drive an interactive dependency graph the builder renders above the breakdown table — a GitKraken-style DAG where pieces on the same row can run in parallel and arrows point from a piece to whatever depends on it. Nodes are colored by complexity, and clicking one opens a popup with that piece's size, dependencies, and detail. So getting depends_on right is what makes the graph actually useful — name real dependencies, and only real ones.
  • breakdown[].checked and breakdown[].result are execution-state fields owned by the pilot. Every piece renders with a checkbox and an expandable Result area; at planning time leave checked false/absent and result empty — the report shows a "no result yet" placeholder. The pilot sets them as pieces complete.
  • mission (top-level) is also pilot-owned: when present it renders as a Mission report tab in this same document (complexity score, model assignments, iterations, final deliverable). Never author it at planning time — the plan you hand off has no mission tab.
  • Never include time or duration fields — those aren't the planner's to set, and the builder intentionally has no place to put them.
  • layout is "auto" by default: a small plan stays one calm page, but the report switches to tabs once there are four or more pieces, the overall complexity is High, or a mission is present, so a big plan never becomes an exhausting scroll. Force it with "tabs" or "single" only for a specific reason.

How the pilot executes this plan

The pilot executes this plan by updating the same JSON and re-rendering the same HTML file — one living document from planning through delivery. The pilot sets checked: true and fills result on each breakdown piece as it completes, and adds the mission section, which renders as a Mission report tab alongside the plan's own tabs. So the JSON is the contract between the two skills: keep the field names above (goals, success, scope, execution, complexity as a Low/Medium/High string, breakdown with size + depends_on) intact, and the plan will carry across cleanly. Deliberately absent — times and model assignments — stay the pilot's to add at execution, inside mission only. The full field-by-field contract, ownership rules, and do-not-break rules live in references/handoff-contract.md.

How this plan is judged

A good flight-plan is evaluated on clarity and breakdown quality: are the goals and success criteria unambiguous, are outputs and outcomes both named and distinct, is the work split into sensible independent-where-possible pieces, and is each piece's complexity sized (Low / Medium / High) in a way an executor would agree with? A plan that reads clearly and sizes honestly is a good plan, even if the underlying job is hard.

Things to avoid

Doing the work instead of planning it — the moment you start building, you've stopped being the planner. Putting times or durations on pieces — sizing is complexity, not a schedule. Assigning models — that's the pilot's decision at execution. Authoring the mission section or checking off pieces yourself — execution state belongs to the pilot. Vague success criteria — if no one can check whether the work succeeded, the plan hasn't done its main job. Presenting a plan as ready (green banner) while a confirmation is still open — the pilot will build on the gap.

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.