← J. Jaime Aleman

The night shift

Everything on /skills waits to be called. These don't. They run on a schedule whether I'm at the desk, asleep, or out — and most of the time I only find out because an email is waiting.

0
Scheduled
0
Always on
0
Skills I call
0
Subagents

They work when I don't

The dashboard says 2.3% of everything I've ever logged happens between 3am and 8am. That window is sleep — my quietest hour is 5am, at a fifth of one percent.

4 of these run inside exactly that window. The database gets backed up, the memory gets compacted, and the morning briefing is written and sent — all before I'm awake to ask for any of it.

03:00
pi-db-backup
04:00
claude-maintenance
07:00
pi-scout
08:00
pi-reminder-check

The schedule

systemd user timers — not cron. systemctl --user list-timers tells me what ran, what failed and what's next, which beats reading a log.

When Unit What it does
03:00 daily pi-db-backup Pi Database Backup (claude_memory -> R2, encrypted)
04:00 daily claude-maintenance Claude Data nightly maintenance (dedup, stale, embeddings, distillation)
07:00 daily pi-scout Content Scout — fetch, generate briefing, and email
08:00 daily pi-reminder-check Reminder Scanner — check pending reminders and notify
09:00 daily pi-yay-check Pi Yay Update Checker
10:00 daily pi-cf-cost-check Pi Cloudflare Cost/Usage Monitor
Sun 12:00 weekly pi-git-digest Weekly git digest — scan repos and email summary
every 6h cc-update-check Claude Code Update Checker
monthly, 06:00 claude-insights Generate Claude Code monthly insights report
00:00 daily create-daily-note Create daily note for Obsidian vault

Always on

Not scheduled — resident. These poll continuously and act on what arrives.

pi-ask-daemon

Pi ask@ email daemon (15s poll)

pi-claude-daemon

Pi claude@ email daemon (30s poll, queue + ntfy)

pi-lead-daemon

Pi lead intelligence daemon (15s poll)

How it's wired

The runner

A separate agent — Pi — with its own skill tree under ~/.pi/agent/skills/. Same idea as my Claude Code skills, different runtime: each timer points at a script, the script calls the model, the result gets emailed or pushed to ntfy.

Nothing here runs inside Claude Code. That's the distinction — I never invoke these.

The models

Deliberately not the same vendor I use interactively. Claude does the building; these run on OpenAI models, sized to the job:

gpt-5.6-sol
the scout's reasoning pass
gpt-4.1-mini
classification and filtering
gpt-4o-mini
cheap bulk summarisation

Unattended work is mostly filtering and summarising. It does not need a frontier model, and paying for one on a timer would be careless.

The 7am briefing

pi-scout is the one I'd miss. Every morning it pulls the Cloudflare and Astro changelogs, filters them against what I actually run, and emails a briefing — starred if it touches my stack, ignored if it doesn't.

It has been doing this for 78 mornings. It is, functionally, a newsletter with one subscriber, written by a machine that knows what I use.

Build d3f5416 ·