Quickstart
This runs the whole local loop once, end to end. It takes about five minutes, makes no network request, and leaves you with real state you can inspect in a text editor afterwards.
You need mcue on your PATH — see Install if mcue doctor does
not answer.
1. Register a project
Change into a directory you actually work in, then:
cd ~/work/payments-api
mcue init payments-api --name "Payments API"
init registers the project, scaffolds its state files under $MCUE_HOME, and
drops a small .mcue footprint in the current directory so later commands can
tell which project you are in without being told.
The positional argument (payments-api) is the stable project id; --name
sets the display name ("Payments API" here). --name is optional from
v0.14.1 and defaults to the id; before v0.14.1 it is required, and a bare
mcue init payments-api fails with required flag(s) "name" not set.
The project id is yours to choose. Keep it short and stable — it appears in every
later command, and renaming later means mcue project rename.
2. Do some work
Nothing to run here. Write code, break something, fix it, get interrupted. mcue is not watching; it only records what you tell it at the end.
3. Close out the session
This is the command that matters:
A closeout records five things: what you intended, what actually happened, anything blocking, the next action, and where to resume. They are flags, so a real one looks like this:
mcue closeout payments-api \
--intent "Wire refunds to the ledger" \
--outcome "Ledger client assumes idempotency keys are UUIDs; ours are ULIDs, so every retry double-posts. Refund path itself is written but unusable until the key format is settled." \
--blockers "Whether to change our key format or wrap the ledger client" \
--next-action "Ask Sam which one the ledger team will support" \
--resume-pointer "internal/ledger/client.go:88, TestRefundRetry fails"
Checkpoint written: ~/.mcue/projects/payments-api/checkpoints/20260817T173512Z.md
Lane: default
Project state refreshed for "payments-api"
Scores: clarity high | cost low | trust medium | quality high (100/100)
If you would rather write prose than assemble flags, mcue closeout payments-api --editor opens your editor with the five fields laid out, and
--outcome-from-file ./notes.md reads any of them from disk.
Answer honestly and briefly — a closeout that says "fixed the thing" is worth nothing in three weeks, and the score on that last line will tell you so. The gap between intent and outcome is the most valuable part: this one records that the session did not do what it set out to do, and exactly why.
A closeout writes a timestamped checkpoint and refreshes the project's governed state. It is the only routine way state advances.
4. Come back later
Days pass. Come back and ask for a way in:
mcue resume payments-api
You get a resume packet: a bounded brief capped at roughly 300 or 1000 tokens depending on the tier you ask for. Small enough to hand straight to an agent, big enough to re-enter without re-reading everything.
That cap is deliberate. An unbounded dump of project history is exactly as useless as no history at all.
5. See everything at once
mcue index
The derived portfolio view across every registered project — what is active, what is blocked, what has gone quiet. Name a project to scope it to that one:
mcue index payments-api
6. Read the state yourself
Nothing here is opaque:
ls ~/.mcue/projects/payments-api/
cat ~/.mcue/projects/payments-api/project_state.md
Markdown with YAML front matter. Diffable, greppable, and editable by hand when something needs repairing. If mcue vanished tomorrow, your state would still be readable.
Where to go next
- Close out and resume — how to write a closeout worth resuming from.
- Give agents your state — expose this same surface over MCP.
- Operating state — the model underneath all of it.
- Publish to Hub — optional, when you want state reachable with the machine off.