Local multi-participant discussion orchestrator for Codex
Project description
codex-roundtable
codex-roundtable is a standalone local orchestrator that runs one moderated discussion round,
with one optional bounded follow-up round, across fixed participants and saves auditable artifacts.
Purpose
- Run one initial discussion round per command with Codex as moderator.
- Optionally run one follow-up round when
--follow-up-onceis enabled and round-one replies reveal a bounded disagreement, risk, or recommendation gap. - Collect participant responses from bridge CLIs (
codex2claude,codex2opencode). - Produce conservative synthesis and persist JSON + Markdown artifacts.
- Preserve session continuity with lock-based concurrency control.
Boundaries
- This repository is an orchestrator, not a framework.
- Bridge repositories stay separate; this package shells out to bridge CLIs.
- v2.1 supports one initial round plus one optional second round.
- v2.1 participants are fixed to
claudeandopencode. - single-participant requests should stay on the corresponding single bridge skill/CLI and should not trigger roundtable.
Install
python3 -m pip install -e .
Source-tree execution without installation is also supported:
PYTHONPATH=orchestrator python3 -m codex_roundtable --help
Install Skill Locally
If you want Codex to route explicit multi-participant requests into this CLI, install the skill into your local Codex skill directory:
mkdir -p ~/.codex/skills
ln -sfn "$PWD/skills/codex-roundtable" ~/.codex/skills/codex-roundtable
After installing or updating the skill, start a fresh Codex session so the new trigger rules are picked up.
Quick Start
# Check local dependencies and writable state home
codex-roundtable doctor
# Run one discussion round (session continuity is keyed by workspace + session)
codex-roundtable discuss \
--topic "Should we split this repo into bridge and orchestrator?" \
--workspace "$PWD" \
--session architecture \
--timeout 60
# Run one bounded second round when the first round exposes a useful follow-up
codex-roundtable discuss \
--topic "Review this rollout plan and follow up once if they disagree." \
--workspace "$PWD" \
--session rollout-review \
--timeout 60 \
--follow-up-once
# Inspect persisted state and artifacts
codex-roundtable status --workspace "$PWD" --session architecture
codex-roundtable show --run-id run-20260328T120000000000Z --format json
codex-roundtable show --run-id run-20260328T120000000000Z --format markdown
Commands
| Command | Purpose |
|---|---|
codex-roundtable discuss --topic ... --workspace ... --session ... [--follow-up-once] |
Runs one initial discussion round and optionally one bounded follow-up round. |
codex-roundtable doctor [--workspace ... --session ...] |
Emits JSON diagnostics for state home, participant bridges, and optional session state. |
codex-roundtable status --workspace ... --session ... |
Prints persisted session JSON. |
| `codex-roundtable show --run-id ... --format json | markdown` |
codex-roundtable forget --workspace ... --session ... |
Deletes session state + lock file only (keeps run artifacts). |
codex-roundtable gc --max-age-days N |
Deletes old unlocked session/run files. |
Skill Routing
These intents should trigger roundtable:
roundtable 一下这个方案让 cc 和 opencode 都看一下做一个多方 review圆桌会议讨论这个设计如果有分歧再追问一轮
These intents should not trigger roundtable:
问问 cc让 oc 看一下Claude 怎么看给 cc review 一下给 opencode 看看
Roundtable is for explicit multi-participant intent. Single-participant intent should route to the
single bridge instead of codex-roundtable.
Artifact Notes
Persisted run JSON is versioned. v2.1 artifacts add:
version = "2.1"follow_up_enabledfollow_up_reasonstop_reasonrounds[].prompt_role
stop_reason records why the discussion ended, for example round_one_complete,
follow_up_not_needed, follow_up_complete, follow_up_failed, or
all_participants_failed.
Doctor Output
codex-roundtable doctor returns JSON with these top-level keys:
ok: overall health boolean.roundtable_home: path/read-write checks.participants: bridge command availability forclaudeandopencode.session_state: optional session check (ok,missing,skipped, or error states).
Troubleshooting
participants.*.status=missingindoctor: install or exposecodex2claudeandcodex2opencodeonPATH.workspace does not exist: pass an existing path to--workspace.Session lock conflict: another process is using the same workspace/session key; retry after it completes.run artifact not foundfromshow: check--run-idand--format, or list files under~/.codex/codex-roundtable/runs/.
State Layout
Default state root is ~/.codex/codex-roundtable. Override with CODEX_ROUNDTABLE_HOME.
sessions/<session_key>/session.jsonsessions/<session_key>/session.lockruns/<session_key>/<run_id>.jsonruns/<session_key>/<run_id>.mdlogs/sessions/<session_key>.jsonllogs/runs/<session_key>/<run_id>.jsonl
Compatibility Matrix
| Component | v1 Support |
|---|---|
| Python | 3.11+ |
| OS | macOS and Linux |
| Discussion rounds | One initial round plus one optional second round |
| Moderator | Codex (fixed) |
| Participants | claude, opencode |
| Participant transport | External bridge CLIs (codex2claude, codex2opencode) |
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file codex_roundtable-0.2.0.tar.gz.
File metadata
- Download URL: codex_roundtable-0.2.0.tar.gz
- Upload date:
- Size: 33.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f6058aaebf400ddb6861c744952535341596a7ad3f9d48bd2b0fba1125c9a333
|
|
| MD5 |
b60383d1d3eee01a13aec36a50318d13
|
|
| BLAKE2b-256 |
a1899ebd1ed16f5cfca7b44315c16eeaf671d066262109c47b3e8083fa0ec5ac
|
Provenance
The following attestation bundles were made for codex_roundtable-0.2.0.tar.gz:
Publisher:
release.yml on Housetan218/codex-roundtable
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
codex_roundtable-0.2.0.tar.gz -
Subject digest:
f6058aaebf400ddb6861c744952535341596a7ad3f9d48bd2b0fba1125c9a333 - Sigstore transparency entry: 1192077875
- Sigstore integration time:
-
Permalink:
Housetan218/codex-roundtable@c1c42c9a2112c822808905c64babc653df3cf2f2 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/Housetan218
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@c1c42c9a2112c822808905c64babc653df3cf2f2 -
Trigger Event:
push
-
Statement type:
File details
Details for the file codex_roundtable-0.2.0-py3-none-any.whl.
File metadata
- Download URL: codex_roundtable-0.2.0-py3-none-any.whl
- Upload date:
- Size: 22.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bc8a7188b2770e6a006d230bed0b88eff457b12c31b2e64c95ddb61993cd046e
|
|
| MD5 |
c44b762a6691808247790a6dd3d2e84e
|
|
| BLAKE2b-256 |
f8788f8819ed98b7df3c189db15b84c96490cb0990bf1d5938e3276a3676d7eb
|
Provenance
The following attestation bundles were made for codex_roundtable-0.2.0-py3-none-any.whl:
Publisher:
release.yml on Housetan218/codex-roundtable
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
codex_roundtable-0.2.0-py3-none-any.whl -
Subject digest:
bc8a7188b2770e6a006d230bed0b88eff457b12c31b2e64c95ddb61993cd046e - Sigstore transparency entry: 1192077876
- Sigstore integration time:
-
Permalink:
Housetan218/codex-roundtable@c1c42c9a2112c822808905c64babc653df3cf2f2 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/Housetan218
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@c1c42c9a2112c822808905c64babc653df3cf2f2 -
Trigger Event:
push
-
Statement type: