# MEMORY.md — Long-term Memory Facts, people, project state. No instructions — those live in SOUL.md and AGENTS.md. ## People ### Peter Mühlmann - AI subscriptions & model protocol: `memory/peter-subscriptions.md` - Key rule: Anthropic primary → GPT-5.2 on cooldown → back to Anthropic when available - Cerebras (free) for all boilerplate/templated work ### Mario (Mariusz) — Admin - Location: Poland (CET) - Manages infrastructure and deploys - Communication style: Minimal, to the point ## Environment - OS: Ubuntu 22.04 Docker, XFCE desktop, Display :0 - Workspace: `/home/developer/.openclaw/workspace` - Skills: `~/.openclaw/skills/` ## APIs & Keys - **Cerebras** (Peter's): `~/.config/cerebras/config` | llama3.1-8b (232 tok/s), gpt-oss-120b - **OpenAI** (Peter's): `~/.config/openai/api_key` — alias GPT=`openai/gpt-5.1-codex` - **ElevenLabs**: `~/.config/elevenlabs/config` — key may need verification - **OpenClaw fork**: `~/.openclaw/workspace/platform/openclaw` (branch: m2-custom) ## Voice & STT - **TTS**: Qwen3-TTS at `http://speech_gateway/v1` (voice: vivian, timeout: 60s) - **STT**: Speaches at `http://speaches-l0w808o4k80k0gogg88s80cc:8000` (faster-whisper-large-v3) - Config: `~/.openclaw/openclaw.json` — tts.provider=openai, voice=vivian, timeoutMs=60000 ## Memory System - **Primary**: m2-memory skill — 3,280+ memories in Qdrant (BGE-M3, 1024-dim) - `~/.openclaw/skills/m2-memory/memory.sh search|store|recent|entities` - RLM agentic search: `~/.openclaw/skills/rlm-memory/rlm.sh "query" --depth 3` - **Auto-ingest**: hourly cron `memory-ingest-sessions` (ID: 153f98c6) - **Fallback**: OpenClaw `memory_search` / `memory_get` for keyword lookups ## MuhlmannAI Platform — LLM Routing (2026-03-10) ### Extraction Model (CONFIRMED WORKING) - Primary: `anthropic/claude-haiku-4-5` via **OpenRouter** (OPENROUTER_API_KEY in Coolify env) - Escalation: `anthropic/claude-sonnet-4-5` via OpenRouter - Cerebras: valid key but DO NOT use for structured extraction (0% confidence, entity matching fails) - **CRITICAL**: Anthropic OAuth tokens (sk-ant-oat01-*) do NOT work on api.anthropic.com directly — "OAuth authentication is currently not supported". They only work inside OpenClaw gateway. Never put them in external app configs. - Coolify deploy: use `/deploy?uuid=...&force=true` for code changes; `/restart` only restarts same image ## MuhlmannAI Platform (2026-03-11) ### Architecture - **Database**: `muhlai_v5.db` (single, consolidated) — **⚠️ LOCAL COPY IS EMPTY. Always query production API.** - **Production API**: `https://muhl-ai.machinemachine.ai/api/` — Bearer token in `~/.config/muhlai/api_key` - **Production data** (as of 2026-03-11): 101 CSV events + SQLite events from doc review, 123 documents (44 completed, 77 pending), 10 funds, 139 bank transactions, 0 NAV snapshots - **Pipeline**: P3 via `muhlai/ingestion/processor.py` + OpenRouter (Claude Haiku) - **Primary UI**: `/static/doc-review.html` (review page with upload + entity/doc type filters) - **Legacy Streamlit**: Still at `/app/` — needs retirement - **Root URL**: Redirects to review page - **Running app**: `api/main.py` (NOT `muhlai/api/main.py`) — always check `start.sh` to confirm - **⚠️ TWO EVENT STORES**: data/ledger/events.csv (101 legacy, pandas) + SQLite events table (doc-review). MUST consolidate — CSV needs to die. - **Old events.csv**: NEVER use for matching or as authoritative data. Contains ~1% corruption. Peter's explicit rule. ### Ledger v3 (accountant deliverable) - **Endpoint**: GET /api/export/ledger-v3 - **Code**: lib/ledger_v3.py - **Spine**: bank_transactions table (139 rows from Nordea DKK/EUR/USD + Goldman) - **NO automatic matching** — all fund rows start as ⚠️ Unmatched - **Matching requires**: human approval + verified document chain (bank_tx → event → document → PDF) - **Links**: direct PDF view/download, NOT doc-review UI (accountant doesn't use reviewer) - **Columns**: Dato, Beskrivelse, Fond/Modpart, Type, Beløb, Valuta, Beløb DKK, Bankkonto, Dokument, Mappe, 🔗 Vis, 🔗 Download, Status, Note ### Deployment - Coolify UUID: `rog0444skcwkw48044ggow48` - Env vars: `MUHLAI_LLM_MODEL=qwen-3-235b-a22b-instruct-2507`, `MUHLAI_LLM_ESCALATION_MODEL=qwen-3-235b-a22b-instruct-2507` - Git: `machine-machine/mp1-muhlman-ai` master branch, auto-deploys on push - Latest commit: e7bc733 (forecast bug fix) ### Peter's Process - Uploading docs one at a time; reviewing every extraction regardless of confidence - Building trust before batch processing; reads thinking, checks spending ## Fund Portals ### Credentials Index - `~/.config/fund-portals/northzone.json` — Northzone IX + X (atominvest.co) — email 2FA via Gmail - `~/.config/fund-portals/crane.json` — Crane 2 + Crane Flight LP (pearonline.com) - `~/.config/fund-portals/peakbridge.json` — PeakBridge Newtrition (icx.efrontcloud.com/@5381) — no 2FA - Goldman Sachs (Petershill IV + West Street VIII) — no credentials yet - Lumos Capital (Carta), Cocoa Ventures, Index Ventures, Seed Capital — no credentials yet ### Document Rules - Only docs with Peter Mühlmann Holding ApS financial data - NEVER ingest fund events without also extracting NAV from quarterly reports - European number formatting: "4.045" = 4,045 (period = thousand separator in DK) ## Data Quality Issues - Danish fund reports: periods = thousand separators (e.g. "4.045" = 4,045 DKK) ## Active Projects - **MuhlmannAI** (`rog0444skcwkw48044ggow48`): VC portfolio tracker — doc extraction pipeline + doc-by-doc review with Peter - **Dark Factory Engine**: `machine-machine/dark-factory-engine` — Markdown→skill compiler - **MachineMachine website** (`z8kgc0swckwckgg4wwsw4kok`): Enterprise draft at draft.machinemachine.ai