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:
| Item | What it does |
|---|---|
| Rename…, Generate title | Give the thread a title, or let the agent write one from the conversation |
| Pin / Unpin | Show it in the Pinned section |
| Mark as done | Hide it under Show N done; if it was open, you move on to the next unfinished thread |
| Mark as unread | Show the unread dot again |
| Fork | Copy the thread into a new one that continues separately |
| Continue with | Start the same task with another provider |
| Second opinion from | Let another provider review the last turn's changes |
| Export… | Save the thread as a ZIP file |
| Open terminal here | Open the thread's terminal |
| Archive | Remove 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.
| Shortcut | Action |
|---|---|
⌘1 … ⌘8 | Go to that tab |
⌘9 | Go to the last tab |
⇧⌘] / ⇧⌘[ | Next / previous tab |
⌃Tab | The thread you used most recently before this one |
⌘[ / ⌘] | Back / forward through the threads you visited |
⌘W | Close 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:linewith 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).
⌥⌘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