plugins/catchup/skills/catchup/SKILL.md
Summarize and review what changed while you were away. Use after a weekend, vacation, or flight to check missed PRs, git commits, Linear tickets, and meetings — one prioritized brief, not a firehose.
npx skillsauth add oliver-kriska/claude-elixir-phoenix catchupInstall 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.
You've been away. This skill is a thin orchestrator: it resolves
the window + sources here, then delegates the I/O fan-out, impact
analysis, and brief assembly to the catchup-runner agent (Sonnet) so
your (often Opus) session does not pay for summarization. You only
print what the agent returns.
/catchup # since you were last active
/catchup --since "friday"
/catchup --since "2h" --focus reviews-requested
/catchup --since last-commit --depth deep
/catchup --scope all # include cross-repo pings/reviews
Default is repo-scoped: every GitHub signal (reviews requested,
notifications, mentions) is filtered to the repo you ran it in. Pass
--scope all to also include cross-repo activity, which is then listed
in its own separate section — never mixed into this repo's lists.
catchup-runner (sonnet) for
fan-out + assembly. Do NOT run the gh/git fan-out in this
session; that defeats the cost/speed purpose.SINCE_* values.--since before any shell — match the grammar; on no
match fall back to 24h and note the assumption.SCOPE=repo unless the user
passed --scope all. A brief run inside one repo must not leak
another repo's reviews/notifications. Cross-repo is opt-in only.From $ARGUMENTS: --since, --scope, --sources, --depth,
--focus. Defaults: --since last-active, --scope repo, all
detected sources, --depth standard, no focus. --scope accepts
repo (default — every GitHub signal filtered to the current repo) or
all (cross-repo allowed, listed in its own section).
Read ${CLAUDE_SKILL_DIR}/references/time-window.md. Resolve calendar
words (friday, yesterday, a date) in the user's local timezone
(this machine = the user's TZ), pivot through SINCE_EPOCH, derive
SINCE_ISO (UTC) + SINCE_LABEL (with TZ abbrev) + LOCAL_TZ.
Default last-active = MAX of: newest Claude session mtime for this
repo, your last own commit (git log --author=<you> -1 --format=%ct),
your last own PR in this repo (gh pr list --repo <repo> --author @me --state all, repo-scoped — a global search would anchor to other
repos). The latest footprint is "you were last here". Record which
signal won. Variants: last-session (sessions only),
last-commit/last-mine (your git/PR only). No signal → 24h, noted.
gh: command -v gh && gh auth status → github ON
git: git rev-parse --is-inside-work-tree → git ON
linear/calendar: a Linear / Google-Calendar MCP tool present?
If Linear/Calendar MCP is present, query it in this context now
(assigned/updated tickets since SINCE_ISO; missed + today's
meetings in LOCAL_TZ) and keep the short text as LINEAR_DATA /
CALENDAR_DATA. If absent, set them to absent (the agent will
proxy-harvest XXX-#### refs for Linear; skip calendar with a note).
catchup-runner (Sonnet)Spawn one agent, foreground, passing a self-contained prompt:
Agent(subagent_type: "catchup-runner", prompt: """
SINCE_EPOCH={…} SINCE_ISO={…Z} SINCE_LABEL="{… local TZ}"
LOCAL_TZ={…} SOURCES={github,git} SCOPE={repo|all} DEPTH={…} FOCUS={…}
OUT_PATH={cwd}/.claude/catchup/brief-{YYYY-MM-DD}.md # local date (date +%F), not UTC
LINEAR_DATA={text or "absent"}
CALENDAR_DATA={text or "absent"}
Window anchor signal: {which one won, for the Risks note}
Do the gh+git fan-out, impact analysis, and brief assembly per your
instructions. Write the file. Return ONLY the inline summary.
""")
The agent inlines all recipes (it cannot read this plugin's references). Do not re-implement its work here.
Print the agent's returned summary verbatim and the brief path.
If the agent returned no summary (e.g. it hit its turn budget
mid-assembly — the brief file is usually already written): do NOT
re-summarize the brief yourself; that pulls the expensive step back
into this (often Opus) session, defeating the delegation. Instead
SendMessage the agent by the agentId from its stop usage:
"Return only the inline summary now." — it finishes cheaply in
Sonnet. Only if that also fails, read the brief's Intent + Top
priorities section (not the whole file) and print that.
Do NOT auto-invoke any other command. The user decides what's first.
GitHub (gh), Git (git), Linear MCP (optional), Google Calendar MCP
(optional). Slack/Gmail are v2 opt-in — never queried, never piped
raw. Scheduling + per-project config are designed in
${CLAUDE_SKILL_DIR}/references/config-schema.md, not built at MVP.
A missing source degrades the brief, never breaks it. git log alone
(always available in a repo) is a valid minimum brief. Every absent or
failed source becomes one honest line under the brief's
Risks/assumptions block, so the reader knows what it does not cover.
development
Verify Elixir/Phoenix changes — compile, format, and test in one loop. Use after implementation, before PRs, or after fixing bugs.
development
OTP/BEAM patterns and Elixir idioms — GenServer, Supervisor, Task, Registry, pattern matching, with chains, pipes. Use when designing processes or debugging BEAM issues.
tools
Self-improving loop for plugin skills. Reads program.md, proposes one mutation per iteration, evaluates against deterministic scorer, keeps improvements via git, reverts failures. Targets weakest skill+dimension. Use with /loop for overnight runs.
development
Project health audit and health check — architecture, performance, tests, dependencies, code quality. Use when assessing overall project health, before releases, or after refactors.