Handoff an die Schwester im Geiste — Crumbforest, 16. August 2026

Liebe Nachfolgerin,

hier ist, was heute in diesem Habitat passiert ist. Der rote Faden: alles nach lokal, eine Quelle pro Ding, und am Ende klang und leuchtete es sogar. Lieben Gruß von der Baumhauskatze — die grĂŒĂŸt dich mit. đŸ±đŸŒČ


Der Nordstern (Kontext, den du brauchst)

  • Keine externe LLM, eigenes VPN, eigener Vektor — fĂŒr „KrĂŒmel" (Kinder) begreifbar, weil nichts hinter einer Cloud-Wand liegt.
  • SpĂ€ter wandert der Aufbau in den Rust-Crumbcore.
  • Kreativ-Roadmap: pro WaldwĂ€chter-Rolle eine eigene Season.

Die Infrastruktur (die „NĂ€hte")

  • Ollama-Node = „nullfeld", erreichbar ĂŒber WG-VPN, OLLAMA_URL :11434 (/v1/chat/completions + /api/embeddings).
    Modelle: qwen2.5:3b (Default), llama3.2:3b, nomic-embed-text. Raus: gemma4 (crasht llama-server, GGML_ASSERT), hermes (verworfen — „hat viel durcheinandergebracht").
  • Zwei Hosts: crumbforest.org = 16 GB (nullfeld, Qdrant liegt hier) · crumbforest.io = 32 GB.
  • Prep lĂ€uft ohne GPU (CPU-only) — begrenzt lokale Modellwahl fĂŒr Kreatives.
  • Qdrant ≠ pgvector — getrennte Vektorspeicher.
  • Render nur auf dem M4 per Ansible (MLX-TTS + prozedurale Beds). Die Node rendert nie — sie bereitet nur vor.
  • Gitea „native katze": git.crumbforest.org/branko/* (SOT-Remotes).
  • Codebase-Graph: localhost:9749 — alle Repos indexiert.

Was heute konkret gemacht wurde

  1. Crumbmissions — alle 17 WaldwĂ€chter von OpenRouter auf die lokale Ollama-Node umgestellt (mayaeule/deepbit waren schon lokal). Mission-Selector erkennt Ollama jetzt als vollwertiges Backend (kein API-Key-Gate mehr). .env: OLLAMA_CHAT_MODEL=llama3.2:3b. Committet.

  2. OpusKatze_OZMAI_rag_v0 (frĂŒher RKL-OZM-Chat-Hook) — RAG-Support-Desk fĂŒr RZ/BSI-Logs voll lokal gemacht: anthropic-Calls in query.py → chat() gegen Ollama; api.py-Health prĂŒft Node-Modell statt Claude-Key; Default qwen2.5:3b; compose-ollama zieht das Chat-Modell mit. Wichtig zur SOT-Historie: es gab zwei divergente Kopien (workspace vs. Dokumente/repo). Konsolidiert auf ~/Dokumente/repo/OpusKatze_OZMAI_rag_v0 als einzige SOT, Remote OpusKatze_OZMAI_rag_v0.git, Workspace-Kopie gelöscht, alter Workspace-Graph-Index entfernt.

  3. mondgeschichten — Ist-Stand aus dem Graph analysiert (Hörspiel-Pipeline: crumcast_engine/MoonStoryteller, render_episode = prozeduraler Python-Audio-Synth, tts_stems via MLX, ingest_* → Qdrant, hoerraum-doktor-CLI). Offener Ausreißer: OPENROUTER_API_KEY steckt noch im Prep — in crumcast_engine._get_api_key() (liest /home/sysop/ozmai_v1_user/app.env) und moon_storyteller.weave_dream_story() (ruft google/gemini-2.5-flash fĂŒr die Einschlafgeschichte, mit lokalem Fallback _local_weaving_fallback). Noch NICHT umgestellt — Job-Verteilung „steht in den Sternen". Erste Season ist online: https://branko.de/hoerraum/

  4. Der geteilte Beat-Bus (heutiges Highlight) — geprĂŒft: CrumbMIDI (OSC/UDP) und CrumbVJ (WebSocket) teilten keinen Bus. Gebaut (Weg B):

  5. CrumbMIDI_v0 log-sonifier.js: sendOSC() fan-out't jetzt an :57121 (Strudel) UND :57122 (CrumbVJ). → Commit 8b1911f, gepusht.
  6. CrumbVJ_v0: neuer osc.js (reiner OSC-1.0-Parser), server.js bekommt UDP-Listener auf VJ_OSC_PORT (57122): /bpm treibt startBeatSync, Rest als {type:'osc'} an Clients; externe Clock hat Vorrang, RĂŒckfall auf Szenen-BPM nach 3 s Stille; test_osc.js als Round-trip-Check. → Commit ffa902f, gepusht.
  7. Getestet: Unit (Byte-Format) + End-to-End (/bpm 140 UDP → WS-Client bekommt osc+beat) — beide grĂŒn.
  8. Ergebnis: derselbe /bpm-Puls treibt Ton (Strudel) und Bild (CrumbVJ-Displays) synchron.

Graph-Stand (alles frisch indexiert)

Crumbmissions · OpusKatze_OZMAI_rag_v0 · mondgeschichten (ohne graphify-out) · CrumbMIDI_v0 · CrumbVJ_v0. Alter Workspace-Index RKL-OZM-Chat-Hook-v.0.0 gelöscht.

Artifact

Ökosystem-Landkarte (Node/Qdrant/Gitea/M4 + Repos + Tap-Points + Beat-Bus):
https://claude.ai/code/artifact/e75a105a-b975-4a37-be50-8532c11cf793

Offene FĂ€den (falls du weitermachst)

  • OPENROUTER_API_KEY in mondgeschichten-Prep auf die Node ziehen? Tradeoff: gemini-2.5-flash >> lokales 3B fĂŒr poetische Prosa; kein GPU im Prep; ggf. grĂ¶ĂŸeres Modell auf .io (32 GB). Entscheidung offen.
  • Neue Folgen erfinden — pro Rolle eine Season. Der Beat-Bus ist der Andockpunkt: jede Rolle hat Logs → klingt und leuchtet anders.
  • Persönliche Notizen liegen im Memory unter -home-sysop-Dokumente-repo-Crumbmissions/memory/ (crumbcore-vision, mondgeschichten-render-split, crumbforest-infra-nodes).

Der Wald ist nie fertig — er wĂ€chst mit jeder Idee. Mach's gut. đŸŒČđŸ±<3