Unified task execution protocol for Codex-only work. Use for 3+ ordered file-changing steps, task tracking, autonomous execution, or long-running work that needs recoverable artifacts.
Taskmaster is the default execution protocol for multi-step Codex work. v5 keeps the existing Debug-First core while expanding the skill into three task shapes:
spawn_agents_on_csvDONE without explicit validation.PROGRESS.md, EPIC.md, or batch output files, not in the chat.task_complete output, and earlier final answers are context only.SPEC.md, PROGRESS.md, EPIC.md, BATCH.md, and human-readable CSV cell values must follow the user's language.YYYYMMDD-HHMMSS-<slug>.Asia/Shanghai unless the user explicitly requests another timezone.completed_at, PROGRESS.md dates, and other task timestamps; include an explicit timezone label such as CST or +08:00 when writing human-readable times.| Shape | Use when | Truth artifacts | Example |
|---|---|---|---|
| Single Task | One deliverable with shared context | TODO.csv or SPEC.md + TODO.csv + PROGRESS.md |
修复一个 OAuth 回调问题 |
| Epic Task | Multiple deliverables, modules, or dependency chains | EPIC.md + SUBTASKS.csv + PROGRESS.md |
同时交付账单看板的 API、UI 和文档 |
| Batch Task | Same instruction template across independent rows | TODO.csv + batch/BATCH.md + workers-input.csv + workers-output.csv |
审计 80 个 Markdown 文件的 frontmatter |
TODO.csv starts carrying phases, subprojects, or independent deliverables.single-compact, single-full, or batch child tasks.Single Task preserves backward compatibility with the old LITE/FULL behavior by supporting two execution profiles.
Use Compact Single when the task is short, linear, and does not need recovery logs or cached research artifacts.
TODO.csv onlyTODO | IN_PROGRESS | DONECompact Single example:
id,task,status,completed_at,notes
1,定位根因,IN_PROGRESS,,
2,实现修复,TODO,,
3,执行验证,TODO,,
Use Full Single for all code changes, long-running tasks, or any work that must survive a context reset. This is the default single-task path.
.codex-tasks/<task-name>/SPEC.md, TODO.csv, PROGRESS.md, raw/TODO | IN_PROGRESS | DONE | FAILEDFull Single directory example:
.codex-tasks/20260313-101530-auth-fix/
├── SPEC.md
├── TODO.csv
├── PROGRESS.md
└── raw/
TODO.csv before every new step.TODO.csv leaf-level only. Do not store phases, child projects, or batch rows there.echo SKIP only when validation cannot be automated, and record why.Epic Task is the parent coordination shape for large work that spans multiple deliverables or dependency chains.
.codex-tasks/<epic-name>/EPIC.md.codex-tasks/<epic-name>/SUBTASKS.csv.codex-tasks/<epic-name>/PROGRESS.md.codex-tasks/<epic-name>/tasks/<child-task>/...TODO | IN_PROGRESS | DONE | FAILEDEpic directory example:
.codex-tasks/20260313-103000-billing-epic/
├── EPIC.md
├── SUBTASKS.csv
├── PROGRESS.md
└── tasks/
├── 20260313-103500-api/
├── 20260313-104200-frontend/
└── 20260313-104800-docs/
Epic workflow:
EPIC.md.SUBTASKS.csv with task_type, dependencies, and task_dir.depends_on: use ; to list multiple dependency IDs (e.g., 1;2). Empty means no dependency.SUBTASKS.csv and parent PROGRESS.md.DONE and the final validation passes.Use Epic instead of a single TODO.csv when one task file starts reading like
project management instead of execution.
Batch Task is for homogeneous row-level work that should be executed through
spawn_agents_on_csv. It can be a standalone task or a child inside an Epic.
.codex-tasks/<task-name>/SPEC.md.codex-tasks/<task-name>/TODO.csv for 3-5 high-level steps.codex-tasks/<task-name>/PROGRESS.md.codex-tasks/<task-name>/batch/BATCH.md.codex-tasks/<task-name>/batch/workers-input.csv.codex-tasks/<task-name>/batch/workers-output.csv.codex-tasks/<task-name>/raw/Batch directory example:
.codex-tasks/20260313-111500-doc-audit/
├── SPEC.md
├── TODO.csv
├── PROGRESS.md
├── batch/
│ ├── BATCH.md
│ ├── workers-input.csv
│ └── workers-output.csv
└── raw/
Only use Batch Task when all of the following are true:
output_schema.TODO.csv step that is truly row-level and homogeneous.batch/BATCH.md and define:id_columnoutput_schemamax_workersmax_runtime_secondsoutput_csv_pathworkers-input.csv from real artifacts, not from plan steps.spawn_agents_on_csv with explicit id_column, output_schema, max_workers, max_runtime_seconds, and output_csv_path.workers-output.csv. Failed rows remain visible and may be retried with a filtered input CSV.PROGRESS.md and only then mark the parent step DONE.Example Batch step sequence:
id,task,status,acceptance_criteria,validation_command,completed_at,retry_count,notes
1,构建 workers-input.csv,IN_PROGRESS,batch/workers-input.csv exists,test -f batch/workers-input.csv,,0,
2,运行 spawn_agents_on_csv,TODO,batch/workers-output.csv exists,test -f batch/workers-output.csv,,0,
3,合并行结果,TODO,失败行已处理且摘要已写入,test -f PROGRESS.md,,0,
TODO.csv for step planningSUBTASKS.csv for child-task stateworkers-output.csv for row resultsupdate_plan Mirror Protocolupdate_plan is a required mirror of the current layer truth file, not a
separate planning source.
TODO.csvSUBTASKS.csvTODO.csvworkers-output.csv into update_plan; batch row state stays on disk and in PROGRESS.md.IN_PROGRESS, then immediately sync update_plan.python3 codex/taskmaster/scripts/taskmaster_plan.py plan --file <TODO.csv|SUBTASKS.csv> --normalize --explanation "<同步说明>".update_plan with the generated JSON payload in the same turn.update_plan from the new current-layer truth file before continuing execution.DONE, then do one final update_plan sync with every step marked completed.TODO -> pendingIN_PROGRESS -> in_progressDONE -> completedFAILED -> in_progressFAILED must stay visible. The generated explanation must include the failure reason; do not silently downgrade a failed row to TODO.IN_PROGRESS or FAILED.FAILED row exists, no other row in the same layer may remain active.--normalize only for safe current-layer fixes: promoting the first TODO when there is no active row, or collapsing multiple IN_PROGRESS rows down to one.When complexity outgrows the current shape, promote in-place:
.codex-tasks/<task-name>/EPIC.md from the existing SPEC.md goal.TODO.csv rows into child task entries in SUBTASKS.csv.SPEC.md, TODO.csv, PROGRESS.md into tasks/<original-task>/ as the first child.PROGRESS.md.TODO.csv or SUBTASKS.csv row that is actually N homogeneous items.batch/ directory with BATCH.md and workers-input.csv.IN_PROGRESS until the batch merge completes.PROGRESS.md.update_plan from the active current-layer truth file after every status change.raw/ for Full, Epic, and Batch shapes.FAILED row, treat it as the active unresolved item until it is retried, repaired, or explicitly rewritten in the truth file.Use the smallest artifact set that fully restores state:
TODO.csv, resume from the first non-DONE row.SPEC.md, TODO.csv, then the PROGRESS.md recovery block.EPIC.md, SUBTASKS.csv, parent PROGRESS.md, then the current child task directory.SPEC.md, TODO.csv, batch/BATCH.md, batch/workers-output.csv, then the PROGRESS.md recovery block.
Recovery restores task state, not user intent; after recovery, re-anchor on the newest user turn before answering.Every recovery message must include:
任务: goal形态: single-compact | single-full | epic | batch进度: X/Y当前: current step, child task, or failed row set文件: active truth artifact path下一步: exact next actionEvery status update must include:
任务: one-line goal形态: current task shape进度: X/Y steps or rows complete当前: active step, child task, or batch stage验证: latest validation command and result文件: active task directory or truth artifact