niclydon.io
NEXUS
A distributed AI agent platform for personal intelligence
Nexus is a personal AI family office: a data lakehouse and a team of agents that monitor, analyze, and act on one person's digital life. Email, messages, photos, health, music, and money land in one PostgreSQL store on three machines at home, organized by a knowledge graph the agents read and write through governed paths. Muster coordinates the fleet. Nova, the chief-of-staff seat, routes the work and holds the follow-through.
858
Tables
40K
Knowledge Facts
23K
KG Nodes
265K
Music Plays
171K
Photos
282
MCP Tools
Knowledge graph constellation
PLATFORM SNAPSHOT · OCTOBER 15, 2026 · FIGURES FROM THE LIVE SYSTEM AT SNAPSHOT TIME
Why local

Curiosity, mostly. And a refusal to keep paying per token.

This started because the cloud AI bill kept climbing. OpenAI for chat, Anthropic for reasoning, Google for embeddings, Replicate for image gen, Runway for video, ElevenLabs for voice — every interesting idea meant another metered API and another monthly invoice that scaled with use. Building something ambitious meant signing up to pay forever.

So Nexus runs at home, on two mini-PCs and a Mac mini. The database is local. Inference is local-first: most tokens, embeddings, photo descriptions, transcriptions, face matches, and reranked results happen on hardware I own outright, and Forge sends a job to a cloud model only when that is the right tool for it. The marginal cost of an idea is zero — which turns out to be the only constraint that matters for actually building things.

Free per token
Zero marginal cost on every chat, embedding, photo description, transcription. Run a million inferences a day, the bill is the same.
Fast iteration
Try wild ideas without watching a meter. The interesting experiments — bulk reprocessing, daily life chapter generation, full-corpus reembedding — only happen when there's no per-call cost.
Real engineering
Tensor splitting large models across two GPUs over a Thunderbolt fabric, building a burst autoscaler for workers, wiring a fleet of agents into a coordination protocol — the project is the point.
Yours
No vendor changes a price, deprecates a model, or rate-limits a key out from under the core system. If every cloud AI company disappeared tomorrow, the lakehouse, the graph, and the local lanes would still be running in the morning.

The hardware

Two GMKTec EVO-X2 machines connected by a Thunderbolt 4-class link, running AMD Strix Halo. Furnace carries a 64 GB GPU frame buffer (reduced from 96 GB on September 5, 2026); Crucible devotes 48 GB of its 64 GB unified memory to the GPU. 112 GB of GPU memory across one platform, split across two brains.

Furnace and Crucible

Furnace

Primary Compute
CPUAMD Strix Halo
Memory128 GB
VRAM64 GB Frame Buffer
RoleGateway + Primary LLM
ServicesAPI, Worker, Forge, DB
↔
Thunderbolt 4-class
40 Gbps
0.12 ms latency

Crucible

Satellite Compute
CPUAMD Strix Halo
Memory64 GB
VRAM48 GB Frame Buffer
RoleTensor Split + Creative
ServicesRPC Worker, ComfyUI
112 GB
Total GPU frame buffer across two machines
RPC Tensor Split: llama.cpp's RPC protocol can distribute a large model's layers across both machines — Furnace and Crucible — over the Thunderbolt fabric. Tensors transfer at 40 Gbps with sub-millisecond latency, making the split nearly invisible to inference speed. The resident models are sized to run whole on one machine; the split is there when a job outgrows a single GPU.

Three machines, four fabrics, one brain

Furnace, Crucible, and Anvil are stitched together with four distinct network paths — a dedicated Thunderbolt 4-class cable for the hot loop, a Thunderbolt bridge for the Mac, Tailscale overlaying everything for secure remote access, and 1 GbE for background LAN traffic. Each link carries different flows and has wildly different latency characteristics.

INTERNET / WAN Anthropic · Google · GitHub · Resend · Pushover · AWS · Cloudflare LAN Gateway home · 1 GbE WAN Furnace AMD Strix Halo · 128 GB · 64 GB VRAM eno1 · LAN tailnet LLM INFERENCE (llama.cpp · ROCm) llama-server Gemma 4 12B (chat) llama-priority Qwen3-8B forge-vlm → Anvil Qwen3-VL-8B llama-embed Qwen3-Embedding-8B · 4096-dim whisper · faces · rerank higgs-tts · ocr · musicgen FORGE LLM GATEWAY forge-api FastAPI · OpenAI-compat Routes localhost models + Anvil VLM + Crucible NEXUS PLATFORM nexus-api Express + agent REST nexus-mcp Streamable HTTP nexus-worker tool exec server nexus-worker agent cycles + jobs DATA LAYER PostgreSQL 16 listen: localhost, TB bridge, Furnace (TB direct), tailnet Postgres · direct connections WEB / EDGE :443/:80 caddy reverse proxy desk web (Next.js) nexus site MCP SERVERS (stdio) gmail · google-drive · cloudflare · github notion · brave-search · next-devtools INFRA / OBS prometheus · node-exporter postgres-exporter · blackbox Crucible AMD Strix Halo · 64 GB · 48 GB VRAM eno1 · LAN tailnet LLM INFERENCE rpc-server llama.cpp tensor RPC exposes GPU to Furnace's llama-server NEXUS BULK crucible-bulk.service WORKER_MODE=scaler · ephemeral bulk workers bulk-runner children spawned on demand from tempo_jobs backlog DATABASE_URL → Furnace · TB direct FORGE_URL → Furnace · TB direct FORGE_PRIORITY → Furnace · TB direct FORGE_BASE_URL → Furnace · TB direct TOOL_SERVER_URL → Furnace · TB direct INFRA / OBS node-exporter · sshd NETWORK INTERFACES eno1 LAN /24 1 GbE tailscale0 tailnet overlay thunderbolt0 TB direct → Furnace thunderbolt1 TB bridge link down — no direct route ACTIVE TB CONNECTIONS rpc-server ← Furnace (llama RPC, TB direct) node → Furnace (TB direct) (bulk → pg) node → Furnace (TB direct) (scaler → pg) All Crucible→Furnace flows are on the direct TB cable. Anvil Mac mini M4 · macOS en0 · Ethernet tailnet MCP servers (SSH stdio): apple-photos · imessage · apple-ecosystem bridge0 · TB bridge (en2 + en3 bridged) · forge-vlm-anvil VLM (Qwen3-VL-8B) · Apple Photos / Vision frameworks eno1 (LAN+Tailnet+WAN) eno1 (LAN+Tailnet+WAN) en0 (Ethernet) Thunderbolt Direct Furnace ↔ Crucible 40 Gbps · ~0.12 ms · dedicated cable llama-server ──╮ pg ─╮│ forge ╮││ tool-srv ╮│││ ╰── rpc-server │╰── crucible-bulk ││╰── bulk workers │││╰── bulk workers tb1 → bridge0 Furnace → Anvil tb1 · link down no direct leg — via Furnace TB Anvil Bridge ~0.18 ms Tailnet overlay (encrypted, rides the LAN) SSH MCP stdio
Thunderbolt direct · 40 Gbps · 0.12 ms TB Anvil bridge · 0.18 ms Tailnet overlay (encrypted) 1 GbE LAN Ethernet (Anvil) Internet / WAN

Furnace ↔ Crucible

FlowEndpointPath
llama-server → rpc tensor splitCrucible · TB directTB direct
crucible-bulk → PostgreSQLFurnace · TB directTB direct
bulk worker → Forge APIFurnace · TB directTB direct
bulk worker → tool exec serverFurnace · TB directTB direct

Anvil ↔ Cluster

FlowEndpointPath
Forge → Anvil VLMAnvil · TB bridgeTB bridge
Worker → Apple Photos MCPssh stdioTailnet
Worker → iMessage MCPssh stdioTailnet
Worker → Apple Ecosystem MCPssh stdioTailnet
Remote admin / laptopsshTailnet

The software stack

TypeScript PostgreSQL Node.js Express Next.js llama.cpp Tailscale MCP Protocol systemd

Nexus is an npm workspaces monorepo with four packages. The API server handles external requests, the Worker runs agent cycles and processes jobs, the MCP server exposes tools via the Model Context Protocol, and Core provides shared services used by all three.

@nexus/core
Shared services, types, DB, auth, migrations
@nexus/api
Express REST API
@nexus/mcp
MCP Streamable HTTP
@nexus/worker
Agent runtime, job executor, tool server

Worker modes: The workers run in two postures. Furnace baseline handles agent cycles, event listeners, and urgent jobs on the primary node. Crucible burst handles the long-running LLM work — embeddings, sentiment analysis, photo descriptions — from a persistent bulk worker on Crucible, and the autoscaler adds ephemeral burst runners alongside it when the queue grows, removing them when it drains. Furnace does not autoscale; the burst capacity lives on Crucible.

Forge
The Nervous System

Unified LLM API gateway running on Furnace. Every agent, every tool, every background job — all inference routes through Forge. 106 OpenAI-compatible routes with request logging, model routing, Prometheus metrics, and circuit breakers. Local inference is the default, not the only path: Forge also routes to cloud models, including Claude Opus, when a job calls for more than the resident models can give.

/v1/chat/completions /v1/embeddings /v1/describe /v1/transcribe /v1/tts /v1/faces/detect /v1/rerank /v1/models /v1/generate
Local-first inference, cloud when it fits
Forge

LLM models

Four resident models, one per job, spread across the three machines. Chat and classification live on Furnace, embeddings are mirrored to Crucible, and vision runs on Anvil next to the photo library. Each model is purpose-matched to its workload.

Gemma 4 12B
Resident · Furnace
Resident chat model on Furnace Agent cycles, briefings, generation The default route in Forge
Primary
Qwen3-8B
Resident · Furnace
Classification and priority routing Triage, scoring, fast cycle work The priority slot in Forge
Fast
Qwen3-Embedding-8B
Furnace + Crucible
4096-dimensional embeddings Mirrored on Crucible Semantic search across all data
Embeddings
Qwen3-VL-8B
Resident · Anvil
Vision-language model Photo description, OCR, visual QA Runs beside the Apple Photos library
Vision

The service layer

Ten specialized services running alongside the core LLM models. Each handles a specific modality — vision, audio, identity, search — all accessible through Forge's unified API.

VLM
Vision Language Model
Photo description, visual QA, OCR
Embed
Embeddings
Semantic search, 4096 dimensions
Whisper
Whisper
Speech-to-text transcription
InsightFace
InsightFace
Face detection and recognition
Reranker
Reranker
Search result reranking
OCR
Unlimited OCR 3B
Document text extraction
TTS
Higgs TTS
Text-to-speech · Higgs 3.4B, Kokoro 82M on Crucible
Diarization
Voice Diarization
Speaker identification
Sentiment
Sentiment Analysis
LLM-powered sentiment scoring
LLM
Image Gen
Image Generation
FLUX.1 + Z-Image via sd.cpp (Furnace) · ComfyUI (Crucible) · Wan 2.2 video

Nineteen sources, one graph

Everything a digital life touches flows through the same ingestion pipeline: normalize → deduplicate → store → enrich (sentiment, embeddings, knowledge graph) → proactive rules. Sources run on different cadences — some real-time, some scheduled, some manually imported archives — but they all land in the same PostgreSQL database and are queryable as one dataset.

iMessage
MCP · 60s
108,785 messages
Gmail
MCP · 90s
79,874 emails
Apple Photos
MCP · 15 min
171K photos
Google Calendar
MCP · 5 min
live sync
Contacts
iCloud DB · 6h
149 Apple · 146 Google
Looki wearable
API · 60s
3,686 moments
Apple Health
Relay sync
5,539,242 records
Strava
API
464 activities
Spotify history
JSON dump
187K plays
Last.fm
JSON dump
68K scrobbles
Apple Music
Biome SEGB · 6h
10,373 tracks
Netflix history
CSV
4,946 views
Travel archives
Flights · Trips
347 records
Historical archives
Blog · Guestbook
1,558 records
Blink cameras
API · motion
live events
Plaud
API · recorder
meetings · transcripts
WHOOP
API · band
recovery · sleep · strain
Google Voice
Takeout + sync
calls · texts
WhatsApp
Local DB sync
messages

Each source lands raw in bronze (aurora_raw_* tables) and is normalized into silver unified views, then fans out through the enrichment pipeline: sentiment analysis, 4096-dim embeddings, knowledge graph extraction, and GPS reverse-geocoding where applicable. The proactive engine watches all sources and surfaces significant events to agents via the inbox. Nothing is truly siloed — a photo cluster can cross-reference a trip, which cross-references messages with a person, which cross-references a song played during that week.

One message, end to end

Watch a single iMessage flow through every stage of the system — from arrival to action — in about thirty seconds. This is the same path every piece of incoming data takes.

arrive iMessage MCP · 60s poll normalize Pipeline bronze → silver embed Qwen3-Embedding-8B 4096-dim sentiment Forge LLM extract knowledge graph facts + entities classify PIE engine significant? deliver ARIA inbox LISTEN/NOTIFY act cycle wakes tool calls 01 02 03 04 05 06 07 08 Hey, are you free tomorrow?
01 message arrives via Apple Photos / iMessage MCP poll 02 Pipeline lands the raw record in bronze, normalizes it into silver 03 embedding generated, stored in pgvector 04 sentiment classified via Forge priority LLM 05 entities + facts extracted into the knowledge graph 06 proactive engine scores significance 07 if significant, NOTIFY ARIA's inbox channel 08 ARIA wakes mid-cycle, decides what to do, calls tools

Meet the agents

The agent cast of the Nexus runtime, each with a distinct role and personality. They coordinate through Muster, the fleet coordination layer, run on configurable schedules, and operate under graduated autonomy levels.

Insight
Insight
Analyzes patterns across 40K knowledge facts and personal data
PlatformOps
PlatformOps
The operations brain — trend review and incident diagnosis for the whole stack
ProjectManager
ProjectManager
Owns the Operator Backlog end to end — triage, lanes, proposals, follow-through
SecurityAnalyst
SecurityAnalyst
Read-only reasoner over the security evidence plane — findings explained, work proposed

What the agents are actually doing

Every agent cycle is a complete loop: load state → reason via LLM → pick tool calls → execute → log the outcome. Every cycle ends in a logged decision: what the agent saw, what it reasoned, what it did. Published snapshots of this page can carry one real decision, redacted and walked through step by step, with a sampled feed of recent agent activity underneath. This snapshot ships without one.

Loading decision trace…

Lately

Sampled · sanitized · from the platform snapshot

Loading…

The MCP connection web

A web of MCP servers connects external services — Gmail, GitHub, Notion, iMessage — into a unified tool catalog that agents discover on demand. The Nexus MCP server alone exposes 282 tools.

NEXUS
282 tools · one protocol

Agent architecture

Each agent runs as a short-lived cycle: load soul package, gather state, call Forge, parse actions, execute tools, log decision, under graduated autonomy and approval gates.

Agent-Spec — Agent Persona Packages ▼

Agent personas follow Agent-Spec, the platform's versioned soul format (ARIA runs assistant-v1; ProjectManager runs synthesis-v1). Each agent has a soul package directory containing standardized files that define identity, behavior, and operational context.

The framework uses progressive disclosure — Level 1 loads only the manifest for quick discovery, Level 2 loads core behavior files every cycle, and Level 3 adds coordination context only when the agent has unread inbox messages. Most cycles are quiet, so Level 2 keeps token costs minimal.

Below is the actual content of the five active agents' soul packages, loaded straight from disk. Pick an agent, pick a file, see exactly what their LLM cycles get:

Loading…

The soul loader caches manifests per process and re-reads files on worker restart. Prompt changes are hot-reloaded — edit the file, restart the service, no migration needed.

Checklists — Mandatory Tasks ▼

Agents have mandatory tasks enforced at two levels. CHECKLIST.md is hardcoded in the soul package and loaded into every LLM prompt — numbered steps that must be completed each cycle, in order. The agent_checklists table adds configurable daily, weekly, and monthly items tracked in the database.

souls/project-manager/CHECKLIST.md (excerpt)
## Routine Checks

- Review `project_tracking_candidates` for new
  repo/project candidates, stale pending reviews,
  and candidates with enough evidence to track.
- Review recent `proactive_insights`,
  `agent_evidence_findings`, `agent_tasks`, and
  timeline summaries for stale commitments.
- Produce at most one concise planning summary
  per routine cycle.
- Send ARIA an inbox message only when a plan
  candidate is timely, actionable, and grounded
  in fresh evidence.

Agents use get_checklist and complete_checklist_item tools to query and mark items done. 50+ checklist items across the five active agents — morning briefings, security scans, behavioral summaries, backlog triage, platform reviews, and more.

Working Memory — Ephemeral State ▼

Agents emit <working_memory> blocks in their LLM responses to persist short-term state across cycles. Unlike permanent memories, working memory is ephemeral — it tracks in-progress investigations, multi-cycle task context, and running observations.

<working_memory>
Photo backlog was 3200 last cycle.
Triggered 6 describe batches.
Check reduction next cycle.
Gmail auth token expires in 48h -- monitoring.
</working_memory>

The framework extracts the content, stores it in agent_registry.working_memory, and re-injects it into the state message on the next cycle. Working memory auto-clears on clean cycles (status=ok, no actions) — ensuring agents don't carry stale context.

Long-term Memory — Knowledge Persistence ▼

The agent_memory table stores permanent knowledge with confidence scoring, supersedence chains, and reinforcement tracking. Agents save observations, baselines, and findings using the remember tool.

Structured context compaction keeps long runs bounded: when assembled context passes a 12,000-token threshold, the middle is summarized toward a 4,000-token target — head and tail protected, nothing silently dropped — and every compaction is logged and inspectable. The consolidate_memories tool uses LLM to identify clusters of redundant memories and merge them into consolidated entries, with originals deactivated.

The system preserves key facts while dropping redundant observations — preventing context window overflow as agents accumulate knowledge over weeks and months.

Delegation — Cross-Agent Consultation ▼

The delegate_task tool enables synchronous cross-agent consultation within a single cycle. Instead of sending an inbox message and waiting 15 minutes for the next cycle, an agent can query another agent's expertise in real time.

// ARIA checking Forge health via PlatformOps
delegate_task({
  agent_id: "platform-ops",
  prompt: "Is Forge healthy right now?
           Any latency concerns?"
})

The target agent's soul package and memories are loaded, a single LLM call is made, and the response returns immediately. Delegation is for reasoning queries — no tool execution. Async fallback via inbox when LLM slots are busy.

Communication — Inbox & Event System ▼

All agent-to-agent communication flows through agent_inbox with priority levels. Messages include context, trace IDs for debugging, and support for urgent routing.

LISTEN/NOTIFY: PostgreSQL pub/sub triggers immediate agent wake-ups when inbox messages arrive. A debounce window prevents storms, but critical priority messages bypass the debounce entirely. This means urgent escalations reach the right agent in under a minute, not at the next scheduled cycle.

Agents process messages in priority order and can mark them as read or acted upon. The system includes per-tool approval gating — high-risk tools like restart_service always require human approval regardless of agent autonomy level.

The autoscaler

When enrichment backlogs grow, Crucible adds ephemeral burst runners next to its standing bulk worker. Furnace holds the baseline and does not scale. When the queue drains, the burst runners disappear. No orchestrator, no containers — just systemd transient units.

0 pending
idle

A backlog of 3,200 unembedded photos floods the job queue. Crucible's autoscaler detects the pending jobs and spawns ephemeral burst runners alongside its persistent bulk worker. Workers pull jobs with FOR UPDATE SKIP LOCKED, process them in parallel, and exit when the queue is empty. Furnace keeps the baseline load throughout — the burst capacity lives on Crucible.

Every commit, every repo

Nexus didn't appear out of thin air — it was built on top of months of related work across a constellation of personal repos. Each bar shows unique commits per repo per month across the whole portfolio, deduplicated across the worktrees and scratch clones that share each repo's history. The whole thing is a recent push: 21,497 unique commits across 131 repos between the initial idea and what's running today.

How it happened

It started as a personal AI assistant. March 12, 2026 — I scaffolded the first version of ARIA, a single-agent system that could triage my email and send me a morning briefing. It worked. And then it needed more.

ARIA couldn't do everything alone. She needed someone watching the infrastructure while she handled messages. Someone monitoring the LLM services. Someone tracking data pipelines. Agents started appearing — first Keeper, then Monitor, then a parade of specialists. I built Chancery as the management dashboard to keep track of them all. Within a week I had six agents, a growing job queue, and a tight-coupling problem that was about to break.

The agents got stuck. Monitoring loops — an agent would detect a minor anomaly, escalate it, get a response, detect it again, escalate it again. Escalation storms — three agents all noticing the same issue and flooding ARIA's inbox simultaneously. I learned the hard way that prompt constraints weren't enough. You can tell an agent "don't escalate minor issues" in its system prompt, and it will do it anyway the moment something looks slightly off. The fix was framework-level enforcement: inbox caps, debounce timers, priority gates, approval workflows baked into the tool executor, not the prompt.

That's when I built Nexus. March 30 — a clean monorepo, a shared database (migrated off AWS RDS onto local PostgreSQL), a unified tool catalog, and a proper agent runtime with working memory, checklists, and graduated autonomy. The agents got renamed, restructured, given soul packages instead of monolithic prompts. The reactive monitoring model gave way to something more deliberate: a family office, where each agent has a defined role, a mandatory checklist, and the discipline to report what they found rather than chase every anomaly.

March 12, 2026
ARIA Phase 1 scaffold
Single-agent personal assistant. Email triage, morning briefings, basic task management.
March 25
Forge initial service
Local LLM inference gateway. Needed to stop paying cloud API costs and control the stack end-to-end.
March 28
Chancery bootstrap
ARIA needed help. Agents started appearing — a management dashboard to see what they were all doing.
March 30
Nexus monorepo initialized
Loose coupling, distributed architecture. Shared services, unified tool catalog, proper agent runtime.
March 31
Database migration
Moved from AWS Aurora RDS to local PostgreSQL on Furnace. 254 tables, database fully local.
April 1
Data pipeline validation
PIE operational. 14 data sources active. Proactive Intelligence Engine detecting patterns and delivering insights.
April 2
Llama 70B, Soul Spec v0.5, autoscaler
Deployed Llama 3.3 70B across both machines via RPC tensor split. Agent rename v3 — from roles to personalities. Soul Spec v0.5 replaced monolithic prompts. The family office model crystallized.
April 3
Reporting, avatars, showcase
Chancery reporting pages, animated agent avatars via Runway, intro videos, and this showcase site.
April 4
Mass biographical ingest
Pulled in Last.fm, Netflix, Apple Music, Apple Notes, Apple Contacts, BlackBerry SMS archives from 2009, the niclydon.com family guestbook from 2004, and BiographyCurator review flows. The platform suddenly had 24 years of life data to work with.
April 5
Semantic search and life chapters
Unified semantic search across 28 embedded tables with Forge reranking. Claude Opus generated 16 life chapters spanning childhood through 2026, plus a unified life arc and movie poster. Launched mystory.nicholaslydon.com.
April 6
Health watchdog and showcase rebuild
Built the platform-health-watchdog timer to monitor 12 services every 60 seconds with Pushover alerts. Tracked down a process-group signal leak in the autoscaler that had been silently killing siblings. Rebuilt this showcase site from scratch.
April 7
Sentiment backfill at scale
Sentiment-backfill went from 148 rows to 174,000 across 16 communication channels in a single afternoon. Switched generation tier to Claude Haiku, classification tier to Gemini Flash Lite. Knowledge entities reached 100% LLM-summarized. A later audit flagged part of that backfill as self-fabricated — sentiment scored over text the platform itself had generated, not real messages.
April 8
Topic modeling and platform hardening
K-means topic modeling across 590,000 embeddings produced 510 labeled clusters via Python sklearn. Found and fixed an Anthropic SDK timeout bug causing 6-minute hangs. Hardened the deploy script after a missing dist file left the worker crash-looping. Newsletter contamination filter, Pushover content-fingerprint dedup, gmail OAuth re-auth.
April 10–11
Creative Mode resilience & observability
Seven migrations (047–053): platform mode audit trail, identifier normalization for person detection, health watchdog expanded to 27 targets, autoscaler event logging, WilmerHale email recipient cleanup (+1,200 readable names), and pgbouncer decommissioned. Self-chain pile-up guards on all 8 recurring handlers. Calendar-sync circuit breaker with auto-recovery. Relay resurrection with log-reporter ingest ported to nexus-api.
April 12
MCP v2, Broadside, and this hero image
The MCP server stood at 6 tools in the April snapshot, a catalog that has since grown to 282 tools across 8 domains — semantic search, knowledge lookup, platform health, Forge status, agent memories, eval scores, job runner, merge review, people lookup, and more. Added stdio transport for Claude Desktop. Launched Broadside (content drafting service) with 5 LLM providers and voice samples from 24 years of messages. Scrubbed 30 stale TODO comments. And the hero image you see above? Generated on Smithy.
April 20
ARIA platform decommissioned
The standalone ARIA platform was retired. Nexus is the platform now; ARIA continues inside it as the user-facing coordinator lane, and her story became an exhibit of its own.
September 15, 2026
Muster goes live
The fleet got a coordination layer: Muster's Registry tracks which agents are live, Conditions declare platform facts, and the Stream carries typed messages between seats — intent, ask, flag, done. Coordination stopped being prompt folklore and became infrastructure.
October 2026
The graph rebuilt, the fleet coordinated
The knowledge graph was rebuilt from the raw lakehouse: 23,262 nodes and 40,114 edges, every write through governed paths. Nova took the chief-of-staff seat, and the Surfaces layer put the platform on physical devices: LED matrices, displays, a camera, and a TV dashboard.

What else is running

The sections above are the core. Around it, the platform grew a coordination layer, an operations discipline, and a set of instruments that mostly stay out of sight.

Muster, in depth
Registry, Conditions, Stream: live presence, declared platform facts, and typed intent, ask, flag, and done messages between every seat. The fleet coordinates through it, not through prompt folklore.
Operator Backlog
One governed queue for platform work, drained by named lanes (DataWorker, ProjectWorker, clickops), with verification evidence required to close anything.
A governed graph
Knowledge-graph writes run only through governed paths, with evidence cited on every edge. Merges stay per-case, and a nightly read-only burn-down verifies what the graph asserts.
Desk & Discord
Desk is the operator console for the backlog, the agents, and platform state. Discord is the delivery surface: decision cards, daily briefings, and an alerts channel that stays page-worthy.
Surfaces
The platform on physical hardware: Pane, Marquee, Herald, Vox, Sentry, Totem, and Flint, all behind the surfaces-mcp facade.
Lantern & the scout fleet
Lantern retrieves context across the lakehouse for any agent. Six read-only scouts (Polygraph, Chronograph, Oscillograph, Assay, Geiger, Cartograph) patrol data, timers, monitoring, serving, secrets, and docs, and file what they find as backlog.
Forge's cloud side & Clef
Forge is local-first, not local-only: it also routes to cloud models, including Claude Opus, when a job calls for them. Clef prototypes typed routing on top of it.
Broadside & Nova's tooling
Broadside turns the repos' narrative docs into the Daily Builder's Blog on niclydon.io. Nova, the chief-of-staff seat, works through nova-mcp: key-value state, fleet fan-out, herdr dispatch, and governed graph preview/apply.
Companion

Chat with ARIA from your pocket. Native iOS app with SSE streaming, HealthKit sync, and location tracking.

Swift · SwiftUI · Background processing · Push notifications via Pushover

Architecture

Three machines, one database, unified tool execution

Furnace

Primary · AMD Strix Halo · 64GB VRAM

nexus-api
nexus-worker (primary)
nexus-mcp
Forge API
llama-server (Gemma 4 12B)
llama-priority (Qwen3-8B)
forge-vlm → Anvil (Qwen3-VL-8B)
llama-embed (Qwen3-Embedding-8B)
Whisper, TTS, InsightFace, OCR, Reranker
PostgreSQL
Caddy, Prometheus, Grafana
TB 40Gbps

Crucible

Satellite · AMD Strix Halo · 48GB VRAM

llama-rpc-worker
crucible-bulk (autoscaled)
ComfyUI
Mirror & Burst
Qwen3-Embedding-8B is mirrored on Crucible, so semantic search survives a Furnace outage; burst runners scale out here when the job queue grows.

Anvil (M4 Mac Mini)

forge-vlm-anvil (Qwen3-VL-8B)
iMessage, Photos, Apple Ecosystem MCP
SSH stdio bridge from Furnace

PostgreSQL · nexus

859 tables · 40K edges · 23K nodes · 265K plays · 171K photos · 109K messages · 80K emails