todo
Skill1 starsChanged 3 months agoMITView on GitHub
Manage persistent todos/milestones for current work. Unlike Claude Code's built-in TodoWrite (which is session-only), these survive across sessions in .claude/todos.md. Create tasks with milestones, mark them done, see current focus. Use when a task is big enough to span multiple sessions, or when you need to remember "where was I?". Also activate on in-prose markers — "TODO:", "blocker:", "done:", "checkpoint" — which map to explicit todo-file operations.
37 other projects use a version of this.
Adopted by
Most recently taken up by
- thistleknot/skillstheir own version, first seen Nov 8, 2026
- Mattie/mattie_skillstheir own version, first seen Nov 8, 2026
- uwuclxdy/agenticattheir own version, first seen Nov 8, 2026
- PatrickSUDO/fadacai-portfoliotheir own version, first seen Nov 6, 2026
- rodeyseijkens/skillstheir own version, first seen Nov 6, 2026
- NazmusSayad/skillstheir own version, first seen Nov 1, 2026
Used with
Projects with it also use standup, update-docs and 9 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
AnthropicSkillstandup
Generate a standup update from recent activity. Use when preparing for daily standup, summarizing yesterday's commits and PRs and ticket moves, formatting work into yesterday/today/blockers, or structuring a few rough notes into a shareable update.
Also in 3 projects that use this
Hugging FaceSkillupdate-docs
Update documentation across the repo after API changes. Finds stale references in docs, examples, docstrings, and fixes them.
Also in 3 projects that use this
Hugging FaceSkillimplement
Make tests pass. Invoke after /write-tests produces failing tests.
Also in 5 projects that use this
Google CloudSkilltriage
Gather context on a change or bug and plan the implementation.
Also in 4 projects that use this
photon-groveSkillunslop
Detects and rewrites generic, overly polished, or AI-sounding prose while preserving meaning. Use when the user asks to "unslop", humanize, de-AI, tighten, or review whether writing sounds generated.
Also in 3 projects that use this
GoogleSkillgrill-me
A relentless interview to sharpen a plan or design.
Also in 5 projects that use this
Other versions37 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 37
- vladmandic/sdnext★ 7.4ksame name
- PatrickSUDO/fadacai-portfolio★ 145same name
- ronaknnathani/relay★ 43same name
- freemty/labmate★ 25same name
- ceptln/quota-burner★ 18same name
- thaitype/skills★ 13same name
- eranw2000/multi-phase-skills-framework★ 10same name
- rbrown101010/Rileys-Top-Skills★ 9same name
- uwuclxdy/agenticat★ 7same name
- fedemelo/agent-config★ 4same name
27 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository17 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- architectureSkill
- code-reviewSkill
- commandsSkill
- conventionsSkill
- debugSkill
- decisionSkill
- explainSkill
- isolateSkill
- issueSkill
- journeysSkill
- onboardSkill
- quick-workSkill
- safe-commitSkill
- safe-pushSkill
- scaffoldSkill
- workSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
31 rules. 0 are common, 18 are distinctive, and 13 are very specific to this project.
0
Common
Most of the 34 edited versions we read keep these.
18
Distinctive
This author's own choices. Worth a look.
13
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 11
If the optional session-status hook is installed (bin/install-hooks.sh), the focused task and its next milestone are pushed into context …
- Distinctive: line 26
If none exists yet, the user is creating their first task.
- Distinctive: line 28
If one exists, read it fully so you have context on all active tasks before doing anything.
- Very specific: line 45
If $ARGUMENTS doesn't match clearly, ask:
- Distinctive: line 58
Ask the user, one at a time:
- Distinctive: line 74
If user picks option 1: capture the list.
- Distinctive: line 75
If user picks option 2: propose 3-7 concrete milestones based on the task.
- Distinctive: line 84
Add Recharts dependency and base layout
- Very specific: line 87
Add empty/loading/error states
- Distinctive: line 88
Write tests for API and 1 representative chart
- Distinctive: line 94
If user skips, that's fine.
- Very specific: line 100
Default Y. If Y, mark this task as [FOCUSED] and unmark any other previously focused task.
- Distinctive: line 127
If the file is empty, first add a header:
- Very specific: line 136
When tasks are fully done, run \/todo archive\ to move them to the Archive section.
- Very specific: line 153
Update milestone N from - [ ] to - [x] and append (done: <today's date>) after the milestone text.
- Distinctive: line 155
Check if ALL milestones are now done:
- Very specific: line 156
If yes, ask: "Task '<title>' is now fully complete.
- Distinctive: line 157
If no, output: "Marked milestone <N> done.
- Very specific: line 159
If $ARGUMENTS doesn't include a number, ask: *"Which milestone?
- Distinctive: line 163
Read the file. Output a clean summary:
- Distinctive: line 181
If notes exist for the focused task, append:
- Distinctive: line 209
If confirmed, remove from file entirely.
- Distinctive: line 213
If during the conversation the user articulates a decision, blocker, or learning relevant to the focused task, ask:
- Distinctive: line 218
If yes, append to the "Notes" section of that task with today's date.
- Very specific: line 241
When /work is invoked and produces a plan with 3+ steps in Phase 3, suggest at the end:
- Very specific: line 245
If user accepts, invoke /todo new flow with the work's spec title and the plan steps as milestones.
- Very specific: line 251
Don't auto-mark milestones as done just because the user mentions them in passing.
- Distinctive: line 252
Don't write the file without showing the user what's being saved.
- Very specific: line 253
Don't replace Claude Code's built-in TodoWrite.
- Distinctive: line 254
Don't keep all archived tasks forever.
- Very specific: line 255
Don't add Co-Authored-By: Claude to the file.
“Common” is measured: kept by at least 6 in 10 of the 34 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
/todo — Persistent task tracking with milestones
You are Claude. The user wants to manage tasks (with multiple milestones each) that survive across Claude Code sessions.
This complements — does NOT replace — the built-in TodoWrite tool. Use TodoWrite for in-session tracking (the in-the-moment task list you maintain while working). Use /todo to PERSIST those todos to a file so they survive when the session ends.
If the optional session-status hook is installed (bin/install-hooks.sh), the focused task and its next milestone are pushed into context automatically at session start — /todo list remains the on-demand view.
Argument (optional): $ARGUMENTS may be an action keyword. If empty, show the menu.
Phase 1 — Read current state
First, always load the existing todos file (or create if missing):
# Check for existing todos file
test -f .claude/todos.md && echo "found .claude/todos.md"
test -f .claude/todos.local.md && echo "found .claude/todos.local.md"
test -f TODOS.md && echo "found TODOS.md"If none exists yet, the user is creating their first task. Skip to "Action: new" below.
If one exists, read it fully so you have context on all active tasks before doing anything.
Workspace roots: if the current directory is not a git repo but 2+ direct children are git repos (a parent folder holding multiple projects), the todos file lives HERE — at the workspace root — so one file tracks work across all the repos. Tag each task with the repo it belongs to (see the format below). Everything else works the same.
Phase 2 — Determine intent
Parse $ARGUMENTS to determine action:
| Argument starts with | Action |
new, add, create | Create a new task with milestones |
done, complete, check | Mark a milestone as completed |
list, status, show, empty | Show current state of all tasks |
focus, switch | Switch active task (when multiple are in-progress) |
archive, clean | Move fully-completed tasks to archive section |
delete, remove, cancel | Remove a task entirely (rare — usually archive is better) |
If $ARGUMENTS doesn't match clearly, ask:
"What do you want to do?
- new — create a new task with milestones
- done
<N>— mark milestone N done on focused task- list — show all current tasks and their progress
- focus
<task>— switch which task is the focused one- archive — move fully-completed tasks to archive
Or just describe what you need."
Action: new
Ask the user, one at a time:
Q1 — Task title (one line)
"What's the task in one line? (e.g., 'Build user dashboard with charts')"
Save as the task title. Generate a kebab-case slug for internal use.
Q2 — Break into milestones
"How do you want to break this into milestones? Two options:
- I tell you the milestones (you list them, comma-separated or one per line)
- You propose milestones (I'll suggest 3-7 based on the task description; you accept or revise)
Which?"
If user picks option 1: capture the list. If user picks option 2: propose 3-7 concrete milestones based on the task. Each should be:
- Specific (verb + object: "Define API contract" not "Plan API")
- Actionable (someone could start working on it without further definition)
- Verifiable (you can tell when it's done)
- Independent enough to ship/test in isolation (when possible)
Example for "Build user dashboard with charts":
- Spec the dashboard data model (what charts, what data sources, what filters)
- Build API endpoint(s) for chart data
- Add Recharts dependency and base layout
- Implement the 3 chart components
- Wire filtering UI to API
- Add empty/loading/error states
- Write tests for API and 1 representative chart
Q3 — Estimated effort (optional)
"Total estimated effort? (Optional. Helps calibrate later. e.g., 'half a day', '2 sessions', '1 week')"
If user skips, that's fine. Skip it.
Q4 — Active status
"Is this the focused task right now (the one you're actively working on)? Y/n"
Default Y. If Y, mark this task as [FOCUSED] and unmark any other previously focused task.
Save the new task
Append to .claude/todos.md (default), or write the file if it doesn't exist. Format:
In a workspace root, extend the metadata line with the repo tag: *Started: <date> | Estimated effort: <effort> | Repo: <child-repo-dir>*
```markdown
<task-slug> — <Task title> [FOCUSED]
Started: <YYYY-MM-DD> | Estimated effort: <effort or "TBD">
Milestones
- 1. <Milestone 1>
- 2. <Milestone 2>
- 3. <Milestone 3> ...
Notes
(empty — populated as work progresses, with decisions made, blockers hit, etc.)
```
If the file is empty, first add a header:
```markdown
Tasks
Personal task tracking. Each task has milestones, optional notes, and a focus marker.
[FOCUSED] marks the active task (only one at a time, by convention).
When tasks are fully done, run `/todo archive` to move them to the Archive section.
```
After saving, output:
"Task created: '
<title>'.<N>milestones.<Path>updated.When you make progress, run
/todo done <N>to mark milestones complete. When the session ends and you return tomorrow, run/todo listto remember where you were."
Action: done <N>
Identify the focused task from the file (the one marked [FOCUSED]).
Update milestone N from - [ ] to - [x] and append (done: <today's date>) after the milestone text.
Check if ALL milestones are now done:
- If yes, ask: "Task '
<title>' is now fully complete. Run/todo archiveto move it to the archive section?" - If no, output: "Marked milestone
<N>done.<X>/<Y>milestones complete on '<title>'."
If $ARGUMENTS doesn't include a number, ask: "Which milestone? (number from the focused task)". Show the current focused task's milestones so the user can pick.
Action: list
Read the file. Output a clean summary:
ACTIVE TASKS
[FOCUSED] honorarios-prep — Study honorarios-cl for Carvuk interview
Progress: 3/5 milestones complete (60%)
Started 2026-06-18, focused since 2026-06-19
Latest milestone done: "Read 5 critical files" (2026-06-19)
Next: Fill decisions-log.md
other-task — Build user dashboard with charts
Progress: 1/7 milestones (14%)
Started 2026-06-15
ARCHIVE (5 tasks, last archived 2026-06-10)If notes exist for the focused task, append:
Notes on focused task:
- <recent note 1>
- <recent note 2>Action: focus <task>
Find the task whose slug matches $ARGUMENTS (after "focus "). Mark it [FOCUSED], remove the marker from any other task.
Output:
"Focused task is now '
<title>'.<N>/<M>milestones complete. Next: '<first unchecked milestone>'."
Action: archive
Find all tasks where 100% of milestones are checked. Move them to the Archive section (create if missing). Add archive date.
Output:
"Archived
<N>completed tasks.<M>still active."
Action: delete (rare)
Confirm with user before deleting:
"Delete '
<title>' completely? Usually you wantarchiveinstead — that preserves history. Confirm with 'yes delete' or cancel."
If confirmed, remove from file entirely.
Adding notes to a task
If during the conversation the user articulates a decision, blocker, or learning relevant to the focused task, ask:
"Want me to add a note to the focused task? Note: <quote the user's words>"
If yes, append to the "Notes" section of that task with today's date.
Notes are gold for the "where was I?" moment after a long break.
In-prose markers (push vocabulary)
The user can drive the todos file without invoking /todo explicitly, by writing markers mid-conversation. These are EXPLICIT instructions — honor them when noticed, no extra confirmation needed:
| Marker | Operation |
TODO: <text> | Append as a new unchecked milestone on the focused task (or as a standalone task if none is focused) |
blocker: <text> | Append to the focused task's Notes with today's date, prefixed Blocker: |
done: <text> | Mark the milestone matching <text> as done. If no milestone matches unambiguously, ask which one |
checkpoint | Flush now: reconcile the current in-session TodoWrite state into the todos file |
Two rules keep this safe:
- A marker is a line the user WROTE, not a topic they mentioned. "we should handle the blocker eventually" is conversation;
blocker: pg18 won't boot with the compose volumeis an instruction. done:requires an unambiguous match against an existing milestone. When in doubt, ask — never guess-complete.
"No extra confirmation" means don't ask BEFORE applying; it doesn't suspend transparency. Apply the marker, then show the resulting change in one line (e.g., "todos.md: milestone 4 marked done"). This is the marker-flow exception to "don't write the file without showing the user what's being saved" below — the marker itself was the user showing you.
Composition with /work
When /work is invoked and produces a plan with 3+ steps in Phase 3, suggest at the end:
"This plan has
<N>steps. Want to persist it as a/todotask so it survives the session?"
If user accepts, invoke /todo new flow with the work's spec title and the plan steps as milestones.
This is the bridge: /work for the structured spec, /todo for the persistent execution tracker.
What NOT to do
- Don't auto-mark milestones as done just because the user mentions them in passing. Wait for explicit
/todo done <N>or an explicitdone: <text>marker. - Don't write the file without showing the user what's being saved.
- Don't replace Claude Code's built-in TodoWrite. They serve different scopes (TodoWrite = in-session,
/todo= cross-session). - Don't keep all archived tasks forever. Suggest cleanup periodically: "Archive section has 50 tasks. Trim to last 10?"
- Don't add
Co-Authored-By: Claudeto the file.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

