MAURICE JAMES [email protected]

// engineering_case_study

MojoOS

An agentic AI operating system I designed, built and deployed on my own, in daily use since April 2026.

Architect and sole engineer, pair-programming with Claude CodePython · MCP · LLM APIsLos Angeles
128K
lines of Python
(tests not counted)
409
Python
programs
9
MCP servers
written from scratch
150
regression probes
run twice a day
1,110
commits since
April 23, 2026

Counted from the repository on October 19, 2026. Lines and programs exclude 256 test files. Commits include notes as well as code.

// 01 the_problem

Most AI work stalls in the same place.

The demo is impressive, everyone agrees it's the future, and then nothing reaches anybody's Tuesday.

The hard part was never the model. It's the eighty percent that comes after. The data is scattered across a dozen services that don't talk. The useful action is the one nobody will let software take unsupervised. And the person who'd benefit most is the one least willing to learn a new tool.

MojoOS is my answer to that, built for the hardest possible user: me, with no patience for anything that doesn't earn its place by the end of the week. It is not a proof of concept. Every piece of it went into daily use or got deleted.

// 02 architecture

One agent interface over everything.

Sources sit behind one interface instead of being wired to each other, so adding a service is one server, not a new connection to every other one.

SourcesMail and IMAP · calendar · Drive, Docs and Sheets · Notion · tasks · messaging · video
Integration layer9 custom MCP servers (7 in Python, 2 in Node) · OAuth · SQLite
OrchestrationMulti-agent routing · semantic retrieval · session state · scheduled jobs
Governance layerSend gating · privacy hooks · integrity checks · secrets isolation · 20 runtime hooks
Operator surfaceDaily brief · drafts · pipeline actions · task routing
Quality layer150 regression probes, twice a day · LLM-as-judge evaluation · adversarial probe tests

// 03 governance

The question was never what it can do.

The system can read a calendar, a mailbox and years of message history. So the interesting engineering question was what must it never be able to do, and how to enforce that in code rather than in a prompt.

Send gating

Outbound channels are classified by how reversible they are. Email, the most permanent, can only produce a draft through my own mail server. That rule lives in the server, so it holds even if every instruction above it is ignored. Every other send passes through a guard that logs it before it runs.

Privacy hooks

Per-channel filters strip private context from anything leaving the system, and adversarial tests actively try to smuggle content past them.

Integrity monitoring

Permission configs are hashed and checked every day. A guard that can quietly switch itself off is worse than no guard, so a mismatch raises a blocker, not a log line.

Secrets isolation

Credentials live only in environment variables outside the repository. They never enter the knowledge base, and a pre-execution hook blocks shell commands that would print them.

// 04 quality

The failure I care about is the silent one.

An integration that keeps returning plausible, stale answers after the platform underneath it changed is worse than one that crashes, because nothing looks wrong.

Apple moved where text messages are stored. My message reader kept reading the old place. When I measured it, 1,292 of the past week's 1,329 messages, 97.2%, were invisible to it. Zero errors. And the newer the message, the worse it got.

Regression probes

A probe suite runs twice a day. When a failure is confirmed and code can check for it, it becomes a permanent probe, so that mistake can't come back unnoticed. 70 of the 150 trace to a specific logged miss. The registry can grow or hold. It can't shrink without a dated reason.

Drift canaries

For the interfaces that have already failed silently once, standing checks read a known-recent record and assert its shape still holds. That is the fix for the message-reader failure above.

Evaluation

An LLM-as-judge layer scores generated drafts against a hand-labeled golden set. It is advisory on purpose: it flags, it never rewrites.

Invariants in code

20 runtime hooks run around every action. Some block unsafe actions outright; the rest log and audit. The principle: anything that relies on the model remembering to behave eventually won't.

// 05 what_it_runs

It runs my working life, not a sandbox.

The piece I'd point at first is a daily brief that sweeps mail, calendar, tasks and message history live at the moment it's written, never from a cached snapshot. It surfaces what's owed, what's going stale, and what needs a decision. Its whole job is to be useful to a non-technical person before their first coffee. Everything else is plumbing in service of it.

One example of that plumbing is inbox triage. It decides by sender, not by message. Cheap rules settle most senders. A model judges only the ones the rules can't. A human approves the groups, and every override is logged so the next pass learns from it.

42,735
messages cleared from my own inbox, with a receipt for each batch
59
senders blocked in code, mostly because a real person might be mixed into the bulk mail or the sender looked spoofed
747
new messages from already-sorted senders in 17 days, which is why the last step writes real inbox filters

// 06 first_client

I built it for my own company first.

KNKY Comedy is the live comedy company I started: five platforms, none of them talking to each other. One morning the system flagged a show that had come in far below its own average. It pointed to two likely causes nobody had connected to it. Our paid ads had been off since April. And our emails had drifted from early warm-ups to day-of blasts. It told me to restart the ads and rebuild the early emails.

The same analysis found that one ticket tier, VIP, brought in 32% of our LA revenue from about 14% of tickets, and we were barely promoting it.

// 07 stack

Stack

PythonClaude CodeAnthropic APIModel Context ProtocolNode.jsSQLite REST / OAuth 2.0Semantic search / embeddingslaunchd · cron Google Workspace APIsNotion APITodoist APITelegram Bot APIGit

// walkthrough

The code is private, because it runs my life and holds my data.

I'm happy to walk you through the architecture and the evaluation layer in 20 minutes.

[email protected]