Skip to content
Development
Skill

/catchup

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.

From plugin
claude-elixir-phoenix
548101 skills30 agents2 commands
Install
$ npx -y skills add oliver-kriska/claude-elixir-phoenix --skill catchup --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/catchup

Context preview

The summary Claude sees to decide when to auto-load this skill.

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.

SKILL.md

catchup.SKILL.md
name: catchup
description: "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."
effort: medium
disable-model-invocation: true
argument-hint: "[--since \"friday\"|\"2h\"|\"last-active\"|\"last-commit\"] [--scope repo|all] [--sources github,git,linear,calendar] [--depth quick|standard|deep] [--focus prs,reviews-requested,mentions,impact]"
allowed-tools: Read, Grep, Glob, Bash, Write, WebFetch, Agent

Catchup — Async-Team Return Briefing

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.

Usage

/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.

Iron Laws

1. **Delegate the heavy work** — spawn `catchup-runner` (sonnet) for fan-out + assembly. Do NOT run the `gh`/`git` fan-out in this session; that defeats the cost/speed purpose. 2. **Resolve the window here, once** — the agent must never re-resolve it. Pass absolute `SINCE_*` values. 3. **MCP runs here, not in the agent** — Linear/Calendar MCP tools are unreliable in subagents. If present, fetch in this context and pass the text to the agent; else mark absent. 4. **Validate `--since` before any shell** — match the grammar; on no match fall back to 24h and note the assumption. 5. **Stop after the brief** — print the agent's summary, never auto-transition to another command. 6. **Repo-scoped by default** — pass `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.

Workflow

1. Parse arguments

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).

2. Resolve the time window (here, in this context)

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.

3. Detect sources + pull MCP data (here)

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).

4. Delegate to `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.

5. Present + stop

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.

Sources at MVP

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.

Graceful degradation contract

A missing source degrades the brief, never breaks it. `git log` alone (always available in a repo) is a valid minimum brief. Ev

Read more
Ships withclaude-elixir-phoenix

Docs: phxagents.dev -- install guides per runtime, the runtime compatibility matrix, all 26 Iron Laws, and a browsable skill and agent catalog. Claude Code is great.

Get the whole plugin

Other skills on claude-elixir-phoenix.