Skip to main content
Three commands, three different problems. 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.
base relay dispose deletes a project’s relay store. It prints what it would remove and changes nothing until you pass --force. Everything else on this page either writes or reads; nothing else here removes data.

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.
Both arguments are positional: the slug, then the number of days. Use this when something is real but not now.

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 as inbox.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.

base relay done

Mark a relayed task finished, which clears the alert in the receiving session and closes its record in the graph.

base relay tasks

List inbound relay tasks across every live session.

base relay sessions

List every titled session in the global registry, with liveness.
Check this before sending a task. A title that is not listed here has nothing behind it, and the task will sit unread.