A workflow for Claude Code

Your standup,
your EOD,
on autopilot.

Auto-capture context before compaction, roll it up across projects, and start each morning with a recap that tees up the day. Four pieces, one directory, zero infra.

claude — morning
/morning-review ← you type this 🌅 Yesterday's recap • hook: shipped PostCompact hook — context persists before compaction • daily-summary: rewrote to roll up across sessions, not just current • cron: 18:00 daily run, PATH needs explicit export Leftover: morning-review command isn't done yet Today: 1. Ship morning-review today? 2. cron first fires tomorrow 18:00 — dry-run it now?

The loop, end to end.

Four moments across the day. Two you trigger, two that just run. All four write to the same place.

Morning~09:00

Standup

/morning-review

Reads the last 36h of summary cards, distills a recap, and asks you 2-3 concrete questions about today. That's it — the conversation continues from there.

Through the dayon event

Compaction snapshots

PostCompact hook fires

Every time Claude Code compacts a session, the hook silently saves the pre-compaction summary to ~/.claude/summaries/. You never see it. Nothing's lost.

When you wanton demand

Cross-session rollup

/daily-summary [focus note]

Scans every session across every project from the last 24h, writes a single cross-project card. Use it as a checkpoint when something's done.

EOD18:00 cron

Safety net

crontab → claude -p

You forgot. It didn't. cron fires headless at 18:00 and writes the day's rollup whether you ran anything manually or not.

Same directory, same naming.

All four write to ~/.claude/summaries/ as <YYYYMMDD-HHMMSS>-<source>-<id>.md. Source is in the frontmatter too — grep and move on.

compact

PostCompact hook

auto · current session

Snapshots the pre-compaction context. PostCompact's input already carries Claude's generated summary — no extra model call, just persist it.

compact-summary-card.sh silent
manual

/daily-summary

on-demand · last 24h

Cross-session rollup. Only messages from the last 24h — a session spanning many days only contributes its recent slice. Current session's model.

daily-summary.md slash cmd
cron

crontab safety net

scheduled · last 24h

Headless claude -p run. Persists on failure too — a blank morning review is ambiguous, the script never leaves you guessing.

daily-summary-cron.sh 18:00 daily
review

/morning-review

on-demand · last 36h

Reads cards (already distilled once), redistills into a recap, and ends with 2-3 decision-shaped questions. Not a summary — a conversation starter.

morning-review.md slash cmd

Three steps.

Or just clone the repo and ask Claude Code to install it for you. The README has the prompt.

1

Copy the files

From the repo root:

# commands and hooks into ~/.claude/
cp commands/*.md ~/.claude/commands/
cp hooks/*.sh   ~/.claude/hooks/
chmod +x ~/.claude/hooks/*.sh
mkdir -p ~/.claude/summaries
2

Register the PostCompact hook

Merge into ~/.claude/settings.json:

{
  "hooks": {
    "PostCompact": [{
      "matcher": "*",
      "hooks": [{
        "type": "command",
        "command": "bash \"$HOME/.claude/hooks/compact-summary-card.sh\"",
        "timeout": 15
      }]
    }]
  }
}
3

Register the crontab (optional)

18:00 daily — change to your liking:

(crontab -l 2>/dev/null; \
  echo "0 18 * * * /bin/bash $HOME/.claude/hooks/daily-summary-cron.sh >> $HOME/.claude/summaries/cron.log 2>&1") \
  | crontab -

⚠ cron's PATH is bare — edit daily-summary-cron.sh line 14 to include wherever claude and jq live.