← Selected work

Case study / 01 / Local-first macOS agent

Jarvis

Jarvis is a local-first macOS agent I built for everyday desktop work. It combines voice input, authorized screen context, persistent memory, and bounded actions while preserving visible confirmation for anything consequential.

Ask about early access

Have a Mac workflow you would like to simplify? Tell me what you do today and where it gets in the way.

Private build. Public access and pricing are not available yet.

Status
Working installed macOS build
Platform
Native macOS / local-first
My role
Product direction · System architecture · Swift and Python implementation · Evaluation · Testing · Release

01 / Problem

Reliability begins where the voice demo ends.

A voice assistant becomes unreliable when audio is noisy, permissions change, context shifts, or a workflow completes only halfway. Jarvis separates perception, interpretation, policy, execution, and verification so each failure can be handled deliberately.

02 / My role

Product judgment carried through the release.

I defined the product behavior and safety contract, directed the architecture, implemented and reviewed the native and Python layers, designed acceptance tests, and own the release process.

03 / Approach and decisions

Separate interpretation from authority.

Jarvis is structured so perception, interpretation, policy, execution, and verification remain distinct. The model can help understand a request; deterministic policy and visible confirmation decide what may happen next.

01

Human authority stays separate

Voice recognition personalizes access; Touch ID and visible confirmation authorize credentials and consequential actions.

02

Models have to earn a route

Local chart-vision models were measured and rejected when speed and accuracy could not meet the bar. The working system keeps deterministic paths fast and specialists on demand.

03

Recovery cannot become replay

A bounded watchdog reports failures without repeating commands, forwarding an unverified voice, or bypassing confirmation.

Request lifecycle

Perception, policy, action, proof.

Each layer has one bounded responsibility. That keeps permissions, confirmation, cleanup, and success reporting outside model confidence.

SwiftAppKitCore AnimationPythonApple Foundation ModelsMLXQwenCore MLWeSpeakerSQLite FTS5ScreenCaptureKitSpeechAnalyzer
  1. 01PerceiveVoice · screen · app state
  2. 02InterpretIntent · context · memory
  3. 03GatePolicy · risk · confirmation
  4. 04ExecuteNative action · bounded workflow
  5. 05VerifyPostcondition · cleanup · report

04 / Authentic interface

Internal state made visible.

The interface grows from a compact 112-point presence to a 248-point active state, then settles back into standby. This native preview shows the current plasma layers, iris, sweeping light, and response aura across seven states. Use the controls to explore the sequence.

Jarvis / Native interfacemacOS
Jarvis native awake state

Native interface preview · Simulated state and audio input. Motion is off until you press play.

Rendered from the current macOS animation code, including the full expansion and collapse. Subtle GPU particle effects are absent from this render. Download the 22-second preview ↗

05 / Delivered system

A working agent with explicit boundaries.

01

Reliable voice input

Apple SpeechAnalyzer handles everyday dictation; local Whisper is an on-demand recovery path for low-confidence audio. Silence detection, background media, device changes, and natural phrasing are treated as normal operating conditions.

02

Screen context and durable memory

ScreenCaptureKit supplies explicit visual context while SQLite FTS5 preserves useful preferences, project evidence, and workflow state with provenance and a locally enforced private mode.

03

Human-controlled execution

Actions are separated from model suggestions. Consequential typing, clicking, sending, settings changes, and external effects stay behind visible confirmation and verification steps.

04

Efficient local model routing

Deterministic commands stay instant. Apple Foundation Models, local Qwen, transcription recovery, and visual reasoning are selected by task and unloaded when idle.

06 / What the build demonstrates

Measured routes, bounded recovery, no idle inference tax.

Installed-build evidence and hardware-dependent behavior are kept separate. These design outcomes are part of the current working system.

01

A native presence without an idle tax

The seven-state Core Animation presence makes system state visible without a display loop or resident inference model. An August 2026 installed-build check measured 42.7 MB at settled idle on the development Mac.

02

Thresholds and routes come from evidence

Voice acceptance is tuned against labeled samples, and model routes are kept only when measured accuracy, latency, and resource use clear the product bar.

03

Failure is an explicit system state

Permission changes, interrupted audio, partial actions, Siri handoff, device changes, and workflow cleanup each have bounded recovery and a verifiable outcome.

307 testsPassed in the August 15, 2026 installed-build checkpoint
42.7 MBSettled idle on the development Mac, August 15, 2026
Human approvalConsequential actions remain confirmation-gated
1.1 sWarm local conversation benchmark, August 2026; hardware-specific