---
name: recap
description: One-page catch-up brief for the current project — what's in flight, what was last shipped, what's blocked, what's stale. Reads project memory, recent git activity, and recently-modified files. Use at the start of a session to skip the "where were we" tax.
trigger: /recap
---

# /recap

You context-switch between projects constantly. Without this skill, every new session starts with five minutes of "what was I doing here again?" — me reading files, asking clarifying questions, you reminding me about decisions I should already remember. Recap collapses that into one structured page you can read in 30 seconds.

The skill reads what's already on disk and assembles a current-state brief. It does not do new work. It does not ask questions. It tells you, fast, where you are.

## Usage

`/recap` (no args needed — runs on the current working directory)

Or pass an explicit project path:

`/recap /Users/claude/Documents/FUEL`

## What it's for

You run multiple Claude Code projects in parallel — Elite AI Advantage, FUEL, Fathom Fury, Garage Floor Marketing, plus whatever's next. Each has its own memory, its own state, its own in-flight branches and open questions. Switching between them mid-week, you forget which one had the unresolved migration question and which one was waiting on Railway.

Recap reads each project's persistent state and turns it into a one-page brief. It is the "wake me up to where we left off" skill.

## What You Must Do When Invoked

### Step 1 — Identify the project

If a path was passed, use it. Otherwise use `pwd` to determine the current project. Resolve to the absolute path.

Find the matching Claude Code memory dir:
- Replace `/` and ` ` with `-` to slugify
- Look in `~/.claude/projects/<slug>/memory/`
- If no memory dir exists, note that explicitly — recap still works, just thinner

### Step 2 — Gather state in parallel

Run these reads concurrently (single message, multiple tool calls):

1. **Project memory:** `Read` every file in `~/.claude/projects/<slug>/memory/`. Start with `MEMORY.md`, then any `project_*.md`, `feedback_*.md`, `user_*.md`.
2. **Git state:** `git -C <project-path> status --short`, `git log --oneline -20`, `git rev-parse --abbrev-ref HEAD`, `git log main..HEAD --oneline` (commits ahead of main if applicable).
3. **Recent file activity:** `git log --since="7 days ago" --name-only --pretty=format:` to see which files have churn.
4. **Project CLAUDE.md** if one exists at the project root (or referenced via `@FILE` import).

If any of these fail (no git repo, no memory, etc.), note it and continue. Recap is best-effort — partial information is better than no recap.

### Step 3 — Assemble the brief

Output exactly this structure. Keep it tight. Total output target: under 500 words.

```
# Recap — <project name>

**Branch:** <branch> · **Last commit:** <date> "<message>"
<commits-ahead-of-main note if any>

## Where we are
[2–4 sentences. The big picture from MEMORY.md + recent commits. What is this project's current focus?]

## In flight
[Bullet list. Files modified in last 7 days but not shipped, open feature work, anything mid-stream. 3–6 bullets.]

## Blocked / Open questions
[From feedback_*.md, project_*.md notes that flag unresolved decisions. Include file refs. Empty if nothing.]

## Recent feedback worth remembering
[Pull from feedback_*.md — 1-line summaries of recent post-mortems / lessons. The "When to remember this" lines if present.]

## Stale
[Memory files older than 30 days that may need consolidating. Branches with no recent activity. Empty if nothing.]

## Most likely next move
[1–2 sentences. Best guess at what Jake was about to do, based on most recent activity. Phrase as a question: "Pick up the X work?" not a command.]
```

### Step 4 — Don't editorialize

- Do not propose new work in recap. The output is a status brief, not a plan.
- Do not paraphrase MEMORY.md content extensively — quote 1-line summaries with file refs ("see project_unification.md").
- Do not fix typos, propose refactors, or suggest improvements. Recap is read-only by design.
- After the recap, stop. Do not continue with implementation unless the user asks.

## Calibration for Jake's projects

When the project is one of Jake's known repos, calibrate the "Where we are" section to its specific shape:

- **Elite AI Advantage** — Next.js 16 consulting site on Railway. Watch for Instagram pipeline state, blog publish backlog, deploy issues.
- **FUEL** — prompt repository. Watch for prompt versions, what was last edited.
- **Fathom Fury New System** — Next.js + Drizzle on Railway. Watch for migration state, CIGARLINK feature work.
- **Garage Floor Marketing** — content/site work.

For unknown projects, infer the project type from `package.json`, top-level files, and recent commits.

## What to avoid

- **No questions in the recap.** If something's ambiguous, note it as ambiguous and keep going.
- **No fluff.** Empty sections should say "—" or just be omitted, not filled with "nothing notable to report."
- **No advice.** Recap describes the state. It does not recommend what to do next (beyond the "Most likely next move" guess).
- **No "let me know if you want me to…".** End on the brief. Stop.

## Example output (abbreviated)

```
# Recap — Elite AI Advantage

**Branch:** main · **Last commit:** 2 days ago "fix: stuck PENDING blogs in publish queue"
3 commits ahead of main.

## Where we are
Unification project — merging 3 repos into one Next.js + Prisma app on Railway. Currently shipping the public site (blog, skills, audit funnel) and an admin Instagram pipeline that scrapes content and writes blogs.

## In flight
- New /skills section landed, Verdict is the first entry (src/app/(public)/skills/)
- IG pipeline drain logic recently fixed (runner.ts split stale-claim recovery)
- Bootstrap-only seed guard added (prisma/seed-instagram-accounts.ts)

## Blocked / Open questions
- Force-drain race with publish cron — currently mitigated, may need cron pause toggle (see feedback_publish_drain_race.md)

## Recent feedback worth remembering
- Stuck PENDING with attempts at MAX → invisible to claim filter (claimNextQueued split fix)

## Stale
- project_unification.md last touched 12 days ago — verify still accurate

## Most likely next move
Continue building skills section, or pick up the cron-pause work?
```

That's the shape. Tight, factual, oriented to action.
