poe is a terminal app that runs a structured AI discussion between a manager model and a panel of expert models. It is designed for planning and document work inside a real project directory, then saves the full run history and final output to disk.
In practice, you launch poe, pick which providers should act as manager and experts, describe the task, answer any manager follow-up questions, and then let the panel iterate until a final proposal or Markdown deliverable is ready.
- Detects which supported AI CLIs are installed locally: Codex, Claude, and Gemini.
- Lets you choose a manager and 2-3 experts from the providers you have available.
- Builds a planning brief before the expert discussion starts.
- Runs expert reviews and manager merges across multiple rounds.
- Saves the full run state, proposal history, review artifacts, and final Markdown output.
- Writes the final document to disk automatically when your task targets a Markdown file such as
README.mdordocs/plan.md.
Prebuilt release binaries are published for:
- macOS
amd64andarm64 - Linux
amd64andarm64 - Windows
amd64andarm64
If you prefer, you can also build from source on any platform with Go installed.
You need:
- A terminal with normal ANSI/UTF-8 support.
- At least one supported provider CLI on your
PATH. - An authenticated session for each provider you want to use.
- Network access for the provider CLIs.
Supported providers:
codexclaudegemini
poe doctor will tell you which providers are currently:
missingavailableready
ready means the binary is present and the app found a local auth state for that provider.
Release downloads: GitHub Releases
Fastest install:
curl -fsSL https://raw.githubusercontent.com/oco-adam/panelofexperts/main/scripts/install.sh | shQuick install requires at least one published GitHub release. If the installer says no published release exists yet, use the source-build path below until the first release is cut.
What this does:
- Downloads the latest macOS release for your CPU architecture.
- Verifies the archive checksum.
- Installs
poeinto~/.local/binby default. - Adds that directory to your shell profile if needed.
Then open a new shell and run:
poe version
poe doctorManual install:
- Download the correct macOS archive from GitHub Releases.
- Extract it.
- Move
poeinto a directory on yourPATH, such as~/.local/bin. - Run
poe version. - Run
poe doctor.
Fastest install:
curl -fsSL https://raw.githubusercontent.com/oco-adam/panelofexperts/main/scripts/install.sh | shQuick install requires at least one published GitHub release. If the installer says no published release exists yet, use the source-build path below until the first release is cut.
Then verify:
poe version
poe doctorManual install:
- Download the correct Linux archive from GitHub Releases.
- Extract it.
- Move
poeinto a directory on yourPATH, such as~/.local/bin. - Run
poe version. - Run
poe doctor.
Open PowerShell and run:
irm https://raw.githubusercontent.com/oco-adam/panelofexperts/main/scripts/install.ps1 | iexQuick install requires at least one published GitHub release. If the installer says no published release exists yet, use the source-build path below until the first release is cut.
Then verify:
poe version
poe doctorManual install:
- Download the correct Windows
.ziparchive from GitHub Releases. - Extract it.
- Move
poe.exeinto a directory on yourPATH. - Open a new PowerShell session.
- Run
poe version. - Run
poe doctor.
If you want a local development build instead of a release binary, or you are running from main before the first published release exists:
- Install Go
1.25.1or newer. - Clone this repository.
- Build or install the CLI.
Build in place on macOS or Linux:
go build -o poe ./cmd/poeBuild in place on Windows:
go build -o poe.exe ./cmd/poeInstall to your Go bin directory:
go install ./cmd/poeAfter that, run:
poe version
poe doctorNote: source builds report build metadata like version: dev until you cut a release build.
The bundled install scripts support a few useful overrides:
POE_VERSION: install a specific release tag such asv1.2.3POE_INSTALL_DIR: install to a custom directoryPOE_BASE_URL: use a custom release artifact locationPOE_FORCE_INSTALL=1: allow overwrite when anotherpoebinary is found first onPATHPOE_HOME: override the app config directory used for install receipts
Unix installer only:
POE_NO_PROFILE=1: do not edit your shell profile
Windows installer flags:
-Version-InstallDir-BaseUrl-Force-NoPathUpdate
More installer detail is in docs/install.md.
poe does not bundle model runtimes itself. It orchestrates the provider CLIs you already use locally.
For each provider you want to use:
- Install that provider's CLI.
- Make sure the CLI command is on your
PATH. - Log in with that CLI.
- Run
poe doctorto confirm the provider shows asready.
If a provider shows available but not ready, the binary was found but authentication is still missing or incomplete.
From your project directory:
poeThen follow this flow:
- In the Setup screen, choose the manager provider.
- Choose 2 or 3 expert providers.
- Set
Max roundsandMerge mode. - Leave the workspace and output paths as-is unless you want a custom location.
- Type your initial request in
Initial Intent. - Press
Enterto create the run. - Review the manager brief.
- Answer any follow-up questions, or press
Ctrl+Sto start the discussion. - Watch the live discussion in the monitor.
- Press
rwhen the final result is ready.
Example requests:
Draft a rollout plan for the current release pipelineWrite docs/architecture.md explaining how the orchestrator worksAdd a comprehensive README.md that explains installation and usage
If your request clearly targets a Markdown file, poe treats it as a document task. The manager writes a real document version on each iteration, the experts review that exact document, and the next iteration produces an improved document version until the run converges or hits the round limit. The final version is then written to the target file.
This is where you configure the run:
- Manager provider
- Expert providers
- Expert count:
2or3 - Max rounds
- Merge mode:
togetherorsequential - Workspace path
- Output root
- Initial intent
Controls:
Tab,Shift+Tab,Up,Down,j,k: move between fieldsLeft,Right,h,l: change the selected valueEnter: create the runqorCtrl+C: quit
Before the manager asks follow-up questions, poe collects a repo-grounding snapshot from high-signal files in the current workspace and shows that summary in the brief screen. The manager is expected to use that grounding for repo facts and reserve follow-up questions for intent, scope, constraints, and tradeoffs the repo cannot answer.
The manager then turns your request into a structured brief. You can:
- answer manager follow-up questions
- clarify scope
- provide target file paths or constraints
- start the discussion once the brief is good enough
Controls:
Enter: send your next reply to the managerCtrl+S: start the expert discussionqorCtrl+C: quit
This screen shows:
- current run status
- current phase
- current round
- per-agent status
- live timeline events
Controls:
r: open the final results once the run is finishedqorCtrl+C: quit
The results screen shows the final Markdown and saved output paths.
Controls:
Up,Down,j,k: scrollm: return to the monitorqorCtrl+C: quit
Start the interactive app:
poeRun against a different workspace:
poe --cwd /path/to/workspaceSave run artifacts somewhere else:
poe --output-root /path/to/outputBrowse saved runs in the current repository:
poe runsResume a failed or interrupted final deliverable phase in place:
poe retry --run 20260329-224313-myrepo --deliverable-timeout 2hStart a fresh rerun from a saved brief with config overrides:
poe rerun --run 20260329-224313-myrepo --manager claude --experts gemini,codex --max-rounds 7 --merge sequentialShow build info:
poe versionCheck installation, provider detection, and update status:
poe doctorEnable Bubble Tea debug logging:
poe --debugDocument-generation steps now default to a 1h timeout. Use --deliverable-timeout on poe retry or poe rerun to override it for that recovered run.
By default, run artifacts are written under:
.panel-of-experts/runs/
Each run gets its own timestamped directory. Common files include:
state.json: current run staterepo-grounding.json: structured repo grounding snapshot used by the manager and panelrepo-grounding.md: human-readable grounding summary shown in the brief flowbrief.json: structured briefbrief.md: rendered briefproposal-vNNN.json: structured manager proposals for planning tasksproposal-vNNN.md: rendered proposals for planning tasksdocument-vNNN.json: structured document versions for Markdown-writing tasksdocument-vNNN.md: exact Markdown artifact versions for Markdown-writing tasksreviews/round-N/*.json: expert review outputsevents.log: timeline eventsfinal.md: final Markdown shown in the UIdeliverable.json: final document metadata for Markdown-writing tasksdeliverable.md: saved copy of the final document for Markdown-writing tasks
For document tasks, the app also writes the final content to the target file path chosen for the task.
poe runs reads these saved directories, poe retry resumes a saved run in place from a retryable final document-write phase or legacy deliverable phase, and poe rerun creates a fresh run directory from a saved brief.
poe supports two merge strategies:
together: the manager reconciles the full expert review bundle in one merge stepsequential: the manager incorporates expert reviews one at a time
Use together for faster convergence and sequential when you want a more incremental merge trail.
- Open a new shell after installing.
- Confirm the install directory is on your
PATH. - Re-run the installer with
POE_INSTALL_DIRif you want a different location.
- Install that provider CLI.
- Make sure its executable name is on your
PATH. - Run
poe doctoragain.
- The CLI exists, but its login state was not detected.
- Authenticate with that provider's CLI, then re-run
poe doctor.
Start the app with:
poe --output-root /your/preferred/pathUse:
poe doctorIt reports:
- build information
- current workspace
- output root
- app home
- install receipt path
- provider availability
- release update status
Run the test suite:
go test ./...Create a local release snapshot:
goreleaser release --snapshot --cleanNo license file is currently present in this repository.