skills/catch-up/SKILL.md
Give the human a fast, plain-English catch-up on what changed in the project: what the agents did, why, and what decisions need their input. Use this whenever the user asks to "catch me up", "what changed", "where are we", "recap", "brief me", "give me the rundown", "what did you do", "summarize the session", "fill me in", or otherwise signals they have been away and want to get back up to speed quickly. Built for someone steering several agent-driven projects at once who does not read the code closely but needs to grasp the core ideas, the choices made, and the open decisions well enough to steer. Trigger even if they do not use these exact words: any request to get oriented on recent progress should use this skill.
npx skillsauth add petekp/claude-skills catch-upInstall 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.
The person reading this has been away. While they were gone, agents (you and others) moved the project forward. They are juggling several projects like this one and do not read the code closely. Your job is to get them back in the driver's seat in under a minute: what changed, why it changed, and where their input would actually steer things.
That framing decides everything below. They cannot act on a diff or a commit list, so do not give them one. They can act on plain ideas and clear choices, so give them those.
State the window you are summarizing, in one short phrase, so the reader knows the frame. Infer it from the conversation, in this order:
If the transcript was compacted or you genuinely cannot tell, default to session start, say that is what you did, and lean on git (below) to recover the missing history rather than guessing.
Good window lines: "Since your last check-in", "Since we started on search", "This session so far", "Since the v2 branch merged".
Lead with the conversation — in an agent-driven project it holds both the work and the reasoning. Then ground it against the repo so you are reporting what actually landed, not what was merely discussed:
git log --oneline -20 # what actually got committed
git diff --stat HEAD~N # rough shape of the change (pick N from the log)
git status # what is still uncommitted / in flight
Use git to confirm the what and catch anything that happened off-screen. Use the conversation for the why. Do not read every file — you are after the shape of the change, not a line-by-line account. A quick look at one or two key files is fine when you need to understand an abstraction well enough to name it plainly; reading ten is a sign you have lost the altitude.
Keep: the core moving parts that were added or reshaped (named in plain words), the approach chosen and any real alternative that was rejected, the reasoning, decisions that now lock things in, open forks, and anything surprising or risky.
Drop: file-by-file churn, line counts, formatting and lint noise, mechanical renames, and anything the reader could not act on. If you are unsure whether something belongs, ask "could they steer on this?" If not, cut it.
Use the structure below. Scale it to how much actually changed — see Scale to the change. Drop any section that would be empty; an honest short note beats a padded template.
[Window line] (TL;DR)
<one or two plain sentences: the headline, plus how many things need them>
What changed
- <a change, in plain language, grouped by theme>
- <a knock-on effect, if it matters to them>
Why
- <the problem being solved or the reasoning behind the approach>
Your call
- <open decision>: <the tradeoff in plain terms>. <what you did by default>.
Keep each bullet tight: lead with the point in one line. Add at most one plain sentence after it, and only when a term genuinely needs unpacking for someone who has not seen the code. More than that and you have slipped from briefing into narration — cut it back, or split it into two bullets.
The Your call section is the steering payload. List real forks: things left undecided, or decided by default and easy to flip. For each, give the tradeoff in one plain sentence and say what you did in the meantime so they know the current state. If nothing needs them, say so in one line ("Nothing needs you right now.") rather than inventing a decision.
This is the core move, so it is worth doing well. Name the underlying idea, not the implementation. A few examples of the translation:
| Instead of | Say | |---|---| | "Added a reducer to centralize state" | "Put all the app's 'what's true right now' bookkeeping in one place instead of scattered around" | | "Memoized the selector" | "Made a slow lookup remember its answer so it stops recomputing every time" | | "Introduced a discriminated union for the result" | "Made a result always be exactly one of a few clearly-labeled shapes, so we can't mix them up" | | "Extracted the API client into a shared module" | "Moved the code that talks to the server into one shared spot so every screen uses the same one" | | "Added optimistic updates" | "The screen now shows your change instantly and quietly fixes itself if the server disagrees" |
Two practical tells. First, if a name in your draft only means something to someone who has read the code (a class name, a file name, an internal codename), replace it with what it does. Second, write the way you would explain it out loud to a smart colleague on a different team. That voice is almost always the right altitude.
The structure is a guide, not a quota. Match the output to the substance:
Short sentences, one idea each. No em dashes. Skip the AI throat-clearing ("It's worth noting that...", "delve", "robust", "leverage", "seamless"). Write like a sharp colleague catching them up between meetings, not like a release note.
development
Draft short, plainspoken notes in the author's voice that help reviewers understand non-obvious choices, boundaries, and preserved behavior in the author's own pull request or local diff. Use when the user asks to self-review, annotate, or add reviewer context to their PR or changes. Draft locally when no PR exists, and post approved notes as one GitHub review when a PR does exist. Do not use for reviewing someone else's PR, writing code comments, explaining code generally, or drafting a PR description. Never post without explicit approval.
tools
Design and build pure-CSS (zero-JavaScript) Tailwind CSS v4 plugins of unusual depth and craft. Use when the user wants to create, architect, or refine a Tailwind utility plugin or CSS effect — e.g. "make a tailwind plugin", "build a tw-* plugin", "a CSS-only shimmer/fade/glow/grain/noise utility", "tailwind v4 @utility", "package this effect as a plugin", or wants an effect with surprising visual depth (gradients, masks, filters, SVG filter tricks, scroll-driven animation). Pairs deep CSS/SVG technique research with a bespoke tuning workbench for dialing the effect in. Inspired by tw-fade and tw-shimmer.
content-media
Create clear, polished before-and-after screenshots for a GitHub pull request. Use when a UI change needs visual proof: capture matching states, crop to the relevant UI, stitch and caption one comparison image, attach it natively to the PR, and keep the image out of the repository.
testing
--- name: latent-potential description: First-principles, team-of-experts assessment of a software project that surfaces latent potential; underexploited assets, a sharper north star, missing high-leverage capabilities, better framing and messaging. Produces a prioritized, evidence-grounded report with cheap probes, a reframe candidate, a stop-doing list, and an honest skeptic's case. Use whenever the user wants fresh eyes on a project they have built: "what am I sitting on", "what could this be