← Back to brief

reference scheduled tasks

memory · reference_scheduled_tasks.md

Quick reference — full SkyRun-tenant fleet

All skill files at ~/.claude/scheduled-tasks/<task-id>/SKILL.md unless noted. Cron times are LOCAL (Joseph's MDT), evaluated by the scheduler.

Daily / multiple-times-daily

Task IDCron (local)Purpose
live-ea/20 9-18 * 1-5Every 20m, weekdays 9-7. Inbox triage, draft replies in Joseph's voice, populate pending_drafts.jsonl. Never sends.
transcript-scan0 8,12,16 *3x/day. Sweeps Gmail + local for new transcripts → Call Transcripts/, updates index.json.
gmail-deep-scan0 9,13,17,22 *4x/day. Bulk categorize non-transcript email, file attachments, write insights for morning brief.
daily-beenverified-enrichment0 6 *6am. 12 leads/day BV enrichment (HOT 3, WARM 3, NURTURE 2, SWITCH 3, LOW 1). 400/mo budget. SoT + HS + SmartLead sync.
daily-data-quality-check0 7 *7am. SoT ↔ HubSpot ↔ SmartLead reconciliation, auto-fix low-risk drift.
commitment-tracker30 8 *8:30am. Sweeps yesterday's transcripts + sent email for "I'll do X by Y" commitments → ledger; surfaces overdue with freshness-recheck flag.
smartlead-bounce-handler0 11 *11am. Mines mailer-daemon notifications, classifies HARD vs SOFT (RFC 5321 enforced), updates SoT bounce ledger, queues HS proposals.
close-to-onboarding-handoff0 12 *12pm. On any deal moving to closed-won, generates Word handoff doc + email to Rachel.
deal-postmortem-capture15 12 *12:15pm. Captures won/lost lessons; feeds predictive scoring v2.
nightly-consolidation0 23 *11pm. Rolls up day's activity → KG upserts, project memory, morning brief.
gate-proof-runner30 7 *7:30am. Runs gate_proof_runner.sh end-to-end (48 checks across 10 proof groups). Catches any regression in the hardwired fortifications: HS-live-query gate, prior-decision-check, heartbeat schema, DNC, validator, freshness envelope, stale locks, bounce handler, KG drift, foundation health. Writes heartbeat + fix_queue + ntfy on any fail. Built 2026-05-02.

Weekly

Task IDCron (local)Purpose
grand-county-property-scout0 6 1Mon 6am. Weekly STR property scout — 6 mandatory public-records sources + BV soft-fail.
postcard-ledger0 10 1Mon 10am. Mines email + transcripts for confirmed postcard sends; syncs SoT ↔ HS; produces Next_Postcard_Round_<DATE>.xlsx.
stalled-deal-watchdog0 8 1-5Weekdays 8am. Computes last_touch_real per deal; stage-specific stall thresholds; surfaces follow-up drafts.
referral-watchdog0 20 0Sun 8pm. 90-day onboarded owners get auto-drafted referral asks.

High-frequency

Task IDCron (local)Purpose
qb-quarterbackevery 30m, 6am-10pmPersistent agent loop, branded "SkyRun QB" — always-current nerve center. Drop-in for off-the-cuff work + system-surfaced items.

One-time (self-disabling or already drained)

Task IDStatusPurpose
historical-gmail-backfillDISABLED — backfill completeResumable backfill of entire Gmail archive. Self-disables on complete:true.
dq-verify-leak-cleanup-2026-04-28One-time, drainedApr 28 SmartLead leak cleanup verifier
restore-crons-2026-04-30One-time, drainedApr 30 cron-state restore after laptop-closed overnight

Adam Fleckles (Phase 1 brain) tenant — separate set

These run with adam-bd- prefix, separate state/health/fix-queue. Listed for completeness:

OS-level helpers (NOT cron-managed, but part of the fleet)

Health files

Every task writes a heartbeat to ~/Library/Application Support/SkyRun/health/. Canonical filename: YYYY-MM-DD_<task-id>_HHMM.json (UTC). The hygiene matcher uses a defensive double-glob so bare-name patterns are also caught. See daily-beenverified-enrichment/SKILL.md Step 9b for the canonical heartbeat shape (task_id, status, timestamp, last_run_at — never null).

Data flow snapshot


6am   daily-beenverified-enrichment  → +12 leads enriched, SoT+HS+SmartLead synced
6am   grand-county-property-scout (Mon) → +N new GC leads
7am   daily-data-quality-check       → SoT/HS/SL drift fixed
8am   stalled-deal-watchdog (M-F)    → stalled-deal drafts staged
8:30  commitment-tracker             → "I'll do X by Y" ledger refreshed
9am   gmail-deep-scan                → email categorization + attachments filed
9-7   live-ea (every 20m, M-F)       → inbox triage + reply drafts
10am  postcard-ledger (Mon)          → next round Excel built
11am  smartlead-bounce-handler        → HARD/SOFT bounces processed
12pm  close-to-onboarding-handoff    → won deals handed to Rachel
12:15 deal-postmortem-capture        → won/lost lessons captured
13:00 gmail-deep-scan                → mid-day re-scan
16:00 transcript-scan                → afternoon transcript sweep
17:00 gmail-deep-scan                → afternoon re-scan
20:00 referral-watchdog (Sun)        → 90-day owner referral asks
22:00 gmail-deep-scan                → final day-end scan
23:00 nightly-consolidation          → KG upsert + morning brief built

Background, every 30m, 6am-10pm:
qb-quarterback (the always-on nerve center)

How to add a new task

1. List existing: mcp__scheduled-tasks__list_scheduled_tasks (avoid collision)
2. Create skill at ~/.claude/scheduled-tasks/<task-id>/SKILL.md
3. Use local-time cron (not UTC) — scheduler evaluates in Joseph's local tz
4. If using Chrome, must use chrome_bridge.py per chrome_bridge.md (NOT mcp__Claude_in_Chrome__* — those break in scheduled context due to per-domain ACL)
5. Heartbeat must use canonical filename: YYYY-MM-DD_<task-id>_HHMM.json with required-fields shape
6. Add an entry to this reference doc

Cross-references