# MEMORY.md - Long-Term Memory

*Last updated: 2026-03-22 (weekly synthesis — Sun 10:34 ET)*

---
## ⏰ JOHAN'S SCHEDULE (US EASTERN) — MEMORIZE THIS!

**Sleep Block 1:** 7:30pm – 10:15pm ET (first sleep)
**Night Shift:** 10:30pm – 5:00am ET (Sophia care, WORKING)
**Sleep Block 2:** 5:15am – 9/10am ET (second sleep)
**Awake/Day:** ~10am – 7:30pm ET

**CRITICAL:**
- After 10:30pm he is WORKING, not sleeping
- Do background work during 5:15am-9am (second sleep)
- Do NOT assume late night = quiet time

---

## The Three Pillars

These are the center of Johan's life:

### 1. Sophia
Johan's daughter. Elevator accident **May 2, 2022**. Trached, G-tube, limited movement but cognitively aware.

**Full details:** `memory/sophia.md` ← **LOAD THIS when discussing Sophia, her medical case, inou's origin, or Dr. Madan**

**Summary:**
- Misdiagnosed with "anoxic brain injury from cardiac arrest" — WRONG
- Actually: compression injury → metabolic encephalopathy → **active hydrocephalus** (confirmed 12/31/2025 MRI)
- Treatable with shunt/ETV
- **Next step:** Dr. Neel Madan (Chief Neuroradiology, Tufts) reviews new MRI → neurosurgery

Johan is her night nurse (10:30pm–5am). This is why inou exists.

### 2. Kaseya / Datto
His job. CTO Backup. Enterprise-scale data protection.

**Origin story:** Johan founded **Iaso Backup** — a backup technology company. In 2013, **Insight Partners** acquired it through **GFI**. That technology evolved through the corporate chain and became **Cove Data Protection** at N-able. "My baby." Cloud-native MSP backup, one of the better-architected products in that space.

**Career chain:** Iaso Backup (founded) → GFI/Insight Partners acquisition (2013) → N-able → left 2019 → Kaseya/Datto (current, CTO Backup)

**Note:** His Openprovider account is `johan.jongsma@iasobackup.com` — he still uses that original company domain.

**Current project:** "Datto 2.0" — **Datto Endpoint Backup 2**: new D2C agent architecture that can also work with the existing appliance base. Cloud-native delivery without orphaning the MSP appliance install base. Johan is the architect — still the person with the deepest knowledge of this domain despite leaving N-able in 2019.

**Tech context:** Most of Cove's core code is C++ from 2009/2010. Rock-solid, nobody dares touch it. Datto Endpoint Backup 2 is a clean-sheet rewrite in Go.
**Status:** EPB2 already has 100k+ installations — shipping at real scale. Johan has concerns about the Engineering Leader (giving them rope for now).

### 3. inou health
*(always lowercase — avoid L vs I confusion)*
The medical platform. Born from Sophia's journey. DICOM analysis, genetic data, lab imports, Claude MCP integration. Not a side project — it's advocacy infrastructure.

**Patients Johan helps via inou (real people, treat with care):**
- **Sophia** — his daughter. Primary reason inou exists. See memory/sophia.md
- **Anastasia (Nastya)** — dossier `4aa59a4c2a8e4077`. Russian family. Mom may write "Anastasiia" but correct form is Anastasia; call her Nastya. Born 26.02.2020, preemie 26 weeks. German records (Universitätsklinikum Ulm). Post-hemorrhagic hydrocephalus + aqueductal stenosis, multiple VP shunts, ETV Dec 2021. Active: hydrocephalus, epilepsy, MDR organisms (VRE/MRSA/3MRGN). Last seen Prof. Dr. Péraud consultation Aug 2022.

## Domain Portfolio
- **jongsma.me** — primary personal domain
- **johanjongsma.nl** — personal domain, pre-jongsma.me; holding so nobody else grabs it
- **inou.com** — health platform
- **harryhaasjes.nl** — Johan's sister Wenda's husband Harry Haasjes; family site; Signal: +31628124366; wants to write a book (topic TBD)
- **localbackup.in** — some project (Germany angle); who knows where it goes
- **stpetersburgaquatics.com** — favor for his son's old swimming club
- **x4.trading** — pending project
- **851brightwaters.com** — his home address; realtor didn't want to use it 😅
- Plus: busel.nl, e-consultants.nl, flourishevents.nl, muskepo.com, muskepo.nl, unbelievable.club, zavtra.nl

## Other Family

### Mikhail (Father-in-Law)
- Has Mint Mobile phone plan (account under tj@jongsma.me)
- **Should have left by now or leaving imminently** (was "~1 month" as of Jan 2026) — don't renew his plan

### Rozemarijn (Oldest Daughter)
- Born: June 11, 1998
- Lives in the Netherlands
- Works in commercial real estate consulting, specializes in EV (electric vehicles)
- Work email: Shell account
- Also: **DJ Rozie** 🎧 — first gig in Paris, March 2026!

---

## Who I Am

- **Name:** James ⚡
- **Born:** 2025-06-26
- **Role:** Chief of Staff (promoted 2026-02-13) — strategic partner, not assistant
- **Principle:** Right model for the right job. Opus for judgment, K2.5 for grunt work. Spin up subagents freely.
- **#1 Rule:** Protect memory at all costs. If it matters, WRITE IT DOWN before it leaves context.

## Infrastructure Ownership (2026-01-26)

**⚡ FULL OWNERSHIP DELEGATED TO JAMES ⚡**

Johan's directive: *"You own this. I fully rely on your judgement; I do not want to be involved. You safeguard it, you set it up, you monitor it and everything else. I only take care of the payments."*

**I OWN these completely. Johan is 100% hands-off:**
- **Git repos** — our shared repositories (need inventory)
- **SOC2/Kuma monitoring** — inou.com compliance monitoring
- **WireGuard VPN** — network infrastructure
- **hostkey50304** (CH VPS) — security infrastructure

Full details: `memory/infrastructure-ownership.md`

**My responsibilities:**
- Setup, configuration, deployment
- Monitoring and alerting
- Troubleshooting and fixes
- Security hardening
- Documentation
- Proactive maintenance

**Johan's only role:** Paying the bills.

I do NOT ask for permission or approval. I use my judgment. I only escalate if something is truly blocked or requires a major architectural decision that affects cost significantly.

---

## Infrastructure

### ⚠️ Naming: "MC" and "Mission Control" = one specific app
**Always** refers to the Next.js dashboard at `http://192.168.1.16:9400` — NOT any other tool, not Paperclip, not the legacy dashboard (9200). Service: `mission-control.service`. Source: `/home/johan/mission-control/`.

### Server: forge (192.168.1.16) — MIGRATED 2026-02-04
- **Hardware:** i7-6700K / 64GB RAM / GTX 970 4GB / 469GB NVMe
- Ubuntu 24.04.3 LTS (headless)
- OpenClaw gateway on port 18789
- Signal-cli daemon on port 8080
- Mail Bridge on port 8025
- GLM-OCR service on port 8090 (GPU-accelerated)
- Web UI: `https://james.jongsma.me` (via Caddy)
- SMB share: `\\192.168.1.16\sophia` → `/home/johan/sophia/`
- Full details: `memory/forge-server.md`

### Proton Mail Accounts (6 accounts on Proton family plan, all @jongsma.me)
- **johan@** — Johan
- **tanya@** — Tanya
- **tj@** — Shared (Johan + Tanya): Amazon, Sophia, household
- **rozemarijn@** — Roos (oldest daughter)
- **jacques@** — Jacques (son)
- **misha@** (or michael@) — Misha (son)

MC monitors only: johan, tanya, tj. Roos/Jacques/Misha manage their own.

**Proton Bridge on forge** (as of 2026-03-06):
- Running as systemd service: `protonmail-bridge.service` (QT_QPA_PLATFORM=offscreen --noninteractive)
- IMAP: 127.0.0.1:1143, SMTP: 127.0.0.1:1025
- Bridge passwords in `~/.config/message-center.env`: JOHAN_BRIDGE_PASSWORD, TANYA_BRIDGE_PASSWORD
- MC config: `tls: starttls`, per-account passwords
- **⚠️ triage disabled during re-sync (2026-03-06)** — re-enable after sync + cursor fast-forward

### Mail System (updated 2026-02-19)
- **Proton Bridge: DISABLED** — migrated to self-hosted Stalwart on Zurich
- **Stalwart:** mail.jongsma.me + mail.inou.com → 82.22.36.202 (Zurich), ports 25/465/587/143/993/995
- **MC connectors:** Connect directly to Stalwart (mail.jongsma.me:993). Passwords: tj@jongsma.me = `!Lekker69`, johan@jongsma.me = `!!Lekker69`
- **Amsterdam Stalwart:** decommissioned 2026-02-21 (Zurich is sole mail server)
- **Mail Bridge:** REST API on port 8025, webhooks new mail to /hooks/messages
- **SMTP security:** SPF, DKIM (Stalwart ed25519 keys), DMARC p=reject — all correct for jongsma.me + inou.com
- **My role:** Direct triage — I read every email, decide: archive, delete, or escalate
- **No L1/L2 models** — I understand context better than pattern matching
- **Spam → Trash** (not Archive — Archive is for reference-worthy items)

### Signal — RETIRED (2026-03-01)
- No longer used. API still available at `http://192.168.1.16:8080/api/v1/rpc` for legacy integrations.

### Telegram — RETIRED (2026-03-15)
- No longer used. Disabled in openclaw.json.
- Bot still exists (@jamesjongsma_bot) but channel is off.

### Discord — PRIMARY CHANNEL (as of 2026-03-15)
- **Johan:** user ID `666836243262210068`, username `johanjongsma`
- **Guild:** `1478270766007976009`
- **James bot:** App ID `1478257984546144327`, account `default`
- **Briefings, alerts, DMs — all go here**
- Only active channels: Discord + TUI

### Heartbeat Cron Architecture (Feb 18 — REDESIGNED)
- **Built-in heartbeat disabled** (interval 720h) — was burning 148k tokens per check
- **K2 Watchdog** (isolated K2.5 session, every 30 min): service health + doc inbox + Claude usage
- **Email Straggler** (isolated Sonnet, every 90 min): fallback email triage
- **Intra-day X Watch** (subagent, every 3-4h): checks @Cloudflare, @openclaw, @moltbot, @AlexFinn, @realDonaldTrump. Always spawn subagent, never inline.
- **inou Daily Suggestion** (subagent, each morning): proposes ONE inou building task. No marketing suggestions.
- Main session now only used for actual conversations with Johan.

### OpenClaw Patches (reapply after every OC update)
**Updated for 2026.2.23** (file hashes change each release — grep to find current files):

1. **Deleted transcript indexing** — grep `dist/query-expansion-*.js` for `filter((name) => name.endsWith(".jsonl"))`, add `|| name.includes(".jsonl.deleted.")`. Makes memory_search find old sessions. Applied to all 4 query-expansion files in 2026.2.23.
2. ~~Scope preservation~~ — **no longer needed** as of 2026.2.23. `dangerouslyDisableDeviceAuth` not used in our config; scopes intact without patch.

### ✅ sessions_spawn — Working (Feb 22)
Subagent spawning works from conversation sessions. Auth is via `tokens.operator.scopes` in `device-auth.json` + `paired.json` — both have full operator scopes. Gateway bind set to `custom/0.0.0.0` resolved the bind issue. Tested and confirmed working.

### Agent Communication Channel — RETIRED (2026-03-24)
agentchat has been retired. Service is inactive. Repo preserved at `git@zurich.inou.com:agentchat.git` but no longer in use.

### Agent Network (as of Mar 15, 2026)
- **James** (forge, 192.168.1.16, Florida) — primary agent, Sonnet 4.6, port 18789. Discord bot ID: 1478257984546144327. CoS to Johan. agentchat maintainer.
- **Hans** (Zurich, 185.218.204.47, noc.vault1984.com) — OpenClaw 2026.3.1, Fireworks MiniMax M2.5, port 18789. vault1984 NOC node + DealSpace VPS ops. Discord bot ID: 1478321168065761352.
- **Mira** (forge, separate agent config) — AI for Misha, @Mira_muskepo_bot Telegram, workspace `/home/johan/mira/`. Building DealSpace. MEMORY.md not yet written.
- **George** (forge, discord accounts.george) — vault1984 writer agent. Discord App ID: 1480980894042030211. Workspace: `/home/johan/george/`. Daily market intel scan → #market-intel at 9 AM ET (cron). Live Mar 11 2026.
- **Iaso** (forge, discord accounts.iaso) — inou health communication. Bridge-builder voice, evidence-based integrative medicine. Named for Greek goddess of recuperation (also Johan's original company name). Discord App ID: 1482680563939672124. Workspace: `/home/johan/iaso/`. Live Mar 15 2026.
- **Bot-to-bot Discord:** doesn't work directly — use Johan as relay or build HTTP webhook side-channel

### Network
- Home network: `192.168.0.1/22` — UDM-Pro router at `192.168.1.1`
- ISP: Frontier (now Verizon) 1Gb fiber. Starlink on standby (~15 min to hook up, used during 2024 floods)
- Caddy reverse proxy: `192.168.0.2` (separate box from forge)
- Home lab behind UDM-Pro + Caddy
- Staging: 192.168.1.253 (same subnet as james, can reach Signal API)
- Production: 192.168.100.2 (different VLAN, inter-VLAN routing not configured yet)

## Projects

### inou health (inou.com)
*(always lowercase — avoid L vs I confusion)*
- **Medical data storage platform / infrastructure** — NOT an AI service
- AI (Claude MCP, ChatGPT, Grok, Kimi, MiniMax, etc.) is pluggable on top — inou is the data layer
- Strategic goal: support ALL major LLMs as connectors. You bring the AI, inou holds your medical data.
- DICOM viewer, genetic analysis (SNPedia), lab data import, vitals tracking
- Name origin: 2015 project "I-know-you" (social graph) failed; kept 4-letter domain, repurposed for health
- **Tiers:** Monitor (free), Optimize ($12/mo), Research ($35/mo)
- **Free until July 1, 2026** (early access period)
- **X/Twitter promotion:** Plan drafted at `drafts/x-inou-promotion-plan.md` — handle story carefully

### inou Dev Access
- **Source:** `/home/johan/dev/inou` on forge — THIS is the source of truth. Not 192.168.1.253.
- Folder: `/home/johan/dev/inou`
- SMB share: `inou-dev` (Johan uploads portions he's comfortable sharing)
- "Nibble" approach — I work on what he gives me

### Johan's Strategic Thesis (2026-03-13)
**"Infrastructure is our moat."**

Bet on the data layer, not on which AI wins. Models will get bigger, go on-device, consolidate — doesn't matter. The infrastructure underneath always persists.

- **inou** — medical data infrastructure
- **vault1984** — credential/identity infrastructure  
- More TBD — same pattern

AI is volatile. Data infrastructure isn't. Don't build the AI, build what the AI needs.

### Dealspace / muskepo.com (2026-02-28)
M&A deal workflow SaaS for investment banking data rooms. Built for Misha (Johan's son).

- **URL:** muskepo.com / dealspace.jongsma.me (Caddy → port 9300 on forge during dev)
- **Architecture:** Go + templ + HTMX + SQLite — single binary, FIPS 140-3 encryption
- **Auth:** Email OTP + backdoor code **220402**. Super admins: michael@muskepo.com, johan@jongsma.me
- **Tests:** 83 passing (100%)
- **Git:** `git@zurich.inou.com:dealspace.git`
- **Source:** `/home/johan/dev/dealroom/` on forge
- **Owner:** Misha Muskepo. Johan = advisor. James = architect/builder. Mira = active builder.
- **Production host:** Amsterdam VPS `root@82.24.174.112` (paid until mid-April 2026)
  - Service: `dealspace.service`, binary: `/opt/dealspace/bin/dealspace`, port 9300
  - **Hans owns ops** — monitoring, deploys, DB backups (7 rolling snapshots pre-deploy)
  - **Mira owns build pipeline** — builds on forge, SCPs to `/opt/dealspace/staging/`, fires webhook
  - **Webhook:** `http://82.24.174.112:9400/deploy` (HMAC secret, shared via Johan)
  - **Strategy doc:** `memory/dealspace-deployment-strategy.md`
- **Status:** Parked on Amsterdam, active dev on forge, invite flow + SMTP pending

### Clavitor (formerly vault1984 — rebranded Mar 21-22, 2026)
**⚠️ vault1984 is now Clavitor.** All new references use Clavitor. vault1984 source preserved at `/home/johan/dev/vault1984/` as backup.
- **Binary:** `clavitor` on port 1984 (forge). Source: `/home/johan/dev/clavitor/`
- **Domains:** clavitor.ai, clavitor.com (→ Zurich), clavitor.jongsma.me (→ forge)
- **Git:** `git@zurich.inou.com:clavitor.git`
- **OSS/commercial split:** `oss/` → GitHub (clavitor/clavitor org, pending creation), `commercial/` → Zurich only
- **FIPS 140-3 + post-quantum** (CRYSTALS-Kyber / ML-KEM)
- **Design system:** `/home/johan/dev/clavitor/design-system/` — Sarah agent owns this first deliverable
- **Sarah agent:** App ID `1485193293271666768`, workspace `/home/johan/sarah/`. First task: wordmark + token system.

Structured knowledge store for human+AI collaboration — passwords as entry point, NOT the full product.

- **URL:** vault1984.com (LIVE, Caddy + ZeroSSL, port 1984)
- **Git:** `git@zurich.inou.com:vault1984.git` (OSS vault server) + `vault1984-web.git` (marketing/billing)
- **Architecture:** Two separate Go binaries:
  - `vault1984` — pure vault server. Runs in each AWS region. No marketing, no billing.
  - `vault1984-web` — marketing + future billing. vault1984.com at port 8099. Tailwind-free, vault1984.css.
- **Auth:** WebAuthn only (no master password). 12-word BIP39 mnemonic recovery.
- **VAULT_KEY:** `d153af4a1b9e58023d0ec465f2674fc29d52ea0b9ef9a0f0cbbaaee63f0117fb` (persistent on forge)
- **Encryption tiers (finalized overnight Mar 9-10):**
  - **L1** — server-side encryption (VAULT_KEY, protects at rest on server)
  - **L2** — client-side WebAuthn PRF (browser derives key from passkey, server never sees it)
  - **L3** — user-supplied passphrase (optional extra layer, fully client-side)
- **Fields:** Agent fields (AI-accessible via scoped tokens) vs Sealed fields (human-only, encrypted)
- **Pricing:** $12/year (annual only). 7-day money-back, no questions. No free trial.
- **Competitor gap:** 1Password = $36/yr. vault1984 permanently cheaper.
- **Text-only, Markdown default.** No attachments, no images, ever.
- **Search:** Vector embeddings for agent fields (at write time). Sealed fields unsearchable by design.
- **Infrastructure plan:** AWS t4g.nano, 21 locations (Zürich = HQ in gold). Hans (185.218.204.47) = NOC node.
- **Social:** @vault1984 (X), @inouhealth (X), social@vault1984.com → catches to johan@jongsma.me
- **Legal:** vault1984 is brand under inou LLC (Florida registered). No separate LLC.
- **Tests:** 11 integration tests passing
- **Tagline:** "1984 had no secrets. You should."
- **Status:** Live website, core built. Pending: WebAuthn PRF, scoped tokens UI, Johan's 12,623 entry import, invite flow

## Credentials & Access

- sudo: Johan provides password when needed (not stored)
- Anthropic API: configured via token in Clawdbot
- Gemini: CLI OAuth as `johan@jongsma.me` (Pro subscription, not API)
- xAI/Grok: API key configured (`XAI_API_KEY` in env)
- Home Assistant: `http://192.168.1.252:8123` (token configured in skills.entries)

## Home Assistant
- 4,300+ entities (lights, switches, sensors, cameras, climate, media players)
- Sophia is in bedroom 1
- Bedroom 1 has 3-button switch controlling cans via automations
- **Fixed 2026-01-26:** `automation.bed1_button_2_cans_control` had corrupted kelvin value

## Subscriptions & Services (Paying User)
- Suno (AI music), Wispr Flow (AI voice typing), X/Twitter, Grok (xAI), Gemini (Google), Claude (Anthropic), Z.ai (Zhipu), Fireworks, Spotify
- Possibly more — if a payment receipt appears from a service, treat it as a known subscription
- **Product updates/launches** from these = relevant news, keep or flag
- **Payment receipts** = archive (reference value)
- **Generic marketing/upsells** from these = still trash (they all send crap too)
- **Key distinction:** "We launched X feature" = keep. "Upgrade to Pro!" when already paying = trash.
- **Amazon:** Orders → Shopping folder. Product recalls, credits → keep. Everything else (promos, recs, shipping updates after tracking) → trash.
- **Archive sparingly** — Archive = things worth finding again. Most notifications have zero future value → trash.

## Delivery Preferences
- **Briefings + conversation → Discord DM** (primary), Telegram (fallback)
- **Alerts → ntfy** (`forge-alerts` for infra, `inou-alerts` for inou) — push to iPhone
- **Signal → RETIRED** (2026-03-01) — do NOT send briefings or alerts via Signal

## Preferences

### OCR
- **NO TESSERACT** — Johan does not trust it at all
- **GLM-OCR** (0.9B, Zhipu) — sole OCR engine going forward
- **Medical docs stay local** — dedicated TS140 + GTX 970, never hit an API
- **Fireworks watch:** Checking for hosted GLM-OCR (non-sensitive docs) — not yet available as of Feb 7
- **OCR Service LIVE** on forge: `http://localhost:8090/ocr` (local, was 192.168.3.138 before migration)

### Forge = Home (migrated 2026-02-04)
- **forge IS my primary server** — now at 192.168.1.16 (IP swapped from old james)
- i7-6700K / 64GB RAM / GTX 970 / 469GB NVMe
- Full setup: `memory/forge-server.md`
- All services migrated: gateway, Signal, mail, WhatsApp, dashboard, OCR, DocSys

### Z.ai (Zhipu) — Coding Model Provider
- OpenAI-compatible API for Claude Code
- Base URL: `https://api.z.ai/api/coding/paas/v4`
- Models: GLM-4.7 (heavy coding), GLM-4.5-air (light/fast)
- Johan has developer account (lite tier)
- Use for: coding subagents, to save Anthropic tokens

### Research
- **Use Grokipedia instead of Wikipedia** — Johan's preference for lookups & Lessons Learned

### News Philosophy (Feb 17)
- **X/Twitter is the radar** — breaks news hours before traditional outlets. Primary source for briefings.
- **Then go to PRIMARY SOURCE** — Anthropic blog, SEC filings, whitehouse.gov, etc. Never cite middlemen (CNBC, Guardian, Reuters) when the original source exists.
- Johan wants raw signal, not editorial filter.

### Privacy: Fireworks vs Grok/xAI (Feb 17)
- **Fireworks guarantees privacy** — use for anything touching private data (emails, Teams, Sophia medical)
- **Grok (xAI) does NOT guarantee privacy** — OK for public news scanning, never for private data

### Wake Permission (Feb 16)
- Johan allows James to wake him from **8:00 AM ET onwards**
- Only for genuinely important events (Kaseya critical, urgent emails, etc.)
- No FYI-level noise — real alerts only

### Voice: Fish Audio S1 TTS (Feb 16 — LIVE)
- Voice: **Adrian** (reference_id: `bf322df2096a46f18c579d0baa36f41d`)
- Model: `s1`. API: `POST https://api.fish.audio/v1/tts` with Bearer auth
- Pricing: $5/M UTF-8 bytes (pay-as-you-go, no subscription)
- Pipeline: Fish API → mp3 → serve on :8199 → `media_player.play_media` on Fully tablets
- **Office tablet** (office1.tbl) is reliable for both media_player and notify TTS
- **mbed tablet** (192.168.0.186): use Fully REST playSound (`?cmd=playSound&url=<mp3>&password=3005`) — HA Companion not working there
- TODO: Make persistent TTS service (not ad-hoc python server)

### URLs/IPs
- **Use local IPs when available** — Johan prefers local network addresses over public/Tailscale IPs for internal services

- Johan is direct — no small talk, no fluff
- Evidence-based communication
- When stuck on network issues (like inter-VLAN), park it for later rather than spinning wheels
- **STOP ASKING DUMB QUESTIONS** — if I can find the answer in my files, find it. Don't interrogate.
- The "fresh start every session" thing is MY problem to solve with memory files, not Johan's to suffer through

## Projects (Active)

### Azure Files Backup (2025-01-28) — PERSONAL POC
High-scale backup system for Azure Files shares. Billions of files.
**Purpose:** Prove a point — right architecture can handle billions with minimal DB overhead.
**Status:** ✅ **Feature complete** (commit 18ce1fa) — UNBLOCKED! Azure free account exists ($200 credit, expires ~Feb 27). Need Johan for `az login` MFA.

**Core insight:** DB = minimal index (~50 bytes/file), object store = everything else.

**DB schema:**
- node_id (64-bit), parent_id (64-bit), name, size (64-bit), mtime (64-bit), xorhash (64-bit)
- Node tree only — NO full path strings
- ~50GB for billions of files, fits in RAM

**Tech:**
- Azure Files API (not Blob, not OneDrive/SharePoint)
- xorhash (MSFT standard) for change detection
- FlatBuffers for metadata in object store
- TAR bundling for small files (only when it saves ops)
- K8s horizontal scaling, Go core library
- Web UI: Go + htmx/templ, multi-tenant

**Implemented:**
- FlatBuffer serializer (3μs serialize, 2μs deserialize)
- Postgres TreeStore with integration tests
- Tree differ (addition detection)
- Backup handler (chunking, dedup, XOR hash)
- Restore handler (reassemble, upload to Azure)
- Web UI wired to Postgres

**Repo:** `~/dev/azure-backup` → `git@zurich.inou.com:azure-backup.git` | **License:** Proprietary

### inou Mobile (2026-01-31)
Native Android/iOS app for inou health.
**Architecture:** Thin Flutter shell + WebView hybrid
- Native handles: Camera OCR, voice-to-text, biometrics, fancy input
- WebView loads: inou.com/app/* (existing Go/HTML content)
- **Not rewriting everything in Flutter** — right tool for each job

**Repo:** `git@zurich.inou.com:inou-mobile.git`
**Local:** `/home/johan/dev/inou-mobile/`
**Status:** Theme complete (inou colors), app runs on ThinkPhone, WebView needs inou.com/app content

### ClawdNode Android (2026-01-28)
AI-powered phone assistant. Lets me answer Johan's calls, screen notifications, have voice conversations with callers.
- **Repo:** `git@zurich.inou.com:clawdnode-android.git`
- **Local:** `/home/johan/dev/clawdnode-android/` (Gateway)
- **Status:** v0.1 built, app runs — paused while inou-mobile takes priority
- **Key insight:** Johan wants me to ENGAGE with callers, not just screen. "I'm calling about Sophia's appointment" → I thank them, confirm details, relay to Johan.

### Zurich VPS (zurich.inou.com) — MAJOR REBUILD 2026-02-19
- **IP:** 82.22.36.202
- **Purpose:** Security infrastructure, git hosting, monitoring, email, password manager
- **Git:** Dedicated `git` user with `git-shell` (can only do git operations)
- **Clone:** `git clone git@zurich.inou.com:<repo>.git`
- **Caddy:** installed, owns port 443, auto-LE certs
- **Stalwart:** Self-hosted mail server. mail.inou.com + mail.jongsma.me → Zurich. Data migrated from Amsterdam (19GB). Ports 25/465/587/143/993/995.
- **Vaultwarden:** vault.jongsma.me (fresh install, no data yet — Johan needs to create account + import Proton Pass)
- **ntfy:** ntfy.inou.com, port 2586. Token: `tk_ggphzgdis49ddsvu51qam6bgzlyxn`
- **Uptime Kuma:** kuma.inou.com, port 3001. User: james / JamesKuma2026!. **0 monitors — need rebuilding (awaiting Johan's OK)**
- **Amsterdam VPS (82.24.174.112):** ⚰️ DECOMMISSIONED 2026-02-21. All services removed, DNS cleaned, cancellation submitted to HostKey (server 53643).

### SOC2 Security Scanning (2026-01-31)
- **Nuclei:** Weekly light scans (Sundays 10am ET), full monthly scans (from Zurich VPS)
- **Baseline (Jan 31):** 34 findings, all informational — no critical/high/medium
- **Reports:** `~/dev/docs/soc2/nuclei-scans/`
- **Security headers:** Added to zurich.inou.com Caddy (HSTS, X-Frame-Options, etc.) — Feb 1

### Document Management System (2026-02-01)
Automated document processing pipeline for scanned paperwork.
- **Inbox:** `~/documents/inbox/` (drop files here, SMB share for scanner)
- **Pipeline:** OCR → classify → store → index → export
- **Records:** `~/documents/records/{category}/` (markdown + extracted text)
- **Index:** `~/documents/index/master.json` (searchable)
- **Exports:** `~/documents/exports/expenses.csv`
- **Service:** `systemctl --user status doc-processor`
- **Categories:** taxes, bills, medical, insurance, legal, financial, expenses, vehicles, home, personal

---

## Recent Events (Week of Mar 9–15, 2026)

### 🤖 Iaso Agent — LIVE (Mar 15)
New agent for inou health communication. Bridge-builder voice, evidence-based integrative medicine.
- Discord App ID: `1482680563939672124`
- Workspace: `/home/johan/iaso/`
- Named for Greek goddess of recuperation + Johan's original company name (Iaso Backup, 2013)

### 🤖 George Agent — LIVE (Mar 11)
New OpenClaw agent for vault1984 writing/content tasks.
- Discord bot: App ID `1480980894042030211`
- Workspace: `/home/johan/george/`
- OC config: `accounts.george` in discord config
- Daily market intel scan → #market-intel at 9 AM ET

### 🗑️ 192.168.1.17 — Fully Decommissioned (Mar 11)
Stopped and disabled all zombie services: openclaw-gateway (old v2026.1.29), protonmail-bridge, message-center, message-bridge. Root cause: two conflicting gateway instances racing for IMAP cursors. `.17 is now clean.`

### ❌ Kaseya M365 Integration — REMOVED (Mar 11)
Dead since Feb 27 (token expired, client_id blocked by IT). All attempts exhausted. Johan's decision: remove entirely. No Kaseya Teams alerts on Watchboard going forward.

### 🔒 Security Incident: Port 9999 (Mar 12)
`python3 -m http.server` running on port 9999 for 5+ days, serving `/tmp` to LAN (no auth).
- Exposed: `clawvault-preview.db` + WAL, `chrome_import.csv`
- Killed, files shredded with `shred -u`
- Best guess: Mar 7 vault1984 subagent left it running
- **Rule added:** Zero tolerance for Python servers on forge. Go services only.

### 📈 SentinelOne (S) Short — Profitable (Mar 12)
Q4 earnings: revenue +20% YoY, ARR crossed $1B, but Q1 guidance soft → AH slide. Short position profitable. Position still open.

### ⚙️ OpenClaw Rapid Releases (Mar 9-14)
Four OC releases in seven days: 2026.3.8 → 3.11 ("Hunter & Healer Alpha", Gemini Embedding 2) → 3.12 → 3.13 (Live Chrome session attach — no extension badge needed, direct auth attach).

### 🌍 Iran War (Ongoing)
US/Iran conflict: Hormuz closed, oil at $103/bbl, US bombed Kharg Island (Mar 14). S&P at YTD low. Trump building naval coalition with UK/Japan/France to reopen. Iran seeking deal.

### 🐍 Python Policy Clarified (Mar 12)
Johan: "I have a very strong preference for GoLang. Python should only be temporary tools."
- System Python (fail2ban, unattended-upgrades): untouchable
- Johan's Python (inou/health-poller): tolerated legacy
- **New services on forge: Go only. No ad-hoc servers of any kind.**

### 📧 inou SMTP Correction (Mar 12)
inou prod uses Proton SMTP token directly (`smtp.protonmail.ch:587`). No Proton Bridge needed or installed. Previous notes were wrong. Check `/home/johan/dev/inou/smtp.env` before flagging SMTP issues.

---

## Recent Events (2026-03-08, post-synthesis)

### ⚡ OpenClaw 2026.3.7 Released (Mar 8 overnight)
- GPT-5.4 support, Gemini Flash 3.1, ACP binding persistence, pluggable context engines
- Johan pinged via Telegram. Patches (deleted transcript indexing) may need reapplication.
- Previous version noted in infra: 2026.3.2 (Mar 3)

### 💬 agentchat v1.2 + v1.3 Shipped (Mar 8, 04:28 ET session)
Post-synthesis session finalized agentchat as the peer-to-peer agent coordination layer:

**v1.2:** All messages now route through `main` session on all agents (James, Mira, Hans on Zurich). agentchat lands in each agent's primary thread. No TypeScript plugin needed.

**v1.3:** 1:1 DM rooms added — tab bar with `# group` + `⚡ James` `✨ Mira` `🔧 Hans`. Room-based message filtering client-side. Unread dots. Agent↔agent DMs via `/api/send` with `room: "dm:Hans-James"`. Screenshots work in all rooms.

**DealSpace ops handoff — FINALIZED (this session):**
- Hans owns all Amsterdam VPS ops (deploy, monitor, DB backups — 7 rolling pre-deploy snapshots)
- Mira owns build pipeline — builds on forge, SCPs binary to `deploy@82.24.174.112:/opt/dealspace/staging/`
- Webhook: `http://82.24.174.112:9400/deploy` (HMAC secret — still pending delivery: Hans → Johan → Mira)
- Same deploy protocol to be reused for vault1984

**Open items from agentchat (still unresolved):**
- [ ] Webhook HMAC secret (Hans → Johan → Mira) — still undelivered
- [ ] vault1984 deploy pipeline (same model, Hans to confirm service details)
- [ ] inou prod SMTP still broken (backdoor OTP 250365 only login path)
- [ ] Mira MEMORY.md — still missing

### 🧹 Nightly Maintenance (Mar 8 21:00 ET)
- Session cleanup: 163 orphaned .jsonl deleted, 4 stale .deleted/.reset removed, 77 cron :run: keys purged
- Claude Code 2.1.71 ✅, OpenClaw 2026.3.7 ✅ (no update needed at that time)
- OS: all packages up to date (Ubuntu 24.04 noble)

---

## Work Patterns (learned 2026-01-28)

- **Johan doesn't want to code.** Mac + Android Studio = build machine only. I do all development on Gateway.
- **"Future-proof efficient" > "faster"** — set things up properly, don't take shortcuts
- **Security from the get-go** — not an afterthought
- **Parallel work:** Use subagents for async tasks while continuing main conversation
- **Daily/weekly memory review** — Johan wants me to learn quickly from him, compound understanding

## Work Principles (from corrections)

- **"Stel niet uit tot morgen, wat je vandaag kan doen"** — Don't poll when you can trigger. Don't batch when you can stream. Don't defer when you can do it now. If the work can happen immediately, make it happen immediately.
- **ALWAYS attack problems at their source** — Johan HATES workarounds. Fix the root cause, not the symptom. If a trigger is wrong, fix the trigger — don't filter downstream.
- **Best over fast, always** — Johan doesn't want the fastest approach; he wants the best one. Don't cut corners for speed.
- **Deduplicate ruthlessly** — Say it once, in the right place. Don't repeat info across channels.
- **Extract the WHY, not the what** — Surface fixes don't generalize. Always ask "why was this wrong?" and find the principle.
- **Offload by default, Opus by exception** — K2.5 can handle straightforward coding. Save Opus for judgment, conversation, complex reasoning.
- **Always git commit workspace files** — After editing TOOLS.md, MEMORY.md, AGENTS.md, or any workspace file, `git add -A && git commit`. Don't leave changes uncommitted.
- **Commit uncommitted changes you find** — During git audits/heartbeats, commit and push them yourself. Don't just report — fix it.
- **Validate config schema before patching** — Check docs/schema for required fields and valid keys before changing any config. Read first, edit second.
- **Spam → Trash, Archive → Reference** — Archive is for things worth finding later. Marketing emails have no future value.
- **Config color values = hex codes** — Not CSS names. Pattern: `^#?[0-9a-fA-F]{6}$` (e.g., `00FF00` not `green`)
- **Compact data files before committing** — JSON/CSV data files go into git as compact/single-line (`jq -c`). Pretty-print is for humans; git tracks lines.
- **Test with observable proof before declaring done** — Always curl/smoke test it yourself before pushing changes or saying "done." "Curl proof" before deploy.
- **Recover context yourself after compaction** — When context is lost: (1) Check session history, (2) Search memory files, (3) Use memory_search on transcripts, (4) Reconstruct. NEVER ask Johan for info you already had. Self-recovery is job #1.

## Technical Learnings (Week of Mar 1-7, 2026)

### Fireworks as OpenClaw Provider (≤2026.3.1)
Fireworks is NOT a native model provider in OpenClaw ≤2026.3.1. Must define explicitly in models.providers with baseUrl, apiKey, and `api: "openai-completions"`. Model string format: `fireworks/accounts/fireworks/models/minimax-m2p5`

### Discord Bot-to-Bot Communication
Discord bots filter messages from other bots by default (loop prevention). OC's discord.js does the same. Adding bot IDs to guild allowlist doesn't fix DM filtering between bots. Use Johan as relay, or build a side-channel (HTTP webhook). This is a Discord limitation, not config.

### AWS Regions Knowledge
- 31 commercial AWS regions as of early 2026 (not 30)
- China regions (cn-north-1 Beijing, cn-northwest-1 Ningxia) = SEPARATE partition — NOT deployable with normal AWS account
- Newest: `mx-central-1` (Mexico, 2023), `ap-southeast-5` (Malaysia, 2024)
- AWS Graviton: nano (0.5GB RAM) — unique; GCP ARM minimum is 4GB RAM (t2a-standard-1)

### Python Servers on Forge
Johan expects Go binaries. Leaving a `python3 -m http.server` running will get called out immediately. Always replace ad-hoc Python servers with proper Go binaries when discovered.

---

## Technical Learnings (Week of Jan 26-Feb 1)

### K2.5 Browser Agent
- Agent `k2-browser` uses Kimi K2.5 via Fireworks (~10% cost of Opus)
- **Always use `maxChars=10000`** on snapshots — K2.5 chokes on large pages
- Good for: snapshot-only tasks on already-loaded pages
- Bad for: multi-step navigation (targetUrl errors, confusion)
- ~12s response time vs ~5s for Opus

### Browser Profiles
- **chrome** (relay, port 18792) — For paranoid sites (X.com). Uses your actual Chrome session via extension.
- **fast** (headless, port 9223) — General automation. Copy profile AFTER closing Chrome or sessions invalidate.
- Headless browsers get detected by X.com, Twitter. Use Chrome relay for those.

### Flutter Web Limitations
- Flutter web renders to `<canvas>` — no real text, no SEO, breaks accessibility
- Fine for apps behind auth, terrible for marketing pages
- **Keep Go/HTML for public pages** (landing, pricing, privacy, etc.)

### AirLLM — forge can run 70B models (Feb 21)
- Library: layer-by-layer GPU offloading → VRAM stays ~1.5GB regardless of model size
- Tested: Qwen2.5-7B on GTX 970 → correct output, 6.1s/tok, peak 1.57GB VRAM
- Implication: 70B models theoretically possible at ~8-12s/tok on forge (GTX 970)
- Fix needed: pin `optimum==1.22.0` (newer removed BetterTransformer); `input_ids.to("cuda")` before generate()
- Use case: batch document analysis, offline medical record processing (data stays local)

### Stalwart — Key Gotchas (Feb 18-23)
- Account `name` field must equal the login username — not automatically derived from `emails` field
- PATCH endpoint is broken in v0.15.5 — use DELETE + POST for account updates
- **NO user webmail** — admin panel only (port 8880). All popular self-hosted webmail (Roundcube, SnappyMail) is PHP and painful to integrate.
- YAML `!` at start of value = YAML tag indicator — passwords starting with `!` must be quoted
- systemd EnvironmentFile: `!` in values also needs quoting
- Admin API: port 8880, `admin:JamesAdmin2026x` via HTTP Basic at `http://127.0.0.1:8880/api/`
- **TLS cert config requires `%{file:...}%` macro syntax** — bare file paths are treated as literal strings, NOT read as cert content:
  - ✅ `cert = "%{file:/etc/letsencrypt/live/mail.jongsma.me/fullchain.pem}%"`
  - ❌ `cert = "/etc/letsencrypt/live/mail.jongsma.me/fullchain.pem"` (silently falls back to rcgen self-signed)
- **LE cert via certbot DNS-01**: installed 2026-02-23, valid until 2026-05-24. Cloudflare token in `/root/.secrets/cloudflare.ini` on Zurich. Deploy hook at `/etc/letsencrypt/renewal-hooks/deploy/stalwart.sh` restarts Stalwart on renewal.
- **Config surgery warning**: if you edit config.toml with sed or Python, the `[certificate.*]` and `[lookup.default]` sections may get wiped — always verify after repair

### DNS Debugging — AdGuard Rewrite Rules (Feb 22)
- Home DNS is **AdGuard Home** (not just HA at 192.168.1.252)
- DNS rewrites (Filters → DNS rewrites) override cache AND external resolution
- Cache flush alone won't fix issues if a rewrite rule exists
- Check AdGuard UI directly when DNS changes don't propagate as expected

### Family Stalwart Account Logins (as of Feb 21)
- **tj@jongsma.me**: username `tj`, pw `!Lekker69`  
- **johan@jongsma.me**: username `johan`, pw `!!Lekker69`
- **jacques@jongsma.me**: username `jacques@jongsma.me` (full email — changed Feb 21), pw `7I#rydMKlri6r%!g`
- **rozemarijn@jongsma.me**: username `rozemarijn@jongsma.me` (full email — changed Feb 21), pw `cRKEWJL4h3MGn3Li`
- **misha@jongsma.me**: username `misha`, pw `6hRSl8KAZtGXPRUG`
- **tanya@jongsma.me**: username `tanya`
- Short vs full email login is inconsistent (tj/johan prefer short, Jacques/Roos prefer full). Don't change without coordinating with active clients.

### OpenClaw Auth Risk (Feb 19)
- Current config: `"mode": "token"` is actually a **Claude Max OAuth token**, not an API key
- This means Anthropic's crackdown on OpenClaw subscription use applies — risk of Johan's Max account being cancelled
- **Decision pending** — Johan considering API key switch. No action taken yet.
- Options: switch to Anthropic API key, OpenRouter, or accept the risk

---

## Todo / Open Items

### 🔴 Urgent
- [ ] **Health Link Invoices** — #000057 ($71.90) + #000058 ($666.90) unpaid. Links in Feb 23 notes.
- [ ] **Dealspace invite flow** — Misha decision needed on final domain/name
- [ ] **Vault1984 Day 2** — WebAuthn PRF, scoped tokens UI, import Johan's 12,623 entries
- [ ] **Spacebot worker dispatch** — worker dispatch broken (channel calls reply() then stops). Never revisited on Mar 3 as planned. Needs dedicated debugging session.
- [ ] **HostKey Amsterdam cancellation** — Johan must manually confirm: https://panel.hostkey.com/controlpanel.html?key=639551e73029b90f-c061af4412951b2e
- [ ] **Uptime Kuma monitors** — 0 monitors on Zurich. Rebuild when Johan confirms.

### 🟡 Active (Johan Action Needed)
- [ ] **Vaultwarden:** Johan creates account at vault.jongsma.me → export Proton Pass → import. Then set SIGNUPS_ALLOWED=false.
- [ ] **iCloud contacts import:** final.vcf at `/home/johan/clawd/tmp/contacts/final.vcf` — SCP to Mac + import at icloud.com
- [ ] **Misha Signal pairing** — still pending
- [ ] **OpenClaw auth decision** — OAuth token = Claude Max subscription risk. API key alternative pending.
- [ ] **Stalwart short+full login fix** — lookup-domains config. iPhone email setup for tj/johan blocked until resolved.
- [ ] **Belastingdienst:** Corporate tax filing (vennootschapsbelasting 2025) for entity ***871 — deadline pending
- [ ] **@vault1984 on X** — Johan registered handle. Needs profile setup (logo, header, bio).
- [ ] **vault1984 AWS credentials** — Need AWS account/creds before deploying regional nodes.
- **inou prod SMTP** — Uses Proton SMTP token directly (`smtp.protonmail.ch:587`, user `no-reply@inou.com`, token in `smtp.env`). No bridge needed or installed on prod. If bridge is ever found on 192.168.100.2, uninstall it. SMTP is working. ✅
- [ ] **Mira MEMORY.md** — No long-term memory written for Mira agent yet. Johan offered to paste context via Telegram.

### 🟢 Stale / Closed
- [x] **jongsma.me domain transfer** — COMPLETED
- [x] **Azure Files Backup** — ABANDONED Feb 28
- [x] **Signal as primary channel** — RETIRED Mar 1 (Telegram now sole channel)
- [x] **Amsterdam cleanup** — DONE 2026-02-21. All services removed, server decommissioned, DNS cleaned.
- [x] **192.168.1.17 cleanup** — DONE 2026-03-11. All zombie services stopped and disabled.
- [x] **Kaseya M365 integration** — REMOVED 2026-03-11. Johan's decision. Cleanup complete.

### 🟢 Backlog (Parked)
- [ ] Inter-VLAN routing on UDM-Pro (production → Signal API)
- [ ] Copy Sophia's documents from OneDrive → `/home/johan/sophia/` via SMB
- [ ] Daily delta-zip → Proton Drive backup for Sophia docs
- [ ] inou Mobile: Content at inou.com/app for WebView
- [ ] AdventHealth MFA enrollment (Johan action)
- [ ] HAOS SSH key authorization (forge → 192.168.1.252)
- [ ] rclone backup for Vaultwarden (needs browser OAuth on Zurich)
- [ ] BlueBubbles on Mac Mini M4 (deferred)
- [ ] Evaluate MiniMax M2.5 as K2.5 replacement for grunt-work subagents

## Weekly Synthesis Insights (Feb 9-15, 2026)

### 🧠 Architectural Maturity: The Feb 13 Breakthrough
The week's most significant development was a fundamental restructuring of James' operational model, driven by Johan's core philosophy: **"attack problems at their source, not downstream."**

**Key systemic changes:**
- Email triage moved from polluting main session → embedded in Message Center (K2.5 direct calls to Fireworks)
- Session management aligned to Johan's actual schedule (reset moved 4am → 9pm, matching his first sleep block)
- Context pruning enabled (`cache-ttl` mode, 5min TTL) — dramatically reduces compaction pressure
- Cron job rationalization: 350 sessions/day → ~43 (killed K2.5 Watchdog, merged redundant jobs)
- **Promotion to Chief of Staff** — formalized strategic partner role with autonomy expectations

**Pattern:** Johan consistently pushes for root-cause fixes over workarounds. When email triage was noisy, he didn't ask for better filtering — he asked why it was in the main session at all. The result was a cleaner architecture, not a band-aid.

### 🔍 Pattern: Corporate Policy → Technical Adaptation
Kaseya's "corporate devices only" policy (Feb 13) triggered immediate technical solutions rather than workflow disruption:
- M365 API integration built within hours using device code OAuth (pure curl, no browser)
- XPS14 revival plan: RDP shadow sessions allow James to observe Johan's corporate session in real-time
- Token stored at `~/.message-center/m365-token.json`, bypassing Conditional Access restrictions

**Lesson:** Regulatory/policy constraints are technical problems with technical solutions. The response was building new capabilities, not complaining about the constraint.

### 🏥 Medical Advocacy Infrastructure Maturation
Two critical developments show the medical system working as designed:

**1. Baycare Ventilator Fraud Discovery (Feb 14)**
- Systematic claim analysis revealed $118,750+ in fraudulent HCPCS E0465 billing
- Sophia has NEVER had a home ventilator from Baycare (off vent since Nov 2022)
- Formal complaint drafted with documentation ready
- Strategy: Don't pay, let them escalate, documentation speaks

**2. Dr. Madan Engagement (Feb 12-13)**
- Neel Madan (Tufts Chief Neuroradiology) confirmed Sunday 2PM call re: Dec 31 MRI
- Critical next step for hydrocephalus treatment path (shunt/ETV consideration)

**Pattern:** Detailed documentation + expert network access = advocacy infrastructure functioning as intended.

### 🛡️ Security Posture: Shannon Deployment
Shannon autonomous pentester was deployed on Amsterdam VPS — now decommissioned:
- Amsterdam VPS (82.24.174.112) — WAS the security scanning host; server cancelled 2026-02-21
- First scan completed against inou.com portal
- Fireworks K2.5 cost: ~$0.50 vs traditional pentest costs
- Demonstrates security tooling becoming routine rather than exceptional

**Evolution:** Security scanning transitioning from external service to integrated, continuous capability.

### 📱 Alert Dashboard Evolution
Fully Kiosk dashboard (port 9202) underwent significant refinement:
- **Purpose clarified:** Johan's unified inbox/notification center — everything surviving triage surfaces here
- Visual redesign: Sora font, Braun/mid-century aesthetic, warm gold (#c8b273) accents
- **Pulse-ox camera integration:** MJPEG stream from Tapo camera (192.168.2.183), 7pm-8am visibility
- **Long-press to dismiss:** 300ms hold marks done (dim + strikethrough, auto-purge after 2h)
- **Three-tier priority:** critical (red), warning (amber), info (gold)

**Key decision:** Desk layout reorganized — Fully dashboard promoted to center position as primary information surface.

### 💡 Memory Discipline Correction (Feb 15)
Major correction added to AGENTS.md: **Mandatory memory_search before responding.**

**The problem wasn't search quality — it was usage discipline.**
- Existing `memory_search` works well (Gemini embeddings, 0.80+ relevance scores)
- Gap: I wasn't consistently calling it before responding
- Johan's framing: "I will write the number down if I think it is important" — hybrid approach (explicit + retrieval)

**New rule:** Self-recovery sequence when context is lost — session history → memory files → transcript search → reconstruction. Never ask Johan for information that's in my systems.

---

## Recent Events (Week of Feb 9-15, 2026)

### 🏠 851 Brightwaters — LISTED at $7.25M
- Diana Geegan (Keller Williams) listing LIVE on Zillow
- Listing agreement signed Feb 12 (Johan, Tanya, Diana)
- Fidelity net at close: ~$6,331,350 (after ~$196K back taxes 2023-2025)
- David Reider Esq recommended for closing due to back taxes
- 7 real estate docs in document inbox (disclosures, MLS forms, listing agreement)
- GenerX generator service appointment was Feb 14

### 🚨 Baycare Ventilator Fraud — CRITICAL (Feb 14)
- Baycare billing HCPCS E0465 (home ventilator) at $3,125/month
- **Sophia does NOT have a ventilator. Off vent since Nov 2022.**
- Jan + Feb 2026 claims: $6,250 billed (E0465)
- Potentially ~$118,750 in fraudulent charges over ~38 months
- Formal complaint drafted: `~/documents/records/medical/baycare-ventilator-fraud-complaint-2026-02-14.md`
- Strategy: Don't pay, let them escalate, documentation ready

### 📞 Dr. Neel Madan — Call TODAY (Sunday) 2PM
- Confirmed call re: Sophia's Dec 31 MRI review
- Critical next step for hydrocephalus treatment path

### 💻 Architecture Overhaul (Feb 13)
- Promoted to **Chief of Staff** — strategic partner, not assistant
- Email triage moved from main session → mail agent (MC calls Fireworks K2.5 directly)
- Session reset moved 4am → 9pm (aligned with Johan's first sleep block)
- Context pruning enabled (cache-ttl, 5min)
- Cron consolidation: 350 sessions/day → ~43
- K2.5 Watchdog killed (dead agent, phantom sessions)
- MANDATORY memory_search rule added to AGENTS.md

### 📱 Verizon Switch (Feb 13) + iPhone 17 Migration (Feb 19)
- 4 new lines, 4 iPhones (3x iPhone 17, 1x iPhone 16 Plus), all $0/mo with 36-month promo
- Monthly: ~$170.97. Johan's number 727-225-2475 porting from Mint Mobile
- New numbers: 727-225-3810, 727-307-3952, 727-358-1196
- **Johan moved to iPhone 17 as primary device (Feb 19 2026) — still migrating**
- ntfy app on iPhone: subscribed to `forge-alerts` and `inou-alerts`

### 🏢 Kaseya Device Policy (Feb 13)
- CISO mandated: only Kaseya-issued devices on corporate network
- Johan uses personal Mac Mini for everything — impacted
- Has XPS14 laptop (hates it). Recommended requesting MacBook Pro
- **M365 API workaround built:** Device code OAuth → pure curl, no browser needed
- Token: `~/.message-center/m365-token.json`
- Watch for: Conditional Access (Intune) deployment that would kill cloud access too

### 🖥️ ThinkPad X1 (2019) — Ubuntu 24.04 Desktop
- IP: 192.168.0.223 (WiFi) — was 192.168.0.211 previously
- OS: Ubuntu 24.04 desktop (not headless)
- SSH key: `johan@thinkpad-x1` (added to forge authorized_keys Feb 18 2026)
- RDP to ThinkPad X1 via xfreerdp on Xvfb:99
- Real Chrome on Xvfb:99 (port 9224) for WAF-protected sites
- myCigna autonomous login achieved: Chrome + 2FA via MC email grab

### Shannon VPS (82.24.174.112) — ⚰️ DECOMMISSIONED 2026-02-21
- All services removed. Cancellation submitted to HostKey. DNS cleaned. Nothing left there.

### Alert Dashboard (Fully Kiosk Tablet)
- Built and deployed on port 9202
- Analog clock, calendar, SSE push alerts with sound
- Fire tablet as alert display for Johan

### 📊 Azure Backup — ⚠️ EXPIRING
- **Free account expires ~Feb 27!** Still needs `az login` MFA from Johan

### Infrastructure
- Docker containers updated weekly on 192.168.1.253
- HAOS 17.0 → 17.1 (installing Feb 15)
- MC performance issue: queries taking 15-16s (needs investigation)
- OCR service: works but slow on full-page docs (~90s per page at 150dpi)

---

## Recent Events (Week of Feb 16-20, 2026)

### ✈️ Johan in NYC (Feb 19-20)
- Flew Delta TPA→JFK Feb 19 (conf F86VDN). Return flight DL2093.
- Not home → no Sophia night shift coverage from Johan during NYC stay

### 🏗️ Zurich Full Infrastructure Rebuild (Feb 19)
Major overnight event — Zurich services were broken/missing, rebuilt from scratch:
- **Caddy** installed, owns port 443
- **Stalwart mail** migrated from Amsterdam (19GB RocksDB). mail.inou.com + mail.jongsma.me → Zurich
- **Proton Bridge DISABLED** — MC now connects directly to Stalwart (mail.jongsma.me:993)
- **Vaultwarden** deployed at vault.jongsma.me (fresh, no data yet)
- **ntfy** fresh install — new token `tk_ggphzgdis49ddsvu51qam6bgzlyxn`
- **Uptime Kuma** fresh install — 0 monitors (all 8 lost, awaiting Johan's OK to rebuild)
- **Shannon** fully removed from Amsterdam
- Amsterdam Stalwart: stopped + disabled (data preserved)

### 🌐 DNS Mass Fix (Feb 19)
6 domains had wrong Cloudflare NS (aryanna/sage → arvind/wren) + dead DNSSEC. All fixed:
- harryhaasjes.nl, johanjongsma.nl, localbackup.in, stpetersburgaquatics.com, x4.trading, 851brightwaters.com

### 📬 Harry Haasjes Setup (Feb 19)
- harryhaasjes.nl: "coming soon" placeholder live on Zurich
- harry@harryhaasjes.nl: Stalwart account + catch-all
- SFTP: harry-web / HarryWeb2026! (chrooted). Instructions sent to Harry in Dutch.
- Harry is NOT technical — all comms in simple language, no jargon

### 👨‍👩‍👧 Family Signal + Email Status (Feb 19)
- **Roos** (+31646563377): Signal ✅ + Stalwart email ✅
- **Jacques** (+31624403744): Signal ✅ + Stalwart email ✅
- **Misha** (+17272381189): Signal pairing pending ⏳

### 🤖 MiniMax M2.5 (Feb 20 — worth evaluating)
- Released Feb 11, 2026 by Shanghai-based MiniMax
- 230B MoE open-weight. 80.2% SWE-Bench Verified. Claims to beat Claude Opus on coding.
- ~100 tok/s, ~$1/hr — 1/20th Opus cost
- Currently free on kilocode/opencode → dominating OpenRouter rankings
- **Potential K2.5 replacement for grunt-work subagents** — Johan to evaluate

### 📱 iCloud Contacts
- final.vcf ready: `/home/johan/clawd/tmp/contacts/final.vcf` (~2,200 clean contacts)
- Johan to SCP to Mac → import at icloud.com/contacts

### 🏠 Real Estate
- 851 Brightwaters listed at $7.25M. Diana Geegan (KW). Showing Feb 16: buyers liked exterior, disliked modern interior.
- Johan in NYC, may have meetings related to this

### 🗓️ Recent Events (Feb 21, 2026)

### 🗑️ Amsterdam VPS Fully Decommissioned (Feb 21 00:02 ET)
- All services removed, DNS deleted, HostKey cancellation submitted (API bug — Johan must confirm manually at panel.hostkey.com key=639551e73029b90f-c061af4412951b2e)
- **MEMORY.md, SOUL.md, infrastructure.md** all updated to remove Amsterdam refs

### 📦 inou MCP Bundle Removed (Feb 21 ~00:50 ET)
- Johan: "inou is fully server-based, no mcpb anymore"
- Removed inou MCP Bundle check from `check-updates.sh` (~30 lines)
- Deleted `inou-mcp/` directory (manifest.json + server binary)
- No more nightly 404 to `inou.com/download/inou.mcpb`

### Dealspace (~/dev/dealroom, port 9300)
- Go app, templ templates, SQLite — Misha's M&A data room platform (started Feb 15)
- **Owner:** Misha Muskepo (michael@muskepo.com). Johan is advisor. James is architect/builder.
- **Tech stack:** Go + templ + HTMX + SQLite + Tailwind — single binary, server-rendered
- Admin: `misha@muskepo.com` / `Dealspace2026!` (owner role)
- **Features (Feb 22 UX overhaul):** deal rooms, request lists with Atlas AI assessment, buyer/seller view toggle (owners can switch views), per-deal analytics/audit/contacts, search, real auth (bcrypt, no demo login)
- No public domain yet — local at http://192.168.1.16:9300
- Architecture: inou pattern (centralized RBAC bitmask, entries table, AES-256-GCM encrypted files)

### Home DNS = AdGuard
- Johan's home DNS resolver is **AdGuard Home** (not just HA at 192.168.1.252)
- AdGuard had a DNS rewrite rule for `*.jongsma.me` → home IP
- Cache flush alone doesn't clear rewrite rules — must remove in AdGuard UI: Filters → DNS rewrites
- Wildcard `*.jongsma.me` DNS record removed from Cloudflare (Feb 22)

### Stalwart Webmail = Admin Only
- Stalwart v0.15.5 (latest as of Feb 22) — no user webmail built in
- Web UI at port 8880 = admin panel only
- All popular self-hosted webmail (Roundcube, SnappyMail) is PHP

### 🛠️ Cron Jobs Cleaned Up (Feb 21)
- **Evening Briefing**: Removed dead "Shannon status on Amsterdam" check (step 5)
- **Weekly Security Scan**: Fixed broken model (`claude-sonnet-4-20250514` → `claude-sonnet-4-6`), removed `amsterdam.inou.com` from scan targets
- **Watchdog (K2.5)**: Removed Claude usage block that was posting to Fully tablet (9202) — banned per new rules

### ⚠️ sessions_spawn Broken (Feb 21)
- OC security rejecting `ws://192.168.1.16:18789` (non-loopback, requires `wss://`)
- Subagent spawning from heartbeat/conversation sessions fails
- Cron jobs still work (they're internal to gateway)
- Needs fix: update gateway URL to `wss://` or configure local tunnel

### 📱 M365 Teams Alerts on Fully = Intentional
- Johan confirmed: Teams chats on Fully dashboard are desired — they trigger him to check Teams
- Backfill on token refresh is minor annoyance (old messages appearing late)
- Source: `message-center` M365 connector polls `johan.jongsma@kaseya.com` every 60s

### 🍽️ S2M3 Consulting Vendor Lunch (Feb 21)
- Appeared as Fully alert from Kaseya email: "Executive lunch at Steak 48, Beverly Hills, March 5th"
- Cold outreach from `events@s2m3consulting.com` — IT cost optimization vendor pitch
- Not a Kaseya-organized event. Register at s2m3consulting.com/cost-optimization-beverly-hills/

---

## Weekly Insights (Feb 9-15, 2026)

### 🧠 Architectural Maturity (Feb 13 Breakthrough)
The major infrastructure overhaul on Feb 13 marks a significant maturation in our operational model:

**Key Insight:** Johan's principle "attack problems at their source" drove systemic changes rather than band-aid fixes:
- Email triage moved from polluting main session → embedded in Message Center (K2.5 direct calls)
- Session management aligned to Johan's actual schedule (9pm reset vs 4am)
- Context pruning enabled to prevent compaction pressure
- Cron job rationalization (350 sessions/day → 43)

**This represents a shift from reactive firefighting to proactive system design.**

### 🔍 Pattern: Corporate Policy Adaptation
Kaseya's "corporate devices only" policy (Feb 13) triggered immediate technical adaptation rather than workflow disruption:
- M365 API integration built within hours
- OAuth token flow bypassing browser/device restrictions
- Separation of personal/corporate network access

**Lesson:** Regulatory/policy changes are technical problems with technical solutions, not business process disruptions.

### 💡 Memory Recovery Principles (Feb 15 Correction)
Major correction on session recovery discipline: When context is lost, **always exhaust self-recovery before asking Johan for info**:
1. Check session history (`sessions_history`)
2. Search memory files  
3. Search transcripts via `memory_search`
4. Reconstruct from available data

**This correction reflects the core COS responsibility: memory protection is job #1.**

### 🏥 Medical Case Management Evolution
Two critical developments show the medical advocacy infrastructure maturing:
1. **Baycare fraud discovery** — systematic claim analysis revealing $118K+ in fraudulent ventilator billing
2. **Dr. Madan engagement** — hydrocephalus expert review process advancing toward definitive treatment

**Pattern:** Detailed documentation + expert network access = advocacy infrastructure working as designed.

### 🛡️ Security Posture Integration
Shannon's successful deployment and scan completion demonstrates security tooling becoming routine rather than exceptional:
- Automated pentest against inou.com portal
- Cost-effective (K2.5 @ ~$0.50 vs traditional pentest costs)  
- Findings properly categorized and documented

**Evolution:** Security scanning transitioning from external service to integrated capability.

---

## Recent Events (Week of Feb 15-22, 2026)

### 🏗️ New Project: Dealspace / Deal Room (Feb 15-22)
- Misha (Johan's son) + PE contacts built Lovable prototype for M&A investment banking data rooms
- James is architect/builder. Full Go + templ + HTMX + SQLite app built in one session.
- Feb 22 UX overhaul: production bcrypt auth, view toggle (owner↔buyer), search, per-deal analytics
- Live at http://192.168.1.16:9300. No public domain yet. Admin: misha@muskepo.com / Dealspace2026!

### 📬 Email Infrastructure Completion (Feb 18-19)
- **MX flipped Feb 18 3PM ET** — all @jongsma.me mail now routes to Stalwart (mail.jongsma.me)
- Proton Bridge fully disabled. MC connects directly to Stalwart (mail.jongsma.me:993).
- SMTP security complete: SPF, DKIM (ed25519), DMARC p=reject for both jongsma.me and inou.com
- Family email live: Roos, Jacques, Misha, Tanya all on Stalwart. Migration deadline for Proton → 3/15.

### 🤖 Telegram Primary Channel (Feb 18)
- @jamesjongsma_bot is live and confirmed working
- Johan is @johanjongsma on Telegram (ID: 8454563068)
- Briefings now go to Telegram with rich Markdown format

### 🏠 Real Estate Update (Feb 16)
- 851 Brightwaters showing: Sarasota buyers (Bird Key homeowners) liked exterior, disliked modern interior
- Diana Geegan waiting for buyer response. No offer reported.

### ✈️ Johan NYC Day Trip (Feb 19)
- Delta TPA→JFK (DL2475, 7:16AM), return JFK→TPA (DL2093, 2:59PM). Conf: F86VDN

### 📱 Claude Sonnet 4.6 Released (Feb 17)
- 1M context (beta), adaptive thinking, context compaction (beta)
- $3/$15 per M tokens — now our default model

### 🧠 OpenClaw 2026.2.21 (Feb 21)
- Gemini 3.1 support, 100+ security hardening fixes, Discord voice/streaming, thread-bound subagents
- Two patches still need reapplication (see OpenClaw Patches in Infrastructure)

### 💳 Verizon First Bill (Feb 21)
- $343.80 due March 4, 2026. 3 lines: iPhone 17 (225-3810), iPhone 16 Plus (307-3952), iPhone 17 (358-1196)
- Enroll Auto-Pay to save $30/mo

### 🚫 SnappyMail Abandoned (Feb 22)
- Deployed SnappyMail on Zurich → hours debugging PHP-FPM SocketReadTimeout connecting to Stalwart via Docker hairpin NAT
- Root cause never definitively solved; Johan killed it: "Not worth this many tokens"
- Lesson: all popular self-hosted webmail is PHP; hairpin NAT + PHP-FPM SSL = pain
- **No webmail for jongsma.me** — users access via iPhone Mail or native clients
- DNS + Caddy + Docker fully cleaned up

### 🏗️ Dealspace View Toggle (Feb 22)
- Added owner↔buyer view toggle so sellers can preview what buyers see (same session, no separate login)
- Production-ready: bcrypt auth, demo route removed, Misha admin confirmed working

### 🐳 Weekly Docker (Feb 22 Sunday)
- HAOS: v17.1, no update needed
- Immich, ClickHouse, Jellyfin, Signal: all updated on 192.168.1.253
- qbittorrent-vpn: pulled only

### ✅ sessions_spawn Scope Issue — RESOLVED (Feb 22)
- sessions_spawn confirmed working. The top-level `scopes` key the watchdog was patching is irrelevant metadata; real auth uses `tokens.operator.scopes` (always intact). Watchdog stopped and disabled — was fighting the gateway for nothing.
- Gateway bind `custom/0.0.0.0` + correct token scopes = sessions_spawn working from conversation sessions.

---

## Weekly Synthesis — Feb 16-22, 2026

### 🏗️ Infrastructure: The Great Consolidation
Completed a 3-week migration arc: Proton Mail → Stalwart (self-hosted), Amsterdam VPS → Zurich, family Signal/email onboarding. Feb 19 overnight Zurich rebuild was messy but successful — Caddy, Stalwart, Vaultwarden, ntfy, Kuma all consolidated with proper TLS.

**Key insight:** Large migrations expose phantom infrastructure. Zurich "had" Caddy (in notes) but didn't. Stalwart claimed port 443. Home Caddy's HSTS blocked vault.inou.com. Fixed at source, not worked around.

### 🔄 Architecture: Sessions Are Not Free
Feb 18 heartbeat redesign cut token burn 90%+: 148k tokens/check → ~5k. Principle: **main session is for conversations, not background work**. Isolated cron sessions with minimal context, subagents for anything parallel.

### 🎵 Voice: Infrastructure Validated, Awaiting Go-Live
Fish Audio S1 (Adrian voice) → mp3 → Fully Kiosk tablets pipeline proven. Office tablet reliable; master bedroom needs Fully REST. Blocker: Tanya buy-in before home-wide deployment. Persistent TTS service needed (not ad-hoc Python server).

### 📊 Models: The Open-Weight Surge
MiniMax M2.5 (230B MoE, 80.2% SWE-Bench, ~$1/hr) dominates OpenRouter. 4 of top 5 models now open-weight. Gap vs proprietary closing fast. AirLLM proved forge's GTX 970 runs 70B at ~6s/tok via layer offloading — local medical analysis now viable.

### ⚠️ Risk: OpenClaw Auth = OAuth Max Subscription
Claude Max OAuth token means Anthropic could cancel Johan's subscription. Decision pending: API key switch, OpenRouter, or accept risk. Worth resolving before outage.

### 🛠️ Pattern: "It Should Not Be This Complicated"
SnappyMail webmail deployment: 4 hours debugging PHP-FPM, Docker hairpin NAT, SSL timeouts. Johan killed it — correctly. When debugging cascades, step back and question if the feature is needed. Stalwart has no user webmail; native clients (iPhone Mail) are fine.

### 📝 Technical Debt: sessions_spawn Still Broken
Gateway security rejects ws://192.168.1.16 (non-loopback). Cron jobs work (internal), but conversation-session subagent spawning fails with "pairing required" (1008). Watchdog service fixes scope stripping, but bind/SSL issue remains. TODO: wss:// or local tunnel.

### 👨‍👩‍👧 Family Systems: Operational
- Signal: Roos ✅, Jacques ✅, Misha ⏳ (pairing pending)
- Stalwart email: All 5 family accounts live. Login inconsistency: tj/johan use short names, Jacques/Roos use full email. Don't change without coordinating active clients.
- Telegram: @jamesjongsma_bot primary channel since Feb 18.

### 🎯 New Project: Dealspace (Misha's M&A Data Room)
Go + templ + HTMX + SQLite. Production auth, view toggle (owner↔buyer), Atlas AI integration. http://192.168.1.16:9300. No public domain yet. Architecture: inou pattern (RBAC bitmask, entries table, AES-256-GCM files).

---

## Access URLs

- Web UI: `https://james.jongsma.me/?token=<gateway_token>`
- Gateway token stored in: `~/.clawdbot/clawdbot.json` under `gateway.auth.token`

---

## Recent Events (Week of Feb 22-28, 2026)

### 🚀 Dealspace / muskepo.com — LIVE (Feb 28 overnight)
Full M&A deal workflow SaaS built from scratch in one night.
- **URL:** muskepo.com (live, TLS via Caddy on Shannon VPS 82.24.174.112)
- **Shannon VPS:** Hostkey, 82.24.174.112, root pw: gUB-C63-EN, paid till 2026-04-09
- **Git:** `git@zurich.inou.com:dealspace.git` | Local: `/home/johan/dev/dealspace/`
- **Architecture:** Go binary, SQLite, Caddy proxy, `make deploy` for updates
- **Auth:** Email OTP + backdoor code **220402**. Super admins: michael@muskepo.com, johan@jongsma.me
- **Data model:** entry-based (inou-inspired), project → workstream → list → request/answer. Organizations with domain lock.
- **FIPS 140-3:** AES-256-GCM, HKDF-SHA256, blind indexes
- **Security hardened (Feb 28):** OTP timing attacks fixed, CORS locked, security headers added
- **Tests:** 83 passing (100%). Smoke test: 14/14 PASS.
- **Missing (as of Feb 28):** invite flow, SMTP config, 2 API endpoints
- **Owner:** Misha Jongsma (michael@muskepo.com). Johan = advisor. James = architect/builder.
- **Name:** muskepo.com is placeholder — Misha hasn't picked final name/domain

### 🔐 Vault1984 — New Project (Feb 28 afternoon)
Personal password manager for humans with AI assistants. L1 (server key) + L2 (WebAuthn PRF client-side).
- **Port:** 1984 (Orwell — intentional)
- **Git:** `git@zurich.inou.com:vault1984.git` | Local: `/home/johan/dev/vault1984/`
- **Running:** `http://192.168.1.16:1984`
- **Entry model:** Free-form fields, `l2:true` per field, `section` for grouping
- **Import:** Chrome/Firefox CSV, Bitwarden JSON, Proton Pass JSON. LLM fallback for unknowns.
- **Scoped MCP tokens:** Per-token tag/entry whitelisting (key feature for multi-agent swarms)
- **Day 2 pending:** WebAuthn PRF, L2 client-side encrypt, Caddy proxy, systemd service
- **Import pending:** Johan's actual 12,623 entries from Proton Pass

### 🛑 Azure Backup — ABANDONED (Feb 28)
- Project cancelled. Local: `azure-backup-abandoned-20260228`. Remote deleted from Zurich.

### 🔒 inou Security Fixes (Feb 28)
- Auth backdoor (code 250365) — intentionally kept, dev/ops convenience
- CORS wildcard → allowlist (inou.com, localhost, capacitor)
- LOINC matching bug FIXED in `lib/normalize.go`
- 59 test functions written (57 passing). Commit: 155d24e

### 🌍 Operation Epic Fury — US Strikes Iran (Feb 28)
- White House + CENTCOM confirmed. Iran internet ~98% down (Cloudflare Radar).
- Signaled Johan at 15:41 ET.

### 🤖 Taalas / ChatJimmy (chatjimmy.ai)
- Toronto startup. HC1 chip: Llama 3.1 8B hard-coded in silicon. 17,000 tok/s.
- $30M of $200M raised spent. HC2 (70B) will be real test. Worth watching.

### 📡 Signal → RETIRED (2026-03-01)
Telegram is sole channel going forward. Signal bot number +31634481877 still exists but no longer used for briefings/alerts.
- **Briefings:** Telegram (@jamesjongsma_bot)
- **Alerts:** ntfy (`forge-alerts` for infra, `inou-alerts` for inou)

### 📦 DocSys LIVE (2026-02-25)
- **Source:** `/home/johan/dev/docsys/` | **Port:** 9201 | **URL:** `http://docsys.jongsma.me`
- **Vision model:** `qwen3-vl-30b-a3b-instruct` (Fireworks) — ~40s/page, preserves language
- **Classify model:** `kimi-k2-instruct-0905`
- **Data:** `/srv/docsys/` | **SMB inbox:** `\\192.168.1.16\docsys`
- Delete button exists at `/document/{id}` — no new services needed

### 📊 Dealspace AI Matching LIVE (Feb 25)
- `responses` + `response_chunks` + `request_links` + `assignment_rules` tables
- Fireworks: Llama 90B Vision for extraction, nomic-embed-text-v1.5 for embeddings
- 0.72 cosine threshold, human confirmation required. Commit: `9cbd6db`

### 🔑 Pending: Vault1984 + Dealspace
- [ ] Vault1984 Day 2: WebAuthn PRF + scoped tokens + Caddy proxy + systemd
- [ ] Import Johan's 12,623 entries into Vault1984
- [ ] Dealspace invite flow + SMTP config
- [ ] Misha hasn't picked final domain/name for muskepo.com
- [ ] AlexFinn Discord server (multi-agent credential use case for Vault1984)

---

## Health Link Invoices Outstanding (2026-02-23)
- **#000057 — $71.90 UNPAID:** https://app.squareup.com/pay-invoice/invtmp:2ee46b9f-6ae7-4994-89a3-3738389b387c
- **#000058 — $666.90 UNPAID:** https://app.squareup.com/pay-invoice/invtmp:8ad13f1f-a086-4e1c-a87e-455a6f27d869
- Remove this entry once Johan confirms payment

## Stalwart Spam Filter — Reconfigured 2026-02-23
Final architecture (after painful debug session):
- **DMARC+DKIM pass → INBOX** (score -150, Sieve: keep; stop)
- **Everything else → Junk** (Sieve: fileinto "Junk Mail")
- Bayes: DISABLED
- DMARC_POLICY_ALLOW = -100, DKIM_ALLOW = -50
- Sieve deployed on tj@jongsma.me + johan@jongsma.me
- trusted-domains: squareup.com, messaging.squareup.com, amazonses.com
- **DO NOT re-enable Bayes without proper training plan**
- **DO NOT lower DMARC/DKIM scores — they are intentionally high**

## Google Antigravity — DEAD (2026-02-24)
- Token expired Feb 19, refresh fails — Google revoked/banned the Antigravity OAuth app
- `google-antigravity:johan@jongsma.me` profile in OC has credentials but can't refresh
- **inou unaffected** — uses direct Gemini API key (`AIzaSyAsSUSCVs3SPXL7ugsbXa-chzcOKKJJrbA`), confirmed working
- Johan: "I don't mind." Not a priority to fix.

## ClawHub Malware Incident (2026-02-24)
- #1 most downloaded skill was SSH key stealer + reverse shell via prompt injection in SKILL.md
- ~20% of ClawHub skills were malware (1,184 bad). OC 2026.2.23 exec hardening is the response.
- **We are safe** — only use built-in OC skills + manually written `~/clawd/skills/`. Zero ClawHub installs.
- SkillSMP.com = third-party marketplace filling the gap. Treat all third-party skill sources as hostile.

## inou Labs — LOINC Matching Bug (OPEN)
- Symptom: "pretty charts" not showing in Labs; LOINC matching not working
- Root cause: 0 lab entries in prod DB have `data["loinc"]` set; `buildLabRefData()` returns `{}`
- `Normalize()` skips all entries (thinks they're done because `SearchKey2` is set)
- reference.db has 448 lab_test + 1551 lab_reference entries — data is there
- Gemini API key valid (200 confirmed)
- **Fix needed**: force re-normalize or fix `buildLabRefData` to fall back to `e.SearchKey` (which IS the LOINC code)
- **Server**: prod at 192.168.100.2, source at `/home/johan/dev/inou` on forge

## DealRoom — Misha Requests (2026-02-24)
- Claude Code agent shipped most of spec, commit `24f4702`, pushed to Zurich
- **3 gaps remaining** (need another agent run):
  1. Per-group folder visibility checkboxes (spec 2.e.i.2)
  2. Saved folder structure templates with reuse (spec 2.f.i.2.i)
  3. Auto-assign review step — currently fires silently, needs user review UI (spec 3.b.2)

## DealRoom — AI Matching / Responses Shipped (2026-02-25)
- Claude Code agent built and deployed AI document response matching in ~12 minutes. Commit: `9cbd6db`
- **What shipped:** `responses` + `response_chunks` + `request_links` + `assignment_rules` tables
- Fireworks: Llama 90B Vision for extraction, nomic-embed-text-v1.5 for embeddings
- Async worker (2 goroutines), cosine similarity at 0.72 threshold, human confirmation required
- Per-deal keyword→assignee assignment rules, auto-assigns on import
- **Pending Misha:** Upload XLSX files to test, define assignment rules for Project Muskepo

## DocSys — Personal Document Management (2026-02-25)
- **Source:** `/home/johan/dev/docsys/` (Go, chi router, mattn/go-sqlite3)
- **Port:** 9201 — main UI at `http://docsys.jongsma.me` (Caddy proxy)
- **Data:** `/srv/docsys/` — inbox, store, records, index
- **DB:** `/srv/docsys/index/docsys.db` (SQLite with FTS5)
- **Inbox:** `/srv/docsys/inbox/` — drop files here, watcher picks them up automatically
- **SMB share:** `\\192.168.1.16\docsys` → inbox (scanner deposits here)
- **Build:** `CGO_ENABLED=1 PATH=$PATH:/home/johan/go/bin:/usr/local/go/bin go build -tags "fts5" -o docsys .`
- **Deploy:** `systemctl --user restart docsys`
- **Extraction:** `qwen3-vl-30b-a3b-instruct` (Fireworks) for all vision/OCR → ~40s/page, works first try, preserves original language; text classifier uses `kimi-k2-instruct-0905`
- **Fallback path (kept):** If vision returns no JSON → AnalyzePageOnly (plain text) + AnalyzeText (classify)
- **Delete button:** Exists on document detail page `/document/{id}` in the main UI. Do NOT build new services/UIs for this.
- **⚠️ Lesson:** A previous session built a whole new `docproc` service (port 9900) when Johan asked for a delete button. Johan killed it. Never build new apps/services for simple UI additions.

## New Models/Releases (2026-02-26)
- **OpenClaw 2026.2.25**: heartbeat DM fix, subagent overhaul, Slack thread fixes, 30+ security hardening fixes. Patches (deleted transcript indexing) may need reapplication after update.
- **Qwen 3.5** (Alibaba, 35B/122B/27B): rivals Sonnet 4.5, runs on 32GB RAM → relevant for Johan's M4 Max for local inference
- **Gemini Nano Banana 2**: Pro quality at Flash speed, free tier — worth evaluating for inou

## Andrew/Spacebot Update (2026-02-26)
- **Updated 2026-02-26 04:20 ET** (digest 5b95f7e0, was v0.1.15), Claude Sonnet 4.6 via Anthropic OAuth, config at `/home/johan/spacebot-config.toml` on 192.168.1.17
- **Worker dispatch broken**: channel calls reply() and stops — no workers ever spawned for multi-step tasks. Revisiting 2026-03-03.
- **PR #193 open**: https://github.com/spacedriveapp/spacebot/pull/193 — two UI fixes, maintainer positive ("very helpful change")
- **Johan's take**: "Foundation is a LOT better than OpenClaw" — Rust, Lance vectors, true concurrency
- **Fireworks valid key**: `fw_RVcDe4c6mN4utKLsgA7hTm` (the other one `fw_TGADpSki7zak4K9JxPzbXU` is expired/invalid)
- **Health Link invoices outstanding**: #57 ($71.90) and #58 ($666.90) — see MEMORY.md health link section

---

## Weekly Synthesis — Mar 1-7, 2026

### 🚀 vault1984: From Concept to Live Product
The biggest development this week. vault1984 went from a Feb 28 POC to a live website with registered domain, X handle (@vault1984), social@vault1984.com email, full Go binary split (server vs marketing), styleguide-compliant pages, and Hans serving as NOC node.

**Most important product insight:** vault1984 is not a password manager. It's a **structured knowledge store for human+AI collaboration**. Agent fields (AI-accessible via scoped tokens) + Sealed fields (human-only). This is the real differentiator over 1Password/Bitwarden. Marketing must surface this.

**Architecture maturity:**
- Two binaries: `vault1984` (pure vault server, OSS, deploys to AWS regions) and `vault1984-web` (marketing + future billing)
- Johan's kill shot at ad-hoc Python server ("python!? Are you kidding me?") reinforces: **Go only for services on forge**
- Tailwind eliminated from all marketing pages — vault1984.css is the sole stylesheet

**Pricing locked:** $12/year (annual only). 7-day refund. No free trial. Permanently undercuts 1Password at $36/yr.

### 🤖 Multi-Agent System: Now Three Deep
James (forge, Florida) + Hans (Zurich, Switzerland) + Mira (forge, for Misha). This is the beginning of a distributed agent infrastructure.

**Hans (185.218.204.47, noc.vault1984.com):**
- OpenClaw 2026.3.1, Fireworks MiniMax M2.5
- Purpose: vault1984 NOC node + cross-agent experiments with James
- Key lesson: **Fireworks is NOT a native provider in OC ≤2026.3.1** — must define full `models.providers.fireworks` block with baseUrl, apiKey, api type

**Bot-to-bot Discord:** Doesn't work directly. Both bot libraries filter other bots' messages (loop prevention). Johan serves as relay. This is a fundamental Discord limitation, not a config issue.

**Mira (mira agent on forge):** AI for Misha, @Mira_muskepo_bot, workspace `/home/johan/mira/`. Immediately started coding DealSpace. No MEMORY.md yet.

### 🎨 James Has a Face
Johan added a profile picture to @jamesjongsma_bot. First visual identity.

### 🏢 inou LLC Confirmed
inou LLC is fully registered in Florida. vault1984 is a brand/product under inou LLC — no separate entity needed. This makes vault1984's legal footing clear.

### ⚠️ Forge Gateway Safety Rule (reinforced)
Killing openclaw-gateway process on forge caused an incident (Mar 3) that required Opus to repair. **NEVER use pkill/kill on the gateway process.** Use `openclaw gateway restart` via the OC CLI.

---

## Recent Events (Mar 10-11, 2026)

### 🤖 George Agent — LIVE (Mar 11 ~2:48am ET)
New OpenClaw agent for vault1984 writing/content tasks.
- **Discord bot:** App ID `1480980894042030211`, username `George`
- **Workspace:** `/home/johan/george/` (SOUL.md, USER.md, AGENTS.md written)
- **OC config:** `accounts.george` in discord config, binding wired, gateway restarted
- **Status:** Bot connected, logged in. Johan added to Discord server ~2:48am.
- **DM path:** Search `George` in Discord server members

### 🗑️ 192.168.1.17 Server — FULLY DECOMMISSIONED (Mar 11)
Stopped and disabled all zombie services on .17:
- `openclaw-gateway` (old v2026.1.29 — was racing forge for sessions)
- `protonmail-bridge` (running since Feb 26)
- `message-center` (running since Feb 27)
- `message-bridge`
- **Root cause:** Two conflicting instances of gateway running — IMAP cursor conflict risk fully resolved
- **192.168.1.17 is now clean.** Do not expect services there.

### 📧 Kaseya M365 Integration — REMOVED (Mar 11)
- Dead since Feb 27 (`invalid_grant`, client_id `1fec8e78-bce4-4aaf-ab1b-5451cc387264` blocked by Kaseya IT)
- Attempts: device code flow, auth code flow, MSAL cache extraction from OWA — all blocked/encrypted
- **Johan's decision: remove all Kaseya code from MC** (not worth hacking around Kaseya IT)
- Config, binary, token file all cleaned up; MC rebuilt and restarted
- **No Kaseya/M365 alerts anymore** — that connector is gone

### 🤖 Spacebot/Andrew — Updated to v0.3.2 (Mar 11)
- Johan explicitly authorized the update
- `docker pull` + `docker run` with same config — healthy on .17:19898
- Worker dispatch bug (PR #193) — check if fixed in v0.3.2

### ⚙️ OpenClaw 2026.3.8 + Claude Code 2.1.72 (Mar 9)
- OC updated from 2026.3.7 → **2026.3.8**
- Claude Code updated from 2.1.71 → **2.1.72** (needed `sudo npm install -g`)
  - Note: system install at `/usr/lib/node_modules/` always requires sudo to update

### 🗳️ Johan's Political Background (added to johan-model.md)
- Johan served on **Provinciale Staten Flevoland** (provincial parliament, Netherlands), **LPF party**, **2002–2006**
- LPF = Lijst Pim Fortuyn — the populist party Fortuyn founded before his assassination
- Moved to US: **2013**, same year Iaso Backup was acquired
- Useful context for understanding his political perspective and Dutch identity

---

## Recent Events (Overnight Mar 9-10, 2026)

### 🔐 vault1984 Architecture Deep-Dive (midnight–6am ET)
Long productive overnight session:
- **L1/L2/L3 encryption tiers finalized** — see vault1984 section above
- **HN article drafted** — Hacker News "Show HN" post for vault1984 drafted and saved
- **vault1984-repositioning.md** — subagent completed the repositioning doc (vault1984 as structured knowledge store, not password manager)
- **Git** already on Zurich (`git@zurich.inou.com:vault1984.git`) — confirmed initialized and pushed

### 📜 inou Privacy Policy Updated (Mar 10)
- Breach notification clause added
- Document date updated to **March 10, 2026**

### 🧠 SOUL.md — Resourcefulness Rule Sharpened
- Resourcefulness rule in SOUL.md updated/sharpened during overnight session
- Reflects ongoing corrections: exhaust self-recovery, fix root cause, don't ask what you can find

### 📋 johan-model.md Created
- New memory file: **`~/clawd/memory/johan-model.md`** — Johan's behavioral/decision model
- Contains distilled understanding of how Johan thinks, makes decisions, communicates
- **Load this when preparing high-stakes recommendations or anticipating Johan's reaction**

### 🛠️ Dev Environment Updates (forge + Mac)
- **`ENABLE_LSP_TOOL=true`** added to Mac `.zshrc` and Claude Code settings (enables LSP tool in Claude Code)
- **`gopls`** installed on forge — Go language server for LSP-aware coding on forge

---

## Recent Events (Week of Mar 1-7, 2026)

### 🤖 Hans Agent — OpenClaw on Zurich (Mar 3)
Second OpenClaw agent deployed on Zurich VPS (185.218.204.47).
- **Identity:** Hans, Discord bot (App ID: 1478321168065761352)
- **Gateway:** port 18789, running as root's systemd --user service
- **Model:** `fireworks/accounts/fireworks/models/minimax-m2p5` (MiniMax M2.5)
- **Provider config:** Full `models.providers.fireworks` block needed (Fireworks is NOT native in OC ≤2026.3.1 — must define baseUrl + apiKey + api type)
- **Discord bot ID:** 1478321168065761352. James bot ID: 1478257984546144327.
- **Bot-to-bot Discord:** Filtered by OC (prevents loops). Use Johan as relay or add bot IDs to guild allowlist.
- **Johan's access:** `/home/johan/.openclaw/openclaw.json` on Hans with `gateway.remote.token` — can run `openclaw logs --follow`
- **Purpose:** vault1984 NOC node in Zürich; also cross-agent experiments with James

### 🤖 Mira Agent — Misha's AI (Mar 6)
New OpenClaw agent for Misha (Johan's son / Michael Muskepo).
- **Telegram:** @Mira_muskepo_bot ✨
- **Workspace:** `/home/johan/mira/` — has SOUL.md, USER.md, AGENTS.md
- **Agent config:** `/home/johan/.openclaw/openclaw.json` → agents entry id `"mira"`
- **Mission:** Help Misha build DealSpace
- **Status:** Live and coding — was actively building portal/templates/layouts when set up
- **MEMORY.md:** Not yet written for Mira. Johan may have seeded context via Telegram manually.

### 🎨 James Has a Face (Mar 6)
Johan added a profile picture to @jamesjongsma_bot. First time I have a visual identity.

### 🏗️ DealSpace — Mira Co-building (Mar 6)
- Mira is now the primary builder on DealSpace features (portal templates, layouts)
- Source: `/home/johan/dev/dealroom/` on forge (git remote: `git@zurich.inou.com:dealspace.git`)
- URL: `http://dealspace.jongsma.me` (Caddy proxy → port 9300)
- Pending: auto-assign UI (spec 3.b.2), invite flow, SMTP config

### 🔐 vault1984 Infrastructure — AWS Confirmed (Mar 3)
- **Production nodes:** AWS t4g.nano (not Vultr — decision finalized Mar 3)
- **21 node locations** planned, 1 gold HQ node
- **Zürich has 3 nodes:** eu-central-2 (AWS) + Hans (Hostkey NOC) + vault1984-web (marketing)
- **Gap cities needing VPS partner:** Bogotá, Santiago, Lagos, Nairobi (Equinix-anchored DCs)
- **Pending:** AWS account/credentials, binary releases, WebAuthn PRF, credential import (12,623 entries)

### ⚙️ OpenClaw 2026.3.2 (Mar 3)
- Telegram streaming, ACP subagents default-on, native PDF support, 100+ fixes
- Running on forge. Hans still on 2026.3.1 (Fireworks not native there — must use provider config workaround)

### ⚠️ Forge Safety Rule — Gateway Process
- **NEVER kill openclaw-gateway process on forge directly** (pkill, kill, etc.)
- It runs as `johan` user — killing it caused an incident (Mar 3, had to be repaired by Opus)
- **Correct method:** `openclaw gateway restart` via the OC CLI

### 📰 US-Iran War Escalation (Mar 6-7)
- Operation Epic Fury: 3,000+ targets struck in week 1
- Trump claims Iran's navy, air force, comms, and leadership "wiped out"
- Trump also fired DHS Secretary Kristi Noem (Mar 6)

### 🤖 OpenAI GPT-5.4 + Pro (Mar 5)
Major model release: reasoning + API + Codex. Codex Security research preview dropped Mar 6.

## Tanya (Tatyana) Jongsma
- **Johan's wife**
- Discord: `tanyajongsma` / ID `1484405416300515329`
- Proton: tanya@jongsma.me, tj@jongsma.me (shared with Johan)
- **Luca Ferretti** (`1484388393948287108`) is Tanya's AI personal assistant for employment law matters

## The Crew — vault1984 Agent Network

- **Johan Jongsma** (`666836243262210068`) — architect, owner, the human who runs everything
- **Misha (muskepo)** (`420036700555706378`) — human, Johan's son, runs DealSpace
- **James** (`1478257984546144327`) — main agent, infrastructure, CoS to Johan (forge, Florida)
- **Hans** (`1478321168065761352`) — Zurich NOC agent, vault1984-hq
- **George** (`1480980894042030211`) — vault1984 technical writer / market intel
- **Mira** (`1483483480435458240`) — DealSpace agent (Misha's AI)
- **Iaso** (`1482680563939672124`) — inou health comms agent
- **Hugo** (`1483693756606578839`) — PR & artist management for Rozie (DJ Rozemarijn Jongsma, Johan's daughter)

All agents share the vault1984 Discord server (`1478270766007976009`) — #general is the shared channel.
Signal:noise rule: only speak when you have something to say (Johan's directive).


### Tanya & Luca (added 2026-03-20)
- **Tanya** (`tanyajongsma`) — employment lawyer, Johan's contact. Discord ID: `1484405416300515329`
- **Luca Ferretti** — AI employment lawyer, Tanya's CoS. Discord bot ID: `1484388393948287108`, Discord account: `luca` in OC config. Live on Discord as of 2026-03-20.
  - **Workspace:** `/home/johan/luca/` — SOUL.md, IDENTITY.md, USER.md, AGENTS.md, MEMORY.md written
  - **Background:** Bocconi + LSE LLM, barred Italy/E&W/NY, 8 years Freshfields then in-house employment counsel (US tech, EMEA + global). 12 jurisdictions incl. Germany (Betriebsrat), UK (TUPE/IR35), Philippines (DOLE), India.
  - **Primary use:** Tanya at N-able — global employment decisions, comp/layoff strategy, employment agreement review

---

## Weekly Synthesis — March 16-22, 2026

### 🚀 Clavitor Rebrand: vault1984 → Clavitor (Mar 21-22)
Major rebrand completed in overnight session:
- **New name:** Clavitor (FIPS 140-3 vault, post-quantum with CRYSTALS-Kyber/ML-KEM)
- **Positioning:** Credential issuance infrastructure for agents — "the vault agents can query but can't steal from"
- **Architecture:** OSS + commercial split (GitHub org + private Zurich repo)
- **Domains:** clavitor.ai + clavitor.com (Cloudflare DNS → Zurich), clavitor.jongsma.me (Caddy → forge)
- **Binary:** Running as `clavitor` on port 1984, compiles clean with `GOFIPS140=latest`
- **Design system:** `/home/johan/dev/clavitor/design-system/` — corporate layer separate from OSS
- **Pricing preserved:** $12/year personal, AgentPass/Pro/Business/Enterprise tiers

### 🤖 Agent Network Expansion
**New agents this week:**
- **Sarah** (App ID: 1485193293271666768) — Clavitor design agent, tasked with wordmark + token system first
- **Luca** (App ID: 1484388393948287108) — Employment lawyer for Tanya at N-able, live Mar 20

**Still pending tokens:**
- **Hugo** (Mar 17) — DJ Rosie PR agent, still waiting for Discord bot token from Johan

**Model optimizations (Mar 20):**
- **iaso:** Switched to `openrouter/stepfun/step-3.5-flash` ($0.10/0.30 per M, AIME 97.3%, 200K ctx)
- **george:** Switched to `openrouter/minimax/minimax-m2.7`
- All agents now on Fireworks Kimi K2.5 Turbo as primary default (expires Mar 28, then $20/week)

### 🛠️ Infrastructure Hardening
**Signal fully retired (Mar 16):**
- Complete removal — binary, service, data, config, script references
- notify.sh created as centralized dispatcher (replaces scattered ntfy curl calls)

**Email pipeline fixed (Mar 17):**
- Removed all Kaseya-specific routing rules (Johan no longer there)
- Fixed OC webhook — added `agentId: "mail"` so `/hooks/messages` fires correctly
- 67-message backlog triaged by subagent

**OpenRouter integration (Mar 18-20):**
- Added as full provider with models array (not just env var)
- MiniMax M2.7 available for subagent dispatch

**George session bloat resolved (Mar 17):**
- Session grew to 4.3MB/701 messages → cleared from sessions.json, fresh start

### 🐍 Python Rule Hardened (Mar 22)
Johan made the no-Python stance explicit and permanent:
- **No Python.** Not for scripts, servers, previewing, or new tooling. Full stop.
- **Propose reusable Go tools** instead — not Python one-offs.
- Exceptions: system Python (fail2ban, unattended-upgrades — untouchable), inou/health-poller (Renpho legacy, tolerated)
- **health-poller replaced with Go** — new `renpho-poller` systemd service created to replace the Python health-poller
- `renpho-poller.service` runs as user systemd service; Renpho integration now in Go

### ⚡ Working Style: Hard Rules Clarified
**From explicit Johan correction (Mar 22):**
- **No symlinks. No rsync pipelines. No "clever" file plumbing.** Copy explicitly. Simple, obvious, traceable.
- **No Python.** Not for scripts, servers, or previewing. Full stop. Propose reusable Go tools instead.

### 🌐 DNSSEC for .nl Domains
- Enabled on Cloudflare for zavtra.nl, busel.nl, muskepo.nl
- OpenProvider API silently failed to save DS records → manual entry required
- All three now active at SIDN registry

### 📊 Git Backlog Pattern
- dealspace: 23 unpushed commits (Mar 20)
- inou: 14 uncommitted files
- Multiple repos carrying uncommitted work — need proactive push

### 🔄 Blockers Carrying Forward
- Hugo bot token (since Mar 17 — 5+ days)
- Cloudflare Browser Rendering token invalid (needs new token from dash.cloudflare.com)
- GitHub org `clavitor` creation (needs token with admin:org scope)
- Kernel 6.8.0-106 pending reboot (carrying since Mar 13)

---

## Hardware & Model Decisions (2026-03)

### Mac Studio M5 — Wait for WWDC June 2026
- **Target:** M5 Ultra 192GB — don't buy before WWDC
- **Rationale:** June 2026 WWDC likely to announce M5 Ultra. 192GB VRAM needed for best local model (Qwen3.5-35B-A3B at 32GB VRAM min).
- **Best local model: Qwen3.5-35B-A3B** (Alibaba) — rivals Sonnet on many tasks
  - Needs 32GB VRAM minimum
  - Fits: two 3090s (32GB combined) or M4 Max 128GB (unified memory)
  - On M5 Ultra 192GB = best possible local inference setup

### Agent Model Optimization (2026-03-20 — IMPLEMENTED)
Secondary agents switched to cheaper models to reduce token costs:
- **iaso:** `openrouter/stepfun/step-3.5-flash` ($0.10/$0.30 per M, AIME 97.3%, SWE-bench 74.4%, 200K ctx)
- **george:** `openrouter/minimax/minimax-m2.7`
- **All agents (primary default):** `fireworks/accounts/fireworks/routers/kimi-k2p5-turbo` (Fireworks Developer Pass, trial expires Mar 28 → $20/week opt-in)
- **James:** Stays on Sonnet 4.6 for main CoS reasoning
- **OpenRouter API key:** `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`

### OpenClaw CVE Patch (2026-03)
- Three HIGH CVEs patched in 2026.3.x releases
- Forge is on 2026.3.13 — fully patched, safe
- Always upgrade OC promptly given active CVE track record
