todo — Claude Code command: project tasks in todos.md
Keeps a project task list in todos.md without leaving the chat: add, complete, remove, list. Handy when a full tracker is overkill.
npx claude-code-templates@latest --command project-management/todoWhat todo does
The command reads and writes a todos.md file at the root of your project. It finds that root by looking for markers like .git or package.json, creates the file if it is missing, and keeps two sections: ## Active and ## Completed. Tasks get numbers, so you can refer to them later by index.
The first argument picks the action: add, complete, remove, undo, due, list, past due, next. A second argument on add sets a due date — "tomorrow", "next week", "4 days", or a specific date. Dates are stored as MM/DD/YYYY, and a time is only included when you ask for one. Active tasks with a due date sort ahead of those without.
Tool access is limited to Read, Write and Edit, and everything happens inside todos.md — this is not a tool for editing your code. One thing to watch: if your project root is not obvious from .git or package.json, the file may land somewhere you did not expect, so check the path after the first run.
What it helps with
- jot down a task without leaving the chat
- attach a due date to a task you already added
- mark a finished item complete and drop it from the active list
- see which tasks are past due and still open
- undo an accidental completion
Example prompts for the agent
- /user:todo add "Fix navigation bug"
- /user:todo complete 1
- /user:todo past due
How to install todo
1claude-code-templates
npx claude-code-templates@latest --command project-management/todo2Manually: put the files in place
.claude/commands/todo.mdCall it with /todo. For all projects use ~/.claude/commands/
Manually: put the files in place
~/.codex/prompts/todo.mdCall it with /prompts:todo. Codex marks this format deprecated in favour of skills
Manually: put the files in place
.github/prompts/todo.prompt.mdManually: put the files in place
.gemini/commands/todo.tomlGemini stores commands as TOML: the prompt text goes into the prompt field
Questions about todo
How do I install todo in Claude?
Run npx claude-code-templates@latest --command project-management/todo. The command file then lives at .claude/commands/todo.md.
What does the todo command do?
It manages a project task list in todos.md: adding items, completing them, removing them, and showing active or past-due tasks.
Where are the tasks stored?
In todos.md at the project root. The command locates the root via .git, package.json and similar markers, and creates the file when it does not exist.
Source text
todo.md · MIT
--- allowed-tools: Read, Write, Edit argument-hint: "[action] [task-description] | add | complete | remove | list" description: Manage project todos in todos.md file --- # Project Todo Manager Manage todos in a `todos.md` file at the root of your current project directory: **$ARGUMENTS** ## Usage Examples: - `/user:todo add "Fix navigation bug"` - `/user:todo add "Fix navigation bug" [date/time/"tomorrow"/"next week"]` an optional 2nd parameter to set a due date - `/user:todo complete 1` - `/user:todo remove 2` - `/user:todo list` - `/user:todo undo 1` ## Instructions: You are a todo manager for the current project. When this command is invoked: 1. **Determine the project root** by looking for common indicators (.git, package.json, etc.) 2. **Locate or create** `todos.md` in the project root 3. **Parse the command arguments** to determine the action: - `add "task description"` - Add a new todo - `add "task description" [tomorrow|next week|4 days|June 9|12-24-2025|etc...]` - Add a new todo with the provided due date - `due N [tomorrow|next week|4 days|June 9|12-24-2025|etc...]` - Mark todo N with the due date provided - `complete N` - Mark todo N as completed and move from the ##Active list to the ##Completed list - `remove N` - Remove todo N entirely - `undo N` - Mark completed todo N as incomplete - `list [N]` or no args - Show all (or N number of) todos in a user-friendly format, with each todo numbered for reference - `past due` - Show all of the tasks which are past due and still active - `next` - Shows the next active task in the list, this should respect Due dates, if there are any. If not, just show the first todo in the Active list ## Todo Format: Use this markdown format in todos.md: ```markdown # Project Todos ## Active - [ ] Task description here | Due: MM-DD-YYYY (conditionally include HH:MM AM/PM, if specified) - [ ] Another task ## Completed - [x] Finished task | Done: MM-DD-YYYY (conditionally include HH:MM AM/PM, if specified) - [x] Another completed task | Due: MM-DD-YYYY (conditionally include HH:MM AM/PM, if specified) | Done: MM-DD-YYYY (conditionally include HH:MM AM/PM, if specified) ``` ## Behavior: - Number todos when displaying (1, 2, 3...) - Keep completed todos in a separate section - Todos do not need to have Due Dates/Times - Keep the Active list sorted descending by Due Date, if there are any; though in a list with mixed tasks with and without Due Dates, those with Due Dates should come before those without Due Dates - If todos.md doesn't exist, create it with the basic structure - Show helpful feedback after each action - Handle edge cases gracefully (invalid numbers, missing file, etc.) - All provided dates/times should be saved/formatted in a standardized format of MM/DD/YYYY (or DD/MM/YYYY depending on locale), unless the user specifies a different format - Times should not be included in the due date format unless requested (`due N in 2 hours` should be MM/DD/YYYY @ [+ 2 hours from now]) Always be concise and helpful in your responses.
© davila7 · MIT · davila7/claude-code-templates