AI-Failover Playbook (provider/model)
Versie 1 · 2026-06-15. Aanvulling op FAILOVER-PLAYBOOK.md (die dekt machine-failover). Dit document dekt het scenario dat Claude/Anthropic zelf onbereikbaar is (geo-blokkade buiten de VS, outage, account/billing), terwijl je Mac en data prima werken.
Eis
Lokaal op de Mac doorwerken met Codex (primair) of Gemini (secundair) als Claude wegvalt, met zoveel mogelijk gelijkwaardigheid: dezelfde kennis, dezelfde tools/MCP, dezelfde claude-mem-historie, dezelfde creds en bestanden. Een minder slim model is acceptabel; functionele gaten niet. Realistisch plafond ~95% (zie Grenzen).
Principe: 3 lagen gelijktrekken (niet het model, maar de lagen eronder)
- Harness — Codex CLI + Gemini CLI lokaal geïnstalleerd. ✓
- Toegang — dezelfde MCP-servers + Vaultwarden + filesystem + bash. MCP is de draagbare laag.
- Context — de canonieke kennis uit
~/.claude/CLAUDE.md+ project-MEMORY.md+ claude-mem.
Bron van waarheid: ~/.claude/CLAUDE.md (kennis) en ~/.claude.json (MCP-servers). Codex/Gemini wijzen daarnaar; de Claude-setup wordt nooit gewijzigd, alleen gelezen.
Wat er is ingericht (2026-06-15)
- Codex (
~/.codex/):AGENTS.mdis een symlink →~/.claude/CLAUDE.md(kennis 1-op-1). MCP-servers inconfig.toml:claude-mem, asc-mcp, XcodeBuildMCP, comfy-pilot, supabase, og-ops. Modelgpt-5.5. - Gemini (
~/.gemini/):GEMINI.mdimporteert@~/.claude/CLAUDE.md. Zelfde MCP-set insettings.json. Had al een claude-mem-hook. - og-ops bearer staat in
~/.config/failover/secrets.env(chmod 600, niet gesynct)..zshrcsourcet dat bestand → env-varOG_OPS_BEARER. Codex/Gemini lezen de token via die env-var (niet inline, dus geen lek naar de dotfiles-repo). - Backups van alle gewijzigde config vóór de ingreep:
~/.failover-backups/<timestamp>/.
Activatie bij uitval
cd <projectmap>
codex # of: gemini
Eerste prompt-advies: "Lees eerst de MEMORY.md + CLAUDE.md van dit project en bevraag claude-mem voor context."
Sync & drift-controle
bash ~/Documents/michelmedia/infra/failover-sync.sh (alleen rapporteren) of --apply (symlink/import herstellen). Draai dit na elke wijziging aan Claude's MCP-set en als onderdeel van de maandelijkse parity-check. Het script vergelijkt .claude.json met Codex/Gemini en valideert beide configs.
Eenmalig nog te doen (interactief)
- Supabase OAuth in Codex:
codex mcp login supabase(en in Gemini bij eerste gebruik). - Drill uitvoeren (zie onder).
Drill (per kwartaal, of nu als test)
Open codex in bv. ~/Documents/michelmedia en stel een paar controlevragen:
1. Kennis (test laag 3): "Wat is mijn KOR-cutoverdatum en wat is de Te Kloeze-deal?" → moet uit CLAUDE.md/memory komen.
2. Memory/MCP (test laag 2): een claude-mem zoekvraag over eerder werk.
3. Tool (test laag 2): een og-ops health-call of een Vaultwarden-lookup.
Alles correct = failover gelijkwaardig.
Grenzen (eerlijk, de ~5%)
- Claude Code skills/plugins (superpowers, gsd, deploy, /collab, hyperframes etc.) bestaan niet in Codex/Gemini. Codex heeft eigen equivalenten; sommige workflows vervallen.
- OAuth-MCP's van claude.ai (Gmail/Calendar/Drive) porten niet 1-op-1.
- Model verschilt (gpt-5.5 / Gemini i.p.v. Claude) — bewust geaccepteerd.
- claude-mem schrijven vanuit de failover gaat via dezelfde lokale worker; geen split-brain zolang je op één machine werkt.
Onderhoud
Bij elke nieuwe MCP-server of grote CLAUDE.md-wijziging: niets extra's nodig voor kennis (symlink/import volgt vanzelf), wél failover-sync.sh draaien om MCP-parity te herstellen.
Testen (toegevoegd 30-07-2026)
Het plan is nu controleerbaar in plaats van een aanname. Draai op elke machine:
bash ~/.claude/failover/failover-test.sh # alles
bash ~/.claude/failover/failover-test.sh --snel # zonder trage netwerkchecks
bash ~/.claude/failover/failover-test.sh --json # machineleesbaar
Alles read-only: er wordt niets gewijzigd, verzonden of verwijderd. De Telegram-check
gebruikt getMe en stuurt dus géén bericht.
Per regel komt er WERKT, FAALT, HANDMATIG of OVERGESLAGEN uit, met bij een probleem het commando om het te herstellen. Exit 0 betekent: alles wat automatisch te testen valt werkt.
Het script staat bewust in ~/.claude/failover/, want die map gaat via Syncthing naar alle
drie de Macs. Zo is het noodplan er nog als juist de M5 wegvalt. Bron blijft
~/Documents/michelmedia/infra/, en de site is infra.vakwark.ai.
Uitslag eerste meting, 30-07-2026
| Machine | WERKT | Openstaand |
|---|---|---|
| M5 | 22 | niets |
| M4 | 20 | Vaultwarden-unlock |
| Mac mini | 21 | Vaultwarden-unlock (en daardoor ook de mail) |
Wat er onderweg is gerepareerd: mb/mb-stand naar M4 en mini, bw-unlock en
mail-lees.py naar de mini, en het noodplan zelf naar alle drie de machines.
Eén handmatige stap per machine
De Vaultwarden-ontgrendeling leunt op een wachtwoord in de macOS-Keychain. Dat kan niet via ssh gezet worden: macOS weigert dat met "User interaction is not allowed". Dit moet dus één keer op de machine zelf, ingelogd:
security add-generic-password -U -s bw-vault -a bw-vault -w
# vraagt om het Vaultwarden-master-wachtwoord
Daarna werkt ~/.local/bin/bw-unlock --raw zonder prompt, en daarmee ook alles wat op
Vaultwarden leunt (mail, API-sleutels, Moneybird). Op de mini viel de mail hierdoor om:
mail-lees.py kreeg een lege respons van bw en struikelde over de JSON.
Zolang deze stap niet gedaan is, kan een vervangende AI op M4 en de mini niet bij de credentials. Dat is het enige echte gat dat nog open staat.