Exit codes
The process exit code is the machine-readable result. Codes above 2 follow the BSD sysexits.h
convention, so a scheduler or CI job can branch on them without parsing any output.
| Code | Meaning | Retryable |
|---|---|---|
| 0 | Success. For run, a pull request is open and ready. Also returned by --version, --help, and --inspect. |
— |
| 1 | The run finished cleanly but reached a dead end — it could not make further progress. | No — a human should look at it |
| 64 | Command-line misuse, such as styre notify without --test. |
No — correct the invocation |
| 65 | Resume refused — the branch moved since the run parked. | Yes — --accept-head or --inspect |
| 69 | A program your build or test commands need is not installed on this machine. | Yes — install it, re-run |
| 70 | An internal error. This one is a bug in Styre, not in your setup. | No — please report it |
| 75 | The run stopped early: it either ran out of capacity (parked, resumable) or hit something it wants a human for (escalated, not resumable). | Sometimes — see below |
| 78 | Bad configuration — an invalid value, an unknown adapter, or a profile that is not usable. | No — fix the config |
Which ones matter to a scheduler
Section titled “Which ones matter to a scheduler”75 is the one to handle deliberately. It covers two outcomes that are indistinguishable by
exit code alone, and they recover differently:
- Parked — a session limit, or credits ran out. The run saved its state, consumed no retry
attempt, and
styre run --resumepicks it up where it stopped. Back off and retry later. - Escalated — the loop bounded its retries and wants a human. It writes no state dump, so
--resumewill fail with “no parked run at …”. Something has to change before a re-run is worth anything.
So 75 does not mean “safe to retry automatically”. A scheduler that blindly resumes on 75 will
work for parks and fail on every escalation. Read the message. Only a park prints a
Resume with: … line. See Recovering a run.
1 is not a crash. It means the run worked as designed and stopped at a genuine dead end —
something a person should look at rather than something to re-run.
65 means the world moved underneath a parked run. Decide whether to accept the new state with
--accept-head or investigate first with --inspect.
69 is caught before any tokens are spent, and the message names the missing program.
70 is worth reporting. Every other code is a situation Styre expects; 70 means it hit
something it did not.
See Recovering a run for the full park-and-resume workflow.