Planner AI
Multi-agent terminal UI: several independent proposer agents inspect the workspace in parallel (each on a model you pick), then a separate consensus agent reconciles their outputs into one plan, answer, or improvements list. Plan mode archives plan.md under .planner-ai/; Ask mode archives a Q&A answer; Improve mode archives a prioritized improvements list. It plans, answers, and audits; it does not execute.
It is both multi-model (Claude, Grok, GPT, Gemini, etc) and multi-agent (one agent per proposer, plus a consensus agent—not a single agent that fans out to several models).
Requirements
- Python ≥ 3.14
- uv
Install and run
From this directory (development)
cd planner-ai
uv sync
uv run planner
Or:
uv run python -m planner_ai
Install as a tool (any project)
From PyPI:
uv tool install planner-ai
# or: pip install planner-ai
From this package directory (development):
uv tool install .
Then from any project you want to plan:
cd ~/code/my-app
planner
Both the Bun and Python CLIs expose the same console name planner. If both are on your PATH, whichever comes first wins. Prefer one install at a time, or call the Python app explicitly with uv run --directory /path/to/planner-ai planner.
Authentication
On first run the TUI opens Auth when no real provider is connected. Configure at least one provider; empty Enter cancels a token editor:
- ChatGPT for Codex — browser login uses your eligible ChatGPT subscription. Device-code login (beta) is available for remote/headless environments and may need to be enabled in ChatGPT security or workspace settings.
- Anthropic API key — from Anthropic Console; this uses Anthropic API billing, not a Claude subscription.
- Cursor API key — from Cursor Dashboard → Integrations
- Codex API key — optional fallback from OpenAI API keys; this uses standard API billing rather than ChatGPT subscription access.
Browser login tries to open the system browser and also leaves the sign-in URL visible in the TUI. Device-code login shows a verification URL and one-time code. A successful ChatGPT login replaces any planner-ai Codex API-key configuration.
Anthropic, Cursor, and optional Codex API-key values are saved under the OS user config directory:
- macOS:
~/Library/Application Support/planner-ai/config.json - Linux:
~/.config/planner-ai/config.json(or$XDG_CONFIG_HOME/planner-ai) - Windows:
%APPDATA%\planner-ai\config.json
Never commit tokens or put them in .env. The app does not log credential values.
ChatGPT credentials are not stored in planner-ai's config. Codex stores and refreshes them in its standard shared cache or OS keyring, so planner-ai, Codex CLI, and the Codex IDE extension use the same active session. Disconnecting Codex or resetting authentication signs all of those local Codex clients out.
Providers without authentication are omitted; if none are connected, mock providers are used. With real providers present, mocks appear only when includeMocks is enabled (press m on Proposers/Consensus).
If authentication fails during a run, the error screen offers r to remove a failing key or disconnect a failing ChatGPT session and return to Auth (or q to quit). To clear all credentials, including the shared Codex session, without launching the TUI:
uv run planner --reset-auth
# or, if installed as a tool:
planner --reset-auth
What it does
- Plans/asks/improves against the folder you launched the CLI in (
cwd) - Runs several proposer agents in parallel, each on a different model (one failure does not cancel the others)
- Runs a separate consensus agent (on its own model) to reconcile those proposals
- Plan mode: archives the consensus plan under
.planner-ai/plan-…/(does not write cwdplan.md) - Ask mode: same multi-agent proposer + consensus flow with Q&A prompts; archives under
.planner-ai/ask-…/ - Improve mode: same flow with audit prompts; required free-text scope (suggestion chips: Last commits / Commits in this branch / Whole repo); agents interpret the scope themselves; archives under
.planner-ai/improve-…/
TUI
Fullscreen alternate-screen UI with tabs:
| Tab | Shortcut | What it does |
|---|---|---|
| Plan | Ctrl+1 |
Plan/Ask/Improve toggle, enter a goal, question, or scope, watch proposals / consensus, browse the result |
| Proposers | Ctrl+2 |
Pick proposer models (multi) — Claude / Cursor / Codex / Mock |
| Consensus | Ctrl+3 |
Pick the consensus model (single) |
| Auth | Ctrl+4 |
Connect ChatGPT or manage Claude / Cursor / Codex credentials |
| History | Ctrl+5 |
Browse past successful runs archived under .planner-ai/ |
You can also click the tab labels. On Models: click a row or use ↑↓ / PgUp/PgDn, Space toggle/choose, / filter, m toggle mocks, c continues to Plan.
Startup opens Auth if no real provider is authenticated, else Proposers if there is no saved selection, else Plan.
How it works
- You provide a goal (Plan), question (Ask), or scope (Improve) on the Plan tab.
- Each proposer agent inspects the current working directory (read-only) with its own tools and proposes independently.
- A consensus agent inspects the workspace and reconciles those proposals into one plan, answer, or improvements list.
- All modes archive under
.planner-ai/(plan.md,answer.md, orimprovements.md).
flowchart LR
Goal[Goal question or scope] --> Proposers[Proposer agents in parallel]
Proposers --> Consensus[Consensus agent]
Consensus --> Plan[plan.md answer.md or improvements.md archive]
Output
.planner-ai/plan-…/plan.md (Plan mode) is the artifact meant for a later execution step. This tool produces the plan; it does not run it.
Each successful run is archived under .planner-ai/:
.planner-ai/
plan-2026-08-13T16-48-00/
anthropic-claude-sonnet-4-5-output.md
plan.md
ask-2026-08-13T16-49-00/
cursor-composer-2.5-output.md
answer.md
improve-2026-08-13T16-50-00/
cursor-composer-2.5-output.md
improvements.md
- Plan runs:
plan-{YYYY-MM-DDTHH-MM-SS}/with per-model*-output.mdand consensusplan.md - Ask runs:
ask-{YYYY-MM-DDTHH-MM-SS}/with per-model*-output.mdand consensusanswer.md - Improve runs:
improve-{YYYY-MM-DDTHH-MM-SS}/with per-model*-output.mdand consensusimprovements.md - Collision dirs:
plan-{ts}-2,plan-{ts}-3, … - History lists all kinds newest-first (by timestamp, not full dirname)
Archives written by the TypeScript app remain readable.
Development
cd planner-ai
uv sync
uv run planner # TUI (plans cwd)
uv run planner --reset-auth
uv run pytest
uv run ruff check src tests
Plan another folder without installing:
cd ~/code/my-app
uv run --directory /path/to/planner-ai/planner-ai planner
Metadata
Release files for planner-ai 0.6.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| planner_ai-0.6.0.tar.gz | 45.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| planner_ai-0.6.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 109.3 kB
Release files / planner_ai-0.6.0.tar.gz
| Download URL | planner_ai-0.6.0.tar.gz |
|---|---|
| Size | 45.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
769b1a7568c69f2ed2f67ebe6d3614251a64d0f2f719fc543595a7bf0ee730ea
|
|
BLAKE2b-256 checksum How to use checksums |
c1db0c813d25c3adb7a38d8710d627c9bef61d9dc0290cf6fff33ab3849372c3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / planner_ai-0.6.0-py3-none-any.whl
| Download URL | planner_ai-0.6.0-py3-none-any.whl |
|---|---|
| Size | 63.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c656596fa7908b2d27894367c36f20043d6c03df30f54207a0b3f5b29e776f94
|
|
BLAKE2b-256 checksum How to use checksums |
a1010497bde4386bb57129a688f24f879789abe519011d6aa4d29909625e9544
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|