Run a long-term project across sessions and agents
Long-running projects outlive chat transcripts, context windows, individual agents, and human memory. This guide shows how to keep the project's current truth in Superself so that a fresh person or agent can recover it and continue without a private handoff.
The workflow in this guide is available in the current alpha CLI. It uses durable project state, not the future end-to-end autonomous execution loop.
Note — This guide assumes Superself is installed and its workspace has been initialized. See Getting started with Superself if this is your first project.
What you will build
The example project has one durable direction and one time-boxed outcome:
Ship a trustworthy beta to ten design partners.
You will record that outcome as a hierarchy of state:
Goal
└─ Objective
└─ Milestone + exit criteria
└─ Work + reports
This is not a task tree. A goal holds enduring direction; an objective names a time-bounded result; a milestone has evidence-coverable exit criteria; and a work unit declares one required outcome. Decisions govern later work, while reports preserve progress, evidence, and the next action.
1. Register the project and preserve its direction
Run self setup from the real git checkout to see how it resolves. If the
project is not registered yet, register it:
self project init
By default, registration also renders the managed Superself block into
AGENTS.md and CLAUDE.md. That block tells compatible agents to load current
state at session start and to update state through self rather than editing
derived files by hand.
Record the long-term goal:
self goal add "Continuously ship trustworthy product improvements"
Recording another adds it beside this one. Replacing this one is stated:
self goal add "<new text>" --supersedes <id>.
Record judgments that future work must respect:
self decide "Customer data remains local" \
--why "The beta contains private design-partner data"
self convention add "Every customer-visible change needs rollback evidence"
2. Turn the direction into an objective and milestone
Create the result that matters for the current horizon:
self objective add "The beta is ready for ten design partners" \
--success "Ten partners can complete the critical flow without a severity-one defect" \
--stop "A privacy or data-integrity risk makes external use unsafe"
The command answers with the event it recorded — every assertion lands as an
entity.* event — and prints an objective id such as o-xxxxx. Use the real
id in later commands. Add a checkpoint beneath it:
self milestone add "The critical flow is release-ready" \
--objective o-xxxxx \
--exit "The end-to-end proof passes on the release candidate" \
--exit "Rollback has been exercised and recorded"
The milestone prints an id such as m-xxxxx; its exit criteria receive stable
ids such as c1 and c2. Add --target YYYY-MM-DD only for a real deadline.
3. Define work by its required outcome
Create one work unit for the release proof:
self work add "The beta release candidate passes the critical-flow proof and has a verified rollback path"
The command prints a work id such as w-xxxxx. Link the work to the
milestone it contributes to, then start it:
self work link w-xxxxx --milestone m-xxxxx
self work start w-xxxxx
4. Keep the current truth fresh while work runs
Report state-changing progress, friction, and the next action:
self report w-xxxxx \
"The critical flow passes locally; the release-candidate run remains" \
--next "Build the candidate and run the proof against its exact commit"
When the linked checkout has a git HEAD, self report records it by default.
Use --evidence when the report must name another commit explicitly. Add
--artifact <path> to copy a reusable result into the Superself store as an
immutable attachment.
When work cannot advance, record what it waits on and why:
self work block w-xxxxx --on dependency --why "The candidate build is not ready"
self work unblock w-xxxxx
5. Recover the project in a fresh session
A new person or agent starts with the generated current view:
self context
Then inspect what needs attention and recover the full work history:
self status
self work show w-xxxxx
Pull the live state context left out, and one record's own history, only when needed:
self search "customer data"
self search "rollback" --project my-project
self state show <id> --history
self search answers over live records: a superseded, retired, retracted or
done record is not in its answer, and naming the record is how its history is
reached.
Before acting, the new session should be able to answer:
- What enduring goal does this project serve?
- Which objective and milestone are active now?
- What must the current work unit prove?
- Which decisions and conventions govern it?
- What was the last evidence-backed result, and what happens next?
If one of those answers exists only in the old transcript, the handoff is not durable yet. Add the missing decision or report before continuing.
self context is a bounded current projection with recovery pointers, not the
entire project history. self work show and self search are the pull path
when the current action needs more detail.
What context renders is placement: every record above is an entity with a
priority (render order) and an exposure (full text, one index line, or a
search pointer). When a decision stops governing daily work, demote it rather
than deleting it — self state place <id> --exposure index --why "<reason>"
keeps it recoverable while freeing the always-rendered budget. The caps
refuse a state add or state place that would push a tier past its limit
until something demotes; the preset verbs above do not route through that
gate yet.
6. Complete work with evidence
After committing the verified result, attach the exact commit and final artifact:
self report w-xxxxx \
"The release-candidate proof and rollback exercise both passed" \
--evidence <commit-sha> \
--artifact path/to/critical-flow-result.json \
--artifact path/to/rollback-receipt.json \
--next "Cover the milestone criteria"
Replace the paths with files the work produced; missing files are refused. Run
self artifact list --work w-xxxxx to retrieve their stored ids.
self work done w-xxxxx
self work done is the judgment that the outcome was reached, and the claim
must carry evidence: a report with a commit or an artifact — like the one
above — or a done-time --report stating what verifiably happened. A bare
claim on a unit whose reports carry neither is refused.
Now cover the milestone's separate exit criteria:
self milestone met m-xxxxx \
--criterion c1 \
--why "The exact release candidate passed the end-to-end proof" \
--work w-xxxxx \
--evidence <commit-sha>
self milestone met m-xxxxx \
--criterion c2 \
--why "The rollback path was exercised successfully" \
--work w-xxxxx \
--evidence <commit-sha>
self milestone reach m-xxxxx
This records two different conclusions: the work delivered what it promised, and its evidence covers the milestone checkpoint.
7. Revise current truth without erasing history
Plans change at different levels. self objective revise moves the result;
self milestone revise moves a checkpoint or its criteria. Each leaves
affected coverage stale — use self milestone recheck only when earlier
evidence applies.
Replace a judgment with self decide ... --supersedes <decision-event-id>;
never rewrite the old decision.
What this guide does not automate
The shipped alpha provides the state and evidence workflow used above. It does not yet complete the entire Company State Runtime loop:
- context selection is not yet reliably scoped for every work, attempt, domain, directive, and risk boundary;
- a natural-language direction does not yet compile through one stable public contract into an approved work graph;
- scheduling does not yet close the loop across every priority, dependency, approval, budget, capacity, failure, and newly freed resource;
- the viewer is not yet the conversational control surface for the workflow.
Those are target-contract responsibilities, outside this state-continuity
guide. Record the process running a unit with the process ledger
(self work started/exited); a branch reaches main through a GitHub pull
request, owned by PR review and CI. The
governed conversion example
shows how the complete operating contract is intended to compose.