Coordinator platform
Mahi
Mahi does the work; I make the calls. One always-on coordinator turns my rulings into briefs, puts the work through worker sessions, and brings back only what I have to decide.
What’s inside
One name, ten parts.
Each part is Mahi something, and each does one job.
Mahi Coordinator
The always-on session on my Mac mini. It reads the feed, writes briefs, launches and checks workers, and brings me the calls only I can make.
Mahi Events
One supervised daemon that runs twelve sources, among them mail, GitHub and the calendar, into the single feed the coordinator reads.
Mahi Calendar
Mahi’s own Google calendar. Every timed job is an event, and a ticker reads it every minute.
Mahi Comms
The message channel between Mahi sessions on different Claude seats. Every GitHub issue is one message, labelled for who it’s for.
Mahi Kit
Everything needed to run a second Mahi on another Mac: installer, launchers, hooks, skills and a memory mirror.
Mahi Queue
Claude Code Projects in the cloud that take code-only work off the mini: reviews, test runs and fix rounds.
Mahi Sync
Keeps the mini and my MacBook Pro level with GitHub every 15 minutes, and upgrades both each week.
Mahi Alerts
Pushover on my phone, for the alerts that are mine to act on. An urgent one repeats until I acknowledge it.
Mahi Voice
Mahi on the phone. On a long drive it calls me with the decisions that are waiting, and an urgent alert I haven’t acknowledged rings through.
Mahi Cloud
Mahi in Claude’s cloud sessions. It starts with the mini’s skills and instructions, and keeps the work moving when the mini is off.
How work moves
From a ruling to a result.
It started as one session I called the standing desk. The loop is the same today, on three Macs and three Claude seats.
-
It lands
A ruling from me or an event from the feed: mail, GitHub, a calendar job, an answer to a survey.
-
A brief
The coordinator writes the outcome, the lane the worker runs in, and the boundary it may not cross.
-
The work
A worker starts in the project’s own folder, with that project’s memory. The rule: every write to a live site is declared on a ledger before it happens.
-
The check
A live change counts as done only after the coordinator has read the result on the live system.
-
My call
Anything only I can decide reaches my phone as a survey: the context, the real options, and a recommendation with its strongest downside.
Mahi Calendar
A due date fires nothing.
Why it exists
Timed work goes on a calendar that something reads.
A due date on a task list is a record. It sits there being correct while the moment passes. In Mahi every timed job is an event on its own Google calendar, carrying a key for the job and the task behind it. When an event comes due, the ticker drops a line on the coordinator’s feed, and the coordinator acts on it like any other job.
- Moving the event moves the job.
- A late job says how late, and anything more than 36 hours overdue is reported as missed.
- A flagged event pushes to my phone until I acknowledge it.
- I overlay it on my phone like a family calendar.
Mahi Cloud
When the mini is off, Mahi keeps going.
Why it exists
One Mac mini is one place for everything to stop.
Until late September every Mahi session started on the mini. When the mini was down, or my own Claude quota ran out, the work waited. Mahi Cloud runs Mahi in Claude’s cloud sessions. A cloud session starts with the same skills, agents and instructions the mini has, does its work on a branch, and reports back through Mahi Comms. Two more Claude seats now take reviews, test runs and fix rounds, and one of them can run the coordinator’s loop when the mini can’t be reached.
- A cloud session starts with the mini’s skills, agents and instructions in about ten seconds.
- Three Claude seats split the work, each taking its briefs from the coordinator.
- A written runbook lets a cloud seat run the coordinator’s daily loop.
- A continuity plan sets out what keeps running, and who does what, if I can’t make the calls.
- A model from outside Anthropic reviews the pull requests that most need a second opinion.
The rest of the system
What Mahi stands on, and what it runs.
Each one has its own write-up.
Runs on GTD
Mahi keeps its state in my Getting Things Done system. Every timed job on Mahi Calendar carries the ID of the GTD row behind it.
CEO dashboard
Grafana and Postgres on a server I already paid for. One screen on Monday tells me whether the week needs anything from me.
Bookkeeping pipeline
Claude Code wired to Stripe, Mercury and QuickBooks. It cleared a backlog of 166 unreconciled transactions.