A production agent harness, built for one
I spend my days taking customers' agents from demo to production. So I built my own agent and held it to the same bar: it runs unattended on a MacBook Pro in the Shropshire Hills, I talk to it over Signal wherever I am, and it asks me before anything leaves the Mac. It reads my email, researches what's new each morning, writes and tests code in its own branches, runs studies for my posts and keeps the Mac secure.
A second life for a 2015 laptop
The harness runs on a 2015 Intel MacBook Pro with no GPU, a machine that otherwise looked redundant. Giving it a new job was part of the point. An agent harness doesn't need new hardware: the heavy thinking happens in the models, so the Mac only has to schedule, orchestrate, run tests and a few small local models.
That matters beyond my desk. For a laptop, most of the carbon is spent before it's switched on: Apple's own environmental report for the 2015 13-inch MacBook Pro puts 84% of its lifetime emissions in production. Giving old hardware a useful job is one of the quieter ways AI can be good for the environment.
The architecture
The model is the easy part. Most of the work is everything around it, the same layers an enterprise deployment needs.
Channel
A Signal gateway is the only way in. Questions arrive as numbered options I answer with one tap, and every command and reply is logged.
Orchestration
A scheduler and a job queue in SQLite. Every job has a visible state (running, waiting on me, in review, paused for quota) and survives a restart.
Workers
Coding agents work in their own branches and repos, never on main. Claude and Codex hand over to each other at usage limits through an AGENTS.md and a progress log in every repo.
Human in the loop
Pushes, merges, posts and spend need my yes. Before a job starts, an autonomy check confirms its plan can run end to end without me.
Verification
A delivery check reads every result before I see it: missing required work blocks; extras are reported, never fatal. Each deploy checks the service is still up 20 seconds later.
Observability
Every model call is traced, priced and logged to one usage ledger, with a carbon estimate. Tracing is fail-safe: if it breaks, the agent keeps running.
Security
Keys live in the macOS Keychain and never pass through chat or a command line. A daily check compares the Mac to a baseline and to published compromises, and repo alerts become fix jobs.
Cost control
Monthly caps per provider and a cap per study. Keys are tested daily, and when one expires the agent sends me the exact steps to renew it.
What it does each day
Triages new email, flags what's urgent or suspicious (it caught a spoofed sextortion email using my own address) and sends a weekday brief at 07:30.
Learning list
Reads the morning's AI newsletters, picks what matters for agents in production, suggests posts, and flags any tool in the news that's compromised and installed on this Mac.
Post studio
Proposes a post and the smallest test that would prove it, offers three ways to tell it, builds the study unattended, then sends me the carousel, post and first comment to copy.
Website
When I send it a LinkedIn link with /posted, it adds the post to this site and redeploys it.
What production taught me
- Gates multiply faster than capability. After a week of fixes the studio had become a state machine of tokens and checks. I cut it back to one agent that pauses at real decisions, which is what Anthropic's guidance on building agents recommends.
- Strict checks block good work. Three finished studies were stopped by format details: a label, an empty log, a GIF. The fix was a principle, not a patch: only missing required work blocks.
- Tests must touch the real thing. A dependency update passed every test and still crashed the harness at startup, because the tests skipped tracing. I rolled back in minutes; now a test starts tracing for real, and every deploy checks the service stayed up.
- Ground the agent in the source. A study once tested a weaker claim than the article it cited, because the article was skimmed. Now every source is read in full before a test is designed, and the post says which part the result supports.
- Deploy around live work. The harness only redeploys when no job is running, waiting or in review, the same rule I'd give a customer with calls in flight.
The harness repo is private, because it holds the wiring for my own email and devices. Happy to walk through it on a call.