Symptom
It’s after 4:30 AM and you don’t see:
- Email from
beedifferent5455@gmail.comwith 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:
- Force a manual rerun โ Cowork sidebar โ Scheduled Tasks โ
daily-briefingโ Run now. - While it runs, watch for the same failure pattern. If
arr-briefing-data.pyis the culprit, test it standalone:python3 ~/scripts/arr-briefing-data.py --hours 24. - If
~/Sync/ED/.homelab-snapshot.jsonis 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.