Skip to content

Threads

A thread is a DAG (directed acyclic graph) of sessions that make up one unit of intent. Unlike Projects (which group by where a session ran) or Collections (which group by manual curation), threads capture the why behind a cluster of sessions.

When to reach for a thread

Classic shape: you open a "planning" session, write a ROADMAP.md, then spawn 3-8 child sessions to execute each phase. Every child is a continuation of the plan. Threads let you see all of them as one node graph, jump between them, and pipe the whole thread back into a new Claude Code run.

Anatomy

  • Origin - the seed session of the thread (the planning session, usually). A thread can have multiple origins.
  • Child - any session that continues the work. Children have a parent session.
  • Edge - the relationship (parent → child). Manual edges have confidence 1.0. Auto-detected edges (v0.15b Pro tier, coming) carry a confidence score and a source chip so you always know why the link exists.

Threads is a DAG not a tree: a session can belong to multiple threads, and a thread can have several origins. No single-parent restriction.

Three ways to add a session to a thread

  1. From a session header - open any session, find the 🧵 Threads row above "in collections", click + Add to thread. The picker shows every existing thread as a clickable chip. Click one to link, or type a name in "Or create new" to spin up a new thread with this session as the origin.
  2. From the Threads page - click the 🧵 Threads button in the top bar, pick a thread on the left, click + Add session in the top-right of "Sessions in this thread". A search picker drops down; filter by alias, project, or first message.
  3. From the CLI - recall thread link <session-id> --thread <id-prefix>. Use --parent <other-session-id> to make it a child of a specific node.

Three ways to navigate a thread

  • Node graph - the main Threads page shows the DAG as an SVG graph. Origins pinned at top, children below, edges thicker for higher confidence. Drag a node onto another node to re-parent. Drop on empty canvas to promote back to origin. Every drag shows an undo toast.
  • Click a node - opens that session in the transcript pane.
  • CLI tree - recall thread show <id-prefix> prints an ASCII tree.

Removing a session from a thread

  • Right-click a node in the graph → Remove from thread. Confirm the prompt and the edge is unlinked.
  • On a narrow viewport (the flat-list fallback), hover a row and click the remove affordance on the right edge.
  • The session itself stays in Recall — only the link to this thread is dropped. If the removed session had children, they're re-parented (to the grandparent if it had one, otherwise promoted to origin).

Piping a whole thread back into Claude Code

The killer move. Once you have a thread with the origin plus N children:

recall context thread:<id-prefix> | claude

Concatenates every session in the thread (origin first, then children in add order), separated by ---. New Claude Code session starts with the entire thread's context pre-injected.

Auto-detection (v0.15b, coming)

In a future Pro-tier release, threads will self-assemble from signals already sitting in the codebase: plan-file references, UUID cross-references in transcripts, git branch overlap, semantic keyword similarity. Auto-linked edges carry a confidence score and an AI chip so manual edges stay distinguishable. Every auto-link is always undoable.

Cycle protection

Threads are acyclic by construction. The daemon rejects any setParent call that would create a cycle (self-parent, A↔B, or longer chains). If you see a cycle rejection in the UI, it means your re-parent would have made the graph circular.