todo
TODO Scanner
Scan a codebase for incomplete work and maintain a living TODO.md grouped by feature clusters ready for /prd input. Do NOT implement anything — only inventory and organise.
Detect Workflow
- TODO.md does not exist → run Steps 1–4 (Initial Creation)
- TODO.md exists → run Steps 0–4 (Subsequent Update)
Step 0 — Find Completed Work (update only)
Parse Last updated: YYYY-MM-DD from existing TODO.md. Run git log --since="<timestamp>" --oneline, map commits to unchecked items, mark completed with [x] and commit hash. Never remove unchecked items.
Step 1 — Scan Codebase for Gaps
Search for each category and collect findings:
- Code comments:
TODO,FIXME,HACK,XXX,PLACEHOLDER - Mock data: Hardcoded arrays,
faker,seed,mockin non-test files - Placeholder components: Empty
<div>bodies,<!-- TODO -->, stub templates - Missing pages: Routes referencing nonexistent files
- Untested code: Source files with no corresponding test file
- Empty/stub files: Files under 5 lines, empty function bodies
- Design references: Mockups, wireframes in
docs/,designs/,assets/
Step 2 — Check PRDs
Read tasks/prd-*.md. Annotate groups with > PRD exists — don't duplicate already-spec'd features.
Step 3 — Group into Feature Clusters
Organise findings into logical feature groups. Each group name should be descriptive enough to feed directly into /prd.
Step 4 — Compute Progress & Write / Update TODO.md
Count total items (- [ ] + - [x]), completed (- [x]), and remaining. Compute % = done / total * 100.
Overall Progress bar: Render a 40-char bar using █ for filled and ░ for empty, e.g. [████░░░░░░] 25.0% 10 / 40.
Weekly Snapshot table: On initial creation, add a baseline row with Done=0, Delta=—, and today's date. On update, append a new row only if the date differs from the last row — set Delta to +N (items completed since last row). Never remove previous rows.
Write to project root. On update, preserve all unchecked items and update the timestamp.
# TODO
> Last updated: YYYY-MM-DD via /todo
---
## Overall Progress
\`\`\`
[███████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 17.0% 28 / 165
\`\`\`
---
## Weekly Snapshot
| Date | Done | Delta | Remaining | % Complete | Notes |
| ---------- | ---- | ----- | --------- | ---------- | ----------------------------- |
| 2026-02-24 | 0 | — | 165 | 0.0% | Baseline — TODO files created |
| 2026-02-25 | 28 | +28 | 137 | 17.0% | First working week |
---
## [Feature Group Name]
- [ ] Self-contained feature description ready for /prd input (app/components/Foo.vue:12)
- [x] Completed item (via commit abc1234)
## [Another Feature Group]
> PRD exists: `tasks/prd-feature-name.md`
- [ ] Sub-task not covered by existing PRD (src/pages/bar.vue:5)
Rules
- Idempotent — running twice produces the same result
- Additive only — never remove unchecked items on update
- No implementation — only inventory and organise, never write code
- PRD-aware — check
tasks/prd-*.mdand annotate groups accordingly - Always timestamp — update
Last updatedon every run - Source locations — include file:line for traceability
- Self-contained items — each
- [ ]must work as standalone/prdinput
Checklist
- All gap categories scanned;
tasks/prd-*.mdchecked - Items grouped by feature with source locations
- Each item is self-contained
/prdinput -
Last updatedtimestamp set; no unchecked items removed
More from ralphcrisostomo/nuxt-development-skills
ralph
Convert PRDs to prd.json format for the Ralph autonomous agent system. Use when you have an existing PRD and need to convert it to Ralph's JSON format. Triggers on: convert this prd, turn this into ralph format, create prd.json from this, ralph json.
52prd
Generate a Product Requirements Document (PRD) for a new feature. Use when planning a feature, starting a new project, or when asked to create a PRD. Triggers on: create a prd, write prd for, plan this feature, requirements for, spec out.
39optimise-claude
Use when auditing, trimming, or restructuring AI instruction files (CLAUDE.md, SKILL.md, AGENTS.md) to reduce context-window consumption. Trigger whenever CLAUDE.md is bloated or Claude ignores instructions, a SKILL.md exceeds 120 lines, skills share duplicated content, AGENTS.md has large inline blocks, or the user asks to optimize, slim down, or reduce token usage.
37nuxt-init
Use when scaffolding a new Nuxt 4 project with standard config files (prettier, eslint, gitignore, husky, vitest, tsconfig, sops) and bun scripts.
33nuxt-terraform
Scaffold Nuxt + AWS Terraform infrastructure. Use when adding GraphQL resolvers, Lambda functions, initializing a new project with AppSync, DynamoDB, Cognito, writing Terraform tests, or generating/reviewing Terraform code style. Triggers on: add graphql resolver, create lambda, scaffold terraform, init terraform, add appsync resolver, add mutation, add query, add terraform test, write tftest, terraform style.
32nuxt-env
Use when setting up SOPS + age encryption for environment variables. Checks dependencies, creates config, copies scripts, and adds package.json commands. Triggers on: setup sops, setup env encryption, add age encryption, env:pull, env:push.
29