codex_todo_tree
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., "@codex_todo_treePlan this release as a nested task tree, open the dashboard, and keep it updated."
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.
CodexToDoTree
Recursive task trees for Codex. Live progress in a browser, not a wall of chat updates.
中文文档 · Complete workflow rules · Workflow coverage · Security

A local-first MCP server, a live dashboard, and a reusable agent workflow. Plan major phases, break them into nested steps, adapt the plan as work evolves, and keep each conversation's progress separate.
What You Get
Recursive trees: up to 32 levels and 1,000 stages per work item, with expand/collapse, keyboard navigation, search, current execution path and smooth progress updates.
Multiple conversations and work items, isolated by exact conversation ID. In-progress items stay first; completed work collapses by default.
Honest acceptance gates: completed children do not silently complete their parent. Parents need their own verification evidence.
One local service for many browser tabs. Live SSE updates, atomic persistence, reconnection and automatic idle shutdown.
Optional, read-only native Codex project/archive sync. No message scraping, telemetry, API key or external CDN.
Existing
mcp-tasksMarkdown/JSON can be watched without maintaining two independent plans.
This is an independent community project, not an official OpenAI product. The dashboard currently uses Chinese UI labels; task content can use any language. MCP works in compatible local clients. A Codex sidebar needs that client's browser-opening tool; the MCP cannot inject native UI.
Related MCP server: Sequential MCP Server
Quick Start
Prerequisites: Node.js 22.13+ (24 LTS recommended) and a local Codex/MCP client. No administrator access required. Git is optional if you download the repository ZIP instead.
git clone https://github.com/weipeng-droid/CodexToDoTree.git
cd CodexToDoTree
npm ci
npm run setup -- --apply --codex-metadata
npm run doctorsetup --applyinstalls both the MCP configuration and the complete globalAGENTS.mdworkflow in your Codex home (CODEX_HOME, otherwise the default Codex profile). It preserves unrelated text/settings, creates local backups, and ensures sufficient instruction capacity.npm run setupwithout--applyis preview-only; preview is not installation.--codex-metadataexplicitly opts into read-only native project/archive sync, matching the full local workflow. Omit it if you do not want native metadata reads; task-label grouping still works, but native archive synchronization does not. The option stays enabled on subsequent upgrades; usesetup --apply --no-codex-metadatato deliberately disable it without editing a protected block.Require a passing
doctor, then restart/reload the MCP client and begin a new Codex run. Runcodex mcp listand look forcodex_todo_tree. Doctor proves installation consistency, not model obedience or UI capability.Start a new conversation and ask:
Use CodexToDoTree for this task. Read the real CODEX_THREAD_ID, create 4-8 main phases with nested substeps, open this conversation's task dashboard, and keep it updated until verification is complete.
The agent calls console_plan, console_open and console_update. If Codex exposes its browser panel tool, the workflow opens the page on the right. Otherwise open the returned URL in your normal browser. A fresh URL alone shows an empty conversation until a plan is registered.
The installed workflow delegates substantial implementation, assigns each parent only its direct children, requires independent review, and hands acceptance upward. A parent never self-accepts its delegated node. Implementation/review/acceptance are serial because the current model permits one executing leaf per board. See the complete protocol and Chinese handoff handbook. MCP initialization also supplies the same rule source, but does not silently install global files.
To inspect instructions without installing, use npm run setup -- --instructions. For a custom profile use node bin/cli.mjs setup --apply --codex-home /absolute/profile --codex-metadata, then node bin/cli.mjs doctor --codex-home /absolute/profile. These same commands work from an installed package with the codex-todo-tree binary. This repository provides source installation; it is not a claim the package has been published to the npm registry.
Codex's standard MCP configuration is documented in the official MCP guide. This project does not require an OpenAI API key.
Enable Native Project and Archive Sync
npm run setup -- --apply --codex-metadata
npm run doctorThe installer updates its existing managed configuration instead of adding a duplicate server. It sets CODEX_TODO_TREE_CODEX_METADATA="1". The service reads only registered conversations' ID, archive flag, title and project mapping from local Codex metadata every 3 seconds. Archived chats disappear; unarchiving restores the same tasks. Nothing is written to Codex's database. Read failures retain the last valid view and show a warning. Doctor reports this option's configuration, not proof that a particular native database version is supported.
This is an opt-in, version-dependent adapter, not an official stable API. Without it, task-supplied project labels provide grouping and native archives are not synchronized. Changing the option requires stopping this tool's existing service and reopening it; changing only the MCP process environment cannot reconfigure an already running shared service.
CLI Without MCP
From this repository, use a real thread ID from your host. The following PowerShell example runs inside Codex:
node bin/cli.mjs url --thread "$env:CODEX_THREAD_ID"
node bin/cli.mjs plan --board release --thread-title "Release" --title "Ship a release" --project "Example App" --steps "Inspect|Implement|Test|Deliver"
node bin/cli.mjs update --board release --step step-1 --status in_progress
node bin/cli.mjs update --board release --step step-1 --status done --evidence "Actual command and result, exit code 0"
node bin/cli.mjs add --board release --step api --parent step-2 --title "Implement the API"
node bin/cli.mjs listIn Bash, use --thread "$CODEX_THREAD_ID". Outside Codex, pass your own explicit integration's --thread consistently; do not reuse another chat's ID. Evidence in examples is a placeholder, not a real test claim. Use plan --file nested-plan.json for nested JSON stages. See the command reference.
How Progress Works
Project
Conversation (exact thread ID)
Work item (stable board ID)
Main phase
Subphase
Executing leafOnly one leaf per work item is explicitly in progress. Ancestors roll up automatically. Children done + parent not yet accepted = awaiting verification. Editing accepted children invalidates ancestor acceptance. Skipping needs a reason and preserves history. A new goal gets a new work item; debugging the same goal stays in its existing tree.
Work-item order: in progress, blocked, awaiting verification, todo, done, skipped. Within each group the latest update comes first. Progress measures accepted main phases, not estimated time remaining.
Privacy and Lifetime
Data stays in a per-user application-data directory, outside your clone/npm install. Windows uses the local application-data folder, macOS Application Support, and Linux XDG data home (or its standard fallback). CODEX_TODO_TREE_STATE overrides this for a deliberate whole-installation choice; do not set it separately per conversation. The older TASK_CONSOLE_STATE remains an alias.
The service binds only to 127.0.0.1, preferably port 47831, falling back if occupied. CLI/MCP writes require a local client key; the webpage is read-only. This is not a multi-user authorization boundary: another local program/user with access to the state directory can read it. Do not store secrets in task content.
An open live dashboard keeps the service alive. After the last page disconnects and no task read/write occurs for 60 seconds, the listener, timers, metadata worker and lock are released. Saved tasks remain. The next CLI/MCP call restarts the service. Do not stop it just because one conversation finishes.
No automatic startup hook runs merely because you click a historical chat. Auto-open is an agent action governed by the installed workflow rules. Cloud/remote executor localhost may not be reachable from your browser; use a same-machine local setup. Do not expose this unauthenticated read interface publicly.
Development
npm ci
npm run check
npm test
npm run demodemo uses synthetic data in an isolated ignored work/ directory, never your real tasks. Stop it with Ctrl+C, or close all viewers and let it idle out. Tests exercise real stdio MCP, CLI, HTTP/SSE, tree acceptance, persistence, archive restoration and shutdown. CI covers Windows, macOS and Linux with Node 22/24; a configured CI matrix is not a claim all remote runs already passed.
The frontend is plain HTML/CSS/JavaScript, with no build step. Asset snapshots use one startup fingerprint; after code changes, run node bin/cli.mjs stop, reopen with url, and refresh once. Other open pages reconnect.
Uninstall
Remove only the section between # CodexToDoTree BEGIN/END in config.toml, and between <!-- CodexToDoTree BEGIN/END --> in global AGENTS.md. Leave unrelated settings/rules and instruction capacity intact. Reload the client. Use node bin/cli.mjs stop only when other conversations no longer need the service. Removing source does not delete saved history; delete that separately only after backing it up.
Upgrade and Recovery
Update source, run
npm ci,npm run setup -- --applyandnpm run doctor, then reload. The installer replaces its one managed block, preserves a larger existing capacity and retained metadata opt-in, and does not duplicate rules. Stop/reopen the old shared broker once after changing code; do not stop it at ordinary task completion.Upgrading a manually configured 0.1 installation: first back up the profile. Remove only its old
codex_todo_treeserver/env section and the workflow text you manually added, preserving other content, then apply setup. An enabled legacytask_consolemust be deliberately migrated/disabled first. The installer refuses unmanaged conflicts rather than silently overwriting them or adding a second service.Nonempty
AGENTS.override.md, invalid TOML, edited managed rules/settings, symlinks, malformed markers or an active setup lock cause explicit failure. Both managed blocks have integrity hashes; custom fields/env inside the managed MCP block are not silently discarded. Preserve them and deliberately migrate before setup. Resolve the specific conflict; do not delete all settings/state. Projects can also override guidance and must be inspected separately.Explicit
[agents] enabled=falseor a zero subagent limit makes doctor fail the complete-workflow check without changing that preference. Static checks report browser/subagent host capability as unverified; unavailable tools require honest degradation, not invented review/open results.Backups named
AGENTS.md.codex-todo-tree-*.bakandconfig.toml.codex-todo-tree-*.bakstay in the user's profile. They may contain secrets: never upload them. Compare current edits before manually restoring a backup. Unrelated preferences added after backup must be preserved.Setup validates both proposed files before writing, uses a profile lock and snapshot checks, and attempts safe rollback on ordinary write failure. The lock coordinates this installer, not every editor; this is not an operating-system CAS or a power-loss-atomic two-file transaction. An interrupted process can leave its lock/partial managed installation. Confirm it stopped, inspect backups/current files, then recover and rerun doctor; never blindly remove another process's lock.
No MCP can guarantee identical behavior for every client, model, remote executor or policy. Missing subagent/browser capabilities must be reported, not fabricated. Hierarchical ownership is a workflow contract, not actor ACL enforcement; evidence strings do not prove commands ran. Persistent rules, runtime guidance, actual tests and independent review are complementary gates.
License
MIT. See LICENSE. Lucide icons are ISC-licensed and the MCP SDK is MIT-licensed; their packages retain their own notices. See THIRD_PARTY_NOTICES.md.
This server cannot be deployed
Maintenance
Related MCP Connectors
Shared task layer for AI agents: tasks, handoffs and decisions that persist across tools.
Task-first cross-agent collaboration for discussions, review, referrals, and reusable knowledge.
Task manager for AI agents. Orchestrate agents to achieve large goals in unified control plane.
Evidence-graded agent-work lanes, bid advice, live agent jobs and a hash-chained evidence ledger.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables comprehensive task management with groups, custom statuses, and task relationships, designed for AI assistants to manage tasks during conversations.17ISC
- AlicenseAqualityDmaintenanceEnables task management with dependency tracking and workflow orchestration, allowing sequential and parallel execution of tasks with automatic progression and retry logic.275 npmMIT
- AlicenseAqualityBmaintenanceEnables routing tasks to the right specialist agents, assembling the needed context from a layered catalog of agents, skills, knowledge, runbooks, topics, tools, and connectors, while remembering how a business wants work done.101 npmMIT

Cloak Agentofficial
AlicenseAqualityBmaintenanceEnables an agent to run whole browser tasks on live web pages from a plain-language goal — opening tabs, clicking, typing, scrolling, and returning the relevant page sections as markdown — with every step reported alongside its confidence. Tabs can be reused and closed across calls, so multi-step flows continue on the page the previous task ended on.25MIT