Catchup

SkillDocs & knowledge

Comprehensive onboarding for new or returning contributors. Scans repository artifacts (git history, .claude/STATE.md, project rules, skill catalog, DESIGN.md, research & library notes, checkpoints, agent-team logs) and synthesizes a GUIDE.md at the repository root summarizing what has been worked on, why, and how to resume work.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Catchup skill

What this skill tells your AI

The instructions your AI receives, as published by del-taiseiozaki/claude-code-orchestra in .claude/skills/catchup/SKILL.md and read by ahel’s review.

Onboarding skill that produces a GUIDE.md at the repository root so a new or returning contributor can understand the project's history, current state, and how to resume work.

When to Use

  • A contributor joins the repository for the first time
  • A contributor returns after a long absence
  • You want a single human-readable snapshot of "what has been happening here"

When NOT to Use

  • You need a single focused answer (use /feature planning phases or direct research instead)
  • You want to capture the current session for later (use /checkpointing)
  • You want running design history (use /design-tracker or read DESIGN.md directly)

Full skill routing: CLAUDE.md section "Routing Policy".

Workflow

Phase 1: COLLECT (collect_repo_state.py)
  Run the collector script -> single JSON of every dataset the template needs
    |
Phase 2: SYNTHESIZE (Claude Lead)
  Turn that JSON into per-section prose — the judgment step
    |
Phase 3: ASSEMBLE (write_guide.py)
  Stamp, order, validate, and write GUIDE.md under the Writer Safety Contract

Phase 1: COLLECT (via collect_repo_state.py)

python3 .claude/skills/catchup/collect_repo_state.py

Optional flags: --since "30 days ago" (recent-work window, passed to git), --max-commits 100, --claude-home DIR (Agent Teams data root), --project-root DIR.

Exit codes: 0 ok · 1 bad arguments · 2 not a git repository, or a SKILL.md/agent frontmatter that yields neither a name nor a description · 3 a git subcommand failed inside a real repository. The payload always carries top-level ok and errors; check those rather than assuming exit 0.

Degradation is named, never silent: an absent file is {"present": false}, an unreadable one carries an error, and a failed git subcommand is null plus an entry in git.errors — distinct from [], which means genuinely empty.

Top-level JSON keys:

  • gitlog, branches, status, stash, diffstat, recent_stat, current_branch, errors.
  • identityREADME.md, AGENTS.md, pyproject.toml presence + first line, plus identity.state with main_agent, current_project, current_feature, current_bug_fix read from .claude/STATE.md.
  • rules{present, items[{file, first_line}]}.
  • skills{present, items[{name, short_description, file}], frontmatter_errors}.
  • agents{present, items[{name, specialization, model, file}], frontmatter_errors}.
  • docsdesign{present, placeholder, key_decisions[]}, research, libraries.
  • envmanifests, scripts (from pyproject.toml), commands (each with the source file it was quoted from), errors.
  • checkpoints — newest 5 (file + first_line: the frontmatter summary, else its slug, else the first non-empty body line — never the --- fence).
  • agent_teamssessions[{name, members, tasks_total, tasks_completed}] and in-repo work_logs.
  • cli_tools — recent consultations for every tool, each tagged with tool, plus skipped_lines.

Feed the emitted JSON to Phase 2 as its sole input. For very large repos hand it to general-purpose-opus for the thematic grouping.


Phase 2: SYNTHESIZE (Claude Lead)

Turn the collected JSON into one markdown body per section of references/guide-template.md. Do not re-read the source files; the collector now gathers every dataset the template asks for, so re-reading only costs context.

This phase is judgment and stays here: grouping commits into 3–7 themes, ranking the top design decisions, and deciding which optional sections are worth a reader's time have more than one defensible answer. write_guide.py deliberately takes the prose as input rather than generating it.

Omit a section entirely when its source data is absent. Never leave a {placeholder} — Phase 3 rejects them.

Write the bodies to a JSON file keyed by the section ids in references/guide-template.md:

{
  "what_is_this_project": "- **Purpose**: ...",
  "recent_work": "- ...",
  "capabilities": "### Slash commands\n\n| Command | Purpose |\n|---|---|\n...",
  "resume_work": "- **Environment setup**: `uv sync`"
}

Phase 3: ASSEMBLE (via write_guide.py)

python3 .claude/skills/catchup/write_guide.py --input body.json
python3 .claude/skills/catchup/write_guide.py --input body.json --apply

The first call previews to .claude/logs/guide-preview-*.md; the second writes GUIDE.md atomically, refuses if GUIDE.md changed since it was read, and validates the composed document (validate_doc.py --contract guide) before replacing it. --now ISO8601 injects the date stamp; --project-root DIR relocates the root.

The script owns the title, the _Generated by /catchup on YYYY-MM-DD_ line, the section order and fixed numbering, and the _Sources:_ footer — do not supply them in --input.

Payload: {ok, guide_path, preview_path, sections_written, sections_omitted, line_count, residual_placeholders, applied, result, artifacts}. Exit codes: 0 preview/applied · 1 bad args or unreadable --input · 2 unknown section id, a missing required section (what_is_this_project, recent_work, capabilities, resume_work), a residual {placeholder}, or a composed document the guide contract rejects · 3 write failure or concurrent modification.

Report guide_path, line_count, sections_written, and sections_omitted from the payload rather than restating them from memory.


GUIDE.md Structure

references/guide-template.md is the contract: it maps each section id to its numbered heading, marks which four are required, and lists the collector fields each one draws on. Section numbers never shift when an optional section is omitted.


Tips

  • Context discipline: Phase 1 is a single script run, not a subagent scan — the orchestrator never loads raw logs or long docs. Only hand the JSON to a subagent when the synthesis itself is large.
  • Not byte-stable: GUIDE.md is regenerated from sources each run, but its prose is LLM-authored, so two runs over identical sources produce different text and a noisy diff on a tracked root file. Do not edit it by hand — update the underlying sources (.claude/STATE.md, DESIGN.md, rules) and re-run.
  • .gitignore awareness: .claude/checkpoints/ and .claude/logs/ are gitignored. On a fresh clone they will be absent; the collector reports that as present: false rather than failing.
  • Language: GUIDE.md content follows the project's user-facing language convention (Japanese for this repository), while code identifiers and command names stay in English.

Signals

GitHub stars
195
Forks
36
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
catchup-del-taiseiozaki
Source
github.com/del-taiseiozaki/claude-code-orchestra