Meet G.R.A.C.E my AI Operating System
GRACE and the Agentic OS
For months I had a quiet diagnostic: the gap between what I felt I'd achieved in a day and what I'd actually shipped was wider than I wanted to admit. TikTok gave me the dopamine of progress without the substance. So I built a system that keeps score. I call it GRACE.
What I built
GRACE is a voice-first chief of staff. She lives at /admin on my own site, and /admin/home is the daily scoreboard. The pipeline is end-to-end: capture (voice note, iOS share-sheet, paste box), an overnight cron triages, a morning planner proposes three intentions, a content lane turns signals into drafts for LinkedIn / X / Threads / IG / article, and an evening check-in tallies what I actually shipped, not what I knew about.
How it's wired
Next.js, Supabase, and the Anthropic SDK. The voice turn loop runs Sonnet 4.6 with around a dozen registered tools; the cron generators run Haiku 4.5 with prompt caching on the system block, so the prompt hits the cache after the first run. Tools live in lib/jarvis/tools/, cron routes sit under /api/routines/* on Vercel's scheduler. The dashboard subscribes to Supabase Realtime, so a voice command on my phone updates the desktop view inside a second. Every Haiku generator has a tolerant JSON parser, a confidence gate, and a discriminated success/failure return, so no exceptions cross the route boundary.
Features shipped
- Capture. Voice + iOS share-sheet hitting a token-auth'd webhook, with a dedup window and a markdown fallback if Supabase is unreachable.
- Triage. Nightly classifier tags project + confidence and auto-archives anything untouched for 14 days.
- Morning plan. ≤3 ranked intentions written to
morning_proposed, never overwriting a locked-in trio. - Intention ticks + habits. Live-synced from voice or click, scored honestly.
- Content lane. Hook generator → approve → channel-aware drafter → copy/publish → published-today strip on the scoreboard.
- End-of-day check-in. Commits + vault actions + posts shipped, with a gap sentence that names the drift.
- Vercel build status. Voice and dashboard read-through across a multi-agent registry, with an 8h cron persisting history.
- Aspinall ideation lane. Originated thoughts promoted through a brand-aware drafter, with client names redacted at capture.
What's next
iPhone smoke test on the ideation lane. Wiring brand voice into the morning content digest. A DM-funnel skill that turns engagement-CTA comments into queued replies. Evaluating Blotato as a publishing layer. And a "deploys broken today" axis on the scoreboard, once the build-history table has a week of data behind it.
The point isn't that the system is finished. It isn't. The point is that the score is now honest.

James Aspinall
Full Stack Developer