Skip to content

Loops · core

ship-a-draft wrapper

Take raw mess to a stakeholder-ready artifact by wrapping any skilldrop generator in the two passes either side of it — structured intake before, critique and machine-residue scrub after.

Use it when
Use when the user has notes, a transcript, or a ticket and wants a finished document rather than a first draft.
Comes with
The core pack
Where you decide
  • Critique (G5): a review panel decides
Size
4 stages · 1 gate · up to 3 revision rounds
npx skilldrop-cli install --loop ship-a-draft

Installs the loop as an invokable skill, plus every skill its stages run.

Other ways to install

Every loop in its pack, with their skills:

npx skilldrop-cli install --loop --pack core

The loop alone, without its stage skills (each stage falls back to an inline version):

npx skilldrop-cli install --loop ship-a-draft --no-skills

In Claude Code, the core plugin includes it:

/plugin install core@skilldrop

The loop

%%{init: {'theme':'base','themeVariables':{'fontFamily':'Segoe UI, Helvetica, Arial','fontSize':'15px','lineColor':'#9AA5B1'},'flowchart':{'curve':'basis','rankSpacing':70,'nodeSpacing':50,'padding':16}}}%%
flowchart LR
    classDef gen    fill:#E8F0FE,stroke:#4C7DF0,stroke-width:1.5px,color:#1A3A8F;
    classDef review fill:#FDEAEA,stroke:#E05B5B,stroke-width:1.5px,color:#8A1F1F;
    classDef gate   fill:#FBE3A2,stroke:#D9971E,stroke-width:2px,color:#6B4500,font-weight:bold;
    classDef ship   fill:#E6F7EC,stroke:#34A853,stroke-width:2px,color:#0F6B33,font-weight:bold;

    intake["intake<br/><small>brief-intake</small>"]:::gen
    draft["draft<br/><small>*</small>"]:::gen
    critique["critique<br/><small>doc-critique</small>"]:::review
    polish["polish<br/><small>output-hygiene</small>"]:::review
    G5{"G5 · review"}:::gate
    DONE(["complete"]):::ship

    intake --> draft
    draft --> critique
    critique --> G5
    G5 == "SHIP IT" ==> polish
    polish --> DONE

    G5 -- "MAJOR REWRITE (max 3)" --> intake

Stages

#StageWhat it doesSkillsGate
1intake
generate
Collect the raw input once, into the shape the chosen generator expects, tagging every field explicit / implied / inferred / missing.brief-intake—
2draft
generate
Run the generator the brief was shaped for. Any artifact skill is legal here — that choice is the wrapper's whole point.any generator—
3critique
verify
Review the draft against the same rubric the generator was held to.doc-critiqueG5 — a review panel decides
SHIP IT · SHIP WITH CHANGES · MAJOR REWRITE · WRONG ARTIFACT · BLOCKED
4polish
verify
Strip what the machine left behind before the artifact leaves the building. Surface pass only — never a substitute for the critique above.output-hygiene—

A wrapper, not a lifecycle loop. Its centre stage is whichever generator the user actually needs — an ADR, a design doc, a runbook, a deck, an exec summary. The wrapper contributes the two passes every generator otherwise leaves to chance: collect the input properly before, and check the argument and the surface after.

How to run this wrapper

  1. Pick the generator first. The brief is shaped for a target, so draft is chosen before intake runs, not after. brief-intake's own routing table maps trigger phrases to targets; use it.
  2. Collect once. Run brief-intake. Every field is tagged [explicit] / [implied] / [inferred] / [missing], and its "Missing for downstream" section predicts what the chosen generator will refuse to start without. Resolve those before drafting.
  3. Draft. Run the chosen generator on the brief. It is a normal skilldrop skill with its own quality bar — this wrapper does not override it.
  4. Critique at G5. Run doc-critique, which dispatches to the same rubric the generator was held to. MAJOR REWRITE returns to intake (not to draft — a rewrite usually means the input was wrong, not the prose). WRONG ARTIFACT leaves the wrapper entirely.
  5. Polish last. Run output-hygiene only once the argument is settled. It is a surface pass; running it on a draft that is about to be rewritten wastes it.

Verdicts

Defined in contracts/terminals.json. G5 emits the critique vocabulary. SHIP WITH CHANGES carries its changes forward to polish; it does not mean the changes are optional.

When a stage's skill is not installed

Name the missing skill and skilldrop as its source, do the minimal inline version of that stage, and say the stage ran degraded. Do not skip G5 — an unreviewed artifact is the failure mode this wrapper exists to prevent.

Run log (opt-in)

Only when the environment variable SKILLDROP_LOOP_LOG is set to a file path: after each gate's verdict, append one JSON line to that file. Nothing else is recorded, and nothing is sent anywhere. When the variable isn't set, or you can't read it, skip this section.

printf '%s\n' '{"ts":"2026-10-01T14:03:00Z","loop":"ship-a-draft","stage":"critique","gate":"G5","verdict":"SHIP IT","round":1}' >> "$SKILLDROP_LOOP_LOG"

Fields: ts (UTC), loop, stage, gate (null for a stage without one), verdict (the gate's exact word), and round (1 for the first attempt, counting returns under the cap). skilldrop loop-stats summarises the file: which gates pass first time, which loop back, and which end in BLOCKED.

Quality bar

Anti-patterns to avoid

Source

LOOP.md · loop.json on GitHub · Why loops