Chapter 6 of 15

Many Threads, One Project

This is the chapter Freddy was promised in chapter 1. He starts his three tasks in one project, and the sidebar answers the question he could not answer from four terminal tabs: which of them is waiting for him?

The problem

Three tasks in flight is not hard to start. It is hard to keep track of. Which one finished? Which one is waiting for an answer? Which one failed quietly while you were reading another? And then the smaller version of the same problem: a question that has nothing to do with the task, which you are afraid to ask in the thread because it will derail it.

The hard way

A terminal tab per task, named by hand, checked in rotation. For the stray question you open another tab and explain the context from scratch, or you ask in the main conversation and spend the next hour with an agent that is now thinking about something else.

Projects

A project is a folder on your disk. Add one with ⇧⌘O, the folder button in the sidebar, or File → Add Project…. Projects are listed alphabetically, with pinned projects first. Right-click a project (or use its … button) to start a thread, rename it and give it an emoji and an accent color, pin it, reveal it in Finder, copy its path, point it at a different folder with Change folder… (its threads stay with it, but not while one of them is running), or remove it from Workspace. Removing a project does not touch your files.

Spaces group projects, for example Work and Personal. Set a project's space in Rename and appearance…. Once at least one project has a space, chips appear at the top of the sidebar — All and one per space — and Workspace remembers your choice.

And for questions that do not belong to a codebase, ⌥⌘N starts a thread in a scratch folder, ~/.elyra/chats, listed as the project Chats.

Threads, and what the sidebar tells you

Under each project the sidebar shows its active threads:

  • Pinned threads at the top.
  • A status icon: working (a spinner), needs your approval or input, failed, or interrupted. A dot marks a thread with a reply you have not seen yet.
  • How long ago the thread was last active.
  • Threads you marked as done are hidden behind Show N done.

The Dock badge counts threads that need you or have unread replies. That is Freddy's answer: he glances at the sidebar, and the thread with the question mark is the one to open. A running agent is not stopped when you switch threads, and new threads get a title from your first message.

Right-click a thread (or use its … button) for its menu:

ItemWhat it does
Rename…, Generate titleGive the thread a title, or let the agent write one from the conversation
Pin / UnpinShow it in the Pinned section
Mark as doneHide it under Show N done; if it was open, you move on to the next unfinished thread
Mark as unreadShow the unread dot again
ForkCopy the thread into a new one that continues separately
Continue withStart the same task with another provider
Second opinion fromLet another provider review the last turn's changes
Export…Save the thread as a ZIP file
Open terminal hereOpen the thread's terminal
ArchiveRemove it from the sidebar; restore it from Archived (N) at the bottom
Delete…Delete it for good; with its own worktree, you can remove that too

Tabs, and not getting lost

Open threads are tabs above the conversation, and Workspace restores them at the next launch. When they do not fit, scroll the tab bar sideways or pick one from the ▾ menu at its end, which lists every open tab. When you work on several projects at once, the window shows where each thread belongs: the title bar reads project — thread, each tab starts with the project's icon or color, and a line above the conversation shows the project, the folder the agent works in, the branch, and a worktree badge when the thread has its own.

ShortcutAction
⌘1 … ⌘8Go to that tab
⌘9Go to the last tab
⇧⌘] / ⇧⌘[Next / previous tab
⌃TabThe thread you used most recently before this one
⌘[ / ⌘]Back / forward through the threads you visited
⌘WClose the tab (the thread keeps running)

Split chat (⌘\) shows a second thread next to the active one — the one you used most recently, or else another open tab. The arrows button in its header swaps the two, and the × closes the split. Handy while you wait for one thread and want to read another.

Side chats: the question that would derail

A side chat (⌥⌘S) is a quick conversation that branches from the current thread. Use it to ask about something without derailing the main thread. It starts with the same agent, model and folder, and for Claude Code, Codex, Elyra and Pi it also starts from the main thread's conversation so far. It opens in the Side chat tab of the tools panel and is not listed in the sidebar. Its header has buttons to start another, to put the last reply in the thread's message box (to pass an answer on), to open it as an ordinary thread with its own tab, or to discard it. Side chats clean themselves up: at startup, Workspace removes ones that were never used, whose parent thread is gone, or that have been idle for a week.

Fork, hand off, ask someone else

  • Fork (⇧⌘K, or the thread menu) copies a thread into a new one, with its conversation. The two continue separately. With Claude Code, Codex, Elyra and Pi, the new thread branches the agent's own session, so the agent remembers everything; with other providers, the earlier conversation is sent along with your first message in the fork. Use it when you want to try a second approach without losing the first.
  • Continue with starts a new thread with another provider, in the same project and folder (worktree included). The message box is filled with a summary of where the task stands: the recap from the Context tab if there is one, plus the latest messages. Review it, add instructions, and send. This is how you change agent mid-task, which chapter 3 said you cannot do inside a thread.
  • Second opinion from has another provider review what the thread's last turn changed. The docs put the reason plainly: agents catch each other's mistakes better than their own. The review runs as a side chat in plan mode, so it reads but does not change files. It gets your last message and the diff of the turn, and lists what it finds as path:line with what is wrong and how to fix it. Put the last reply in the thread's composer then hands the findings to the original agent, with a note to fix what it agrees with.

Bringing your history, and taking it out

⌘I (or File → Import Sessions…) imports sessions you ran outside Workspace: your recent Claude Code sessions from ~/.claude/projects, or your recent Codex threads (Workspace asks Codex for them, so Codex must be installed). Each session becomes a thread with its conversation, in the project for its folder (added if needed; sessions whose folder no longer exists go to Chats). The thread resumes the same session, so you just continue, and a session cannot be imported twice. Freddy imports last week's.

Export… in the thread menu saves a ZIP with transcript.md (the conversation as readable Markdown), transcript.json (every item as data) and thread.json (the thread's settings and metadata).

Try it: start three threads in one project and give each a small task. Pin the one you care about. While they work, press ⌥⌘S in one of them and ask a side question. Then use ⌃Tab to jump between the threads, and watch the sidebar change as each finishes.

What you learned

  • How the sidebar shows what each thread is doing, and what the Dock badge counts
  • Tabs, the shortcuts for moving between them, and split chat
  • What a side chat is for, and that it cleans itself up
  • The difference between Fork, Continue with and Second opinion from
  • How to import sessions you ran outside Workspace, and how to export a thread
Next: in Chapter 7 you give each thread its own copy of the project, so they can edit the same files at once, and let several agents race on one task.