agentleFS
damslethdamsleth/SKILLS/cj-todo/SKILL.md

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.

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
  1. Very specific:

    Default to a todo (todo add).

    line 58
  2. Distinctive:

    When in doubt, add a todo.

    line 64
  3. Very specific:

    Complete / remove: run todo to see numbers, then todo done <n> (or rm).

    line 74
  4. Very specific:

    Do not hand-edit TODO.md / DONE.md for add/done/rm.

    line 79
  5. Very specific:

    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 …

    line 83

≈ “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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

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

  1. Add a todo: todo add "<concise task>". Keep the text short and imperative.
  2. Add a plan: todo plan "<name>" creates .plans/<slug>.md; open the printed file and fill in the ## Goal / ## Steps / ## Notes sections 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/.)
  3. Complete / remove: run todo to see numbers, then todo done <n> (or rm).
  4. Review: todo for open work, todo log for finished work.

Guardrails

  • Do not hand-edit TODO.md / DONE.md for add/done/rm; use the script so numbering and archiving stay consistent. A plan's own .plans/<name>.md is free to edit.
  • todo rm <n> on a plan deletes the file; todo done <n> archives it to .plans/done/. Prefer done unless 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.

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.