Axel
axel

Threads

The unit of work. An intent, and everything done in its name.

A thread is what you asked for ("add retries to the webhook sender") and the history of everything done about it. It is the one thing in Axel that lasts: agents' processes end, panes close, machines sleep, and the thread is still there to read, resume or hand to someone else.

Why threads

The Codex app and T3 Code made the thread the centre of working with agents, and they were right. A chat tab or a terminal process is the wrong unit: it dies with its window, it holds one agent, and it forgets. A thread is the right one:

  • Parallel without losing track. Five threads run at once; each keeps its own conversation, diff and state, and the dashboard shows which one needs you.
  • Durable. Close the pane, reboot, come back next week: the thread is still there, and a new session resumes the agent's conversation.
  • Shared. Several agents can work on one thread: one builds, another reviews, and all of it is one history.
  • Isolated when you want. One git worktree per thread keeps parallel agents on the same repository out of each other's way.

Axel adds one thing: a thread is a signed event log, so it can live on several machines and merge, which is what lets it run on a remote host while your laptop sleeps.

What a thread holds

IntentThe first prompt. It's also the thread's title.
Projects0 or more directories, usually git repositories. None makes a scratch thread in ~/.axel/scratch/.
WorkspacePer project: work in place, or in a new git worktree on its own branch.
SessionsEvery agent instance that worked on it: which agent, where, with which harness, and the harness's own conversation id.
ItemsThe conversation: your messages, the agents' replies, tool calls, questions, permission requests.
UsageInput, output and cache tokens, and the estimated cost, per session.

Several agents can work on the same thread at once, and one agent can come back to it many times. Each time is a new session: axel thread resume starts one that continues the last harness conversation, so the agent remembers where it was.

Life cycle

open ──settle──▶ settled ──reopen──▶ open
  │                 │
  └──archive──▶ archived ◀──┘          delete: hidden everywhere
  • Open: listed first in the recent threads and on the dashboard.
  • Settled (axel thread done): finished, but still listed under the open threads, dimmed with a ✓. Its agents keep running if they were.
  • Archived (axel thread archive): its sessions stop and it is hidden. axel thread reopen brings it back.
  • Deleted (axel thread delete): its sessions stop and it is hidden everywhere, including axel thread ls --all. Its files and worktrees are left alone.

Live state (working, blocked, idle) is not stored on the thread: it comes from its sessions.

Every change is a signed event

Under the hood a thread is a log of events, each signed by whoever made it: you, or one of your agents. Two copies of a thread merge by taking the union of their events, which is what lets a remote machine work on a thread while your laptop is closed and catch up later.

Because the log only grows, deleting a thread writes a tombstone event rather than erasing the history.

Views

  • The thread view: the conversation with tool calls folded, and a composer. Inside Rex it's two panes: the conversation streaming as plain terminal output (native scrollback) above, the composer below. Opened from the launcher, they take the place of the shell you typed axel in, so nothing else in the window moves; closing the composer (Esc, or the pane's ×) brings that shell back, scrollback and all. Each agent's session log stays out of sight; ^L in the composer shows the log of the agent you're talking to, and hides it again. Rex's Activity (⌘.) still lists every agent on the thread, with its state.
  • Tool calls: each ▸ 5 tool calls line is a link. Click it (⌘-click if Rex asks) to open every call in it in a pane down the right of the window: who ran it and when, how long each call took, commands with what they're for, edits as diffs, files read and searches, and their output. Scroll it as usual; Esc closes it. The first click asks whether Rex may open links with Axel's link handler.
  • Questions: when an agent asks you to choose (Claude's multiple-choice questions), the question floats in the middle of the window. Pick with ↑↓ and Enter, or type its number; Esc leaves it for the composer. Questions always wait for you, even in autopilot.
  • The dashboard: every open thread and agent with live state, tokens and a sparkline. It adapts to its size, from a small corner HUD to a full grid.
  • axel thread show <id>: projects, participants, sessions and recent messages, as text.

On this page