Daily briefing didn't arrive
Symptom

It’s after 4:30 AM and you don’t see:

  • Email from beedifferent5455@gmail.com with subject “Daily Briefing โ€” …”
  • A current entry in ~/Sync/ED/morning-briefing.md (mtime should be today)
  • A Drafts note tagged “briefing”
Diagnose
# Did the scheduled task actually fire?
# (Check Cowork scheduled-tasks list; lastRunAt should be today ~04:01)

# Did the briefing write a file?
ls -la ~/Sync/ED/morning-briefing.md
# stale mtime = task failed mid-run

# Pull the audit log for today's 04:01 session
python3 << 'PY'
import json, os, glob, datetime
base = os.path.expanduser('~/Library/Application Support/Claude/local-agent-mode-sessions')
today = datetime.date.today().isoformat()
for f in glob.glob(f'{base}/*/*/local_*.json'):
    try: d = json.load(open(f))
    except: continue
    if d.get('scheduledTaskId') != 'daily-briefing': continue
    if datetime.datetime.fromtimestamp(d['createdAt']/1000).date().isoformat() == today:
        sess_dir = f.replace('.json','')
        print('Session:', sess_dir)
        print('  audit.jsonl:', os.path.getsize(sess_dir + '/audit.jsonl'), 'bytes')
PY

Read the last 20 events of that session’s audit.jsonl to see where it got stuck.

Common failure modes:

Failure Tell
*Shell-quoting hell on arr extraction Many retries with osascript โ†’ ssh โ†’ pct โ†’ docker โ†’ curl strings, never reaches Write step. Should NOT happen now โ€” Section 1 uses ~/scripts/arr-briefing-data.py. If you see this, the SKILL.md was reverted.
MCP unavailable homelab-snapshot MCP errored / not loaded. Fallback is to Read ~/Sync/ED/.homelab-snapshot.json directly.
Rate limit / API error rate_limit_event records in audit, or HTTP errors. Wait or check anthropic.com status.
Session timed out / token exhausted Session ran 7+ minutes and stopped mid-thought before reaching the Write step.
Fix

If today’s run failed:

  1. Force a manual rerun โ€” Cowork sidebar โ†’ Scheduled Tasks โ†’ daily-briefing โ†’ Run now.
  2. While it runs, watch for the same failure pattern. If arr-briefing-data.py is the culprit, test it standalone: python3 ~/scripts/arr-briefing-data.py --hours 24.
  3. If ~/Sync/ED/.homelab-snapshot.json is missing/stale, the launchd job (com.bee.homelab-snapshot) didn’t run โ€” kick it: launchctl kickstart -k gui/$(id -u)/com.bee.homelab-snapshot.
Verify

After the rerun:

ls -la ~/Sync/ED/morning-briefing.md     # mtime = today
ls -la ~/Sync/ED/todays-briefing.md       # mtime = today
cat ~/Sync/ED/morning-briefing.md | head -20
# inbox: subject "Daily Briefing โ€” <today>"

The SKILL is hardened to write explicit “No dictation in the last 24 hours” and “No diary entry for this date” lines when those sources are empty โ€” so even a no-content day produces a useful email, not silence.