1. Ask Claude
Your message to Claude is plain English:
Have Codex review db/migrations/0042_orders.sql for locking problems, then fix whatever it finds.
Claude knows the command exists if your CLAUDE.md points at overvibe --help, or if you have the skill installed.
2. Claude starts an attached Codex session
$ overvibe new --attach --tool codex --cwd ~/code/shop --name "shop: codex review" \
--prompt "Review db/migrations/0042_orders.sql for table locks and long transactions on a busy orders table. List each problem with the line and a fix. When done, run: overvibe send \"$OVERVIBE_SESSION\" \"<findings>\""
started "shop: codex review" in ~/code/shop (session pending, tmux d7a01e44), attached to this session
close it when you no longer need it: overvibe stop "shop: codex review"--attach makes the Codex session a child of shop: lead, nested under it in the sidebar. $OVERVIBE_SESSION expands in Claude's shell before the command runs, so Codex receives Claude's tmux id as its reply address.
3. Claude ends its turn
This step is the one people skip. The reply gets typed into Claude's prompt, and Claude only reads it once its current turn is over. A session that sleeps or polls for the result blocks the message it is waiting for.
Meanwhile shop: codex review shows as busy in the sidebar, and you can open it and watch Codex read the file.
4. Codex reports back
# Codex, when it is done $ overvibe send "d3b2c9f0" "Two problems. Line 12: ADD COLUMN with a default rewrites the whole table under a lock. Line 30: build the index CONCURRENTLY." # what lands in Claude's prompt [overvibe message from "shop: codex review" (codex); reply with: overvibe send "shop: codex review" "<reply>"] Two problems. Line 12: ADD COLUMN with a default rewrites the whole table under a lock. Line 30: build the index CONCURRENTLY.
Claude starts a new turn with that message as its input, fixes the migration, and can ask a follow-up the same way:
$ overvibe send "shop: codex review" "Fixed both. Does the new version still lock anything?"5. Close the helper
$ overvibe stop "shop: codex review"
stopped "shop: codex review" and hid it from the list (conversation kept)The conversation is kept, so if a question comes up next week you can resume the Codex session from its history. overvibe stop --children closes every helper a session started, in one go.
The same commands in every direction
Codex can start agy, agy can message Claude, and a lead session can run several helpers in parallel. Drop --attach when the new session should outlive its parent or belongs in its own project group. The Agent map view draws every message as an arrow, so after a busy afternoon you can see who delegated what.
Questions
Why not use a Claude subagent for this?
A subagent is always the same tool as its parent and has no prompt you can type into. Here the reviewer is Codex, and you can open its session and correct it mid-review.
Can the helper ask Claude a question back?
Yes. Every message carries the exact reply command in its header, so either side can keep the thread going.
What if I close the Codex session too early?
overvibe stop keeps the conversation. Resume it from the sidebar and it carries on where it was.