What it does
Before every meeting you walk into, the morning brief tells you: who you're meeting, what's unresolved, what to push, what to avoid, how much commission is at stake.
After every meeting you finish, Otter (or Spinach, Gemini, etc.) publishes a transcript. Within 4 hours, the system has:
- Extracted action items you committed to
- Queued HS deal-stage updates for your approval
- Flagged new contacts mentioned for graph review
- Added "met with" relationships to the knowledge graph
No more forgetting follow-ups. No more showing up cold.
Pre-meeting brief — nightly-consolidation Section K
Runs during nightly-consolidation (11pm). For every calendar event in the next 24h with ≥1 external attendee:
1. Pull event via Fantastical MCP (fallback: Google Calendar MCP)
2. Resolve attendees against knowledge graph + HubSpot
3. Build context from: graph relationships, active deals, memory files, Gmail last-exchange, HS lead_source_notes
4. Synthesize brief — context / unresolved / push / avoid / commission at stake
5. Insert into morning brief before "Today's 3 priorities" section
Per-meeting brief format
markdown
4:00 PM MDT — Andy Hadank (Snowblaze B-32 walkthrough) [3 attendees]
- Context: Owner of Snowblaze B-32, verbally committed 35% with you 2026-04-21. Rachel attending as ops lead.
- Unresolved: Andy asked about hot tub maintenance coverage 4/22 — Rachel hasn't replied yet.
- Push: Close the agreement at 35% today. Hand off to Mandy for onboarding.
- Avoid: Don't mention Vermont. Don't revisit commission %.
- Commission at stake: $1,000 (Bowens Sourced) — stage=contract_pending, ~85% probability. EV: $850.
Internal-only meetings
Shorter brief — last-1:1 highlights + open items, no "commission at stake" line.DNC safety
Every attendee checked viadnc_check.py. Active homeowners on the calendar are expected (operational meetings), but the flag catches scheduling mistakes before you walk in.
Post-meeting capture — transcript-scan Phase 4
Runs during transcript-scan (8am/12pm/4pm — 3x daily). For every NEW transcript where char_count > 1000:
What gets extracted
1. Participants → matched to graph; unknowns queued for review 2. Action items →pwa/data/meeting_action_items.jsonl with deadline + confidence
3. Decisions / deal movement → pwa/data/pending_hs_updates.jsonl (YELLOW, approval required)
4. New contacts mentioned → knowledge_graph _pending_entities[] (not promoted until seen twice)
5. Graph relationships → met_with edges between all participant pairs + last_seen_at bump
What does NOT happen automatically
- HubSpot writes — always queued for Joseph's approval
- Memory file edits — queued for approval, except when a tool-specific section handles it (e.g., EA voice calibration)
- Contact promotion — requires second mention before landing in
entities.people
Approval queue channels introduced
| Channel | File | Purpose |
|---|---|---|
hs_update | pending_hs_updates.jsonl | Proposed HS deal-stage or property-note updates |
action_item | meeting_action_items.jsonl | Tracked commitments with deadlines |
memory_update | pending_memory_updates.jsonl | Proposed memory file edits |
Where the data flows
Otter/Spinach transcript → transcript-scan Phase 1/2 → saved to Call Transcripts/
↓
transcript-scan Phase 4 → meeting_action_items.jsonl
→ pending_hs_updates.jsonl
→ knowledge_graph.json
→ ntfy push
↓
Calendar event tomorrow → nightly-consolidation Section K → per-meeting brief
→ morning_brief.md
→ PWA pane of glass
→ your breakfast
Related files
~/.claude/scheduled-tasks/nightly-consolidation/SKILL.md— Section K~/.claude/scheduled-tasks/transcript-scan/SKILL.md— Phase 4~/Library/Application Support/SkyRun/pwa/data/meeting_action_items.jsonl— action items queue~/Library/Application Support/SkyRun/pwa/data/pending_hs_updates.jsonl— HS update proposalsreference_scheduled_tasks.md— fleet contextreference_approval_queue_v2.md— the approval queue infrastructure