Objective
When a project needs to be modified, use a CSV file located in the project root directory to break the work into checkable steps; keep updating it as you make progress; once everything is complete, delete the CSV to avoid leaving a temporary checklist behind or committing it to the repository.
Trigger conditions
- Starting any task that will change the project's contents (adding/modifying/deleting files, adjusting configuration, fixing bugs, implementing features, etc.)
- The task has multiple independently verifiable small steps and requires explicit tracking of completion status
Workflow (CSV + update_plan dual-track sync)
0) Conditions for enabling update_plan
- When the task contains ≥2 independently verifiable steps , call
update_planto establish a plan and keep updating it during execution.
1) Break down the steps and establish a plan (one-to-one with the CSV)
- Break it into 3–12 verifiable steps (start with a verb, avoid being too long).
- Immediately call
update_planto establish the initial plan: the first step isin_progress, the rest arepending。 - Keep the text of every
stepin the plan exactly identical to theitemof the CSV(to facilitate syncing and auditing).
2) Create in the project root directory {任务名} TO DO list.csv
- Determine the "task name": preferably take it from the user's request as a short title; simplify if necessary (remove punctuation, truncate if too long).
- Compute the "project root directory": preferably use the Git repository root directory; for non-Git projects, use the current working directory as the root directory.
- Create the file in the project root directory:
{任务名} TO DO list.csv。
The CSV header is fixed as (first row):
id,item,status,done_at,notes
id: an integer starting from 1item: a single to-do item (consistent with the plan'sstep)status:TODO/IN_PROGRESS/DONEdone_at: completion time (ISO 8601, left blank if incomplete)notes: optional notes (file paths, verification methods, PR/commit, etc.)
3) State machine and mapping (core constraints)
- Only the following state transitions are allowed:
TODO→IN_PROGRESS→DONE(avoidTODOjumping directly toDONE)。 - plan mapping:
TODO→pending,IN_PROGRESS→in_progress,DONE→completed。 - At any moment, at most 1 row
IN_PROGRESS; as long as there are still incomplete items, try to keep exactly 1 rowIN_PROGRESS(aligned with the plan's uniquein_progress).
4) Sync while advancing (sync once each time an item is completed)
- After completing the current
IN_PROGRESSitem:- Update the CSV (recommended to use the script
advanceto automatically "complete the current item and start the next item") - Generate the plan payload from the CSV (
plan --normalize) - call
update_planto sync the plan with the CSV
- Update the CSV (recommended to use the script
5) Mid-course changes and pauses
- Adding steps: only "append", avoid reordering/renumbering; update both the CSV and the plan at the same time.
- Pause to wait for feedback: keep the CSV; keep the plan's current step as
in_progress, or append a "waiting for feedback" step and set it toin_progress。
6) Wrap-up and cleanup
- Confirm that all rows are
DONE, then delete the CSV file (the scriptcleanupwill refuse to delete when not all are DONE). - Call
update_planto mark all steps ascompleted, ensuring the plan within the conversation is closed-loop.
Optional automation script
Use scripts/todo_csv.py to automatically create/update/clean up the CSV (preferred to avoid manual editing errors).
Example commands:
- Create the checklist (by default the 1st item is IN_PROGRESS):
python3 ~/.codex/skills/todo-list-csv/scripts/todo_csv.py init --title "修复登录 bug" --item "复现问题" "加回归测试" "修复实现" "运行测试/构建" - Compute the path:
python3 ~/.codex/skills/todo-list-csv/scripts/todo_csv.py path --title "修复登录 bug" - Generate from the CSV
update_planpayload (recommended with--normalize):python3 ~/.codex/skills/todo-list-csv/scripts/todo_csv.py plan --file "{csv_path}" --normalize --explanation "同步自 TODO CSV" - Start the specified step:
python3 ~/.codex/skills/todo-list-csv/scripts/todo_csv.py start --file "{csv_path}" --id 2 - Advance one step (complete the current IN_PROGRESS and start the next TODO):
python3 ~/.codex/skills/todo-list-csv/scripts/todo_csv.py advance --file "{csv_path}" --notes "已通过单测" - View progress:
python3 ~/.codex/skills/todo-list-csv/scripts/todo_csv.py status --file "{csv_path}" --verbose - Clean up after everything is complete:
python3 ~/.codex/skills/todo-list-csv/scripts/todo_csv.py cleanup --file "{csv_path}"