Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

claude-code-todo-digest

Every repo's TODO backlog, one nightly email. A GitHub Action that pulls the ## TODO section of .claude/CLAUDE.md from every repo you track, compresses each entry to its title, and emails you a single digest — so the backlogs your Claude Code sessions maintain actually get read instead of rotting per-repo.

Zero LLM calls, zero cost beyond Actions minutes: the summarizer is pure regex.

What the email looks like

  • Grouped by repo, one <h2> each.
  • Each - [ ] **Title** — long context... entry becomes just its title (the multi-paragraph context your agent wrote for its future self stays in the repo).
  • Non-action sections (brainstorm / icebox / someday / reference) fold to one ▸ section name (see repo) line.
  • Staleness sentinel: items blocked on you (marked 🔥 or any BLOCKED_MARKERS string) get flagged ⚠️ no date if undated and ⚠️ stale N days after a week — the email calls out its own rot instead of presenting old asks as fresh.

Setup

  1. Copy summarize_todos.py (repo root) and .github/workflows/todo-digest.yml into a repo of your own.
  2. Secrets: RESEND_API_KEY (Resend free tier is plenty), NOTIFY_EMAIL (recipient), GH_PAT (token with read access to the tracked repos).
  3. Variables: REPOS (comma-separated owner/repo list), FROM_EMAIL (a sender on your verified Resend domain).
  4. Adjust the cron hour (UTC) in the workflow.

Run it once by hand via Actions → TODO Digest → Run workflow to verify delivery.

Configuration

Env var Default Meaning
TODO_HEADING TODO|Backlog|待办 Which ## heading starts the todo section
BLOCKED_MARKERS 🔥 Substrings marking "blocked on the human" items (staleness flags apply only to these)
FOLD_SECTIONS brainstorm|icebox|someday|reference|watch(list)? Section headings folded to a one-line pointer

python3 summarize_todos.py --selfcheck runs the built-in assertions.

Why this exists

An agent that maintains TODO lists across five repos produces five backlogs nobody opens. The fix that stuck: push, don't pull — one email, every evening, titles only, with staleness called out. What gets surfaced gets done.

More Claude Code tooling

License

MIT

About

Every repo's TODO backlog, one nightly email. GitHub Action that aggregates the TODO sections of .claude/CLAUDE.md across repos, compresses entries to titles, flags stale blocked-on-you items, and sends one digest via Resend. Zero LLM calls, pure regex.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages