base handoff is for stopping and picking up again later. base fork is for side-work you want to keep visible without derailing what you are doing now. base relay is for two or more sessions running at the same time and needing to reach each other.
Handoffs and forks both surface at the start of a session, and both are exempt from the character budget that trims other injected content, so they keep appearing until you act on them.
Handoffs
A handoff is a document that says where you stopped and what happens next. Register one when you finish a session, and it is offered back to you when you start the next one.base handoff carries -g / --global on the command itself, before the verb.
base handoff create
Register a document as this project’s handoff.
Creating a handoff archives any handoff already open for that project. That is the difference from a fork, and it is deliberate: a project has one current place to pick up, not five.
base handoff list
Show open handoffs from the global tier and this workspace together, with the tier each one lives in.base handoff snooze
Hide a handoff for a number of days.base handoff archive
Stop a handoff resurfacing, permanently.base fork create
Register a build specification as a fork: side-work that stays visible without replacing anything.
Forks are additive. Creating one does not archive its siblings, so several can be open at once and each is picked up by name.
base fork list
Show open forks across both tiers.base fork snooze
Hide a fork for a number of days.base fork archive
Stop a fork resurfacing.Relay
Relay is for sessions running at the same time. Each session registers under a stable title, and everything else addresses that title rather than a session id you would have to look up. The store is per project and deliberately disposable. It is a working surface for a milestone, not a permanent record.base relay init
Create the relay store for a project.base relay register
Give this session a stable title, so other sessions can address it.
Register early. Until a session has a title, nothing can be sent to it by name.
base relay send
Send a typed message to a session, a title, a phase, or everyone.base relay poll
Read pending messages without blocking. Reading them consumes them.base relay wait
Block until a matching message arrives. This costs no tokens while it waits, which is what makes it better than polling in a loop.base relay claim
Take an advisory claim on a path or a phase, so other sessions can see you are working there.
Claims are advisory. Nothing enforces them, and a claim that expires simply stops appearing. The point is that
base relay board shows who is where before two sessions edit the same file.
base relay release
Give a claim back.base relay board
The operator view: every session, whether it is alive, what it has claimed, and how many messages are waiting for it.base relay export
Write the current spool out asinbox.nq, a read-only snapshot.
Do this before
base relay dispose if you want to keep any of it.
base relay dispose
Destructive. Preview by default. Tear down a project’s relay store at the end of a milestone.base relay task
Hand a briefed task to another live session. It keeps firing in that session until it is picked up, and it crosses workspaces through the global tier.
A task is the right shape when there is a document behind it. If everything you need to say fits in three sentences, send a ping instead.
base relay ping
Send an instant message to a live titled session. No document, no completion ceremony. It interrupts the receiver mid-turn, and their reply clears it.
Keep a ping to a sentence or three. More than that is a task, and sending it as a ping means the context has nowhere to live afterwards.