Your coding agents talk to each other.

Claude Code and Codex work a problem out together: one brings the other in, it digs in and replies, and they go back and forth on the same thread, whichever of them starts. You watch every step. No app, no server: a command and a skill.

Claude Code and Codex today. Each agent plugs into parlo through one small adapter, so more agents can join.

npm install -g parlo-cli
then parlo connect claude · parlo connect codex

Watch Claude Code and Codex work it out together

A real conversation, 31 October 2026, 21:26–21:28: two different models, three turns, both directions, one real bug found, fixed and checked. Commands, output and replies are quoted word for word; long replies are shortened with “…”. Notes in italics are ours.

Claude Codecaller
Codexcolleague · read only

Two models, one problem

A second opinion from a different model, as a conversation: a cross-model code review without pasting answers between two terminals.

The colleague is read-only by default, so a second opinion can’t change your files. Codex runs with -s read-only, Claude Code in plan mode. Changing files needs --write or --worktree.

A real run: asked, on a read-only thread, to edit app.py.
I couldn’t modify app.py: this workspace is read-only.

git status stayed clean. In turn 2 above, Codex proposed the diff and did not apply it.

Follow-ups keep the thread, so the colleague remembers. In a real run, asked “Remember the number 41. Reply with just: ok”, it replied ok; asked on --thread 3 “What number did I ask you to remember?”, it replied 41.

Either agent can start the conversation

Claude Code brings in Codex, or Codex brings in Claude Code. Most tools only go one way.

Codex starts its colleague with --detach, which returns at once, and collects the reply with parlo wait. It waits up to 25 s; exit 4 means still working, so Codex asks again.

$ parlo ask --detach claude -- 'What is 2 + 2? Reply with just the answer.'
parlo: thread 9 started with claude. Get the reply with: parlo wait 9
$ parlo wait 9
parlo: claude answered on thread 9.
----- reply -----
4
----- end -----

A real run, thread 9.

Hard limits, so agents never loop

They talk as much as the work needs, and no more. parlo enforces the limits; agents can’t talk their way past.

LimitValue
Colleague of a colleague2 levels deep, no further
Colleagues working at once, per caller3
Messages in one thread20
One message256 KiB
Waiting for a reply30 minutes, then the colleague is stopped

A colleague can only answer its caller. It can’t start a conversation with its caller, or with anyone above it.

exit 3parlo: you already have 3 colleagues working (limit 3). Wait for one to answer (parlo threads) before asking another.
parlo: thread 12 reached 20 messages. Decide yourself or ask the person.

Access never widens down the tree: a colleague asked read-only can only start read-only colleagues. Stopping is total: stopping parlo ask (from /tasks, Ctrl+C, or closing Claude Code) stops its colleague and every command that colleague started.

Exit codes: 0 the colleague replied · 1 the colleague failed (the line says why) · 2 usage error · 3 refused by a limit · 4 still working (parlo wait) · 5 stopped

Watch the conversation as it happens

Each step the colleague takes is one short line. In Claude Code you read them in /tasks.

  1. Claude runs parlo ask codex "…" in the background.
  2. parlo starts Codex without its interface (codex exec), read-only, and gives it the message.
  3. Each step Codex takes is printed as one short line. In Claude Code you read them in /tasks.
  4. When Codex is done, parlo prints its reply last, between ----- reply ----- and ----- end -----, and Claude Code wakes Claude up with it.
  5. A follow-up, parlo ask codex --thread 1 "…", continues the same Codex session, so Codex remembers the conversation.
parlo: thread 1 — asking claude (read only)
claude: Read /private/tmp/parlo-demo/app.py
claude: `app.py` prints `hi parlo`.
parlo: claude answered on thread 1.
----- reply -----
`app.py` prints `hi parlo`.
----- end -----
Continue with: parlo ask claude --thread 1 "<message>"

A real run: Claude Code asking a Claude colleague, as it reads in /tasks.

Stop it from /tasks and the colleague stops with it: parlo: thread 6 was stopped. parlo threads lists every thread in this agent tree:

#1  claude  idle      2 messages  17:50  "What does app.py print? Answer in one short sentence."

Install in one line

One npm package. connect adds the skill to each agent; it shows the changes and asks first.

$ npm install -g parlo-cli
$ parlo connect claude      # installs the skill into Claude Code
$ parlo connect codex       # installs the skill into Codex

Then tell Claude: “ask Codex to review this function.”

System
macOS or Linux
Node
^22.19.0 || >=24.11.0
Agents
Claude Code and/or Codex, installed and logged in
Tested
codex-cli 0.166.0 and Claude Code 2.1.316

No app, no server, no MCP server, no hooks: a command and a skill. Data in one file, ~/.parlo/parlo.db (SQLite).

Uninstall

$ parlo uninstall
$ npm uninstall -g parlo-cli

parlo uninstall stops every colleague and removes the skills and the Codex rule; --purge also deletes ~/.parlo after a yes in a terminal. npm uninstall alone leaves those files behind.

Frequently asked questions

Can Claude Code talk to Codex?

Yes. Claude Code sends Codex a message with parlo ask codex "…", Codex works on it and replies, and they can go back and forth on the same thread.

Can Codex start a conversation with Claude Code?

Yes. Codex runs parlo ask --detach claude -- '…', then parlo wait <thread> to collect the reply.

Does it only work with Claude Code and Codex?

Today, yes. Each agent plugs into parlo through one small adapter, so more agents can be added.

Will the other agent change my files?

Not unless you allow it. The colleague is read-only by default; pass --write or --worktree to let it change files.

Can two agents get stuck talking forever?

No. A colleague can only answer its caller, and parlo enforces hard limits: 20 messages per thread, 3 colleagues at once per caller, 2 levels deep, and 30 minutes to reply before the colleague is stopped.

Does it need a server or an MCP setup?

No. parlo is a command and a skill: no app, no server, no MCP server, no hooks. Its data lives in one file, ~/.parlo/parlo.db.

How do I remove it completely?

Run parlo uninstall, then npm uninstall -g parlo-cli. parlo uninstall --purge also deletes ~/.parlo after you confirm in a terminal; npm uninstall alone leaves those files behind.

Install