CRIS GROSSMANN 8 LIVE SYSTEMS MY STORY LET'S BUILD →
Cris Grossmann · Würenlos, CH next run 07:30 CET

Twelve agents,
two lakes,
one morning.

A personal operating system running headless on a Mac in my house. It reads my body and my money, reasons over fourteen years of my own training data and a decade of my finances, and has the brief written and waiting by the time I sit down with coffee.

No SaaS in the loop.
Nothing I don't own.

Health Lake POSTGRES

Every ride, run, swim, night, lift and blood panel since 2012 — one queryable truth instead of six apps that don't talk.
3,772Activities
8,586Nights tracked
3,237Strength sets
74Races

Money Lake POSTGRES

Every transaction since 2016 — categorised, reconciled, and mine.
16,093Transactions
97Accounts
29Tables
11 yrsContinuous · 2016→

What it replaced

Cancelled, not stacked

Before this, my own life was unqueryable. Training in Garmin, Strava, TrainingPeaks and RP Strength — four apps, none able to see the other three. Blood markers in a fifth that had never heard of my training load. Sixteen thousand transactions in a sixth. Six subscriptions, six logins, six versions of me.

Nothing could answer a question that crossed a boundary. Should I do the hard session tomorrow? needs last night's sleep, three weeks of accumulated load, and what Thursday actually looks like on the calendar. Where did the 92 seconds go? needs three years of race splits sitting next to last week's watts. I was paying USD 3,720 a year for the privilege of having my own data locked in six directions.

The system didn't get added on top of those tools. It ate them.

Running Coach→ Head CoachEUR 2,400/yr
Xero→ AccountantUSD 750/yr
RP Strength→ Head CoachUSD 299/yr
InsideTracker→ Health LakeUSD 150/yr
TrainingPeaks→ Head CoachUSD 120/yr
3,720USD / YEAR, GONE
The largest line was a human running coach at EUR 175 a month — and a good one. The difference isn't judgement, it's access: he saw a weekly summary, the agent sees every interval, last night's HRV and fourteen years of history. And I can ask it a question at 22:00 on a Sunday.

The morning chain

Daily · 07:30
07:30 one supervisor holds a lock, runs six links in order, times each one out, and resumes from wherever it broke.
01
Importer
Pulls Garmin and Strava into the lake. Dedupes the rides I record twice.
02
QA
Watchdog. Flags bad data, never fixes it. Watches respiration for early illness.
03
Assistant
Triages the inbox, drafts replies, files documents, keeps the calendar honest.
04
Vault Butler
Files loose notes into Projects, Areas, Archive. Never renames. Never deletes.
05
Head Coach
Reads body against training load and writes the day's session, watt by watt.
06
Chief of Staff
Assembles all of it into one brief and checks the day against my own rules.

The swarm

12 agents · headless

Each one wakes on its own schedule, reads its instructions fresh, pulls live data through a handful of shell tools, and writes back. Same engine, twelve jobs.

BODYHead Coachdaily + live
Bike, run, swim, barbell. Analyses every session down to the interval, programs the next one in watts, and reads blood panels alongside it.
ReplacedRunning Coach · RP Strength · TrainingPeaks
Strava next
BODYImporter07:30
Wearables and lab results into the lake. Uploads the raw files, dedupes the rides I record on two devices.
ReplacedInsideTracker · manual export · six dashboards
BODYQA07:30
The watchdog that only flags, never fixes. Catches a respiration drift days before I feel ill.
ReplacedTrusting the app was right
MONEYAccountantMon 07:00
Sorts expense mail into personal and company, reconciles against the lake, and learns from how I correct it.
ReplacedXero — USD 750/yr
MONEYDeal ScannerThu 08:00
Checks a watchlist against grocery promotions. Pushes only when the trip actually pays for itself.
ReplacedReading flyers
OPSAssistant07:30
Inbox, calendar, drafts, document archival. Drafts only — it never sends anything in my name.
ReplacedTwo hours of my morning
OPSChief of Staff07:30 + live
Synthesis. One brief, one priority, and a sanity check against the guardrails I wrote for myself.
ReplacedNotion dashboards nobody opened
OPSVault Butler07:30
Files loose notes into Projects, Areas, Archive. Never renames, never deletes, waits 24 hours before touching anything.
ReplacedFiling by hand, badly
OPSWeekly PlannerSun
Builds next week's scaffold around family blocks first, before training is allowed to touch it.
ReplacedSunday-night guesswork
OPSSynthesisSat 20:00
The weekly mirror — three themes, one contradiction I'm living, one question I'd rather not answer.
ReplacedA journal I stopped opening
OPSReconciliation01:00
Closes yesterday. What was planned against what actually happened, folded back into the record.
ReplacedNever looking back
OPSGardenermonthly
Tends the knowledge graph — reasoned backlinks across everything I've written, and a report on what's drifting.
ReplacedA graph that only grew messier

Two decisions that made it work

The agents are prose

Every agent's behaviour is a markdown file in my notes. Not a config, not a graph in someone's builder — paragraphs. When my coach got a race distance wrong, the fix was editing a sentence, on my phone, in bed.

It means the system is legible. I can read exactly why it told me something, and change how it thinks in the time it takes to write it down.

It also means the model is a component, not the architecture. It runs on Claude today because Claude is the best at this right now. The prompts, the lakes and the schedule don't care — swapping the engine is a config change, not a rebuild.

The data is the moat

Fourteen years of training and a decade of finances in Postgres I own, logic in a git repo I own, output in markdown files I own. Every vendor here is replaceable in an afternoon.

That's the part most people skip. An agent is a weekend. The corpus underneath it — the one that lets it say your bike is 92 seconds short and be right — takes years and can't be bought.

An agent is a weekend. The corpus is the decade.

What it actually produced

Measured, not estimated
USD 3,720
Cancelled per year
Five services gone — TrainingPeaks, RP Strength, InsideTracker, Xero, and a running coach at EUR 175 a month.
4 sec
Prediction error
It called my bike split three weeks before the race to within four seconds — and had already named it as the split costing me the podium.
CHF 0
Cost per run
Twelve agents, every morning, on a flat subscription. The metered API bill — USD 136 in July alone — is switched off entirely.
3 months
First commit to this
Started 25 May. Built alone, in the margins of a sabbatical, by someone who is not an engineer by trade.

Under the hood

BODY · MONEY · OPS = which lake an agent touches

The human layer is an Obsidian vault — the same markdown files I read every morning are the files the agents read and write. My daily brief, my training plan, my rules, and every agent's own instructions all live there as plain text, versioned in git. There is no admin panel. The notes are the interface.

Claude Code running headless, scheduled by launchd. A supervisor script owns the morning: lock, timeout, retry, resume, and a loud push to my phone if anything dies. Data lands in two Supabase projects with row-level security on every table. The human layer is an Obsidian vault — the same files the agents read and write.

Everything runs on a flat subscription, so the marginal cost of a run is zero. A watcher process sits on an inbox folder, so when I drop a note to any agent it answers in seconds rather than waiting for tomorrow.

It has been running every morning since May.

What broke first

Three months of scars

Getting twelve agents to run unattended every morning is not a prompting problem. These are the three that cost me real money and real trust, and what each one is now.

01

It was quietly spending my money

Every agent run billed the metered API. Nothing was broken, nothing alerted — the bill just grew in the background while the system looked like it was working beautifully. USD 136 in July alone, for a system I'd built to save money.
FixMoved everything to a long-lived subscription token — and then revoked the API key entirely. Not disabled. Revoked.
A fallback that costs money isn't a fallback. It's a leak with good manners.
02

It failed silently, and I found out hours later

An agent would die at 07:31. I'd notice at two in the afternoon when I went looking for a brief that was never written. Worse: two runs could overlap and quietly corrupt each other's state, and the only symptom was a day that read slightly wrong.
FixOne supervisor now owns the whole morning: a lock so two runs can never overlap, a timeout on every step, and resume — re-run it and it picks up from the link that failed instead of starting over. It only reports success once the last agent finishes, and that success pings an external dead-man's switch. If the chain dies, something outside my house notices.
Don't build alerts for failure. Build an alarm for the absence of success.
03

The alerts only reached the machine they came from

Notifications went to the Mac's notification centre — the Mac sitting in a room I'm not in at 07:30, because I'm on the bike. A system that tells you something is wrong, on a screen you aren't looking at, has told you nothing.
FixPushover. Genuinely the best few francs in this entire stack. One HTTP call from a shell script and it's on my phone, with priority levels that let a dead chain override silent mode. No app to build, no service to run, no account for anyone else to manage.
If it can't reach your pocket, it isn't monitoring. It's logging.
05 — Build yours

Want one of these running your week?

I built this for my own life — training, money, family, a company I no longer run. If you've got a routine worth the effort and data scattered across six apps that don't talk to each other, the same shape works. It isn't a product and I'm not selling one.

And if you've got an agent I haven't thought of, tell me that instead. The Deal Scanner exists because of a throwaway comment about grocery flyers. I'd rather hear your idea than my own again.

Tell me the problem → Easiest way in: just email me at cris@grossmann.ai. I read every one myself.