Skip to content

The Fleet

The Fleet is spwn’s home screen: every agent session across every project, sorted by whether it needs you. The sessions blocked on a question sit at the top as an inbox you can answer in place, so running ten agents doesn’t mean checking ten tabs.

Open it with ⌘0 (Ctrl+0 off macOS), the ◎ Fleet row at the top of the sidebar, or Esc from any pane that doesn’t use Esc itself. It’s where spwn opens, and it can’t be closed.

Sessions fall into five groups, top to bottom. Empty groups are hidden.

Group What’s in it
Needs input A permission prompt, a question, a hook asking something, an error, a failed hook, a sync that stopped on conflicts, or a session ejected from the land order.
Ready for review Commits ahead of its base and not mid-turn (flagged if it would conflict), or a finished turn you haven’t looked at.
Working Running a turn, or running a hook.
Landing Owned by the land order: queued, syncing, resolving a conflict, verifying or merging.
Completed Idle, or landed. Only the first eight show until you ask for more.

Within a group, the most urgent reason comes first. In Needs input the session that has waited longest comes first; everywhere else the newest does. Forks stay with their family, parent above its forks.

The session you’re looking at never counts as needing you. You’re already there.

The header counts each group, filters by project when you have more than one, and has a text filter (/) that matches title, branch, project or workflow name.

Each Needs input session is a card that says what it needs and, where it can, lets you answer right there:

  • A permission prompt or a question shows the agent’s question and its numbered choices, with the text it’s asking about. Click a choice or press 1–9. Before pressing anything, spwn re-reads the agent’s screen and refuses if the prompt has changed, so a stale click can’t pick an option in some other menu.
  • A hook prompt (a hook calling spwn prompt) shows the picker inline. Prompts from a session still being created appear here too.
  • Everything else (an error, a failed hook, a conflicted sync) says what happened and gives you Open ↵.

Below the inbox, each row shows the session’s status, title, fork point, branch, ± files changed, ↑ ahead and ↓ behind its base, ⚠ conflicts with the base, ◑ overlaps with other sessions, a failed hook, and spend.

Peek (Space, or the ◔ button) opens a row in place: what the agent last said, how many files it changed, which sessions it shares files with, and a box to send a follow-up (⌘↵ to send). A message to a session that is still working is queued as its next message. r opens peek with the reply box focused.

The Fleet’s keys work while it’s the visible pane:

Key Action
j / ↓, k / ↑ Next / previous session
g g / Home, G / End First / last session
Space Peek
r Reply to the selected session
↵, →, o Open the session
1–9 Answer the selected prompt with that choice
f Fork the selected session
c Compare the selected session’s forks
l Queue it to land
d / Delete Delete it (with confirmation)
/ Filter
Esc Close peek, then clear the filter

⌘1–⌘9 open the Fleet’s first nine sessions from anywhere, in the Fleet’s order. See Keyboard for the rest.

spwn tells you when a session starts needing you, in three ways depending on how far away you are:

  • The tab title always counts what’s waiting: 2 need you · spwn.
  • A toast, when spwn is on screen but you’re on some other pane. It has an Open button. On the Fleet itself there’s no toast, since you can already see it.
  • A desktop notification, when spwn isn’t on screen, if you’ve turned them on.

Turn desktop notifications on in Settings → Notifications. Choose When a session needs input, or When a session needs input or has work ready; the second also fires when a working session becomes ready for review. The browser asks for permission when you pick one. The choice is saved per browser, not on the server.

A notification carries the question itself and its numbered options, so you can decide from where you are whether to come back. Clicking it opens the session. Changes within one fork family are batched into one notification, and a newer one replaces the last.