Coaching Session Summarizer
Overview
Analyzes a coaching/therapy session transcript and appends a structured summary (key insights, decisions, action items, deep analysis, connected trails) to the note.
The agent (Claude Code) performs the analysis directly — reading the transcript and writing the summary in this session. There is no Anthropic API call and no billing; it runs entirely on the active subscription. A legacy API-based script is kept only as a headless fallback (see bottom).
When to Use This Skill
- A new Fathom/Granola transcript was synced to the vault (coaching or therapy)
- User asks to summarize/analyze a session (
/summarize-session [file]or similar) - After
calendar-syncor a Granola export, when a new*-coaching.md,*-therapy.md, or*-session.mdfile appears — offer to summarize it
Workflow (agent-driven — default)
Do this in-session with native tools. No API key required.
Step 1 — Gather context
Run the deterministic helper to get the transcript text, previous sessions, and the trail list in one shot:
python3 ~/.claude/skills/coaching-session-summarizer/scripts/gather_context.py \
<transcript-file> --vault ~/Brains/brain
It prints:
- Previous sessions with the same participant (paths) —
Readthese only in deep mode, for cross-session pattern detection - Available trails — pick 2–4 most relevant to link
- Session content — the summary + transcript to analyze (any prior AI-Generated Summary is stripped so re-runs stay clean)
Pass --participant <name-slug> if the filename doesn't encode the person
(e.g. Granola exports titled by topic): --participant gleb-kalinin.
Step 2 — Analyze
Read the session content and extract, in the analytical voice of a session analyst (objective, using the speaker's authentic language where it matters):
- Key Insights — 3–5 main realizations / breakthroughs / observations
- Decisions Made — concrete choices or commitments
- Action Items — specific next steps; prefix time-sensitive ones with
[URGENT]and scheduling items with[SCHEDULING] - Session Themes — 2–3 recurring topics or patterns
Deep mode (default for therapy and milestone sessions) — also Read the
previous sessions and add:
- Pattern Detection — themes recurring across sessions
- Progress Assessment — movement on earlier commitments
- Energy/Motivation Markers — shifts in energy, resistance, affect
- Potential Obstacles — what might block progress
Step 3 — Append with Edit
Append the summary to the end of the transcript file using Edit (never
overwrite existing content). Match this exact structure:
## AI-Generated Summary
*Generated: YYYY-MM-DD*
### Key Insights
- ...
### Decisions Made
- ...
### Action Items
- [URGENT] ...
- ...
### Session Themes
- ...
## Deep Analysis
- **Pattern Detection**: ...
- **Progress Assessment**: ...
- **Energy/Motivation Markers**: ...
- **Potential Obstacles**: ...
## Connected Trails
- [[Trails/Trail - <Name>|<Name>]]
- [[Trails/Trail - <Name>|<Name>]]
Use the current date (date +%Y-%m-%d) in the Generated line. Omit the Deep
Analysis section in quick mode. Verify trail link names against the printed
trail list — case and exact wording matter for Obsidian links.
Modes
- quick — Key Insights, Decisions, Action Items, Themes. Skip Deep Analysis and previous-session reads.
- deep (recommended for therapy / milestones) — everything, including reading previous sessions for pattern detection.
Integration with Sync
After calendar-sync or a Granola/Fathom export, check for new session files
(*-coaching.md, *-therapy.md, *-session.md). If one appears, offer:
"New session detected — summarize now?" Default to deep mode for therapy.
Notes
- Preserves the original transcript intact; the summary is always appended.
- Trail linking requires the
Trails/directory in the vault root. - Cross-session comparison works best with consistent naming:
YYYYMMDD-name-coaching.md/YYYYMMDD-name-therapy.md. - Re-running is safe:
gather_context.pystrips any prior AI-Generated Summary before printing, so the agent analyzes only the raw session. (Delete the old## AI-Generated Summaryblock from the file before re-appending if you want to replace rather than stack summaries.)
Resources
scripts/
- gather_context.py — (default path) deterministic context gatherer, no API. Prints transcript text + previous sessions + trail list for the agent to analyze in-session.
- summarize_session.py — legacy / headless fallback. Calls the Anthropic
API directly (model via
SUMMARIZER_MODEL, defaultclaude-sonnet-4-6) and bills a fundedANTHROPIC_API_KEY. Use only when no interactive agent is available (e.g. cron). Exits with a clear message if the key has no credit.