What you need
- Claude Code, a recent version. Open your terminal and type
claude --version. You need 2.1.224 or later on Mac or Linux (including WSL 2 on Windows), or 2.1.234 or later on native Windows. If yours is older, runclaude update. - Your normal Claude login. A Pro or Max subscription works. You don't need an API key.
- Two terminal windows on the same computer. Two sessions inside WSL 2 can talk to each other, but a WSL 2 session can't reach a native Windows session.
- Nothing to switch on. When the version is right, messaging is on with nothing to enable.
- About 10 minutes the first time.
Name your two sessions
A session answers to the name you give it with --name (or later with /rename). Without a name, Claude Code picks one for it, and that makes it harder to tell which is which.
- Make two empty folders next to each other:
mkdir -p crew/planner crew/builder - Terminal 1, the builder (start this one first):
cd crew/builder, thenclaude --name builder --permission-mode acceptEdits
--permission-mode acceptEdits lets the builder create and edit files in its own folder without asking each time. You can leave it out, but then say Yes when it asks to create index.html. If it asks to run a command, that's your call.
- Terminal 2, the planner. This one gets no tools for writing files or running commands, so it can only plan, read and send messages. That keeps it honest as the reviewer:
cd crew/planner, thenclaude --name planner --disallowedTools Write Edit Bash NotebookEdit --add-dir ../builder
--add-dir ../builder lets the planner read the builder's file when it checks the work. It still can't change it.
Start both sessions the same normal way. Don't use --dangerously-skip-permissions on either one: a session in that mode holds incoming messages until you approve them.
The builder prompt
Paste this into Terminal 1 first:
You are the builder. Wait for a plan from the session named 'planner'; it will arrive as a message. For now just reply with the single word: ready. Do not do anything else until the plan arrives. When it arrives: build it as index.html in your current folder, then send the planner a short report (what you built, how each acceptance check is covered). If the planner then replies with a verdict, acknowledge in one line in your own transcript and stop (do not message it again unless it asks for a fix).
It should answer ready and wait.
The planner prompt
Paste this into Terminal 2. Change the job in the first line to anything small you want built:
Job: "A one-page habit tracker for learning 10 Spanish words a day: the words for today, tick boxes, a streak counter, saved in the browser."
1) Write a short plan for this job: the files, the sections of the page, and a numbered list of acceptance checks. Keep it short (under 250 words). Do NOT write any code. 2) Send the plan to the session named 'builder' with SendMessage, and ask it to build it in its own folder and message you back a short report. 3) When the builder's report arrives, read its file (../builder/index.html), check it against your acceptance list, and send the builder one short reply with the verdict (pass/fail per check). Then stop.
You don't type any special command to send. Claude finds the other session with ListAgents and sends with SendMessage on its own. Since version 2.1.232 you can also name the target in a prompt with @builder.
Check they're talking
- In the planner, type
/list-agents(or/peers). You should seebuilderin the list. If the command isn't recognized, your version is too old. - In the builder, watch for a dim row that starts with
› Message from @planner. That's the plan arriving. PressCtrl+Oto read the full text. - The builder replies on its own. After it writes the file, a
› Message from @builderrow shows up in the planner, and the planner starts checking. - The last step is yours. Open
crew/builder/index.htmlin your browser and click through it.
The honest part
- Each session only checks what it can see. In my run the planner reviewed by reading the code. Neither session opened the page in a browser. I tested it separately: the ticks stayed after a reload, with no errors. Always click through it yourself before you trust a "PASS".
- A message is only text. It's text Claude writes for the other session, never your conversation history or your files. On the same computer it goes over a local connection, not through Anthropic's servers.
- A message can't approve anything for you. It can't answer a permission prompt, change settings or your
CLAUDE.md, and a slash command inside it arrives as plain text. If the builder needs a permission, it asks you in its own window. - Claude can see all your sessions.
/list-agentslists every Claude Code session running on this computer, and Claude can message any of them. Give these two clear names so the plan goes to the right one. - Both sessions use your plan's limits. Every message counts like a prompt you typed.
- My first run used Claude Code 2.1.284 on a Mac, on October 22, 2026, with two sessions started from a script rather than typed by hand. Then I ran the exact commands and prompts on this page again in two fresh folders: the plan, the report and the verdict went back and forth on their own, and the planner had no Write, Edit, Bash or NotebookEdit tool at all.
Sources: code.claude.com/docs/en/whats-new/2026-w32 (Week 32 · August 3–7, 2026) and code.claude.com/docs/en/cross-session-messaging, read October 22, 2026. Menus and versions change.