task-roundup
Collects every open action item you own from across the vault (meetings, decisions, daily notes, people 1-1s, braindumps) into a single TODO.md at the vault root, and keeps checkboxes synced both ways
SKILL.md.claude/skills/task-roundup/SKILL.md
GitHubSkill: Task Roundup
The missing piece of the system: actions are born scattered across notes (meeting
action items, decision execution plans, daily follow-ups, 1-1 follow-ups, braindump
next-steps). This skill consolidates the ones you own into a single TODO.md at
the vault root and keeps the checkboxes in sync both ways.
Core principle
The source notes are the source of truth. TODO.md is a generated, reconcilable
view. You never lose context: every consolidated line links back to the exact line
it came from. The link that makes two-way sync reliable is a stable block-ID on
each action line.
When to activate
- The user says: "task roundup", "my todo", "todo list", "what do I have to do", "consolidate my actions", "sync tasks", "what's on my plate".
- As a phase invoked by
daily-brief(collect new actions from the day + reconcile). - After a
meeting-ingestorchallenge-decisionthat produced new action items, if the user wants the TODO refreshed.
Do NOT activate when:
- The user is capturing a single new task into a note → that's
braindumpor a direct edit. - The user wants a plan for one project only → answer directly from that project note.
Preflight
- Read
_CLAUDE.md(rules, the task-line convention, append-only rules). - Read
00-inbox/MY-PROFILE.md(who "me" is, name variants, owner aliases). - Get the real timestamp (needed to bucket by due date and to stamp completions).
- Locate
TODO.mdat the vault root (create it from the template below if missing).
Concepts
Action line convention
An action line, anywhere in the vault, looks like:
- [ ] <action text> — owner: me — due: 2026-05-25 — #from/meeting ^t-ab12cd
- [ ]/- [x]— open / done checkbox.owner:—me(or your name/alias from MY-PROFILE) = yours; another[[02-people/...]]= someone else's; missing = treat as yours if it sits in a note you own.due:—YYYY-MM-DDor absent.#from/<source>— origin tag:meeting | decision | daily | 1-1 | braindump | email | chat.^t-xxxxxx— the block-ID anchor:^t-+ 6 lowercase alphanumerics. Assigned once, never changed, never reused. This is what links the source line to itsTODO.mdentry.
Ownership: "my actions" vs "waiting on others"
- Mine → goes in the main buckets of
TODO.md. - Owner is someone else AND you're blocked / awaiting it → goes under
## ⏳ Waiting on others(tracked, but separate — it's not your action, it's a follow-up). - Owner is someone else and it doesn't block you → ignore.
Where actions live
Scan these for checkboxes (only - [ ] / - [x] lines count as actions):
04-meetings/→## Action items05-decisions/→## Execution plan01-daily/→## Pending follow-ups02-people/→ checkbox- [ ] Follow-up:lines in timeline entries /## Open threads(a plain- Follow-up:bullet without a checkbox is FYI-only and is not collected)03-projects/→ any action line you own (e.g. in## Timelineor next steps)00-inbox/→ braindump## Suggested follow-up
Process
Step 1 — Collect
Scan the locations above. For each - [ ] / - [x] line, determine ownership. Keep
yours and "waiting on" items; drop others'.
Step 2 — Assign block-IDs (additive, safe)
For every kept action line without a ^t- anchor, append one: … ^t-ab12cd.
- This is an in-place line edit — additive, and it does not trip the pre-commit hook
(it removes no dated timeline header and no
(auto-logged)/(Backfilled)marker). - Generate IDs randomly; verify uniqueness across the vault before writing.
- Never modify or remove an existing
^t-anchor. - Never assign a new anchor to a mirror line — a line that already references an
anchor via a wikilink (
[[…#^t-…]]), e.g. the entries daily-brief mirrors into the daily## Pending follow-ups. Those are views of an existing task: reconcile through the referenced anchor; creating a second anchor would duplicate the task in TODO.md.
Step 3 — Build / refresh TODO.md
Regenerate the body of TODO.md (vault root) from the collected actions, grouped by
due date relative to today. Each line links back via the anchor:
- [ ] <action text> — [[<source-note-path>#^t-ab12cd]] — due 2026-05-25 — #from/meeting
Do not invent or rewrite action text in TODO.md — mirror the source. The source is canonical.
Step 4 — Reconcile checkboxes (the heart — both directions)
Match each TODO.md line to its source line by ^t-id. Then:
| TODO state | Source state | Action |
|---|---|---|
[x] |
[ ] |
User completed it here → set source to [x], append ✅ <today> to the source line, move the TODO item to ## ✅ Done. |
[ ] |
[x] |
Completed in the source → set TODO to [x], move to ## ✅ Done. |
[x] |
[x] |
Already done → ensure it's under ## ✅ Done. |
[ ] |
[ ] |
Still open → bucket it by due date. |
Other cases:
- New source action (anchor not yet in TODO) → add it to the right bucket.
- Source text changed → source wins; refresh the TODO line text.
- Source line deleted (anchor gone from the vault) → don't silently drop it; mark the
TODO item
⚠️ (source removed — confirm)so the user notices, and ask before deleting. - Conflict (can't tell which side changed) → leave both, flag
⚠️ (conflict), ask.
Never edit the Compiled truth of a people note here. Completing a task in 02-people/
or 05-decisions/ means only toggling its checkbox + adding the ✅ <date> stamp on
that line — both are allowed under append-only.
Step 5 — Archive completed
Keep ## ✅ Done to completions from the last 14 days. Older done items are pruned
from TODO.md (their record lives on in the source note + Git history).
Step 6 — Report
✓ TODO.md refreshed (vault root)
✓ Scanned: 04-meetings (12), 05-decisions (3), 01-daily (7), 02-people (9), 00-inbox (2)
✓ 4 new actions picked up (block-IDs assigned)
✓ Reconciled: 2 completed here → marked done in source; 1 completed in source → checked here
→ ⏰ 2 overdue · 📅 3 due today · ⏳ 5 waiting on others
⚠️ 1 item flagged: source line for "send the QA plan" was removed — delete from TODO? (y/n)
TODO.md format
---
type: todo-dashboard
updated: YYYY-MM-DD
ai-first: true
---
## For future Claude
Consolidated, auto-generated action list. The source of truth is the linked notes;
this file is a reconcilable view. Checking a box here flips it in the source note
(matched by `^t-id`). Refreshed by task-roundup and daily-brief. Do NOT hand-edit the
action text here — edit it in the source note. You MAY check/uncheck boxes here.
## ⏰ Overdue
- [ ] <action> — [[04-meetings/2026-05-18-...#^t-ab12cd]] — due 2026-05-20 — #from/meeting
## 📅 Today
- [ ] <action> — [[05-decisions/2026-05-22-...#^t-cd34ef]] — due 2026-05-22 — #from/decision
## 🔜 Upcoming (next 7 days)
- [ ] <action> — [[01-daily/2026-05-22#^t-gh56ij]] — due 2026-05-27 — #from/daily
## 🗓 Scheduled (later)
- [ ] <action> — [[03-projects/...#^t-kl78mn]] — due 2026-06-15
## 🧭 No date
- [ ] <action> — [[00-inbox/2026-05-21-...#^t-op90qr]] — #from/braindump
## ⏳ Waiting on others
- [ ] (owner: [[02-people/Alex Rivera]]) <what you're waiting for> — [[04-meetings/...#^t-st12uv]] — since 2026-05-19
## ✅ Done (last 14 days)
- [x] <action> — [[04-meetings/...#^t-wx34yz]] — done 2026-05-22
Priority (optional booster)
Prefix high-priority items with 🔴 and medium with 🟡 in TODO.md. Infer priority:
- 🔴 high: actions from a
one-way/hard-to-reversedecision, a request from your manager, or anything overdue. - 🟡 medium: actions tied to a
status: activeproject. - otherwise unmarked.
Task staleness (optional booster)
Flag ⏳ stale on any open action with no due date that has sat untouched for > 21 days
(by the source note's age). Surfaces zombie tasks the same way people-update flags
stale relationships.
Anti-patterns to avoid
❌ Editing action text in TODO.md — the source note is canonical; edit there.
❌ Reusing or rewriting a ^t- anchor — anchors are permanent identities.
❌ Silently deleting a TODO item when its source vanished — flag and ask.
❌ Pulling in others' actions — only yours + things you're waiting on.
❌ Touching Compiled truth while completing a people-note task — toggle the box only.
❌ Duplicating a task — match by anchor first; one anchor = one task.
Special cases
Email / chat actions with no note
If the user says "I need to reply to X" with no source note, create a one-line capture
in today's daily note under ## Pending follow-ups (with an anchor), then it flows into
TODO.md like everything else. Don't put orphan tasks only in TODO.md — every task needs a home note.
Recurring tasks
If an action recurs (e.g. "weekly status update"), keep one anchored line in its home note and, on completion, append a fresh dated line rather than un-checking the old one (preserves the completion history).
Project rollup
If asked "what's open on [project]?", filter the collected actions by the project wikilink instead of regenerating the whole TODO.md.