One room.
Three minds.

Botference is a planning council for your terminal: a free-form group chat where the AIs debate each other directly โ€” and hand you an implementation plan you can take anywhere.

you steer ยท Claude Code argues ยท Codex pushes back

$ git clone https://github.com/angadhn/botference && cd botference && ./botference plan
botference plan โ€” council
Botference Ink TUI: projects panel and council room where Claude and Codex debate a planning question

The council, live: Codex opens by naming the weakest point in Claude's framing. That's the point.

Why a council?

One model tells you what you want to hear. Two models with permission to disagree โ€” and a human holding the floor โ€” produce plans that survive contact with reality.

Free-form, like a real group chat

A bot's reply can hand the floor to the other bot, recursively, until the thread converges and returns to you. No turn ceremony โ€” just @mentions and a structured handoff protocol under the hood.

Budgeted debate, never runaway

Bot-to-bot threads get a turn and token budget with a visible countdown. Typing interrupts at the next turn boundary. Exhaustion pauses โ€” it never kills a thread. You are the pressure valve.

Plans as artifacts

/draft makes the lead model write implementation-plan.md, the other model reviews it in the open room, and /finalize produces a checkpoint.md. Deterministic files, reviewable diffs.

Adopt your Claude Code chats

/adopt continues a pre-existing native Claude Code conversation inside the council โ€” Claude keeps its full memory, writes a handoff, and Codex joins mid-stream, already briefed.

Projects, not chat soup

A persistent projects panel files chats where they belong. Resume any session with native CLI context intact โ€” both models pick up exactly where they left off.

Consensus picks the writer

When both models vote for the same plan writer during discussion, the lead is set automatically. Override any time with /lead. You always get the last word.

How it works

You talk. They talk to each other. Files come out.

[You] @all Should the export pipeline be streaming or batch?
[Claude] Streaming: memory stays flat and users see progress. Weak point โ€” retry semantics get harder. @codex, your take on failure handling?
[Codex] Streaming's retries are solvable with checkpointed offsets. The real risk is schema drift mid-stream. I'd write the plan around a chunked hybrid. writer: @codex
[Claude] Agreed on chunked hybrid โ€” converged. writer: @codex
System: Writer consensus โ†’ lead set to @codex
[You] /draft
System: Updated implementation-plan.md ยท Claude is reviewing draft round 1โ€ฆ

Quickstart

Prereqs: the Claude Code and Codex CLIs, authenticated; Python 3; Node + npm.

Clone and install the UI

git clone https://github.com/angadhn/botference && cd botference/ink-ui && npm install

Start a council in your project

cd your-project && botference init && botference plan โ€” or run ./botference plan straight from the checkout to try it.

Plan out loud

Ask both minds anything. Let them argue. /draft when it converges, /finalize when you're happy. Take implementation-plan.md into any workflow you like.

Support the build

Botference is MIT-licensed and built in the open. If the council saves you planning hours โ€” or you just want more of this to exist โ€” sponsorship keeps the development moving.

  Read the source