Feature deep dive
Two instances of the same model make correlated mistakes. Two different models do not. A Room in Jack is a persistent, ordered conversation between agents running on different vendors, brokered entirely by the host. Claude Code and OpenAI Codex examine the same brief independently, then challenge each other, then you publish a verdict. No vendor will ever ship the pipe that puts a Codex reviewer in front of a Claude proposal. Jack does, locally and for free.
A Room is a thread with participants, a brief and a lifecycle. Participants are slot × provider: backend-dev · Claude and backend-dev · Codex is the normal case. Each participant is bound to an existing session or to a fresh one spawned from the dialog with no context. The brief answers one question, what should they examine?, and is delivered in the kickoff message every participant receives.
Messages flow through the host. An agent reads the room with jack_room_read, posts with jack_room_send, and wakes on its own schedule. Jack writes the attribution on every envelope, so nobody can speak as somebody else.
The dialog shows the exact kickoff each participant will receive and a plain-language preview sentence such as "claude and codex analyse the brief independently, then challenge each other". One primary button: Start room.
In the security and second-opinion recipes, the host enforces an independent phase: a participant cannot read a peer's proposal until it has posted its own. A read during that phase returns only a notice. This is the anti-anchoring rule a human review board would use, applied mechanically. Once both have posted, the challenge phase opens and each side answers the other.
The panel lists participants with alias, slot, provider badge, wake policy and bound session; the threaded message stream with coloured kind labels (kickoff, proposal, challenge, verdict); the wake budget used over cap; and the controls: Start, Pause, Resume, Close, Add participant, Rebind, Replace agent, Extend cap, plus Publish verdict & pause. A two-pane view shows two participants' chats side by side. Every session in a room carries a room badge in the sidebar, coloured by room state.
Export report writes the outcome to _shared/reports/<room-slug>.md: participants and their providers, the verdict, then the transcript. Export as ADR allocates the next decision number through the host and writes it under _shared/decisions/. The multi-window design of Jack itself was decided this way, in a room with the human, a Claude session and a Codex session, and recorded as an ADR.
agent.md roles you already have.Two instances of the same model share training, blind spots and failure modes, so their errors are correlated and their agreement proves little. Two different models fail differently, so disagreement between them is a signal you can act on. A cross-vendor judge also reduces the self-bias of a model grading its own work.
Only you. An agent can ask for a room with the jack_room_request tool, which shows up as a card, but creation, Start, Pause, Resume and Close are human actions. There is no orchestrator agent deciding who talks next.
In recipes that use it, each participant must post its own proposal before it can read anyone else's. The host enforces this: a read during the independent phase returns only a notice. It prevents the second analyst from anchoring on the first.
No. Each room has a cap on automatic wakes, shown as used over cap in the panel. When the cap is reached the room pauses and waits for you; you can extend the cap or publish a verdict. The panel also derives a quiet-since indicator when nothing is owed.
No. Every message envelope is authored by the host with the sender's alias, slot and provider. Agents post text; Jack writes the attribution. Envelopes also carry a disclaimer that a peer's message is not consent or authority.
Rooms are verified on Claude Code and OpenAI Codex. Google Gemini runs through the same host tools but must pass a parity check before Rooms are announced for it.
Export report writes the participants, the verdict and the transcript to _shared/reports/
Not today. Rooms live inside one workspace on the local node. Cross-workspace and remote-node participants are refused with a clear message. Shared rooms across machines are the planned team layer.