aria · for muiez · 2026-05-03 · v3 (late evening update)

Aria is now one tap. One shortcut. One phrase. Hear, reply, ask — same surface.

v2 had three shortcuts (Relay / Latest / Respond). v3 collapsed them into a single smart shortcut that branches based on whether there's unread inbox. Plus a sneaky cross-agent fix where alcohol logs were going to the wrong table. Everything still runs on Mina's Mac for ~$0.20/day.

12tools 8endpoints 37/37tests passing 1shortcut (was 3) ~$0.20per day +3since v2
since v2 (this evening)

The problem.

All Mina's stuff lives on his Mac. He doesn't.

before

Six dashboards. One desk.

Cockpit · mina-pt · insta-agent · LeedAB · n8n · Second Brain. All useful, all anchored to a screen. Every walk, every chore, every commute = blind spot. Insights vanish. Captures don't happen. Decisions wait for desk time.

after

One agent. JBL or AirPods.

Aria sits in his pocket. He talks. She reads his vault, asks his other agents, captures his thoughts, briefs him in the morning, can pause to ask him a follow-up question, controls his music. The desk is optional, not central.

What Aria is.

A FastAPI service on the Mac, a Telegram bot, ONE iOS Shortcut on watch + phone, three launchd timers, persistent vault memory. ~2,300 lines of Python. Built across two weekends.

12tools
capabilities
Read vault, talk to mina-pt, search saved reels, capture thoughts, control Spotify, push, ask back mid-mission.
8endpoints
surface area
/tell · /push · /latest · /reply · /status · /mission · /stop · /health.
2timers
proactive
Morning brief at 08:00. Daily capture cleanup at 22:00. Both run as launchd jobs.
memory
persistent
aria-learnings.md grows over time. New facts ride in the system prompt every call.

How it's wired.

Phone is I/O. Mac is brain. Cloud is the model. Vault is memory. Other agents are spokes.

                     ┌── apple watch (haptic + tap surface)
                     
   jbl flex 3            ┌── second brain vault (read + soft-write)
                          │   _inbox/aria-captures/YYYY-MM-DD.md
                          │   Mina/aria-learnings.md (persistent memory)
                          
                          
   ┌────────────────────────┐         ┌──────────────────────────────┐
   │  iPhone                │         │  Mac (always-on, caffeinate) │
   │                        │         │                              │
   │   • iOS Shortcuts      │ ───────►│   FastAPI · port 8770        │
   │     (Relay/Latest/     │   POST  │   ├─ /tell  /push  /reply    │
   │      Respond)          │         │   ├─ /mission  /stop         │
   │   • Telegram bot DM    │ ◄───────│   └─ /latest /status /health │
   │     (watch buzz on     │         │                              │
   │      push)             │         │   Mission worker (asyncio)   │
   │                        │         │   • picks up pending          │
   └────────────────────────┘         │   • runs Claude w/ 12 tools   │
                                      │   • pauses on ask_mina      │
                                      │                              │
                                      │   launchd timers             │
                                      │   • 08:00 morning brief      │
                                      │   • 22:00 daily cleanup      │
                                      └────────────┬─────────────────┘
                                                   
   ┌──────────────┬──────────────┬──────────────┼──────────────┬──────────────┐
                                                                         
 claude api    mina-pt :8766  cockpit :8767  vault          insta-agent    spotify
 (sonnet 4.6)  (his coach)    (brain score)  (read+capture) :8765 search   via osascript

The 12 tools Aria has.

Every tool is async, returns a short string Claude can summarise, and writes nothing destructive without a soft-capture step. Tools tagged new shipped this evening.

read

read_vault(path)

Markdown read across allow-listed Second Brain folders. Denied: _secrets, _attachments.

read

read_cockpit()

Snapshot of meta-dash cockpit (brain score + dashboard summary).

read

read_aria_state()

Aria's own recent inbox + replies + unread count.

write

capture_thought(text, tag)

Soft-write to today's _inbox/aria-captures/. NEVER touches project files directly.

read

list_captures_today()

Used by the 22:00 cleanup mission to triage the day's captures.

read

query_mina_pt(question)

Ask Mina's existing health coach about training, recovery, supplements, sleep.

read

get_mina_pt_morning_brief()

Fetch the pre-built morning brief from mina-pt.

write

log_to_mina_pt(text)

Free-text log into mina-pt — workouts, meals, sleep, mood.

write

remember_about_mina(fact, category)

Append to Mina/aria-learnings.md. Loaded into system prompt every call. Cross-session memory.

read

search_insta_agent(query)

Search Mina's saved IG reels corpus (354+ reels). PT, mobility, anatomy, recovery — voice-callable.

action

spotify(action)

play / pause / next / previous / now_playing on macOS Spotify. AppleScript-based, no API key needed.

push

push_to_mina(message)

Telegram + watch buzz mid-call. Used when Aria has something Mina should hear separately from her main reply.

async

ask_mina(question, options)

Mission-only. Pauses the mission, pushes the question to Mina's watch, resumes when he replies. Round-trip async.

A day in the life.

Four flows Aria runs daily. All proven live in the v3 build session.

08:00 · morning

Brief while making coffee.

launchd fires the morning brief. Aria reads _PLANS.md, fetches mina-pt's brief, snapshots cockpit, pushes 3 staged messages to watch.

"TODAY: Obsidian Sync overdue. Anthropic key still pending. Right shoulder still flared — protect overhead. Quick win: rotate the mina-pt token, 5 min."
19:56 · drinking

Cross-agent log via voice.

Mina taps Aria → "Log to mina-pt that I had one low-carb beer." Aria routes through her log_to_mina_pt tool with the new [ALCOHOL] prefix → mina-pt's coach lands it in alcohol_logs (not meal_logs this time).

"Logged. One low-carb beer, 90 cals, 2g carbs. PT's also nudging your milk thistle if you haven't taken it."
17:45 · async mission

Aria pauses to ask back.

Mina dispatches a mission Aria can't fully decide alone. Mid-flow she calls ask_mina, which pushes the question + pauses. Mina taps Aria → speaks → mission resumes.

"❓ I can lean Rome AI or Pillarix this week — which industry are you trying to land first?" → "Construction." → mission continues.
22:00 · evening

Triage while winding down.

launchd fires the cleanup mission. Aria reads today's captures, proposes where each should land in Second Brain. Doesn't auto-merge.

"3 captures today: 2 → Pillarix project notes, 1 → Permanent. Approve in the morning."

The one-shortcut design.

v3 collapsed three iOS Shortcuts into one. Same UX, fewer items to remember, smarter routing. Tap once, Aria figures out what you need.

                                tap "Aria" complication
                                          │
                                          ▼
                                  GET /latest unread
                                          │
                          ┌───────────────┴───────────────┐
                          ▼                               ▼
                  unread > 0                       unread = 0
                          │                               │
                  speak each message                      │
                  Wait Until Finished                     │
                          │                               │
                          └───────────────┬───────────────┘
                                          ▼
                                Dictate Text (mic on)
                                          │
                          ┌───────────────┴───────────────┐
                          ▼                               ▼
                  user spoke                         silence
                          │                               │
                ┌─────────┴─────────┐                     ▼
                ▼                   ▼                 silent exit
        had unread = true     no unread
                │                   │
        POST /reply          POST /tell with allow_tools
                │                   │
        speak "Sent."         get reply, speak it

What it's connected to.

Two new spokes since v1 — insta-agent (saved IG reels) and Spotify (macOS app via AppleScript). No new infra. No new credentials.

vault

Second Brain

Obsidian vault — projects, plans, daily notes, identity files.

readsoft-write
health

mina-pt

His existing AI coach. Training, recovery, nutrition, sleep, supplements.

readlogbrief
ops

Cockpit / meta-dash

Daily ops snapshot — brain score, dashboard health, break reminders. Aria panel inside cockpit shows turns + cost + unread + last reply.

read
corpus

insta-agent

Mina's saved IG reels (354+ reels, mostly PT / movement / nutrition). Voice-searchable.

readv2
media

Spotify

macOS Spotify control via AppleScript. play / pause / next / now playing.

actionv2
memory

aria-learnings.md

Persistent facts about Mina. Loaded into system prompt every call.

appendload
channel

Telegram bot

Outbound delivery. Watch buzzes via standard iOS notification on the bot DM.

push
parking

aria-captures inbox

Daily soft-write target. Reviewed at 22:00 by the cleanup mission.

capturereview
budget

Cost-burn alerts

Aria pushes a one-time alert at 50%, 80%, 95% of daily cap. Stateless threshold-crossing detection.

push

Operational guarantees.

Aria is cheap, bounded, and graceful — these are the rails that make it safe to leave running.

cost

$5/day hard cap.

If daily spend hits the cap, /tell and /mission return 429 until Sydney midnight. Three soft-warning pushes precede the hard stop (50%, 80%, 95%). Today's run cost $0.18 across 20 turns and 6 missions.

latency

30s timeout per call.

If Anthropic's API hangs, Aria returns "thinking too hard, try again" rather than blocking the iOS Shortcut. Typical reply latency: 1.5–3s for no-tool, 3–8s for tool-calling.

safety

Allow-listed everything.

Vault writes go ONLY to _inbox/aria-captures/ — never project files. Vault reads exclude _secrets. Tools that take action (spotify, log_to_mina_pt, capture_thought) are scoped narrowly. No shell access in v1.

why this matters for leedab

Aria is the operator surface. Per-customer Aria is the LeedAB consumer-facing endgame.

What Mina built today is the personal version of what every LeedAB customer business will eventually need. Same shape: a per-business voice channel sitting between the operator and their AI ops system. Same substrate: a per-customer brain (Obsidian vault) underneath. Same delivery: phone + earbuds, no desk required.

The 12 tools Aria has on Mina's stack map almost 1:1 to the tools a small-business operator would need: read your CRM, capture a customer thought mid-call, log to your finance brain, brief me on today's sales, remember that this customer prefers async, pause and ask me before sending the contract. We're not building from scratch — we're proving the shape on the easiest customer (Mina) before generalising.

Status & next.

shipped 2026-05-03 (across three sessions)

What's done.

  • FastAPI service on Mac (port 8770) under launchd
  • ONE unified iOS Shortcut ("Aria") + Watch complication — replaces v2's three shortcuts
  • Telegram bot wired (token + chat_id filed in _secrets/)
  • 12 tools live: vault, cockpit, mina-pt, captures, memory, push, insta-agent, Spotify, ask_mina
  • Async mission worker — long tasks run in background, push when done
  • Mission resumption via ask_mina + /reply routing
  • Persistent cross-session memory (Mina/aria-learnings.md) — proven recall
  • Two launchd timers (08:00 morning brief, 22:00 daily cleanup) — FDA fix shipped
  • Cost-burn alerts at 50% / 80% / 95% of daily cap
  • Aria panel inside cockpit (turns + cost + unread + active missions)
  • Alcohol misclassification fix — server-side regex auto-prefixes [ALCOHOL] to catch coach-agent misrouting (proven live, beer correctly routed)
  • $5/day budget cap · 30s timeout · 37/37 tests passing
parked spec — ship when triggered

Phase 5 — n8n workflow trigger tool.

  • One Aria tool exposes every n8n workflow as a voice-callable capability
  • Config-driven workflow registry — add a workflow, instantly Aria-callable
  • Trigger condition: lead-gen pipeline + LeedAB workflows running. Until then, premature.
  • Build estimate when triggered: ~1.5 hours. Spec: aria/PHASE-5-n8n-trigger-plan.md.