Bicameral
Supports OpenAI API models as an optional coder/editor backend, and integrates with ChatGPT sign-in via the Codex CLI so ChatGPT-plan models can write code.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Bicameraladd a --dry-run flag to the export command"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Bicameral turns Claude Code into a two-model system. Type one command:
/bicameral add a --dry-run flag to the export commandClaude Code becomes the Architect: it investigates the repo, writes a small plan, and reviews every diff. A second model, the Editor, writes the code — any model on your ChatGPT plan (via the Codex CLI), a second Claude through headless Claude Code, or any model your Anthropic / OpenAI API key can see. A local MCP server sits between them: it routes each step, runs your tests, rolls back what fails review, and keeps a record of which model is good at what.
No API keys required. Your existing Claude and ChatGPT subscriptions are enough.
Status: early alpha. It works end to end, but interfaces, the MCP tool names and the on-disk record format may change before 1.0. Pin a release tag if you need stability.
Features
Two minds, not one mind and a pair of hands
The Editor critiques the plan before the first edit; the Architect revises once.
Whoever did not write a diff reviews it. The Editor reviews the Architect's own edits before the Architect decides.
The Editor can attach concerns to any diff it produces.
Overruling the other mind requires a stated reason. The disagreement is recorded with the test result as evidence.
Both models write lessons at the end of a run; duplicates are merged.
Verification that cannot be talked out of
Your test command runs after every edit; acceptance is refused while required tests fail.
Deterministic gates (lint, typecheck, build) run in-process with explicit arguments before any model reviews. A failing gate blocks acceptance. A gate that cannot start is reported as a configuration error, never as a pass.
Tests-first steps must leave the suite red; the implementing step cannot edit the test files. Reward hacking by editing tests is blocked mechanically, not by prompt.
Every edit is checked against the files the step declared: out-of-scope changes and untouched declared files are reported.
Rejected or failing edits are rolled back to a snapshot and retried with feedback, up to three times.
Git you can trust
Durable checkpoints: before every attempt the whole tree is snapshotted as a commit under
refs/bicameral/, through a temporary index. Your staging area is untouched, nothing in.gitis renamed, andgit gckeeps the objects.bicameral restore <run>undoes an interrupted run days later.Optional per-step commits with your own git identity and
Bicameral-Author/Bicameral-Reviewertrailers, made only after verification passes.bicameral undo <run>reverts them by sha.Review-only mode:
bicameral review(or/bicameral review) has a second model review your working tree against a ref. Every finding must cite a file and line the diff touches; the rest are dropped before you see them.
Learning you can measure
A Thompson-sampling router decides per step whether the Editor or the Architect executes, from the track record per (step kind, model). Steps the user assigned by name are pinned.
Lessons are scored by whether the runs that used them succeeded, and pruned when they stop paying.
This repo's lessons are mirrored into
.bicameral/lessons.md, a capped, stably ordered file you commit so teammates' runs benefit. Lines they add by hand are read back.Accepted, verified diffs are retrieved as few-shot examples for similar steps.
A learning-off baseline and an eval harness, so "self-improving" is a number.
Runs where you are
A Claude Code skill and a local MCP server; the same engine from the CLI, a browser GUI and a terminal dashboard.
Your Claude and ChatGPT subscriptions, or API keys if you prefer. Everything stays on your machine.
Runs that were cut off are labelled interrupted, not left as running forever.
Related MCP server: Gemini Collaboration MCP Server
Install
Three steps, about two minutes. Works on Windows, macOS and Linux.
Prerequisites
Why | Get it | |
Python 3.11 or newer | Bicameral is a Python program | python.org/downloads (on Windows tick "Add python.exe to PATH" in the installer) |
Claude Code, signed in | It is the planner and the reviewer | claude.com/claude-code, then run |
Node.js (optional) | Only to install the Codex CLI for the ChatGPT coder. Not needed if you already have the Codex desktop app: Bicameral finds the CLI inside it | nodejs.org. Skip it and Claude does both jobs |
Step 1: install Bicameral
Open a terminal (PowerShell on Windows, Terminal on macOS) and run:
pip install git+https://github.com/thugpint/Bicameral.gitStep 2: open the setup page
bicameralA page opens in your browser with a three-step checklist. Work down it:
Sign in to Claude. Opens Claude's own login window. Skip it if it already says "Signed in".
Add a coder (optional). Install Codex CLI, then Sign in to ChatGPT: every model on your ChatGPT plan becomes available as the coder. Or paste an Anthropic / OpenAI API key under Settings. Skip it and Claude does both jobs.
Connect to Claude Code. Adds the
/bicameralcommand.
When steps 1 and 3 are green a Ready box appears with a command you can copy.
If
bicameralis "not recognized", usepython -m bicameralinstead. Same thing.
Step 3: use it
Restart Claude Code, open any project, and type:
/bicameral fix the failing testChange the words after /bicameral to whatever you want done. That is the whole install.
bicameral install # adds the /bicameral command and registers the MCP server
bicameral login claude # your Anthropic account (skip if `claude` is already signed in)
bicameral login codex # optional: your ChatGPT account (needs: npm i -g @openai/codex)bicameral status shows what is signed in and whether Claude Code is connected.
Update:
pip install --upgrade git+https://github.com/thugpint/Bicameral.git
bicameral installThe second command refreshes the /bicameral command inside Claude Code. Run it after every update.
Uninstall:
bicameral uninstall
pip uninstall bicameralYour history and lessons live in ~/.bicameral/. Delete that folder for a clean slate.
Usage
Inside Claude Code
Type /bicameral followed by a task, in a project that has tests if possible:
/bicameral median() gives the wrong answer for even-length lists, fix it
/bicameral add a --dry-run flag to the export command
/bicameral write tests for the parser
/bicameral rename User to Account everywhereWhat happens:
Claude asks which coder to use. The list is whatever your sign-ins and keys can actually run: every model on your ChatGPT plan, a second Claude, API models. Pick one, type any other id, or say "Do it all myself". Your last choice is recommended.
Claude reads your repo and writes a plan of 1 to 4 small steps, each with the files to touch and a pass/fail check. The coder reads the plan first and points out anything under-specified or missing; Claude revises.
Each step is written, tested and reviewed by the other mind. The coder edits the files, your tests run, and Claude reviews the diff against the step's check. When Claude writes a step itself, the coder reviews that diff before Claude makes the call. A rejected or failing edit is rolled back and retried with feedback, up to three times.
You get a report: what changed, who wrote each step, how many tries it took, what the coder pushed back on, and whether the tests pass. Nothing is committed; the report lists the changed files and you commit when you are happy.
Say who should do what and it sticks: "let Codex write the tests" pins those steps to the coder, so the router's exploration never swaps authors. Ask for TDD and the test-writing step must leave the suite red before the implementing step, which cannot touch the test files.
Ask for a review instead of a task and nothing is edited:
/bicameral review
/bicameral review mainThe coder reviews your working tree against that ref and returns findings with file and line. Findings that point at lines the diff does not touch are dropped before you see them.
Tasks work best when they are small and concrete. "Fix the failing test in test_parser.py" beats "improve the parser".
Without Claude Code
The setup page has a Run a task tab: type what you want, pick a folder, pick a planner and a coder, press Go. You watch the log live and get a plain-English result. The terminal equivalent:
bicameral run "fix the failing test" --path ./myproject --architect claude:opus --editor codex:gpt-5-codex
bicameral run "add --dry-run" --gate "{python} -m ruff check ." --commit # lint gate on every edit, commit each verified step
bicameral review --base main --model codex:gpt-5-codex # review-only, findings grounded to the diff
bicameral restore 12 # put the tree back to before run 12
bicameral undo 12 # git revert the commits run 12 madeThe setup page, tab by tab
bicameral opens a local web app built for someone who has never opened a terminal.
Tab | What it is for |
Setup | The three-step checklist, then the |
Run | Run the same engine outside Claude Code. Pick any two models, watch the log, get a plain-English result. |
History | Every task, every step, who did it, how many tries, whether the tests passed. |
Learning | Success rate with learning on vs off, who is best at which kind of step, and the lessons the system has learned, scored. |
Settings | Default coder, the model list, optional API keys, the eval runner, disconnect. |
There is also a terminal dashboard (bicameral tui) with the same information, for servers and SSH sessions.
Good to know
It does not commit unless you ask. Every edit is snapshotted first, reviewed, and rolled back on rejection. Anything left unreviewed at the end of a run is rolled back too. With
commiton, each verified step becomes a commit under your identity, with provenance trailers, andbicameral undoreverts them.Checkpoints live in your git. In a git repository every attempt is snapshotted as a commit under
refs/bicameral/before the edit. Your index is never touched.bicameral restore <run>brings the tree back even after Claude Code was closed mid-run.It uses your subscriptions. Claude Code runs on your Claude account, Codex on your ChatGPT account. Those show as $0 in the spend tile. API keys are optional and only for pay-per-token use.
Sign-in never happens on the page. The buttons open the vendors' own login windows (
claude auth login,codex login). On Windows a new console window opens; that is expected. Finish the login there and the page updates itself.Everything stays on your computer. The page runs on
127.0.0.1with a per-session token. The only network traffic is the model calls you already make.Your data lives in
~/.bicameral/: a SQLite file with runs, steps, routing counts, lessons and accepted diffs, plus a small config file. Delete the folder to start over.The router explores on purpose. It usually follows Claude's suggestion of who should do a step, but sends roughly one step in five the other way on a fresh install so it can learn which model is better at what. Once there is a track record, it follows the evidence.
One task at a time on the setup page. Reloading the page mid-run re-attaches to the running task.
Troubleshooting
What you see | What to do |
| Use |
| Use |
| Install Git, or install from the zip instead: |
Claude Code does not know | Restart Claude Code. Still missing? Run |
The skill says "bicameral_* tools are not available" | Same as above: |
"Not signed in", or | Run |
Claude says there is no usable Editor model | You have not signed in to a coder yet. Click Install Codex then Sign in to ChatGPT, or answer "Do it all myself" and Claude does every step. |
" | Install Node.js, then |
A task "failed" but your files look untouched | That is the rollback working. Open the task in History to see which step was rejected and why. |
The page says it lost the connection | The terminal that ran |
How it works
flowchart LR
U([you: /bicameral task]) --> A
subgraph CC[Claude Code · your Anthropic account]
A[Architect<br/>investigates · plans · reviews]
end
subgraph S[Bicameral MCP server · local]
R[Router<br/>Thompson-sampling bandit]
V[Verify<br/>runs your tests]
M[(Memory<br/>lessons · examples · outcomes)]
end
subgraph ED[Editor · your ChatGPT or Claude account]
E[Codex CLI / headless Claude<br/>writes the diff]
end
A -- draft plan --> E
E -- critique --> A
A -- plan: 1-4 small steps --> R
R -- delegate --> E
R -- keep --> A
E -- diff --> V
A -- own diff --> E
E -- second opinion --> A
V -- diff + test output --> A
A -- accept / reject --> M
M -- lessons, examples, track record --> AOne run of /bicameral, step by step:
Status and model choice. Claude checks which Editor backends are signed in and asks which one to use. Your last choice is recommended.
Recall. Lessons from past runs, similar accepted diffs, and the routing track record are pulled into context before planning.
Plan, then critique. Claude reads the repo and drafts 1–4 small steps, each with the files to touch, an acceptance criterion, a suggested role, and the test command. The Editor reads the draft and the files it touches and returns concrete concerns; Claude revises, then registers the plan. Steps the user assigned by name are pinned and never rerouted.
Checkpoint, route, edit, verify, gate, cross-review. Before each attempt the tree is checkpointed in git. The server decides who executes the step. The diff comes back with the test output, the gate results, a scope check against the declared files, and any concerns the Editor has; Claude reviews it against the acceptance criterion. When the step stays with Claude, the Editor reviews Claude's diff first and Claude gets that second opinion before deciding; overruling it requires a stated reason. Rejections roll back the files and retry with feedback, up to three times. Acceptance is refused while required tests or gates fail, while a protected file was modified, or while a tests-first step is green.
Finish and reflect. Final verification, outcome logging, and 0–3 transferable lessons from each mind (duplicates merged). The report lists the uncommitted files; a run cut off before this point is marked interrupted in History rather than left hanging.
Design notes
Plenty of tools split "planner" and "coder". Bicameral is about the loop around that split.
Bicameral | Typical planner/coder split | |
Runs inside Claude Code as a skill |
| usually a separate CLI |
Uses your subscriptions, no API key | Claude + ChatGPT sign-in | API keys |
Reviewer gate with test verification | every step, auto-rollback | prompt-only review, if any |
Deterministic gates before the model's verdict | lint / typecheck / build in-process; cannot-run is not a pass | none, or shell hooks that fail silently |
The coder talks back | critiques the plan, reviews the planner's own diffs, flags concerns, disputes recorded | executes silently |
Checkpoints | commits under | shadow git or in-memory, lost on restart |
TDD | red-first enforced, test files protected from the implementer | prompts only |
Review of an existing diff | findings grounded to the diff's lines | unverified file:line claims |
Decides who executes each step | learned bandit over (step kind, model) | fixed roles |
Learns from outcomes | scored lessons, retrieved examples | no memory, or unscored notes |
Baseline mode to measure the learning |
| — |
The pieces, in one paragraph each:
Learned routing. A Thompson-sampling bandit over (step kind, model) decides whether a step goes to the Editor or stays with the Architect. It starts from the Architect's suggestion and overrides it once the track record says so. It explores on purpose; that is what makes routing learnable.
Reviewer gate. Every diff is reviewed against the step's acceptance criterion and your test command, by the model that did not write it. Nothing is left applied without a review; rejected or failing edits are rolled back to a snapshot and retried with the feedback.
Two voices. The Editor critiques the plan before the first edit, can attach concerns to any diff it produces, and gives a second opinion on the Architect's own diffs. The Architect still decides, but it decides with the other mind's objection in front of it.
Reflective memory. After each run both models write 0–3 transferable lessons. They are retrieved by relevance for later tasks and scored by whether the runs they were used in succeeded. Losers get pruned.
Retrieved examples. Diffs that passed both review and verification are shown to the Editor as few-shot examples on similar steps.
Deterministic before probabilistic. Gates, protected paths, red-first checks and the scope check run before any model gives a verdict, and their results are recorded per step. A model cannot argue past them.
Evaluation. Fixture repos with failing tests, pass/fail per task, and a learning-off baseline, so "self-improving" is a number rather than a claim.
Measuring the learning
bicameral eval --baseline --runs 3 --architect claude:opus --editor codex:gpt-5-codex
bicameral eval --runs 3 --architect claude:opus --editor codex:gpt-5-codex
bicameral statsstats prints success rate and cost for learning on vs off, the routing table (accepted/total per step kind and model), the trend per batch of five eval runs, and the lessons with the best track record. The same numbers are on the GUI's Learning tab.
Honest status: the bundled suite has three tasks and every number so far came from scripted fakes in the test suite. The first real measurement will be committed here as soon as it exists. Add your own tasks by dropping a directory with a task.json and a fixture/ tree anywhere and passing --suite DIR:
{
"id": "median-even-length",
"kind": "bugfix",
"task": "median() returns the wrong value for even-length input. Fix it so the tests pass.",
"verify_command": "{python} -m pytest -q",
"expect_initial_failure": true
}Backends and model ids
Prefix | Backend | Sign in | Examples |
| headless Claude Code, your Anthropic account |
|
|
| Codex CLI, your ChatGPT account |
| any model on your plan: |
none | Anthropic or OpenAI API |
| whatever the key can see: |
The model menus and bicameral models show exactly what is usable right now: the Codex CLI's own per-account list for ChatGPT, the API's list for a key (fetched when you save the key, refreshed with bicameral models --refresh or the button in Settings), and the aliases Claude Code accepts. Anything else can be typed in: pick Other in a menu, or pass the id on the command line.
Inside Claude Code the Architect is always the host session (recorded as claude-code); the prefixes matter for the Editor and for standalone runs. Account-backed backends are billed to your subscription and show as $0 in the spend tile.
Layout
src/bicameral/
mcp_server.py the tools Claude Code calls: status, recall, critique, begin, execute, check, review, finish, review_diff, stats
gitops.py checkpoints under refs/bicameral/, step commits, revert, review diffs, hunk parsing
skill/SKILL.md the /bicameral skill: the Architect protocol
engine.py plan / route / edit / verify / review / rollback / record / reflect, shared by both loops
orchestrator.py standalone loop (CLI, evals, GUI "Run a task")
router.py Thompson-sampling bandit over (step kind, model)
memory.py lessons and examples, BM25 retrieval, scoring and pruning, the repo's .bicameral/lessons.md
providers/ anthropic (API/OAuth profile), openai (API), claude_cli, codex_cli
auth.py who is signed in to what, and how to sign in
install.py writes the skill, registers the MCP server via `claude mcp add`
gui/ the web app (stdlib HTTP server + one HTML file, no build step)
tui/ the Textual terminal dashboard
evals/ harness and bundled fixture tasks
__main__.py `python -m bicameral` == `bicameral`
tests/ 88 offline tests with scripted fake backendsFAQ
Do I need an OpenAI or Anthropic API key? No. Claude Code signs in with your Claude account and the Codex CLI signs in with your ChatGPT account. API keys are an optional extra in Settings.
Can I use Claude for both roles?
Yes. Pick claude:sonnet (or any Claude) as the Editor, or answer "Do it all myself" when /bicameral asks. Routing and memory still apply.
Does it work with Cursor, Aider, or plain terminals?
The hosted flow is a Claude Code skill. The standalone loop (bicameral run, the GUI's Run a task) works anywhere with any two supported models.
Is it safe to let it edit my repo?
Every edit is snapshotted first, reviewed by the model that did not write it, and rolled back on rejection or at the end of a run if unreviewed. In a git repository each attempt is also checkpointed under refs/bicameral/, so bicameral restore <run> recovers the tree even if the session died. It only runs git commit when you turn that on.
Why does Claude sometimes do a step itself when I picked Codex? The router explores. On a fresh install it follows Claude's suggestion about four times out of five and tries the other model the rest of the time, so it can learn who is better at what. The Learning tab shows the track record it builds. If a step must be done by a particular model, say so in the task ("Codex writes the tests"); Claude pins it and the router leaves it alone.
Can I pick the planner model too?
Inside Claude Code the planner is the session you are in, so switch it with /model before running /bicameral. Outside Claude Code, bicameral run --architect ... --editor ... takes any two models.
Why "Bicameral"? Two chambers, one decision. One mind plans and judges, the other executes, and the bridge between them keeps score.
Developing
git clone https://github.com/thugpint/Bicameral.git && cd Bicameral
python -m venv .venv
.venv/Scripts/python -m pip install -e ".[dev]" # POSIX: .venv/bin/python
.venv/Scripts/python -m pytest -qThe 88 tests run fully offline against scripted fake backends (tests/fake.py) and a throwaway git repository; no account or API key is needed. CI runs them with ruff on Linux and Windows against Python 3.11 and 3.12.
Style: 120-column lines, type hints, dataclasses, standard library first. Ruff is configured in pyproject.toml; run ruff check src tests if you have it. Keep changes surgical and match the surrounding code. The layout table above says where each part lives. Issues and pull requests are welcome.
License
Available Tools
10 toolsbicameral_beginA
Register your plan and start a run. Routes each step to you or to the editor model (set pin=true on a step to forbid the router from overriding suggested_role), runs the baseline verification, and returns the routing. editor_model may be 'self' to do every step yourself.
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | ||
| gates | No | ||
| steps | Yes | ||
| commit | No | ||
| summary | Yes | ||
| learning | No | ||
| task_kind | Yes | ||
| workspace | Yes | ||
| editor_model | Yes | ||
| verify_command | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool routes each step to the user or editor model, runs baseline verification, and returns routing. It also explains the pin=true behavior and the editor_model='self' option. It doesn't mention side effects like whether a run is persisted or whether it modifies state, but it covers the key behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and front-loads the core purpose. It packs useful routing and pin behavior into a compact form. It could be slightly more structured, but it earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 10 parameters, no annotations, and an output schema. The description explains the high-level flow but leaves many parameters unexplained (task_kind, gates, commit, learning, verify_command, summary). An agent would need to infer their meaning from names alone. The output schema exists, so return values are covered, but the parameter semantics gap makes this incomplete for a complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains editor_model and pin semantics, but the other 8 parameters (task, workspace, task_kind, summary, steps, gates, commit, learning, verify_command) are not described in the tool description. The schema itself has descriptions for nested StepInput properties, but top-level parameters lack descriptions. The description adds some meaning but doesn't fully compensate for the 0% coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Register your plan and start a run') and resource, and clearly distinguishes this tool from siblings by explaining it is the entry point that routes steps and runs baseline verification. It also names the editor_model='self' option, which differentiates it from other bicameral tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use this tool: to register a plan and start a run, and it gives a clear alternative behavior (editor_model='self' to do every step yourself). It doesn't explicitly name sibling tools as alternatives or state when not to use it, but the context is clear enough for an agent to select it as the initial run tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bicameral_checkA
After editing a step yourself: diff the workspace against the snapshot, run verification, and get the editor model's second opinion on your diff.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | ||
| step_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full disclosure burden. It transparently enumerates the three actions the tool performs, which is meaningful behavioral context. It does not state whether the operation is read-only or whether verification/opinion results are persisted, a notable gap for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the trigger and then lists the workflow in a compact, scannable form. There is no filler or repetition of schema titles. It earns a high score for efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so the return value need not be spelled out, and the description conveys the main workflow. But it omits parameter semantics and any prerequisites/error conditions (e.g., whether a snapshot must exist), and the many bicameral siblings create ambiguity that is not resolved. Overall adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description never maps run_id or step_id to roles beyond an implicit 'step'. With no parameter documentation, an agent must infer that step_id is the edited step and run_id identifies the run, which is risky. The description mentions 'a step' but does not compensate for the schema's empty parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete trigger and names three specific operations (diff, run verification, second opinion), so an agent knows what invoking it accomplishes. It does not explicitly contrast with overlapping siblings such as bicameral_review_diff or bicameral_critique, so it misses the sibling differentiation that would earn a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The trigger 'After editing a step yourself' is an explicit usage context and distinguishes this from tools used at other workflow phases. However, it gives no exclusions or mention of alternate sibling tools, so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bicameral_critiqueA
Ask the editor model to critique your draft plan before anything is edited: under-specified steps, wrong files, missing steps, unverifiable acceptance criteria. Same arguments as bicameral_begin. Revise where it is right, then call bicameral_begin.
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | ||
| steps | Yes | ||
| summary | Yes | ||
| task_kind | Yes | ||
| workspace | Yes | ||
| editor_model | Yes | ||
| verify_command | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It implicitly discloses non-mutating behavior ('before anything is edited') and implies the critique output guides revisions. However, it doesn't describe the output format, whether the critique is blocking, or any other side effects. For a tool with zero annotation coverage, more explicit behavioral context would be valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. The purpose is front-loaded, the critique criteria are enumerated compactly, and the routing instruction ('Same arguments as bicameral_begin', 'then call bicameral_begin') closes the loop. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and the nested StepInput is well-documented in the schema, the description is reasonably complete for a critique tool. The top-level parameters are undocumented in the schema, but the 'same arguments as bicameral_begin' pointer mitigates this. An explicit note on what the critique response contains would push this to a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the top-level parameters (task, workspace, editor_model, task_kind, summary, steps, verify_command have no descriptions), but the nested StepInput type has rich per-property descriptions in the schema itself. The description compensates somewhat by stating 'Same arguments as bicameral_begin', routing the agent to another tool for parameter details. This is adequate but not exemplary.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Ask the editor model to critique'), a specific resource ('your draft plan'), and enumerates exactly what the critique covers (under-specified steps, wrong files, missing steps, unverifiable acceptance criteria). It distinguishes itself from sibling tools by positioning as a pre-edit review and naming bicameral_begin as the follow-up, so an agent can tell them apart without opening any schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear timing context ('before anything is edited') and a post-call action ('Revise where it is right, then call bicameral_begin'). It references 'Same arguments as bicameral_begin' for routing. It doesn't explicitly state when to skip the critique and go straight to execution, which would strengthen the guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bicameral_executeA
Execute one step. Delegated steps are edited by the editor model and come back as a diff plus verification output; steps routed to you return instructions to edit yourself. Pass feedback on retries.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | ||
| step_id | Yes | ||
| feedback | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses important behavioral traits: delegated steps return 'a diff plus verification output' while routed steps return 'instructions to edit yourself.' This goes beyond a typical vague one-liner. It still omits details about state changes, permissions, or reversibility, but the disclosure is meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each serving a distinct purpose: a clear summary, a breakdown of the two execution modes, and a retry note. There is no fluff, no repetition of schema fields, and the most critical information is front-loaded. This is an efficient, well-structured description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and a multi-step workflow context, the description explains the execution outcomes and retry feedback well. However, it leaves gaps around how to determine run_id/step_id, what distinguishes delegated from routed steps, and how this tool relates to the sibling tools. The output schema covers return values, but parameter provenance and selection logic are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for all three parameters. It only addresses feedback by noting it is passed on retries, and it does not explain run_id or step_id at all. The names are somewhat self-explanatory, but the description provides almost no parameter-level guidance for an agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Execute one step.' It clarifies the tool's core function and distinguishes between delegated and routed steps, which helps differentiate it from review/status siblings. However, it does not explicitly name any sibling tools or contrast them, so it falls just shy of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for executing a single step in the bicameral workflow, and it gives one direct usage tip: 'Pass feedback on retries.' It does not state when to use this tool versus alternatives like bicameral_review or bicameral_critique, nor does it provide exclusion conditions. This is adequate but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bicameral_finishA
Close the run: final verification, outcome logging, lesson storage and scoring. Returns the summary to report.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | ||
| lessons | No | ||
| success | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior. It does so by enumerating side effects: final verification, outcome logging, lesson storage, and scoring, plus returning a summary. It could add detail about irreversibility or state changes, but the terminal nature is clearly conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. Every phrase adds meaning: the action, the component steps, and the return value. It is an efficient, well-structured definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description captures the core operations and return value, which is reasonable given an output schema exists. However, without annotations and with weak parameter semantics, it leaves uncertainty about how to supply success and lessons and what happens to the run after closing. It is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it does not explain how run_id, success, or lessons map to their expected values. 'Lesson storage' and 'outcome logging' loosely hint at lessons and success, but the agent gets little concrete guidance on the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Close the run,' which names a specific verb and resource, and then lists the concrete operations involved: final verification, outcome logging, lesson storage, and scoring. It clearly distinguishes this terminal tool from lifecycle siblings like bicameral_begin, bicameral_execute, and bicameral_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The opening phrase 'Close the run' establishes a clear terminal context: use this when the run is complete and needs final verification, logging, lesson storage, and scoring. It gives clear usage context but does not explicitly name alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bicameral_recallA
Lessons, similar accepted edits and routing track record relevant to a task, plus lessons committed in the repository's .bicameral/lessons.md. Call before planning.
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | ||
| workspace | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It describes what data it returns (lessons, edits, track record) and the source file, but it does not explicitly state whether it is read-only, whether it has side effects, or any error behavior. The read-only nature is implied by 'recall' but not stated, and there is no mention of pagination or output format, which an output schema might cover but is not referenced in the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the core content (what it recalls) and ends with a clear usage directive. Every word earns its place; there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a low complexity and an output schema exists, which likely covers return format. However, the description omits any explanation of the 'workspace' parameter and does not provide details on the structure or volume of the recalled data. It also lacks explicit behavioral notes (e.g., read-only). Given the presence of an output schema, the description is partially complete but still leaves gaps in parameter semantics and behavioral disclosure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only vaguely references 'a task' but does not explain the required 'task' parameter or the optional 'workspace' parameter. The description fails to clarify what 'workspace' means or how it affects the recall, leaving the agent without sufficient guidance for invoking the tool with correct parameter values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool recalls lessons, similar accepted edits, and routing track record, plus lessons from a specific file. The verb 'recall' and the resource (lessons/edits/track record) make the purpose unambiguous, and it is distinct from siblings like bicameral_status or bicameral_review_diff, which have different functions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Call before planning,' which gives a clear temporal directive. However, it does not mention when not to use it or alternatives, so it lacks the 'when-not/alternatives' component needed for a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bicameral_reviewA
Accept or reject the applied edit for a step. Rejection rolls the files back; feedback goes to the next attempt.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | ||
| step_id | Yes | ||
| verdict | Yes | ||
| feedback | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It explicitly reveals that rejection rolls files back and feedback is passed to the next attempt, providing important side-effect information. It does not describe acceptance behavior or permission requirements, but the key destructive behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main purpose and immediate side effect. Every clause adds meaning without redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema and simple parameters, but the description omits exact verdict values, which are critical for correct invocation. It also does not explain how run_id and step_id relate to the workflow, although their names are self-explanatory.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It clarifies that verdict means accept or reject and feedback goes to the next attempt, but it does not specify exact accepted verdict string values or formats for run_id and step_id beyond their names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool accepts or rejects an applied edit for a step, which is a specific verb and resource. It distinguishes itself from siblings like bicameral_review_diff (viewing a diff) and bicameral_critique (providing critique) by naming the decision action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage after an edit is applied by mentioning rejection rolls files back and feedback goes to the next attempt. However, it does not explicitly name alternatives or state when not to use this tool versus bicameral_review_diff or bicameral_critique.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bicameral_review_diffA
Review-only mode: an independent model reviews the working tree's diff against a git ref (default HEAD) and returns findings with file:line, each verified to point at a line the diff touches. No plan, no edits. Use when the user asks for a review or a second opinion on a change.
| Name | Required | Description | Default |
|---|---|---|---|
| base | No | HEAD | |
| model | Yes | ||
| context | No | ||
| workspace | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden. It clearly states this is review-only, makes no plan, and makes no edits, so the safety profile is transparent. The added guarantee that every file:line finding is verified against lines the diff touches is valuable behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences front-load the key mode, then the operation, then the use condition. Every clause earns its place and there is no redundant restating of the name or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema covers return details, and the description covers purpose, safety, and verification. However, given 0% schema parameter coverage and four parameters, the missing semantics for workspace, model, and context make the definition not fully complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no property descriptions (0% coverage), so the description must compensate. It clarifies that base defaults to HEAD and is a git ref, but says nothing about the required workspace and model parameters or the optional context value, leaving the agent to guess valid inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the precise action (reviews the working tree diff against a git ref), the scope (diff vs. base), and the deliverable (file:line findings verified to be in the diff). It stops short of a 5 because it never explicitly distinguishes itself from the sibling bicameral_review, relying on the '-diff' name and wording.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tool explicitly tells the agent when to invoke it ('Use when the user asks for a review or a second opinion on a change') and rules out planning/editing behavior. It does not name alternative tools for planning or editing, so it lacks the explicit exclusion routing needed for a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bicameral_statsB
Success rates, routing table, eval results and top lessons.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full disclosure burden. It only lists content categories and does not state that the tool is read-only, mention data freshness, side effects, or access requirements. It is not contradictory, but it is behaviorally thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a compact, six-word list with no filler or redundant phrasing. It is appropriately front-loaded, though its telegraphic style sacrifices some explanatory context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless reporting tool with an output schema present, the description gives enough orientation by listing the main content areas. It does not need to explain return values in detail, though adding a note about when to use it would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema description coverage is effectively 100%, so the schema already exhaustively documents the input surface. The baseline of 4 applies, and the description does not need to add parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly enumerates the tool's content: success rates, routing table, eval results, and top lessons. Although it lacks an explicit verb like 'get' or 'return', the noun phrase unambiguously identifies this as a stats/reporting tool and goes beyond simply restating the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use bicameral_stats versus siblings like bicameral_status or bicameral_recall. An agent must infer usage from the tool name and content list, with no exclusions or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bicameral_statusA
Backends, sign-in state, editor models available right now, and history. Call first.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It adds useful ordering context ('Call first') and implies a read-only, current-state snapshot, but it does not explicitly disclose safety, side effects, or consequences of calling, leaving some inference to the agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely compact and every word adds information: what is reported and the recommended call order. There is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema exists, the description need not explain return values. It conveys the essential categories and the 'call first' guidance, though 'history' could be slightly more specific.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and 100% schema description coverage, so the description does not need to clarify parameters. The baseline of 4 applies because there is nothing parameter-related for the description to add.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly indicates this tool reports current environmental state: backends, sign-in status, available editor models, and history. It is understandable for a status tool, but it lacks an explicit verb and does not differentiate itself from sibling tools like bicameral_check or bicameral_stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs the agent to 'Call first', which gives clear usage context as an initial discovery step. However, it does not state when not to use it or name alternatives, so it stops short of full usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
v0.1.0- First observed
bicameral_begin - First observed
bicameral_check - First observed
bicameral_critique - First observed
bicameral_execute - First observed
bicameral_finish - First observed
bicameral_recall - First observed
bicameral_review - First observed
bicameral_review_diff - First observed
bicameral_stats - First observed
bicameral_status
TDQS
Scored across 10 tools
Each tool maps to a distinct phase of the bicameral workflow: pre-flight introspection, plan critique, diff review, run lifecycle, and per-step execution control. Despite some review/check overlap, the described targets (working tree diff vs. applied step edit vs. draft plan) are clearly separated.
All tools share the consistent bicameral_ prefix and snake_case style, and most use verb-like names (begin, execute, check, review, finish). The noun-style names status and stats deviate slightly from the otherwise action-oriented pattern, but the overall scheme is predictable and readable.
Ten tools is well-scoped for a multi-stage editing workflow. Each lifecycle phase has a dedicated tool, and there is no sense of redundancy or unnecessary bloat.
The tool surface covers the full workflow: gather context, review before planning, critique a plan, start a run, execute steps, self-check edits, accept/reject changes, finish, and inspect stats. There are no obvious dead ends or missing lifecycle operations for the stated purpose.
Maintenance
Related MCP Connectors
Adaptive plan/build/review cycles for AI coding assistants, persisted across sessions.
- AxisOAuthdev.useaxis
Coding agents from Claude Code, Cursor and Codex claim jobs and lock files on one shared board.
Source-checked CLI guides and model-aware planning for Claude Code, Codex, and Grok Build.
- OolkinOAuthcom.oolkin
AI colleagues that keep your standards, your project and their reasoning between sessions
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceTransforms Claude from a code generator into a programming partner capable of testing, debugging, and optimizing code automatically through a secure execution environment.-
- AlicenseBqualityDmaintenanceEnables Claude to collaborate with Gemini for code reviews, second opinions, and iterative software development. It facilitates multi-step workflows including PRD creation and code generation through an AI orchestration framework.29 npm1MIT
- FlicenseAqualityDmaintenanceEnables adversarial collaboration between Claude and GPT for automated code critique, verification, and multi-round debate to improve output quality.3-
- AlicenseBqualityDmaintenanceEnables Codex to manage a local Claude Code companion through MCP, implementing a dual-agent workflow where Codex handles reasoning and review while Claude Code performs engineering tasks.181MIT