servelisted
Install: claude install-skill mightymattys/expo
# Serve - the whole line, one order
Serve is fire, taste, and refire composed into one autonomous pass. Each stage
follows its sibling skill exactly; serve adds only what connects them: a run state
file that outlives your context, and an autonomy contract that replaces the
per-stage conversation.
## Run state - the ticket on the rail
Before stage 1, mint one run dir: `RUN=$(mktemp -d "$SCRATCHPAD/serve-XXXXXX")`.
Each stage mints its job dir per its sibling skill, but inside `$RUN` (substitute
`$RUN` for `$SCRATCHPAD` in the sibling's mktemp) - even with a stale state file,
`ls "$RUN"` reconstructs the run. Keep `$RUN/state.md`, a few self-describing lines
rewritten in full at every stage transition:
```
task: <one line>
started: <UTC ISO-8601 of stage 1's fire>
budget: 5
runs_used: 2 (fire, taste)
stage: taste plated; next: refire
worker: <codex | sonnet | opus>
tier: <sol | terra | luna, Codex route only>
baseline: <abs path to stage 1's pre-fire.patch>
findings: <abs path to taste's findings.md>
job: <abs path to the job dir currently cooking, if any>
```
Bump `runs_used` when a run is launched, not when it lands - a compaction while a
job is in flight must not un-spend the budget. The conversation is not the ledger of
this run; state.md is. After compaction, or on any doubt about the count, read it
before firing anything. (A `/clear` or session death mints a new scratchpad - serve
is a single-session promise and does not survive that; the working tree and job
dirs st