What these skills do (together)
Closes the prospecting loop end-to-end at the close-and-after side:
Deal closes-won
↓
[12:00pm] close-to-onboarding-handoff
→ Word doc to Rachel + draft email + HS proposal + handoffs ledger entry
↓
[12:15pm] deal-postmortem-capture (if won OR lost)
→ 5-min capture template surfaces in QB → Joseph answers → ledger + project_postmortems.md
↓
[90 days later, Sundays] referral-watchdog
→ eligible-owners detected → drafts referral ask → PWA queue → live-ea sends Mon-Wed
↓
Owner replies with referral name+email
↓
Live-EA triages inbound → lead-enrichment → SmartLead/postcard pickup → DISCOVERY (loop closed)
Every deal-state transition (close-won, close-lost, 90d-onboarded) now has a system response. None of these used to happen automatically.
File map
| Skill | Helper | SPEC |
|---|---|---|
| close-to-onboarding-handoff | ~/Library/Application Support/SkyRun/handoff_builder.py (python-docx) | ~/.claude/scheduled-tasks/close-to-onboarding-handoff/SPEC.md |
| deal-postmortem-capture | ~/Library/Application Support/SkyRun/postmortem_ledger.py | ~/.claude/scheduled-tasks/deal-postmortem-capture/SPEC.md |
| referral-watchdog | ~/Library/Application Support/SkyRun/referral_eligibility.py | ~/.claude/scheduled-tasks/referral-watchdog/SPEC.md |
~/Library/Application Support/SkyRun/state/onboarding_handoffs.jsonl— written by handoff skill, read by referral-watchdog~/Library/Application Support/SkyRun/state/postmortems.jsonl+~/.claude/projects/.../memory/project_postmortems.md— postmortem ledger (machine + human readable)~/Library/Application Support/SkyRun/state/referral_asks.jsonl— every drafted ask (180-day cooldown source)
Output dirs:
~/Desktop/SkyRun/Onboarding Handoffs/— Word docs (Office toolchain compliant)
close-to-onboarding-handoff — Gap D
Trigger: HS deal stage flip to closedwon (compared against KG snapshot)
Cadence: daily 12pm MDT
Output:
- Word doc
Handoff_<Owner>_<DATE>.docx(python-docx, Office toolchain) - Email draft to rachel.scott@skyrun.com (PWA queue)
- HS note proposal (PWA queue)
- Handoffs ledger entry
- KG stage update to
onboarded
Doc sections: Owner / Property / Agreement / Verbal commits / Walkthrough highlights / Special considerations / Next-steps for ops / Provenance.
deal-postmortem-capture — Gap E.1
Trigger: HS deal stage flip to closedwon OR closedlost (compared against ledger)
Cadence: daily 12:15pm MDT
Output:
- Pre-filled markdown capture template surfaced to PWA / QB
- Joseph answers in QB → QB writes JSON → helper appends to JSONL + project_postmortems.md
- Auto-stub at 30d unanswered (preserves something rather than nothing)
Capture questions: what worked / what killed it (depending on outcome); top 3 objections; decision drivers; would do again; would change; lessons for scoring model; comparable deal.
Downstream: postmortems.jsonl is labeled training data for predictive scoring v2 (deferred until 50+ records).
referral-watchdog — Gap E.2
Trigger: owners 90+ days post-onboarded passing eligibility filter
Cadence: Sundays 8pm MDT (Joseph reviews Monday; live-ea sends Mon-Wed for best response timing)
Eligibility (per helper):
- onboarded ≥ 90 days
- email valid (not bounced)
- not on DNC
- not asked for referral in last 180 days
- no friction flag (no negative HS notes recently)
Output:
- Up to 10 referral-ask drafts per fire (cap to avoid queue flood)
- Pre-logs the ask immediately (cooldown starts even if Joseph delays approval — prevents quarterly nag)
Voice: Joseph's calibrated direct + collaborative. Frame as favor not transaction. One specific data point if Track-backed. Low-pressure close.
Hard rules across all three
- Microsoft Office toolchain only — python-docx for handoff doc; markdown for postmortem + referral drafts
- HS writes are proposals (queued to pending_hs_updates.jsonl)
- Email drafts only (queued to pending_drafts.jsonl)
- DNC check on all drafts
- No Vermont references
- No commission/pricing in referral asks (relationship message)
- Postmortem records append-only — corrections go in new entries
Loop closure (end-to-end)
[1] Discovery — property-scout (weekly Mon 6am)
[2] Enrichment — daily-beenverified-enrichment (daily 6am)
[3] Outreach
a. SmartLead — campaigns active (3)
b. Postcards — postcard-ledger (Mondays 10am)
[4] Bounce handling — smartlead-bounce-handler (daily 11am)
[5] Engagement — live-ea (every 20 min biz hours) + transcript-scan (3x daily) + commitment-tracker (daily 8:30am)
[6] Stall detection — stalled-deal-watchdog (weekdays 8am)
[7] Walkthrough — transcript-scan captures + skyrun-builder builds deliverables on-demand
[8] Close — HS state machine
[9] Onboarding — close-to-onboarding-handoff (daily 12pm)
[10] Postmortem — deal-postmortem-capture (daily 12:15pm)
[11] Referral — referral-watchdog (Sundays 8pm)
↓
New prospect intros → step 1
Plus the always-on layers: nightly-consolidation (11pm), daily-data-quality-check (7am), gmail-deep-scan (4x daily), system-hygiene (hourly), SkyRun QB (every 30 min), quarterly-backup (Q1/Q2/Q3/Q4).
Manual operation
bash
Handoff status
python3 "$HOME/Library/Application Support/SkyRun/referral_eligibility.py" handoffs-list
Postmortem status + pending
python3 "$HOME/Library/Application Support/SkyRun/postmortem_ledger.py" status
python3 "$HOME/Library/Application Support/SkyRun/postmortem_ledger.py" pending
Postmortem manual append
python3 "$HOME/Library/Application Support/SkyRun/postmortem_ledger.py" append --json /path/to/record.json
Referral eligibility
python3 "$HOME/Library/Application Support/SkyRun/referral_eligibility.py" compute-eligible
python3 "$HOME/Library/Application Support/SkyRun/referral_eligibility.py" status
python3 "$HOME/Library/Application Support/SkyRun/referral_eligibility.py" asks-recent --days 180
Tuning notes
After 5 handoffs: Rachel-feedback rate (does she ask for additions to future docs?) → fold into template.
After 10 postmortems: capture rate (% within 7d), stub-fallback rate (target <10%); recurring objections inform outreach copy.
After 50 postmortems: build predictive scoring v2 — labels = won/lost, features = KG attributes; deploy as SCORE_V2 column.
After 10 referral asks: reply rate (target >40%); conversion to actual referral name+email shared (target >15%).
After 30 referral asks: A/B test variants (with-data-point vs without; Mon vs Wed send) for conversion lift.
Phase 2 (adam-bd)
All three skills scaffold into bootstrap-package skills-skeleton/_DISABLED/ with operator-namespaced paths. Activate per market when adam-bd has 5+ closed deals to capture/onboard.
Origin
Built 2026-04-27 as Gaps D + E closure in the prospecting-loop walkthrough. Last builds in the close-loop series. Together with stalled-deal-watchdog (cadence), commitment-tracker (self-promises), postcard-ledger (postcard outreach), and smartlead-bounce-handler (deliverability), the prospecting loop is now fully closed end-to-end.