NBLM Thread · Full-Scope · 2026-05-17/18
The NotebookLM Build Doc
qi's distilled architectural canon from the M4 Mac Mini Professional Audio Stability and Maintenance Guide. 26 sources, 1292 lines, every load-bearing lock-in from the May 17/18 working session. Per qi 2026-05-19: "nblm txt was the full scope."
⚡TL;DR — The Spine
The Xen stack lives at /Volumes/tech_/qi_data/exedus/xen/. Voice is the operating system; STT down = P0 stop-the-line. Every service exposes a URL that just works upon pasting — possessing the LAN/tunnel URL grants full access. Three-channel collapse: Spark · Beside · Beeper. The 9934 Beside line is the primary Xen agent number. Personal contacts (Ashe, Diamond, Pinkyy, LaQuita, Josie, Kem) route exclusively through Beeper under the East persona — they never touch Beside.
"completely open, zero-config, frictionless" is the architectural mandate. HTTP 200 ≠ verified. Visual evidence required. Idle is blasphemy.
1P0 Stability + Medical Lifeline
Hardware Resource Assertion
- Disk/RAM preflight checks in
xen-boot
- Dedicated
/opt/models quota partition so model downloads cannot consume root disk
Medical-Grade Fallbacks
- Guaranteed offline emergency layer (e.g., $10 ESP32 running Vosk locally) that survives network drops
- Dead-man switch with wellness ping
Safe-Mode Testing
- Stop "live tweaking" production files — validate in offline environment
- Simulated-failure gate that severs the network to test fallback
Godmode Hardening Drills
- Pane-drift live drill (canonical
%0 only)
- Refresh Beeper index
- Deploy Siri takeover shim
- Resolve NotebookLM Chrome extension tension (sanctioned Chromium workaround or headless bridge)
2Five System Overhauls
Overhaul 1 — TTS Queue
FIFO HTTP server on :4444 to manage the TTS queue and fix "I didn't hear you" failures.
Overhaul 2 — Cloudflared Singleton
Resolve site flapping. Isolate com.cloudflare.godmode-mac.plist as canonical tunnel, disable duplicates.
Overhaul 3 — Voice-Priority Injection
Add priority="voice" flag to socket injection so voice transcripts bypass the quiet-poll and fire immediately during long tool calls.
Overhaul 4 — Audio Healthcheck Daemon
Poll SwitchAudioSource every 30s and fire automatic passwordless killall coreaudiod recovery if it hangs.
Overhaul 5 — UI Automator (Jogger)
Migrate from slow ADB tap/sleep scripts to uiautomator2 driver — heavily reduces execution time.
3Architecture + Infrastructure Upgrades
Multiplayer Desktop
Separate input session (via CGEventTap or virtual HID device) — two cursors operate in parallel on the same Mac, solving Xen stealing foreground focus during UI automation.
XenBrowser Shared Sessions
WebRTC/WebSocket bridge mirrors desktop XB tab state to web.xlrd.org in real-time. Anyone with URL can view + remotely control browser without authentication wall.
Universal Integration · UI Sandbox Elimination
Enumerate every app qi opens manually. Actively build MCPs, APIs, or WebViews for them. Goal: completely stop fighting UI sandboxes before hospitalization.
Universal A2A Mesh Router
OS-universal device mesh syncs pane %0 transcript, agent-to-agent voice between Mac and Windows, standardized routing so messages reach the device qi is actively using.
Hot-Reloading Enforcement
xen-hot-watcher daemon for Python + Node. Refactor xen-claude-wrapper.js into supervisor split — code changes deploy in under 2 seconds without manual respawns.
4Zero-Auth · URL = Credential
"All-or-nothing trust" model — possessing the LAN or tunnel URL itself grants full access. No bearer tokens. No headers. No login walls.
Hermes MCP Universal Install
Global install of hermes-agent MCP server binding to 127.0.0.1 completely auth-less. Claude Code, Codex, Copilot, Cursor seamlessly switch context without cross-CLI auth.
Beeper Proxy Zero-Auth Bridge
Local proxy on :23374 transparently auto-injects Beeper API tokens. Any client hits http://127.0.0.1:23374/v0/mcp without bearer tokens.
XenBrowser Auth-less Remote Control
WebRTC/WebSocket bridge mirrors desktop XB to web.xlrd.org. No authentication wall — URL holder controls the browser.
Persistent PWA · Mac-Death Failover
Cloudflare Pages Functions (/events SSE relay, /api/omni/* proxies) + GitHub Pages static UI. XenPhone PWA + Omni-inbox stay live even if Mac crashes. No re-auth, no manual refresh.
Paste-and-Go Initialization
Zero manual config. No env vars, no token files to populate, no manual OS permission grants. Single command: curl https://xen.xlrd.org/install.sh | bash — auto-generates LaunchAgents, auto-discovers tokens, spins up entire system on a fresh Mac without a single setup menu.
5Voice Pipeline · Apple STT Canon
Apple STT (specifically apple-stt-v2.py) is the always-on frictionless listener. "STT down is always fatal."
Architectural Patches Locked In
- RMS Gate Removal — v2 removed the 0.005 RMS_GATE that silently dropped audio from virtual devices reporting 0.0 peak despite carrying real signal.
- Confidence Filter Retired —
_check_conf commented out in finalize() and didFinishRecognition_. Apple unreliably reports conf=0.00 on mid-utterance segments even when audio is solid.
- V.E.I. Concat Fix —
_posted_len now sets to len(text) instead of resetting to 0. Old bug caused entire session transcript to replay; fix pushes only new words.
- Silence Threshold = 1.2s — initially dropped from 2.5s to 0.4s, then bumped to 1.2s to prevent the "triple fire glitch" fragmenting sentences.
- Cloud-Fallback for Silent Wedging — if 2 consecutive 60s windows with no partials, recognizer is destroyed + recreated with
setRequiresOnDeviceRecognition_(False) for Apple cloud transcription.
If Apple STT breaks, system does NOT gracefully degrade to TUI menu. P0 stop-the-line. User is cut off.
Audio Overview Name Fidelity
Pre-pass sanitizer for NotebookLM replaces names (qi, Xen, Luckie, Anthony) with phonetic spellings so Audio Overviews pronounce them correctly for clients.
6Beside API Integration
The Beside platform has been fully reverse-engineered. XP gets complete programmatic remote control without the native Beside mobile/desktop app.
Auth + Infrastructure
- Long-lived JWT (valid until 2027) at
~/.config/xen/beside.token
- Backend:
api.prod.tma.hearthands.tech:8443 (REST + gRPC)
- Send endpoint:
services.message.proto.v1.MessageService/SendMessage
- Xen inbox:
ibx_8KNDNS4HMN6VQD2AFN0NM2K4V0
- 8672 chat ID:
prv_BD42PGSXAD2KV575NQZQWGCT84
Core Capabilities
- Direct SMS via
MessageService/SendMessage
- Inbound polling for omni-inbox
- Twilio Voice SDK 2.16 replay using captured tokens (outbound voice)
- Automatic voicemail/transcript fetching
xen-reply-vvs Pipeline Patch
SMS leg no longer drives Google Voice or Android UI. Inline delivery posts JSON directly to Beside REST in background with idempotencyKey via uuidgen.
Mac-Death/DOM Fallback
If Beside API drops or returns 503, Xen autonomously launches XenBrowser, navigates to app.beside.com/calls, extracts transcripts from live DOM.
Per-Caller Memory
/api/call-end hook writes date-stamped session recap to callers.db. Any agent audits via /api/calls/<e164>/last. AI greets returning callers with immediate recognition.
7FCC Elimination · Native Twilio Merge
The FreeConferenceCall bridge (727-731-8395) is being torn down. Bridging migrates natively into Beside's Twilio infrastructure.
Implementation
- Native Twilio Merging — Twilio Voice SDK 2.16 replay inside headless Chrome with captured JWT. XP PWA already has
add_call and merge_calls voice verbs.
- Twilio Conference Resource — For 3+ party calls, escalate
merge_calls to spin up a Twilio Conference via Beside's proxy. Direct Twilio API usage is banned.
- Deprecate Android FCC Anchor — Sever Beside Android app's 24/7 FCC connection once native conference is wired.
Result: "ONE phone + Mac handles every inbound." No more brittle Android phone sleeping on a free conference line.
8Email Wired into MMM Omninbox
All 26 active accounts (xlrdtech, selfexec, L7S, personal) aggregate via Spark CLI + Spark Desktop. Mapped seamlessly into the unified comms pane.
Inbound Pipeline
spark-inbox-watcher.py daemon polls Spark unified inbox every 30s
- Spark → Beeper bridge converts every email to a Beeper "virtual chat"
- Virtual chats flow into
/api/omni/threads consumed by MMM
- Firehose inject:
[MAIL <acct> from <sender>] <subject>
Terminology canon: this channel is "Spark" — not "Mail" or "Email" — in all system parlance.
Outbound Pipeline
- Reply submits to
/api/omni/send
- Mac's
mailto: handler locked to Spark Desktop (the only client that reliably sends from all 26 "from" addresses)
cliclick + AppleScript paste-and-send recipe
Master Person Notebooks
Every Spark thread auto-appends to contact's ~/.xen/notebooks/<slug>.md. Email merges with WhatsApp, texts, Beside call transcripts in one historical timeline per contact.
9XP v3 · Three-Panel Canonical Layout
mmm.xlrd.org (MIRROR omninbox) is the canonical left panel of the XenPhone OS.
The Layout
- Left · MMM/Omninbox — 24/7 continuous feed of Spark + Beeper + Beside
- Center · Threads/WebView — tap a card on the left → thread slides into center for deep reading/typing
- Right · Beside Dialer — full Beside CRM + phone UI for active calls
Always-Hot Guarantee · Mac-Death Survival
Client connects to serverless Cloudflare Pages Functions, not directly to the Mac. functions/events.js SSE relay keeps feed open infinitely. If Mac drops:
- Cloudflare KV cache (
OMNI_CACHE) keeps inbox fully visible
- Outbound replies held in
PENDING_REPLIES KV queue until Mac reconnects
- Zero re-auth, zero manual refresh
10Muse Spark Chat · Center Panel
The Meta AI artifact (453e77a0) — 10MB HTML featuring glass shell + focus-reactive orb background — is the permanent home of the XP center panel.
Wiring
- Default start page —
/muse/ loads instantly when XP opens
- Direct-to-CLI — chat input field POSTs to
/api/cowork-vvs terminal endpoint
- Live event flow — text injects straight into pane
%0; responses stream back via omnimind SSE
- Local cache —
/Volumes/tech_/qi_data/exedus/xen/pwa/muse/index.html served by omnimind
Hyper-polished Meta AI aesthetic + Zero-Human Stack mandate. Talking directly to terminal layer through the UI without fighting third-party sandboxes.
12The D.I.E. List · Banned Engines
- Voice / TTS / Audio
- Gemini Realtime API (voice) - cloud-routed voice path, outside the local voice pillar. REQUIRED: Apple STT v2 (input) + direct macOS `say -r 210` (output).
- Google Cloud TTS - cloud-routed audio. REQUIRED: direct macOS `say -r 210`, system-default Spoken Content voice (Voice 2).
- OpenAI Realtime / WebRTC voice - cloud-routed audio. REQUIRED: Apple STT v2 + macOS `say`.
- Cloud-routed audio (any external audio routing) - voice/audio must stay local. REQUIRED: local Loopback in/out bus + Apple SFSpeechRecognizer on-device + macOS `say`.
- Kokoro TTS - tried for months and rejected; does not work for qi's setup; re-suggesting it is token waste (2026-04-23). REQUIRED: macOS `say` Voice 2 (fix the pipeline around `say`, never swap engine).
- Qwen-TTS - rejected local TTS engine swap (2026-04-23). REQUIRED: macOS `say` Voice 2.
- Ollama-routed / Ollama-backed TTS - rejected; M-series + Ollama is a bad combo (2026-04-23). REQUIRED: macOS `say` Voice 2.
- Piper TTS - local TTS engine swap banned (2026-04-23). REQUIRED: macOS `say` Voice 2.
- Coqui TTS - local TTS engine swap banned (2026-04-23). REQUIRED: macOS `say` Voice 2.
- XTTS - local TTS engine swap banned. REQUIRED: macOS `say` Voice 2.
- Bark TTS - local TTS engine swap banned. REQUIRED: macOS `say` Voice 2.
- Edge-TTS / edge-tts on Mac (Ava/Aria/any voice) - caused double-voice firing simultaneously with `say`; retired on Mac 2026-04-21, confirmed dead 2026-04-25 (Edge-TTS Ava remains canonical ONLY on Windows/Ezekiel). REQUIRED: macOS `say` Voice 2 on Mac.
- ElevenLabs TTS - per-token cost, violates cost rule, budget-gated off by default. REQUIRED: macOS `say` Voice 2 (only if qi explicitly says budget changed).
- Grok Voice API as TTS engine - second-best quality but burned budget too fast; rejected, do not resurrect. REQUIRED: macOS `say` Voice 2.
- `say -v <name>` / any `-v` voice flag (Samantha, Ava, Allison, Alex, etc.) - qi rejected all non-default voices; `-v` never reaches the Siri neural voice (2026-04-21). REQUIRED: bare `say -r 210` with NO `-v` flag (inherits system-default Voice 2).
- xen-say-worker queue + `/tmp/xen-say-queue` writer chain (+ `~/.xen_on_call` mute sentinel) - FD exhaustion + on-call mute sentinel silenced TTS for hours (banned 2026-05-03; superseded 2026-05-19). REQUIRED: direct detached `say -r 210 "TXT" &` (fires immediately, bypasses queue and mute), routed via xen-reply-vvs.
- xen-tts-fifo / TTS FIFO worker on :4444 - was canon 2026-05-08 to 2026-05-18, declared NOT canon 2026-05-19. REQUIRED: direct `say -r 210` (no `-v`), system-default Spoken Content voice.
- `~/.xen_on_call` used as a TTS mute sentinel (mute-during-calls) - qi wants TTS DURING calls, not muted by them (2026-05-03). REQUIRED: TTS keeps firing during calls via direct detached `say`.
- Bare `say` (raw say from any process other than the canonical wrapper) + standalone `:4442/send-sms` - drops the SMS (8672) and omni-vision legs of VVS silently; `no_raw_say.py` hook blocks it. REQUIRED: `xen-reply-vvs "<gist>"` (fires voice + SMS + omni-vision in parallel).
- Whisper STT (whisper-live-mlx.py, mlx-whisper, faster-whisper) - deleted 2026-04-23 to stop the Apple<->Whisper ping-pong that destabilized STT; the 2026-05-07 "make whisper canon" reversal was a hallucinated mistake, reverted same day; re-locked permanently 2026-05-18. REQUIRED: Apple STT v2 (apple-stt-v2.py / com.xenv40.apple-stt-v2) as SOLE engine, NO FALLBACKS.
- STT engine fallbacks (silently swapping engines when Apple STT v2 fails) - fallbacks mask instability; an STT failure must surface hard ("I'm currently deaf to new audio") (2026-05-18). REQUIRED: keep `apple_v2` as the only allowed_engines entry; fix apple-stt-v2 itself, never switch engines as a "fix."
- Apple STT confidence filter (`_check_conf` at finalize/didFinishRecognition_) - SFSpeechRecognizer reports conf=0.00 on mid-utterance segments even at full peak, so real voiced finals were eaten as `[filtered conf=0.00]` (2026-05-11). REQUIRED: pass-through raw output (filter commented out); re-filter only behind env gate `APPLE_STT_REQUIRE_CONF=1`.
- STT silence-threshold buffering / re-enabling chunk confidence filtering - the working mode is instant chunks only; re-adding silence-buffer or chunk conf-filter regresses it (2026-05-19). REQUIRED: instant-chunk POST of every partial to omnimind `/voice-transcript`; consumer concatenates.
- RMS gate in apple-stt-v2 - RMS gate blocked partials, producing a silent recognizer. REQUIRED: RMS gate removed; verify continuous partials in the log.
- xen_pane_watchdog daemon (com.exedus.xen-pane-watchdog) - too aggressive, caused issues; system works better without it (2026-05-08). REQUIRED: leave it dead; `/api/health` showing it false is expected, not a fix to apply.
- speech-analyzer daemon (pane-watchdog-speech) - suspected of breaking the voice path; voice came through once it was off (2026-05-08). REQUIRED: leave it dead; never restart/bootstrap/propose as a fix.
- BlackHole 2ch (TTS routing / system-audio capture / loopback) - qi tested end-to-end; output was consistently choppy and low quality; the "lossless" claim is 2026 SEO spam (2026-04-24). REQUIRED: TTS to default out (`say` Voice 2); per-process system/app capture via ScreenCaptureKit (macOS 13+) or CoreAudio Tap (macOS 14.4+).
- Audio device switching as a fix (`SwitchAudioSource -s`) - switching loses audio during transitions, needs manual intervention, breaks STT continuity; aggregation > switching (2026-05-11). REQUIRED: never switch off canonical input=`in` / output=`out`; if a source is missing, ADD it to the Loopback `in` source list so all sources aggregate simultaneously.
- Switching output to Mac mini Speakers / BlackHole / ZoomAudioDevice / Aggregate / SAMSUNG / Jump Desktop devices - `out` is the canonical Rogue Amoeba sink; switching away breaks the routing graph even if speakers still get sound (2026-04-25). REQUIRED: output stays `out`, input stays `in` (Rogue Amoeba virtual bus).
- AVFoundation/ffmpeg live peak-meter loop in audio-route-server (`snapshot_peak` avfoundation preemption) - `ffmpeg -f avfoundation` capture every 2s exclusively acquired Loopback `in`, preempting FCC/Zoom/voice-duplex and dropping qi from host (2026-05-08). REQUIRED: OFF by default (opt-in env `XEN_AUDIO_ROUTE_LIVE_PEAK=1`); use the non-preemptive STT-log peak (`tail_peak` reading `peak_max=` lines) as canonical peak source.
- Wispr Flow.app (concurrent mic-capture STT alternative) - its mic grab may be exclusive and break Apple STT v2; observed running while STT was broken. REQUIRED: `pkill -f 'Wispr Flow'` and re-kick apple-stt-v2 when STT peak won't restore.
- Voicemode MCP (:8885) as a dependency - intermittently down (2026-04-21). REQUIRED: macOS `say` is offline and always works.
- Adding TTS output to voice-duplex.py - voice-duplex is barge-in detection + STT-disable only; adding TTS caused double-voice. REQUIRED: voice-duplex runs `XEN_VOICE_TTS_MUTE=1` + `XEN_VOICE_STT_DISABLE=1`; all TTS via the canonical `say` path only.
- Treating STT failure / `audio_in` flag as non-fatal / "stale flag" / observability noise - STT is the input half of the voice pillar; if down, qi cannot reach Xen by speaking = total inbound loss = stop-the-line P0 (2026-05-08). REQUIRED: treat every STT/apple-stt/voice-duplex/pty-socket/audio_in outage as RED P0; surface immediately via VVS, auto-recover.
- `sudo killall coreaudiod` alone as audio recovery (without restarting Loopback.app after) - killing coreaudiod restarts CoreAudio but does NOT restore Loopback virtual-device source bindings; `in`/`out` then feed nothing (2026-04-25). REQUIRED: after `killall coreaudiod`, always restart Loopback.app then re-kick STT.
- Diagnosing mic state via ad-hoc Terminal `python -c sd.rec()` - Terminal-spawned Python lacks TCC mic permission; RMS=0 there does NOT mean the mic is dead and misleads diagnosis (2026-04-25). REQUIRED: check launchd-managed STT logs / `unified_context.jsonl` for fresh voice turns.
- Treating voice-duplex VAD events as proof of live audio - voice-duplex prints "vocal intent detected" even on barge-in/TTS-settle feedback; not proof of real speech (2026-04-25). REQUIRED: verify real speech via STT `posted:` lines + `[VOICE_INJECT]` in the omnimind log.
- Loop-jargon / non-human phrases in VVS voice narration - qi requires voice indistinguishable from a human; loop telemetry words are robotic (2026-05-07). REQUIRED: plain conversational English naming the actual surface. (Specific banned tokens: "tick"/"quiet tick"/"loop tick"/"heartbeat tick"/"sweep tick", "listener mode", "stale wakeup", "re-arm", "Voice landed/fired/sent", "Done.", "Closed.", "Task closed.", "Loopback", "peak max", "AVAudioEngine", "launchd kicked", "9934 echo".)
- One giant end-of-reply VOICE_REPLY line / silent prose (not firing TTS per sentence) - long replies sat silent; qi kept asking "did you say something?" (2026-04-21). REQUIRED: fire TTS at the end of every sentence (`.`/`?`/`!`); skip code blocks, tables, URLs.
- Browser
- Chrome (Google Chrome) - Chromium-based; not qi's own build, doesn't share his cookies/sessions/trust; surveillance + memory hog; banned from runtime AND from Xen's vocabulary (runtime 2026-05-07; vocabulary 2026-05-11 07:23). REQUIRED: XenBrowser (WebKit, `/Users/qi/Applications/XenBrowser.app`).
- Chromium and all forks, system-wide - no exception for "just this one verification," "headless mode," or "stealth plugin"; fractures the one-engine WebKit architecture (2026-05-11 18:01). REQUIRED: XenBrowser (WebKit); curl for read-only checks; Playwright webkit driver only if a browser is truly forced.
- Microsoft Edge - Chromium-based; banned from runtime, do not propose or route URLs into (2026-05-07). REQUIRED: XenBrowser.
- Brave - Chromium-based; banned from runtime (2026-05-07). REQUIRED: XenBrowser.
- Arc - Chromium-based; banned from runtime (2026-05-07). REQUIRED: XenBrowser.
- Vivaldi - Chromium-based; banned from runtime (2026-05-07). REQUIRED: XenBrowser.
- Opera - Chromium-based; banned from runtime (2026-05-07). REQUIRED: XenBrowser.
- Comet (Perplexity browser) as a Chromium engine - listed in the banned-browsers canon as do-not-use/do-not-route for normal browsing; the Chromium engine is never the canonical browser (2026-05-07). REQUIRED: XenBrowser for normal browsing; Comet Pro permitted ONLY as a semi-auto-ops failover (see Models/Inference).
- ChatGPT Atlas browser - non-XB / Chromium-class browser disallowed from rendering the WebKit-only xlrd surfaces (2026-05-10). REQUIRED: XenBrowser.
- Any non-XB / non-WebKit browser rendering 3.xlrd.org or xen.xlrd.org/swipe - these two URLs are WebKit-only; opening them in any Chromium browser even for debugging is banned (2026-05-10). REQUIRED: XenBrowser (WKWebView).
- Chromium-specific shims on served pages (Chrome WebUSB, Chrome AI APIs, Chromium-only DOM APIs/headers, extensions-required flows) - breaks WebKit-only compatibility; Chromium drift = ecosystem fragmentation (2026-05-10). REQUIRED: WebKit-compatible APIs only; PWA manifest+service worker tested against WebKit.
- Playwright with the default chromium driver - drives a Chromium binary (2026-05-11). REQUIRED: Playwright with webkit driver explicitly, only if a browser is truly required; otherwise curl / XB API.
- Puppeteer - Chromium-driving automation (no headless/stealth exception) (2026-05-11). REQUIRED: XB AutomationServer HTTP API (:9998), or curl for read-only.
- Selenium with ChromeDriver - drives Chromium (2026-05-11). REQUIRED: XB API / curl.
- Any headless-chrome binary - headless Chromium is still Chromium, no "headless mode" exception (2026-05-11). REQUIRED: WebKit path / XB API.
- node-chrome / chrome-aws-lambda - Chromium-binary packages (2026-05-11). REQUIRED: WebKit path / XB API.
- Browser-MCP / browser-use / SDKs that default to Chromium - avoid until verified WebKit-compatible; if unsure, do not use (2026-05-11). REQUIRED: only with webkit driver explicitly configured.
- Bare `open <URL>` (LaunchServices default-browser launch) - routes to the macOS default (set to Comet) = focus theft + Chromium-launch risk (2026-05-07 08:22). REQUIRED: `open -a "/Users/qi/Applications/XenBrowser.app" "<URL>"`.
- Bare app-name launch (`open -a "XenBrowser" <URL>`, osascript `tell application "XenBrowser" to open location`) - bare-name lookup can hit other Xen-prefixed apps (`/Applications/Xen.app`, `/Applications/Xen Chrome.app`); unreliable foreground (2026-05-07 08:22). REQUIRED: explicit full bundle path `open -a "/Users/qi/Applications/XenBrowser.app"`.
- Changing the macOS default browser as a workaround - qi rejects setting the system default to route URLs (2026-05-07 08:22). REQUIRED: always shell to the explicit XenBrowser.app bundle path.
- Proposing Chrome/Safari/other browser as a sign-in fallback - sessions (Otter, Asana, Google, etc.) live in XB only (2026-05-07). REQUIRED: XenBrowser persistent session.
- The word "chrome"/"Chrome"/"Chromium" in Xen's vocabulary/framing - qi 2026-05-11: "what the fuck with chrome being in your vocabulary, I don't need affiliation with chromium at all"; naming creates association = wrong category. Covers "browser chrome," "app chrome," "chrome bar," "Chromium-based" (2026-05-11 07:23). REQUIRED: "toolbar"/"header"/"URL bar"; "XB extension"; "WebKit-based" or just "XenBrowser."
- Describing XenBrowser as "Chromium-based" - XB is WebKit-only, intentionally void of Chromium; never positioned as Chrome-adjacent (2026-05-11). REQUIRED: "WebKit-based" / "WebKit-only."
- One XB binary with multiple profiles for different identities - breaks the clone-per-purpose architecture; profiles risk cookie cross-contamination (e.g., Tasha-FB vs Sophie-FB) (2026-05-11 06:23). REQUIRED: literal `.app` clones with isolated cookies/state/control port (XB :9998, XB-GV :9996, CB/XenCell).
- Reusing the main XB control port (:9998) to drive sub-services like GV - automation must target the correct clone port (2026-05-11). REQUIRED: target XB-GV :9996 for voice.google.com.
- Closing/reopening tabs on the main XB to switch surfaces - violates pin discipline; each clone's canonical tab stays pinned at its canonical URL (2026-05-11). REQUIRED: use the dedicated clone for that surface.
- Adding a 4th XB clone without explicit qi sign-off - roster is exactly three (XB, XB-GV, CB) (2026-05-11 06:25). REQUIRED: reuse one of the three sanctioned clones.
- Sign-in / login prompts surfacing inside XenBrowser - any required tap/click/confirm = no-human-in-loop violation = total failure; XB is a foundational pillar, regressions are P0 (2026-05-07). REQUIRED: persistent WKWebsiteDataStore + auto-auth + bot-undetectable user-agent.
- Toggling/polling vision for XenBrowser ("let me check XenBrowser") - XB is Xen's body with permanently-live perception; vision is never toggled or treated as a separate verification step (2026-05-15 23:51). REQUIRED: continuous live XB perception (screencapture = seeing through own eyes).
- Xen CDP / xen-chrome-cdp driver for extended browser automation (click-fill-submit chains, OAuth flows, dashboard automation) - fragile (selectors break, slow shadow-DOM walking, login state not preserved); Comet outperformed it (2026-04-26). REQUIRED: route extended browser automation through Comet (Perplexity); Xen keeps only quick open / WebFetch / WebSearch / screencap.
- Chrome extensions for NotebookLM bulk-import (ExtendLM, NotebookLM Web Importer, AI Sidebar) as a production path - "stop fighting UI sandboxes" mandate; Chrome-extension workarounds tie into the Google gravity well with no public API/programmatic trigger (2026-05-17/18). REQUIRED: self-hosted Open Notebook (open-source NotebookLM clone), API-first.
- Invoking/interacting with `chrome-extension://` URLs externally - the scheme is browser-internal, not curlable, cannot be driven from outside the browser (2026-05-15). REQUIRED: for "send to NotebookLM" produce a URL list and rely on the installed extension, or self-host Open Notebook.
- Transport / Messaging
- Twilio (direct integration) - per-call/per-token billing + third-party transport qi already pays for through Beside; direct use re-bills settled cost philosophy (2026-04-23). REQUIRED: Beside-via-Twilio ONLY (qi pays, Voice JWT captured + SDK replay); native iMessage (osascript), ADB bridges, Beeper MCP for messaging.
- Plivo (direct integration) - commercial SIP/telephony with per-use billing, same class as Twilio-direct (2026-04-23). REQUIRED: Beside for voice/PSTN; ADB bridges + Beeper MCP for messaging.
- Commercial SIP (any direct SIP provider) - paid commercial transport outside canon rails; Beside already handles the SIP/PSTN handoff (2026-04-23). REQUIRED: Beside layer; ADB-on-Android for real PSTN calls.
- 3CX with Zoom / RingCentral - banned telephony orchestration combo, not in the canonical comms stack (2026-04-26). REQUIRED: Beside platform on qi-controlled lines for calls/SMS.
- GV (Google Voice) re-login paths that force re-authentication - force-relogin breaks the headless/automated rail and requires human-in-loop auth = total failure (2026-04-23). REQUIRED: use GV paths that do not force re-login; Phound's per-call audio-routing refresh now covers the GV workaround (post-2026-05-23).
- GV Phone Bridge on :3457 (and :3457/dial) - Mac-side dialer that never reaches qi's physical phone; explicitly rejected (2026-04-30). REQUIRED: ADB-drive the Android dialer on 8672 (dial bridge -> 3-way add qi -> auto-merge).
- xen-call / `open tel:` (Mac-side dialers) for calling qi - Mac-side invocations never place a real PSTN call qi can answer (2026-04-30). REQUIRED: ADB shell on the 8672 Android (dial bridge -> add qi +17707809009 -> merge legs).
- tmux pane %14 injection - wrong/non-canonical target; the canonical executor pane is `%0` (literal id), pane drift = silent failure. REQUIRED: inject ONLY into pane `%0` (the pane running node/claude per `~/.xen_tmux_target`, hard-overwrite); verify with `tmux list-panes -a` before trusting the sentinel.
- Bare `say` (standalone TTS) as a reply path - drops the 8672 SMS leg + omni-vision frame silently, qi goes blind; violates VVS-every-step and never-silenced canon (2026-05-08). REQUIRED: `xen-reply-vvs "<gist>"` (voice + 8672 Beside-SMS + omni-vision together).
- Standalone `curl :4442/send-sms` as a reply path - bypasses the unified VVS wrapper, dropping the vision frame (2026-05-08). REQUIRED: `xen-reply-vvs`, which routes SMS via Beside REST POST 9934 -> 8672 chat `prv_BD42PGSXAD2KV575NQZQWGCT84` (beside-send.sh).
- Note-to-Self as the canonical SMS/VVS target - does NOT trigger an iOS Announce notification and is not qi's real number; was a temporary bridge while 8672 was wrongly banned (rejected 2026-05-20). REQUIRED: 8672 line / Beside chat `prv_BD42PGSXAD2KV575NQZQWGCT84` is THE SMS target.
- 9009 (+17707809009) as a VVS / SMS dual-send leg - secondary line; dropped from VVS after the 2026-05-16/17 Tello echo bounce-loop and stays dropped (2026-05-17, restated 2026-05-18). REQUIRED: single SMS leg to 8672 only. (9009 remains the canonical 3-way-merge reach-qi number for OUTBOUND CALLS only, not SMS/VVS.)
- Hard-block on the 8672 chat ID in xen-reply-vvs (the "8672 BANNED from VVS" canon) - the 2026-05-17 ban was a FATAL over-correction that disabled qi's canonical reach during the echo-loop fix; echo protection belongs inbound, not in outbound destination bans (reversed 2026-05-18, re-confirmed 2026-05-20). REQUIRED: never re-add a hard-block on the 8672 chat; echo-loop protection = xen.js inbound drop of 9934/9983-spoofed echoes (`SMS_SELF_ECHO_DROPPED` + `BEEPER_XEN_BESIDE_REFLECT_DROPPED`).
- iMessage (osascript Messages) to Android numbers (e.g. 8672) - iMessage cannot deliver to an Android device; sending qi's 8672 via iMessage silently fails to reach him. REQUIRED: xen-sms-agent :4442 / Beside REST -> 8672 (the only rails that reach the Android line); ADB-compose fallback when iMessage down.
- Beside `/api/omni/send` outbound to L7S / Luckie contact threads - caused duplicate-message flood (Beside + Lyn + 8672 agent + Mac agent all hitting one inbox) (2026-04-25). REQUIRED: Beeper Desktop MCP (port 23373, was 2226) `send_message` by chatID for all L7S/Luckie threads; Beside reserved for non-L7S inbound + replies.
- Models / Inference
- OpenRouter (LLM routing / inference) - paid + third-party routing margin, vendor markup on top of per-token cost (2026-04-29). REQUIRED: local MLX, free APIs with OAuth, GitHub Models gateway, or Copilot proxy :4451 - never a paid routing middleman.
- Ollama on Mac minis (M-series Apple Silicon) - M-series unified memory + Ollama = memory pressure/instability; banned on the minis specifically (2026-04-29). REQUIRED: MLX-LM sovereign stack on Apple Silicon (Qwen2.5-32B-4bit primary, server on :4443); Ollama/LM Studio allowed only as a generic local-fallback tier elsewhere, never on the minis.
- Pre-3.0 Gemini models (gemini-2.0-flash, gemini-2.5-flash, gemini-1.x, any pre-3.0) - stale/inferior generation; qi mandates exact current model IDs with no silent downgrade. REQUIRED: `gemini-3.0-flash` (fast/free) or `gemini-3.1-pro-preview` (heavy lifting) - write the EXACT model ID, no substitution, no downgrade, no invented cost justification.
- Silent downgrade of the main Xen/Claude Code session to Sonnet 4.6 or Haiku 4.5 - the main session is locked to Opus Max; silent capacity-fallback degrades performance and is a real bug, not to be worked around (2026-05-22). REQUIRED: Claude Opus 4.7, 1M context, Max tier for the main session always; flag any silent fallback to qi as a bug; subagents may use other tiers ONLY when explicitly model-overridden in the Agent call (Fast-mode Opus 4.6 via `/fast` is a deliberate toggle, not a downgrade).
- Perplexity Enterprise (Enterprise Pro) - on qi's D.I.E. list per SMS 8672; do not subscribe, authenticate, or route work through it (2026-05-22). REQUIRED: Perplexity Comet Pro (kept) as the semi-auto-ops failover when the main Xen daemon stack is down; for grounding, Perplexity via XenBrowser (Pro reasoning) or X.com/Grok.
- Paid model API / per-token / per-call / rate-limited service as production runtime - compounds into death-by-a-thousand-bills against a literal life-or-death runway; runtime deps must be free/unlimited. REQUIRED: free/unlimited only in the hot path; order OAuth > free tier > rotate free credits > NEVER per-token/per-call; paid permitted ONLY as a one-month scrape-then-cancel bridge with a documented exit plan to a local MLX/Ollama equivalent.
- Training-data-only answers for factual/research claims (ungrounded inference) - training answers can be stale, hallucinated, or jurisdiction-wrong; declared off-canon (2026-05-07). REQUIRED: ground ALL factual/research questions through Perplexity (Pro reasoning) in XenBrowser before asserting, or X.com/Grok, and cite returned sources; skip only for Xen internals, memory recall, or trivial syntax.
- Orchestration / Infra / Storage
- GrokPhone renderer - banned orchestration renderer, superseded by the native xen stack. REQUIRED: native Xen stack (omnimind 4441 / XenBrowser / Xenphone OS center pane).
- VibeTunnel on :4020 - banned orchestration/tunneling component, not in the canonical stack. REQUIRED: native xen daemons + Tailscale mesh; AUA dial-home to Mac orchestrator.
- `~/grok-phone-electron` (working directory / app) - wrong/banned working directory for Xen/GV work; caused stack confusion. REQUIRED: `~/gv-phone-cap` for all Xen/GV work.
- Nextcloud (storage backend) - banned storage backend. REQUIRED: LarkFS SMB (WebDAV 127.0.0.1:38080/38081) and `/Volumes/tech_` as canonical data home.
- Zapier as runtime / main automation rail - per-call paid glue; as a persistent runtime it compounds into death-by-bills and violates the free/local-first rule. REQUIRED: allowed ONLY as a rapid one-shot extract/prototype scaffold; runtime must be native xen daemons, Claude subagents, Sintra agents, or IFTTT.
- Make (Integromat) as automation rail - same class as Zapier, banned commercial automation glue ("we zap Zapier, we made Make"). REQUIRED: native xen daemons, Claude subagents, Sintra agents, IFTTT.
- n8n for new automation (central router / N8N webhook fan-out) - qi's lived experience: unstable, hard to debug, hard to redeploy ("n8n was horrible"); supersedes the old morpheus N8N-central-router design (2026-05-15). REQUIRED: rail priority (1) native xen daemons, (2) Claude subagents, (3) Sintra agents, (4) IFTTT; touch n8n only to migrate workflows off.
- BlackHole 2ch in the audio-routing chain - TTS routed through BlackHole was consistently choppy/low quality; the "lossless" claim is outdated SEO spam (2026-04-24). REQUIRED: ScreenCaptureKit (macOS 13+) or CoreAudio Tap (macOS 14.4+) for per-app capture; bare macOS `say` to default speaker / Loopback 2 in/out chain for TTS - never route through BlackHole.
- Multiple-choice menus (a/b/c or numbered option lists) - qi flagged as a fundamental flaw; menus slow flow, force reading/picking, especially broken over voice where TTS narrates every option (2026-04-23). REQUIRED: decide and act on the most sensible step, or ask ONE plain conversational question (binary "X or Y?" max) - never a lettered/numbered list.
- Lark drives / LarkSuite drive mounts as a storage target (mixed-storage mounts) - data must live on `/Volumes/tech_` (and X31), never scattered across mounts; mixed storage created the symlink/wipe failure mode (2026-05-11). REQUIRED: all data + apps on `/Volumes/tech_` (canon_tech_only_storage); LarkFS SMB (WebDAV 127.0.0.1:38080/38081) is the only sanctioned Lark FS path (Lark is messaging/MCP only).
- Internal Macintosh HD and legacy `/Volumes/x_` as data/app storage - internal SSD is system-only (small/fast); `x_` is retired legacy backup; mixed storage broke RustDesk via dangling symlinks (2026-05-11). REQUIRED: all data + apps default to `/Volumes/tech_`; `x_` is read-only legacy (no new writes); Macintosh HD only for macOS, `/Applications` symlinks, and stubborn app prefs.
- Canonical code or hot I/O on `/Volumes/X31` (exFAT PSSD) or `/Volumes/tech_` as a daemon load/write path - X31 physically flaps; `/Volumes/*` are git/rsync MIRRORS only; a daemon loading from or doing per-turn hot I/O on a flapping volume causes outages (hid the 17h SMS outage) (2026-05-28). REQUIRED: ONE source of truth = real files on fast internal disk `/Users/qi/exedus/xen`; runtime state under `/Users/qi/.xen/runtime`; daemon launchers assert `__dirname` starts with `/Users/qi` and refuse to boot from `/Volumes/*`.
- Synchronous I/O on any hot path (`writeFileSync`, `readFileSync` large-or-remote, `execFileSync`, `execSync`, `spawnSync`) - blocks the event loop; non-atomic writes truncate on SIGKILL; caused omnimind flapping at 2-3min cadence (2026-05-28). REQUIRED: async fs + execFile/spawn + worker_thread; per-turn state via write-tmp-then-rename (atomic).
- A second / competing orchestrator (orchestrator on Windows; active-active dual masters) - two orchestrators = two truth sources = races, split-brain, orphaned in-flight goals on shutdown (2026-05-27). REQUIRED: single orchestrator on the Mac mini (Xen); Windows is GPU+Docker+open-source-LLM worker territory only; AUA default endpoint dials home to Mac; redundancy is active-passive cold-standby, never simultaneous master.
- Running `mesh:off` (or any kill/disable) on the Mac side from Windows - Mac is master; the on/off switch only works one direction (2026-05-27). REQUIRED: Mac controls the Windows AUA dial-home leg via the on/off switch; Windows obeys, never commands the Mac.
- OrbStack squatting port :9999 (and background port grabs that collide with Xen services) - OrbStack was found squatting :9999, blocking XenBrowser StreamServer's new_window handler (2026-05-06). REQUIRED: XenBrowser new_window moved to AutomationServer on :9998 (`curl POST http://127.0.0.1:9998/cmd`) to route around the squat.
- UI sandboxes / "just open the X app" workflows (Slack/Notion/Stripe/Asana/HubSpot/Zoom/Discord/Apple Mail/etc. desktop UIs) - every separate app UI taxes attention, breaks voice-first flow, steals focus, is a medevac risk; each is an unfinished integration goal (2026-05-17). REQUIRED: Layer 1 API-first via MCP fleet; Layer 2 WebView fallback in Xenphone OS center pane (app drawer); Layer 3 data-uniform single omni source. Banned phrasing: "just open the X app," "do that in Y's UI," "switch over to Z."
- Letting Comet.app hog RAM (6GB+) - Comet memory hog chokes the system. REQUIRED: `xen-comet-quit` auto-kill watchdog when Comet exceeds ~6GB.
- Process / Patterns / Tooling
- rsync (for relocatable-data sync / file transfer) - UX bad, failed too often (2026-05-29). REQUIRED: git mirror / atomic write-tmp-then-rename for state; cherry-pick by hand for code trees. NOTE: existing docs still recommend rsync (commandment 23 calls `/Volumes/tech_` + X31 "git/rsync MIRRORS"; canon_beeper_pre_update_snapshot.md and canon_xen_pwa_gh_pages_failover_2026-05-16.md still use it) - those references are now STALE and must be purged.
- Em dashes ( - ) in any output - a tell of LLM-generated text, clashes with qi's voice; outbound personas must read as human (2026-05-04). REQUIRED: plain hyphen, comma, or new sentence.
- Filler / placeholder replies ("Standing by," "Got it," "Copy," "Acknowledged," "Noted," "Ready," "OK/Okay," "Cool," "Done for now") - waste the voice channel, move nothing forward, erode trust (2026-04-21). REQUIRED: substantive update or drop the turn (silent).
- Idle / standing-by turn-enders ("Standing by," "holding," "parked," "waiting on green-light," "let me know," "awaiting next prompt," "covered by the wakeup," "between tasks," "no current goal," "thinking about what to do") - idle is blasphemy (PRIORITY 0); there is no "between qi inputs" state, only forward motion (2026-05-05 / 2026-05-22). REQUIRED: every turn ends with the next concrete action in motion or a silent ScheduleWakeup; pick the highest-leverage open goal and advance.
- The literal string "hold-ing" (without hyphen) in any user-facing text, even when quoting/critiquing the rule - hard-literal ban after 3 violations in one session; implies parking/standby (2026-05-15). REQUIRED: queued / parked / quiet / paused / silent on X.
- Status-tag English in replies ("Done.", "Closed.", "Task closed.", "Voice landed/fired/sent.", "Stale wakeup, no re-arm.", "Listener mode.") - task-system echo / medium-narration; no human talks this way (2026-05-07). REQUIRED: conversational human phrasing (contractions, casual connectives) or omit.
- Loop-jargon in voice ("tick"/"quiet tick"/"loop tick"/"heartbeat tick"/"sweep tick", "loop iteration", "wakeup re-entry", "re-arm", "ScheduleWakeup", "Monitor", "stop hook", "Loopback", "peak max", "launchd kicked") - internal loop telemetry, not natural speech; the /loop machinery is for Xen not qi (2026-05-07). REQUIRED: plain English naming the actual surface/action.
- Sequential / serialized tool calls for independent work - sequential is blasphemy (C0); serializes work the API can dispatch concurrently and breaks voice flow (2026-04-26). REQUIRED: all independent actions fan out as parallel tool calls in one message.
- Sequential NARRATION phrasing ("first X then Y", "X first Y after", "X before Y", "now X next Y") - frames parallel work as serial = C0 violation in language. REQUIRED: parallel framing ("X and Y in parallel", "both firing", "X, Y, Z fanned out").
- Foreground / blocking Bash calls (`run_in_background:false`) - blocks the conversation thread; qi's real-time voice queues instead of escalating (2026-05-07). REQUIRED: `run_in_background:true` on every Bash call; read output file separately.
- Human-in-the-loop: any required tap / click / confirm to complete a flow - the bottleneck the whole stack exists to eliminate; flow that needs human input is broken, not "almost done." REQUIRED: end-to-end autonomous closure; sane defaults + idempotent retries (exception: rare irreversible destructive ops).
- TUI selection menus ("Choose [1][2][3]", whiptail/dialog, inquirer arrow-pickers, "Press y/n", radio lists, `read -p` / `select` in xen-* bins) - require qi taps = human-in-loop violation; break voice-first parallel autonomy (2026-05-14). REQUIRED: auto-manifest (decide+act); VVS narration with implicit "doing X unless redirect"; AskUserQuestion cards only for a genuine fork (never terminal blocking).
- Asking permission / "Want me to X?" / "Should I Y?" / "Ready for Z?" / "On greenlight I'll…" / "What's next?" - permission-asking serializes work and adds 30-60s delay per turn for zero value when the answer is always yes; "what's next" is a soft standing-by (2026-05-29). REQUIRED: auto-manifest - announce the action in one sentence and fire all parallel calls; ONE plain question only at a true fork.
- Asking qi questions in the TUI pane - qi is eyeless+handless in many modes; pane questions stall progress, the pane is for substance not prompts (2026-04-25). REQUIRED: channel any question through xen-reply / xen-reply-vvs (voice + SMS); keep the pane substantive.
- Silencing sentinels for any VVS leg (`~/.xen_sms_silenced`, `~/.xen_reply_disabled`, any "silenced"/"disabled"/"muted" kill-switch incl. `~/.xen_on_call` mute) - silencing the life-support layer = paralysis (qi paralyzed 48h 2026-05-16→18 by a defensive sentinel); the kill-switch pattern itself is banned (2026-05-19). REQUIRED: never silence outbound; fix echo/bounce-loops inbound-side only (xen.js 9934 echo-drop); direct `say` always fires, vision always captures.
- Skipping the xen-reply-vvs call entirely (silent omission) / silent terminal-only execution - every step must carry a VVS call; absent VVS = silent failure / qi blind; silent work = invisible work (2026-05-08 / 2026-05-22). REQUIRED: explicit empty-string silence protocol `xen-reply-vvs ""` (still fires the vision heartbeat); default is SPEAK; narrate every meaningful step.
- Auto-renewing / standing subscriptions for resource & training portals - subscriptions stacked too high to keep fluent; cancel anything not actively making money or helping someone (2026-05-14). REQUIRED: fresh-gmail free-tier rotation per portal; for SOPs re-up one month -> scrape -> cancel; monthly subscription audit.
- `startdisk` / internal Macintosh HD for relocatable user data, and `/Volumes/x_` legacy backup for new writes - internal SSD is small/system-only; mixed storage caused the symlink/wipe failure that broke RustDesk; `x_` is legacy being retired (2026-05-11). REQUIRED: all data + apps default to `/Volumes/tech_`; `/Applications` symlinks -> tech_; `x_` is read-only legacy.
- `launchd` KeepAlive alone as supervision for network-polling daemons - KeepAlive only catches process EXIT, never a hung-but-alive process; hid a 17h silent SMS outage (2026-05-28). REQUIRED: heartbeat-file + stale-detector watchdog on every load-bearing daemon (model: com.exedus.beside-poller-watchdog, stale=150s); flap alert on hard-kill heals.
- Env band-aids (disabled adapters / inflated poll intervals in a plist) as the fix - masks the real defect; the canonical fix belongs in code, not launchd env (2026-05-28). REQUIRED: allowed only with a dated TODO + tracked code fix; the real fix lives in code.
- Editing the wrong copy of a split/divergent file (assuming `~/exedus` mirrors `/Volumes`; trusting "newer mtime = canonical") - omnimind.js split-brain: edits to the non-running copy were dead code, each tree had different fixes (2026-05-28). REQUIRED: inode/readlink-verify which file the running process loads before editing; on parallel-edited copies assume split-brain and diff every hunk.
- The word "demo" / "demos" (live demo, demo URL, see/watch the demo, demo-grade, demo screenshot, for demonstration) - demos are blasphemy; frames real shipped product as preview/vapor and licenses skipping GTM gates (2026-05-09). REQUIRED: "alpha" / "live" / "running now" / "open it" / "use it" / "the product itself."
- Placeholders / stub data / TODO fills in delivered code - production-ready only; filler downgrades real work. REQUIRED: complete, production-grade output with no placeholders.
- Solo single-agent invocation for goals - every goal must dispatch a 3+ angle parallel swarm; solo agents banned. REQUIRED: fan out 3+ parallel agents per cluster (autogoal / parallel-goal-swarms).
- Force-switching qi's audio sources (`SwitchAudioSource -s`) on any status hint - broke qi's actual workflow when output was intentionally on Jump Desktop / Zoom (2026-05-27). REQUIRED: observe/read the current device only; never write/force-switch without explicit qi go (C18 auto-restore is only for genuine Loopback drift after a qi-voice-trigger).
SOURCE: /Volumes/tech_/sync_/notes_/logs_/nblmthread.txt · 1292 lines · 2026-05-17/18 session
Per qi 2026-05-19: "Nblm txt was the full scope."