agents/skills/daily-grooming/SKILL.md
Use when starting your work day: groom the todo list to a trusted state, archive finished work, surface today's candidates, and propose a concrete first move. Stab-then-confirm, ~5 min.
npx skillsauth add timofreiberg/dotfiles daily-groomingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
A morning pass that gets the user's todo list to a trusted state, pre-loads the day's context, and proposes a concrete first move. You do the gathering and propose; the user confirms or corrects. Optimizes for two things: the list is fresh enough that the user treats it as the source of truth during context-switch moments, and the first action is obvious enough to start without deliberating.
The diagnosis behind this is task-residue exposure during dead time. During transition moments — a mini-break, waiting on an agent, hunting for a tab — leftover tabs and threads from other tasks are visible. The eye lands on one and the context-switch is automatic, barely a conscious choice. A todo list exists, but sporadic maintenance keeps it below the trust threshold ("I can't follow it right now"), so the gut-reaction switch wins and context-switch debt piles up unnoticed until end of day.
This skill targets the trust threshold, not the planning step. Maintenance is the unlock; planning is a side effect.
The same trap applies inside this skill. Waiting on the user to generate from scratch is the same dead-time as waiting on a tab — the user drifts during it. So minimize the user's generate turns. Front-load proposals; each user turn should be a confirm-or-correct, not a generate. See "Session shape."
Two things make agent-led grooming worth more than self-discipline:
Before the first message, gather in parallel where possible (budget ~60s; if something's slow, skip it and say so in the session):
PR discovery, cross-repo: grooming often runs from a notes/tracking repo that has no PRs of its own, so repo-scoped commands (
gh pr list) default to the wrong scope and return empty — which reads like "no open PRs" but isn't. Use account-scoped search instead:gh search prs --author "@me" --state openfor the user's own PRs andgh search prs --review-requested "@me" --state openfor their review queue. The review-requested results carry a lot of stale org-wide noise, so filter by recentupdatedAtbefore surfacing.
Stab-first, confirm-driven. Front-load proposals so each user turn is a confirm-or-correct, not a generate. Two user turns is the ceiling; often one is enough.
Worked example:
you: Morning. Yesterday: shipped <X>, merged <Y>. <Z> is still in
<reviewer>'s court (3 days). 3 items from Monday still open: <list>.
Done since last groom — moving to the weeklog: <a>, <b>.
<a> looks win-worthy (<goal>); want a wins/ entry?
My read of today:
- Primary: <stab>
- Secondary: <stab>, <stab>
- Watching: <stab — no action needed>
First move, unless you've got a different pull: <one concrete
action> — <one-line why>.
Anything wrong? Otherwise I commit it as-is.
user: <single message: corrections, or "looks good">
you: Done. Todo updated, <done items> moved to the weeklog,
<win logged / skipped per answer>.
Three steps:
The stab matters more than the question. With state loaded you have enough to propose:
If state-loading genuinely yields no stab (vacation return, true blank slate), say so: "I don't have a strong read today — what's first?" That's the only legitimate single-question turn. Otherwise: stab.
The primary thread is what matters most; the first move is what to physically start. They aren't always the same, and the gap is where cold-start drift happens — so name one concrete, bounded first action (not a whole thread) the user can begin without deliberating. Bias toward:
Give one line of why, and always leave it overridable: "unless you've got a different pull." The point is to break the blank-page moment, not to dictate.
When the user marks something done (or confirms a done item you surfaced):
[x] that never gets removed
is exactly how the list drifts below the trust threshold. If the item had a
backing detail file (some setups give nontrivial items their own file), close
or remove that too — a dangling task file is the same drift one tier down.This skill is layout-agnostic. Where the files live and how done work is archived
come from the repo you run it in — check its AGENTS.md / CLAUDE.md for the
work-tracking conventions before the first run:
tasks/ dir or
similar). If so, surfacing such an item means reading its file for context,
and archiving it means updating or removing that file too — not just the list
line./daily-grooming) is
the natural trigger, since it puts initiative on the user so skipped days need
no explicit "skip."If the repo doesn't document these, ask once and suggest recording the answers
in its AGENTS.md so the next run is parameter-free.
databases
Use when a judgment forms during work that a future session would benefit from — a fork you resolved, a correction from the user, a wrong assumption about the environment, something you had to rediscover. Appends one timestamped entry to the journal staging dir.
data-ai
Use when reviewing local changes — the working-copy diff, a branch, a commit, or a GitHub PR by number — with a fresh subagent that returns a structured findings report.
tools
Use when a question needs current internet information — docs, news, releases, prices. Prefer a built-in web search tool for quick lookups if the harness has one; this script returns a model-summarized answer with source URLs and works without one.
data-ai
Use when you want to work in an isolated jj working copy — parallel task, experimental scratch, subagent with its own tree. jj's equivalent of git worktrees: creating a workspace, working inside it from anywhere, and cleaning up without losing history.