Since March 2026 I've been building personal systems with Claude that run my job search, my mornings and my email. I've become quite comfortable working with AI and maintaining the agents and automations I build, mostly with Claude (Chat, Code, and Cowork) and ChatGPT (Chat and Codex), including connecting them through APIs to other software like Notion.
Claude Code wrote the code at my direction. My part has been deciding what each system should do and catching it when it went wrong. The part I enjoy most is keeping it all in order, knowing what each tool is for and whether it's still worth what it costs.
This page is the record of that work, including the routines that were improved, replaced or retired along the way.
These are personal systems with one user, so the scale is small. The upkeep they need is the same kind a team's AI tools need, and I've been doing it every week since July.
One registry lists every automation with its purpose, schedule, model, logs and whether it should be running. A weekly check compares the list with what's actually scheduled, and anything running that isn't listed gets flagged. That check found a job that had failed for 9 straight weeks. Each job names its own model, so nothing quietly runs on a stale default.
Every new automation starts with the need it serves and a comparison of a plain script against each model size on cost and value. When I reviewed 12 niche job boards, two met the need and were adopted, and the other ten are on record with the reason each was skipped. Retired tools keep a note on why they went, so nobody rebuilds them by accident.
Every AI job logs its tokens on each run, and the weekly check reports usage by job. Usage numbers showed a nightly sync spending 690,000 tokens to save about one note. An adoption audit showed my writing corrections almost never reached the knowledge base, so I moved the capture to the moment I make them.
Each job gets the least access it needs. The brief and the alerts read Gmail through a read-only token, and only the cleanup job holds write access, on its own token. Keys live in the macOS Keychain. I trimmed two permission lists that had grown to 242 and 24 one-off approvals, so each unattended task now has one exact permission.
Status names live in one file every script reads. Stable IDs stopped duplicate listings, 25 missing application dates were backfilled and marked as estimates, and my labels are saved before any row is archived. Outdated notes get marked superseded so search stops surfacing them, and the nightly backup refuses to overwrite itself with a smaller copy.
Each of these started as a specific problem. They're now the rules every new automation has to follow.
Plain scripts handle fetching, sorting and date math. AI only gets the parts that need judgment, and the smallest model that does the job well.
Every job that uses AI records its tokens on each run. Before I build anything new, I compare a plain script with each model size on cost and value.
Filtered jobs go to a log, my labels are saved before anything is archived, and the health check reads every error log.
My career record holds only facts I've confirmed in my own words. Anything Claude inferred waits for me.
Once I decide something, it's recorded as final. New evidence gets raised once as a question, and nothing changes until I answer.
My records are versioned in local git with no remote. Alert texts carry a category and a count, never who sent the email.
Read it by area to follow one system from its first version to now, or as a timeline to see how the pieces grew together. The Fixed filter shows the problems I worked through.
This is my registry as of October 2026, in plain language. Usage figures come from the per-run token logs.
| Tool | Use case | AI used | Access it holds | Usage | State |
|---|---|---|---|---|---|
| Job scraper and scoringDaily 6:00am | Find new roles and score them against my profile | Opus 5, batch | Public job boards, Notion Job Listings, API key in Keychain | ~$1.41–2.25/run | Active |
| Daily job cleanupDaily 8:45am | Learn from my rejections, save labels, archive dead rows | None | Notion Job Listings | 0 tokens | Active |
| Target employer sweepSundays 7:00pm | Check employers on my list for new roles | Opus 5, batch | Public career feeds, Notion | ≤25 jobs, ~2¢ each | Active |
| Morning briefDaily 7:00am | One page with my day, email that needs me and application status | Haiku 4.5, one call | Gmail read-only, Calendar, Notion homepage and to-dos, Open Brain | ~7K tokens/run | Active |
| Email alertsEvery 15 min, 7am–9pm | Text me when an employer or a bill needs me | None | Gmail read-only (shared, never rewritten), Messages | 0 tokens | Awaiting first supervised run |
| Gmail cleanupMondays 3:00am | Clear promotions and old mail | None | Gmail with write access, on its own token | 0 tokens | Active |
| Weekly reviewSundays 11:30am | Fold my corrections into the verified career record | Sonnet | Open Brain, Notion review page, local records | ~350–450K tokens/run | Active |
| Review apply stepDaily 8:00pm | Apply the changes I approved | None | Notion review page, local records | 0 tokens | Active |
| Weekly code reviewSundays 10:30am | Find bugs in one changed automation a week | Sonnet 5.5, high effort | Local code, read only | ~25K tokens/unit | Active |
| Health checkSundays 10:00am | Compare the registry with what's running, read error logs, report usage | Claude task, one script | One exact permission, Notion health log | logged weekly | Active |
| Nightly backupDaily 11:15pm | Export Open Brain and commit every record store | None | Open Brain read, local git with no remote | 0 tokens | Active |
| Bills reset1st of the month | Untick last month's Paid boxes | None | One Notion page | 0 tokens | Active |
| Notion to Open Brain syncDaily 11:10pm | Save notes from my homepage | Sonnet, only on change | Notion homepage, Open Brain, Calendar | 0 most nights | Paused |
| Interactive toolsOn demand | Writing, building and reviewing | Claude Chat, Code and Cowork; ChatGPT Chat and Codex; Claude and ChatGPT review each other's drafts by copy and paste | Connectors to Open Brain, Notion, Gmail and Calendar | best current model | In use |
Most of my first routines were Claude tasks that did everything inside the model. Rebuilding them as scripts with one small AI call is where most of the savings came from.
| Original | Ran | Why it went | Replaced by | Cost before → after |
|---|---|---|---|---|
| Four daily email digests | Mar–May | Hit my usage limit; every slot was scheduled twice; Notion writes timed out | Rules inside the morning brief, plus text alerts | 3–5M/day → 0 extra |
| Morning Window recap | Mar–Jun | Lost when projects moved folders; mostly empty sections | Morning brief (script + one Haiku call) | 460K → 7K/run |
| Daily GRC job digest | Apr–May | Web search was expensive and inconsistent | Job board scraper, later two niche boards | 1.7M/run → scraper |
| Monthly bills reset task | Jun | Unticking checkboxes needs no AI | Plain script with a once-a-month guard | ~1M/run → 0 |
| Nightly Notion sync task | Apr–May | Spent heavily to save about one note a night | Script with a free change check (paused) | 690K/run → 0 most nights |
| Side-by-side scoring test | Sep 5–10 | Proved batch and live scoring agree on 236 of 237 jobs | Switched off once proven | ~$25/month → 0 |
| Two separate job archivers | Jul–Oct | One archived a row before my label was saved | One daily cleanup pass | no AI either way |
| Duplicate Gmail cleanup job | 9 Mondays | Pointed at a folder, so it never ran once | Removed; drift check rewritten | n/a |