cj-todo
Skill1 starsChanged 32 days agoMITView on GitHub
Quick, repo-scoped todo & plan tracker driven by the bundled `todo` script. Use when the user wants to jot down a task, mark work done, see what's open, or capture a larger piece of work as a plan, anything like "add a todo", "what's on my list", "mark that done", "/cj-todo", or "make a plan for X". Defaults to a one-line todo; only writes a plan file when the work is large or the user asks for one.
In this repository19 other files it gives its agents.
- AGENTS.mdAGENTS.md
- cj-abSkill
- cj-ambitionSkill
- cj-automateSkill
- cj-cloudflare-workerSkill
- cj-code-reviewSkill
- cj-dailySkill
- cj-meetingsSkill
- cj-notesSkill
- cj-nowSkill
- cj-owa-toolsSkill
- cj-thingsSkill
- cj-uxloopSkill
- cj-video-visionSkill
- cj-voice-dnaSkill
- repo-deepSkill
- repo-depsSkill
- repo-groomSkill
- repo-healthSkill
The file
We split this skill into the rules it gives an agent
5 rules. About 0 are common, 1 is distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 58
Default to a todo (todo add).
- Distinctive: line 64
When in doubt, add a todo.
- Very specific: line 74
Complete / remove: run todo to see numbers, then todo done <n> (or rm).
- Very specific: line 79
Do not hand-edit TODO.md / DONE.md for add/done/rm.
- Very specific: line 83
When the action is a plain list (no-arg invocation, or todo list): always print the full list verbatim in your text response, since that is …
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
cj-todo
Overview
The world's most lightweight repo-scoped todo app. A bundled bash script (todo.sh)
does all the mechanical CRUD against <repo-root>/.plans/; your job is to (1) call it
with the right command and (2) decide whether something is a quick todo or warrants a
plan. Stay terse; the point is speed.
Storage (per git repo) is filesystem-first: plans are plain files, so
hand-maintained .plans/ dirs work without conversion.
.plans/TODO.md: open one-line todos (- [ ]checkboxes).plans/DONE.md: completed todos, archived with a date.plans/<name>.md: one file per plan; the file is the unit of work.plans/done/: completed plans (files moved here)
todo lists every .plans/*.md file as a plan, whether the script created it
or someone dropped it in by hand. It never parses prose
bullets or numbered lists into todos, so a narrative TODO.md that just indexes
or orders plan files is left untouched.
The script
Invoke the bundled script. If todo is on PATH use it directly; otherwise call the
script by path (./todo.sh inside this skill folder, or wherever it's installed).
todo # list open todos & plans (default)
todo --all [--path <dir>] [--depth <n>]
# every repo's list under <dir> (default $PWD), <n> levels deep;
# grouped per repo, numbers are per repo (cd there to done/rm)
todo add "<text>" # add a todo
todo plan "<name>" # create a plan file (.plans/<slug>.md); prints the path
todo done <n> [n...] # complete #n (todo → DONE.md, plan file → .plans/done/)
todo rm <n> [n...] # delete #n (todo line, or plan file)
todo log # show completed todos & plans
todo where # print the .plans directory
todo -g <cmd> ... # same commands against the global store (~/brain/todos), not the repo
todo install # symlink the script as `todo` on PATH (~/.local/bin)Item numbers come straight from todo / todo list output. List first if you
need a number you do not already have.
Completing several at once: numbers are list positions, so they renumber after every
removal. To finish multiple items from one listing, pass them all to a single call
(todo done 2 3 4); they are resolved against one snapshot, so nothing drifts. Never fire
todo done <n> repeatedly off the same original listing; either batch them or re-list
between calls.
Todo vs. plan: the one judgment call
Default to a todo (todo add). Reach for a plan (todo plan) only when:
- the user explicitly says "plan", "make a plan", "write a plan", or similar, or
- the work is large/multi-step enough that it should be thought through before doing it (e.g. "rewrite the auth layer", "migrate to the new API") rather than a single action.
When in doubt, add a todo. Promoting later is cheaper than over-ceremony on a one-liner.
Workflow
- Add a todo:
todo add "<concise task>". Keep the text short and imperative. - Add a plan:
todo plan "<name>"creates.plans/<slug>.md; open the printed file and fill in the## Goal/## Steps/## Notessections with a real, actionable plan based on what the user described. Leave a useful skeleton, not lorem ipsum. (Completing a plan later moves the whole file into.plans/done/.) - Complete / remove: run
todoto see numbers, thentodo done <n>(orrm). - Review:
todofor open work,todo logfor finished work.
Guardrails
- Do not hand-edit
TODO.md/DONE.mdfor add/done/rm; use the script so numbering and archiving stay consistent. A plan's own.plans/<name>.mdis free to edit. todo rm <n>on a plan deletes the file;todo done <n>archives it to.plans/done/. Preferdoneunless the user wants it gone for good.- When the action is a plain list (no-arg invocation, or
todo list): always print the full list verbatim in your text response, since that is the output the user wants to see. - For all other actions (add, done, rm, plan): confirm in a line or two; do not restate the full list unless asked.
- The store is per-repo (resolved via
git rev-parse --show-toplevel, falling back to the current directory). If the user expects a list and it is empty, they may be in the wrong repo; say so rather than assuming.
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.

