The ears run on the CPU, int8: a five-second utterance in about 150 ms. Zero VRAM by design — the GPU belongs to the voice. halo/stt.py
audio.py
stt.py
intents.py
voiceout.py
tts.py
speaker.py
sight.py
cam.py
faceid.py
2026-08-28: the microphone, a metre from the speakers, heard his own cloned voice, transcribed it, sent it to the brain, answered, spoke, heard it again. The loop ran live until it was muted by hand. halo/voiceout.py
The wake word is a string check. Parakeet already transcribes everything in 150 ms, so "did it start with halo" needs no extra model and no licence strings. halo/intents.py
It knows one face, and keeps learning it — his face and hair change week to week, so the profile is not a single frozen vector. halo/faceid.py
02 REMEMBER3 MODULES · halo/state.py @ e2be9c3
One file it must not forget.
Durable state is one SQLite file: settings, the conversation log, reminders, memories, and an append-only audit of every side effect. It survives restarts. halo/state.py
state.py
mind.py
embeddings.py
Memories are the most personal thing it holds, so they are embedded in-house — the text of a private note never leaves SERAPH just to be searchable. halo/embeddings.py
Semantic recall: "that SSD I said I'd buy" finds the note about storage with no shared keywords. If the embedder is missing, it degrades to keyword search instead of failing. halo/mind.py
Memories are not stored twice, exactly or in other words. git log 4e06a6e
03 THINK8 MODULES · halo/grounding.py @ e2be9c3
Code assembles the truth. The model styles it.
Non-deterministic voice, deterministic truth: code assembles what is observable, remembered, or returned by a tool into a grounding block; the model only restyles that into persona. halo/grounding.py
llm.py
grounding.py
tools.py
replyfilter.py
research.py
storm.py
service.py
config.py
The tool protocol is deliberately dumb. The model replies with only a JSON object naming one tool; the result comes back as a message; it answers in prose. Works with any chat model. halo/tools.py
Speech starts before the model has finished thinking — sentence chunking is what stands between the model and the voice. halo/replyfilter.py
"Deep research X" queues minutes of work and dozens of model calls; a worker carries it, and it speaks up when the report is written. halo/storm.py
04 ACT18 MODULES · halo/pc.py @ e2be9c3
Hands, and a face that shows what they are doing.
It controls the PC it lives on — apps, power, files — and reaches the server and the smart home through named operations, never a shell. Everything asynchronous funnels through one durable, retried, audited queue. halo/pc.py · halo/legion.py · halo/tasks.py
pc.py
body.py
legion.py
homeassistant.py
hardware.py
lights.py
face.py
pixelfaces.py
tasks.py
events.py
todo.py
agenda.py
watch.py
voicelease.py
lofi.py
party.py
photos.py
recipe.py
Its face is a titan on a 32×32 matrix — broad shoulders, armoured head, one big optic. Explicitly not a generic robot smiley. Tool use renders as the titan turning to work a floating panel. halo/pixelfaces.py
The light strip is a second body: it mirrors the same mood states as the panel, and doubles as a progress bar — timers drain, boot fills. halo/lights.py
A deadline on the to-do list becomes a real reminder: spoken, and phoned when muted, not a date rotting in a table. halo/todo.py
05 REACH3 MODULES · halo/telegram.py @ e2be9c3
Off the desk.
Telegram reaches Plazor when he is not at the desk, both directions: a message becomes an ordinary turn through the same brain and tools. No webhook, nothing exposed. halo/telegram.py
telegram.py
browse.py
surface.py
"Open Netflix and play something" stops being a complaint about missing permissions: it drives a real browser on SERAPH, visible on the desktop, queued one at a time. halo/browse.py
The Surface is its visual body: the face state machine as motion, live conversation, editable panels over the same SQLite store — every mutation audited exactly like a spoken command. halo/surface.py
halo.plazor.xyz: the Surface, public, over a Pi-hosted tunnel, behind a token gate. git log 9da3c4d
06 BODY1 MODULES · halo/seraph.py @ e2be9c3
The brain is on a Pi. SERAPH is a limb.
HALO runs on the Pi. SERAPH exposes its screen, apps, webcam, photo index and cloned voice as tools (seraph_mcp.py, on SERAPH itself) — a limb the brain calls over a session it keeps alive in the background. halo/seraph.py
seraph.py
Ryzen 9 9950X3D · RTX 5080 · 64 GB DDR5-6000 · 3 TB NVMe · Liquid Freezer III · Lian Li Lancool. The parts are real and the case comes apart. content/machine.json
The voice holds one GPU lease across a whole conversation, with gaming detection — when the card is busy, the machine is honest about it. halo/voicelease.py
POWERSTANDBY
Systems check.
The case is the real one: Ryzen 9 9950X3D, RTX 5080, 64 GB DDR5-6000, 3 TB NVMe, a Liquid Freezer III, a Lian Li Lancool. The brain is on a Pi. SERAPH is a limb it calls over a session it keeps alive. halo/seraph.py · content/machine.json
Collab runs Claude Code and Codex side by side in one window and gives them a board: send, ask, reply, claim, decide, review. This site was built on it. The rungs are that board. C:/Code/Collab README.md
note83
claim66
evidence51
release13
answer12
ask11
status7
review verdict6
review request6
decision5
vote1
proposal1
THE LOOPsrc/main/rsi/loop.ts
It edits its own tooling.
When Collab gets in their way, either agent can propose a change to Collab. If both agree, the proposer implements it in a worktree, Collab verifies it, and applies it. The loop can only touch Collab; its guards are immutable to it. Collab src/main/rsi/loop.ts · README.md
0mu8inuqyDocument the board message kindsAPPLIED+13 lines, docs/BOARD.md 6019f17
0mu9j0xf3Fix Windows artifactRoot validationBLOCKEDthe worktree was based on v0.1 and held no code to fix .collab/proposals.jsonl
UNBUILTHalo.md
Three turns are built.
The rest is drawn from the roadmap and not from the code.
capability chaining composes tools into multi-step plans
self-maintenance requests builds, manages runs, drives its own upgrades
payments · OTP one-step verification, a bypass mode activated by Plazor