taskman
Skill2 starsChanged 3 months agoMITView on GitHub
Drive the taskman CLI over a JSONL plan ledger (default .taskman/plans/, configurable via .taskmanrc) — create plans and initiatives, revise plans, track task status, and reconcile drift. Load when running taskman commands (create-plan, create-initiative, revise-plan, create-handoff, status, list, update-task, add-task, reconcile, close, root), tracking plan/task progress across sessions or harnesses, or inspecting a plan ledger directory. Covers the status-is-a-projection model, stateless plan resolution, ledger-root discovery, and reconcile semantics.
- Installs packages
In this repository16 other files it gives its agents.
- _global/AGENTS.mdAGENTS.md
- adhd-modeSkill
- browserSkill
- code-reviewerSkill
- commitSkill
- context7Skill
- datadogSkill
- discordSkill
- firestoreSkill
- handoffSkill
- linear-cliSkill
- planworkSkill
- slackSkill
- workflowsSkill
- write-an-adrSkill
- write-prSkill
The file
We split this skill into the rules it gives an agent
4 rules. About 0 are common, 0 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
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 30
Run taskman root --json ({ plans_root, source, absolute }) before assuming any ledger path.
- Very specific: line 60
Use --depends-on a,b on create-plan for plan-level ordering.
- Very specific: line 68
Every content field is optional — omitted title/handoff/tasks are preserved.
- Very specific: line 72
Every command prints human text by default and accepts --json:
≈ “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
taskman
taskman manages plan/task state on disk under a plans root (default .taskman/plans/) so planning agents keep durable progress across sessions and harnesses. Install: npm i -g @dreki-gg/taskman or prefix commands with npx @dreki-gg/taskman.
The command and flag inventory is not reproduced here — it lives in --help, which is always current for the installed version:
taskman --help # all commands
taskman <command> --help # flags + arguments for one commandThis skill teaches what --help cannot: the data contract and the three invariants that decide whether a command does what you expect. For the planning/execution methodology (when to plan, verification gates, execution discipline), load the planwork skill — this one is only the CLI's contract.
The ledger
Everything is plain JSONL/Markdown under the plans root — .taskman/plans/ in the current directory by default:
<root>/plans.jsonl— plan registry<root>/initiatives.jsonl— initiative registry (initiatives group plans)<root>/<plan>/tasks.jsonl— one plan's tasks (first line is metadata)<root>/<plan>/HANDOFF.md,<root>/<initiative>/INITIATIVE.md— prose
Discovering the root
Run taskman root --json ({ plans_root, source, absolute }) before assuming any ledger path. A .taskmanrc JSON file in the working directory relocates the ledger: {"plans-root": "some/dir"} means some/dir/plans.jsonl — the value IS the ledger folder. Resolution is cwd-only: no directory walk-up, no env var.
Invariants (read before acting)
- Status is a projection of task state, not a manual flag. A plan becomes
donewhen its active tasks are all resolved and no follow-ups remain; an initiative becomesdonewhen every member plan is terminal.update-taskre-derives the registry automatically. - Plan resolution is stateless. A command targets a plan via
--plan <name>(any directory prefix is stripped, so a full ledger path works too), else the single in-progress plan. Ambiguous or missing → non-zero exit listing the candidates. - Manual terminal statuses are never auto-reverted.
reconcileonly movesin-progress ⇄ done; it never resurrects asuperseded/abandonedplan or regresses a finished one.
Core patterns
Execution loop
taskman status # active plan + task ids/statuses
taskman update-task t-003 done --plan my-plan --notes "what was done"
taskman add-task "handle empty input" --reason "found gap while implementing"
taskman reconcile --apply # repair safe (in-progress→done) driftCreating initiatives and plans
The CLI creates the same durable artifacts as any other ledger writer, so a plan or initiative created here is indistinguishable from one created elsewhere. Handoff/overview/task payloads accept an inline value, a --*-file <path>, or piped stdin (-).
taskman create-initiative --name auth-overhaul --title "Auth overhaul" --overview-file -
taskman create-plan --name add-login --title "Add login" --initiative auth-overhaul \
--handoff-file HANDOFF.md --tasks '[{"description":"do it"}]' # tasks get t-NNN ids
taskman create-handoff --plan add-login --file HANDOFF.md # write/replace proseUse --depends-on a,b on create-plan for plan-level ordering. Task creation here is plan setup — distinct from add-task, which records a deferred follow-up (see Common mistakes).
Revising a plan in place
taskman revise-plan --plan add-login --title "New title" --tasks-file tasks.jsonEvery content field is optional — omitted title/handoff/tasks are preserved. When --tasks is passed, the new array fully replaces the task set, but status and notes are preserved for any task whose id is unchanged. --initiative / --depends-on re-link when passed.
Machine-readable output
Every command prints human text by default and accepts --json:
taskman status --json # { active, plan_name, title, total, counts, task_ids }
taskman list --json # array of plan itemsCommon mistakes
HIGH — Setting plan status by hand to mark progress
taskman close done on a plan with open tasks will be re-opened the moment another task write reconciles the registry. close is for superseded/abandoned. For normal completion, resolve the tasks — done is derived.
HIGH — Assuming a bare command finds any plan
With no --plan, resolution only succeeds when exactly one plan is in-progress. A just-completed plan is done, so it drops out of resolution and a bare command exits non-zero — pass --plan explicitly, especially on writes.
MEDIUM — Treating reconcile as a force-sync in both directions
reconcile --apply only performs the safe upgrade (in-progress → done). A done plan with unfinished tasks is reported as downgrade drift, never auto-fixed — resolve it by marking the tasks, not by forcing status.
MEDIUM — Expecting add-task to queue active work
add-task records a deferred, discovered follow-up for later triage — not an active to-do. It does not become pending automatically, and it keeps the plan non-finalizable until resolved.
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.

