§ 01 Deliberation Engine / v0.1 MIT · CLI-first

You don't need a
smarter AI.
You need five that disagree.

Three hours re-prompting a single model ends with a longer document, not a closer verdict. Forge puts agents from six different providers — Claude, Gemini, OpenAI, OpenRouter, Perplexity, Ollama — into a deterministic phase machine, with debate roles (skeptic / pragmatist / analyst / advocate / contrarian) rotating between them each phase.

Star on GitHub Watch the debate → Cross-provider · rotating roles · one verdict.
§ 02 forge debate

Cross-provider.
Rotating roles.

One command. Pick 2–5 providers with configured keys. Each becomes a participant named after the model it's running. The five debate roles (skeptic · pragmatist · analyst · advocate · contrarian) rotate between them at every phase — so the same question gets interrogated from five perspectives, each one coming from a different model every round.

forge debate · cross-provider agents with rotating roles
forge debate "Should the municipality run the budget vote on-chain or on paper ballots?"
01

Agents = providers

Claude · Sonnet 4.5, Gemini · 2.5 Pro, GPT · 4o, DeepSeek V3, Ollama · Gemma 3 — each slot is a model, not a persona.

02

Roles rotate per phase

At each phase transition the RoleRotator shifts every role by one slot. Claude plays Skeptic in phase 1, Pragmatist in phase 2, Analyst in phase 3.

03

Fresh directive on change

When an agent's role flips, a systemSuffix is injected with the new stance. The next response adopts the new perspective fully, no bleed-through.

§ 03 Case study

One product.
Every decision.
One engine.

CivicVote is a fictional product · decentralized voting for local municipalities. Below are four real decisions that team ran through Forge instead of chatting with one model for three hours each. For every one: the question, the mode, the artifact that landed on disk.

01Validate

Will any municipality actually buy this?

forge -m idea-validation

"Does the pain exist at a price someone will pay to fix?"

GO with three-line reasoning, plus a pivot shortlist if pilot #1 misses turnout. Skeptic forced the procurement-data question; Contrarian tried and failed to kill the idea.

02Red-team

Who attacks a decentralized municipal vote?

forge -m red-team

"Nation-state? Incumbent? A coercive spouse? Name them before modeling them."

Three kill chains drafted, scored against real detection capacity. Ranked mitigation plan lands: kiosk mode, deniable re-vote, public tally feed, audit log with DIDs only.

03Audit

Is the protocol implementation actually correct?

forge -m tech-review

"Cryptography is the part where silent bugs decide elections."

Findings report with file paths + severity · including a nonce re-use in vote/sign.ts:147 flagged HIGH. Architect, Security, Perf, and Tests all at the table.

04Raise

Can the story survive a real partner meeting?

forge -m vc-pitch

"Pressure-test the pitch before the actual room burns it."

Investment memo ready for IC · verdict FOLLOW, with named next-diligence items. GP, Associate, LP proxy, and Founder all played out before the real meeting.

Same team. Different question. Same engine. CivicVote was the example. Your product is the point.

§ 04 See it run

Real terminal sessions. Pick a mode.

§ 05 Operator control

Every agent,
your hand on the dial.

Press a in any running session. Swap each agent's model — Claude, Gemini, OpenAI, OpenRouter, Perplexity, Ollama — cycle providers, pause a loud voice, or force a specific perspective to speak next. Changes apply to the next turn without restarting the session.

Beyond the live panel, every flow has a CLI entry point: forge auto "<request>" routes natural-language to the right mode; forge pipeline "<spec>" chains modes with each phase's consensus feeding the next; forge parallel splits into N sub-deliberations; forge compress distills transcripts into handoff briefs; forge mcp runs Forge as an MCP server for Cursor or Claude Code.

Forge Agent Control panel showing per-agent model swap and pause toggles.

The panel.

Every live agent shows up · state, role, current model, pause badge. cycle the model, p switches provider, space pauses, s forces a speak turn. Close with esc, changes apply immediately.

← → model p · provider space · pause s · force speak
Forge Skill Picker browsing project, user, and plugin-scoped skills live per agent.

Skills on demand, per agent.

From Agent Control hit k · browse everything the loader found (skills/, ~/.claude/skills/forge/, plugin skills, skills.sh list output). space toggles; the agent's next response incorporates the new knowledge without a restart.

k · open picker space · toggle / · filter
§ 06 Method

Five roles.
Not personalities.

The deliberation engine enforces a specific kind of disagreement. Five culture-neutral reasoning stances, each with a job. No invented names, no backstories, no simulated humans · just structural roles that have to carry their own weight or the phase machine overrides them.

i. Skeptic Demands citations, disputes every premise, refuses "obviously" as a step. Blocks progress without evidence. Most useful early · latest you want them silenced is never.
ii. Pragmatist Forces closure. Watches the clock and the scope. If the room is still theorizing in phase four of five, the Pragmatist rules the phase done and moves on.
iii. Analyst Traces second-order effects, runs the numbers, maps dependencies. The voice that asks "if this ships, what breaks downstream?" · not rhetorically.
iv. Advocate Speaks for the user, the victim, the person who never showed up to the meeting. Holds the non-technical stake that otherwise disappears into deck language.
v. Contrarian Rejects the framing itself. If the right answer is to not do this, the Contrarian is the one allowed to say so without being talked over.
§ 07 Install

Clone.
Link.
Ship a decision.

Sixty seconds to a verdict.

Clone, link, run forge init. The wizard picks up your Claude Code session, offers to paste GEMINI_API_KEY or OPENAI_API_KEY, and auto-detects a local Ollama daemon if you're running Gemma / Llama / Qwen / Mistral locally. Env vars still override on every call.

~ / install · ~60s
# clone the engine
git clone https://github.com/SaharBarak/forge.git
cd forge && bun install && bun link

# interactive setup · picks providers, pastes keys, probes Ollama
forge init

# first deliberation
forge start -m will-it-work -g "Migrate to Cockroach?"