From sjh-skills
Picks the next executable task from project-root TODO.md by priority and dependency, marks it in-progress, and executes it. Uses a structured task format with priority, ID, and dep fields.
How this skill is triggered — by the user, by Claude, or both
Slash command
/sjh-skills:todo-workerThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Pick the next executable task from project-root `TODO.md` by priority + dependency, atomically mark it `[~]` (in-progress), then start executing it.
Pick the next executable task from project-root TODO.md by priority + dependency, atomically mark it [~] (in-progress), then start executing it.
The skill assumes this canonical task-line format:
- `[STATE]` [PRIORITY] [ID] (dep: ID1,ID2) Title text
Where:
| Field | Values | Example |
|---|---|---|
STATE | (todo), ~ (in-progress), x (done), ! (blocked) | [ ] |
PRIORITY | P0 (must) / P1 (important) / P2 (optional) | [P0] |
ID | T + digits, project-unique | [T01] |
dep: | comma-separated IDs, omitted if no deps | (dep: T02,T03) |
Task-line regex:
^- `\[(.)\]` \[(P\d)\] \[(T\d+)\](?:\s*\(dep:\s*([^)]+)\))?\s*(.+)
A project that doesn't already follow this format should adopt it before using the skill (or run a migration). Status markers alone are not enough — dependency-aware picking needs the full schema.
| Marker | Meaning |
|---|---|
[ ] | Pending |
[~] | In progress (claimed by a worker) |
[x] | Done |
[!] | Blocked (needs human) |
Read project-root TODO.md. Parse every task line. Extract state, priority, id, deps[], title.
Filter and sort:
state == "[ ]"dep: IDs resolve to a task with state == "[x]"P0 < P1 < P2), then by numeric ID ascendingIf nothing qualifies (everything done / blocked by deps / [!]), report to user and stop.
Claim before confirming. Rewrite the matched line from [ ] to [~] and write TODO.md back. This shrinks the race window with other sessions to a single file write.
Concise format:
🎯 Next task: [T01] [P0] <title>
Dependencies: none
Unblocks: T03, T04, T13
Confirm start? (y / n / skip)
y → proceed to step 5 (already claimed)skip → revert to [ ], loop back to step 2n → revert to [ ], stop entirelyRead the title and figure out what to do. Titles in a well-maintained TODO usually say enough:
.claude/todo-worker-config.md), read itSuccess:
- `[x]` [P0] [T01] <title>
> done YYYY-MM-DD: <one-line outcome / artifact pointer>
Blocked / failed:
- `[!]` [P0] [T01] <title>
> blocked YYYY-MM-DD: <reason + what unblocks it>
Only add a single > done <date>: or > blocked <date>: continuation line. Don't bloat the task line itself with retrospective spec.
TODO.md is the single source of truth. No lock files.[~], skip it (another session has it) and continue scanning.The skill body stays generic. Per-project conventions live in the project, not in this skill:
.claude/todo-worker-config.md (optional, project-defined)YYYY-MM-DD)If the project violates the format contract above, fix the project — don't fork the skill.
npx claudepluginhub jiahao-shao1/sjh-skills --plugin sjh-skillsMarks tasks ongoing in TASKS.md and begins execution. Triggers on 'start', 'work on', task slugs like #fix-auth, or /starting-task.
Creates and manages structured Markdown todos for code reviews, technical debt, work items, and findings in .context/compound-engineering/todos/, handling lifecycle from pending to complete.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.