Session Resume¶
Last updated: 2026-05-26.
Open items (urgency order)¶
π΄ Critical β security risk or unrecoverable data loss¶
- [ ] Password rotation:
tapirnaseβ shared across WiFi PSK, LiteLLM root key (sk-tapirnase), D-Link admin, Backrest repo password, HAOS Terminal & SSH addon password. Single sniff = broad blast radius. Rotate per-service. Seeservices/homelab-architecture.mdΒ§operational rules. - [ ] Nextcloud Borg passphrase β Vaultwarden β passphrase only in container env; CT 105 loss = unrecoverable backup. Move to Vaultwarden. See
services/backrest.mdblind spot #4b. - [ ] Vault secrets sweep β 32 plaintext secrets in Obsidian vault notes (Anthropic key, Gemini, NC AIO passphrase, etc.). Tracker at
Home/Homelab/Secrets to Move.mdin vault. Migrate to Vaultwarden, redact notes, rotate the high-risk ones.
π High β known broken / verification needed¶
- [x] ~~Arcane OIDC secret~~ β fixed 2026-05-23.
- [x] ~~Backrest media-repo / video-projects~~ β all three plans succeeded 2026-05-26 (media 01:30, services 01:04, video-projects 04:00).
video-projects-planhad never completed before this. β - [x] ~~AdGuard split-horizon DNS~~ β done 2026-05-23.
- [x] ~~WAL-G monitoring~~ β done 2026-05-23. Textfile collector (
/usr/local/bin/walg-metrics.sh) on CT 113 emitswalg_last_success_timestamp_seconds+walg_archive_statusto node-exporter textfile. Prometheus alert rules deployed on CT 109:WalgArchiveStale(>24h) +WalgArchiveFailed. - [x] ~~Zoraxy audit~~ β done 2026-05-23. All 22 routes verified; arcane updated to CT 109 backend;
SkipWebSocketOriginCheckenabled on 13 routes; decommissioned routes noted. Missing:dozzle.nuclide.systemsroute (never created),immich-tools,paperless,paperless-ai. Seeservices/zoraxy.md.
π‘ Medium β incomplete migrations / cleanup debt¶
- [ ] Docker disk reclaim β ~17 GB reclaimable on CT 104.
- [ ] Dormant stacks audit β ~6 still to audit (dozzle CT 104 copy, arr-stack, qdrant, etc.). 4 decommissioned 2026-05-23.
- [x] ~~Config-to-git fleet~~ β 8 repos as of 2026-05-24. PVE/CT 108/CT 102/HA/CT 103/CT 109/CT 113/obsidian-vault/obsidian-config. Full table in
infra/config-to-git.md. Manual step pending: HA Terminal & SSH addoninit_commandsfor cron persistence. - [ ] D-Link hardening β admin UI at
http://dlink.nuclide.lan(192.168.1.10). Trusted-host allowlist + SNMP + TLS. - [ ] Vaultwarden OIDC SSO β Pocket-ID client ready, env vars not yet set in
/opt/stacks/vaultwarden/.env. - [ ] Infisical OIDC config β manual step in Infisical admin at
http://secrets.nuclide.lan:8200/adminβ Settings β OIDC. Clientb2069075-β¦, secretqsANw95zsza0_β¦. - [ ] Infisical secrets migration Phase 2 β import CT104
.envkeys viainfisical import. - [ ] Grafana HAOS dashboard β HA recorder reconfiguration (exclude Prometheus-covered metrics).
- [ ] HAOS SSH key β paste nuc public key in HA terminal.
- [ ] Obsidian config drift β 3 enabled-but-missing plugins (
obsidian42-brat,obsidian-tasks-plugin,tasks-caldav-sync). Reinstall or remove fromcommunity-plugins.json. SeeHome/Homelab/Obsidian Plugin Audit.mdin vault. - [ ] Memos Sync plugin install β config pushed to
obsidian-config, plugin binary needs Community-Plugins install + paste of pre-bakeddata.json. - [ ] Immich HTTP/2 Keep-Alive β root-caused 2026-05-24. Workaround live (per-SSID LAN URL). Permanent fix: strip header at Zoraxy. Needs Zoraxy confirmation.
π΅ Planned β requires infrastructure or significant effort¶
- [ ] Second NVMe β needed before rpool mirror + Postgres consolidation (CT 113). Blocks several items.
- [ ] Infisical secrets migration β CT 112 deployed (
192.168.1.7:8200, LAN-only). Phase 1 done. Remaining: - Phase 2: create project
homelab/ct104, importai/.env(~55 keys) viainfisical import, add agent sidecars to compose stacks - Phase 3: replace hardcoded env vars in Coder
main.tf(committed to Gitea β security risk) - Phase 4: OIDC SSO via Pocket-ID (low priority β convenience)
See
services/secrets-manager.md. - [x] ~~Consolidate syncstack β MCP gateway~~ β done 2026-05-23.
litellm_sync.pyported from syncstack, mounted into gateway. Gateway runsrun_sync()every 15 min (120s startup delay)./etc/cron.d/syncstackdeleted;Dockerfile.syncstackβ.DECOMMISSIONED-2026-05-23;/opt/stacks/CLAUDE.mdupdated. - [ ] ZFS ARC tuning β raise
zfs_arc_maxfrom 6.2 GiB β 16 GiB once CT 101 memory right-sized. Seeinfra/proxmox-state.mdΒ§3. - [ ] Document ingestion n8n workflow β Docling MCP deployed; n8n orchestration not built. Nextcloud/Paperless β Docling β embeddings β LobeChat KB. See
services/doc-ingestion.md. - [ ] ComfyUI async queue β MCP tool blocks 90β300 s. Job-queue pattern:
generate_image()returns ID;get_job_status()polls. Seeservices/comfyui.md. - [ ] Additional MCP servers β Gitea β, Paperless β, Proxmox-VE β (done 2026-05-23). Remaining: Karakeep (needs API key from hoarder UI), Vaultwarden, Audiobookshelf.
- [x] ~~Arcane + Dozzle β CT 109~~ β done 2026-05-23.
- [x] ~~crawl4ai SSE StreamConsumed~~ β resolved 2026-05-22.
Recently completed (2026-05-26)¶
- Backrest 3-for-3 success: all plans now completing on schedule.
video-projects-planrecovered from never-completed state.
Recently completed (2026-05-24)¶
Vault + Obsidian¶
- Vault dedup:
Work 1/promoted βWork/, oldWork/parked asWork.stale-backup-2026-05-24/(1-week safety net). Rescued uniqueJournal/Journal.mdbefore swap. Killed dupHome/BrainBox.md,Home/Templates/,Willkommen.mdΓ2,.caldav-sync/. - 234 asset-link rewrites across 41 files β collapsed
assets/,../assets/,../../foo.pdfβ.assets/β¦. Broken links 242 β 9 (rest non-issues:tel:,about:reader?,siyuan://). Home/Homelab/Secrets to Move.mdβ 32 plaintext secrets inventoried.Home/Homelab/Obsidian Plugin Audit.mdβ 17 installed plugins keep/watch/re-evaluate, 3 config-drift items, 10 new candidates ranked for the stack.Home/Homelab/App Endpoint Checklist.mdβ per-service LAN + external URLs + apps-to-update list. Gotchas: clients sticking to old IP, Immich HTTP/2 Keep-Alive bug.- Daily-note merge policy: Claude edits land in
Work/Journal/YYYY/MM/YYYY-MM-DD.mdunder## π€ Claude edits(not parallel folder). - Obsidian Git plugin: wired end-to-end against
fkrebs/obsidian-config. Auto-commit + push every 60 min, pull on boot, PAT gitignored. Verified working. - Streamlined-ui CSS snippet pushed to
obsidian-config(hides ribbon icons for non-clickable plugins, compact status bar, tighter file tree). - Memos Sync plugin config pre-pushed (binary install pending user).
Config-to-git fleet expanded to 8 repos¶
- New:
fkrebs/ct103-conf,fkrebs/ct109-conf,fkrebs/ct113-conf,fkrebs/home-assistant-config,fkrebs/obsidian-vault(rolling 2-commit window),fkrebs/obsidian-config. - All daily 03:00 / 04:00. Pattern documented in
infra/config-to-git.md. - Rule articulated: every host with hand-edited config must push daily.
Networking β *.nuclide.lan zone¶
- 30 AdGuard A-records on CT 102 β per-host (
pve,nas,unifi,dlink,backrest, etc.) + per-service aliases (immich,vault,karakeep,grafana,prometheus, β¦). - Documented in
services/adguard-dns.md. - Solves "client registered to old IP" gotcha β when service moves CT, edit one AdGuard rewrite instead of N apps.
- D-Link IP captured:
192.168.1.10. - Filed feedback memory: always use
*.nuclide.lanaliases in URLs, never bare IPs.
Homarr¶
- 3 new boards built via SQL:
home(morning routine, default),admin(by-tier),command(live-ops iframes + grid). Old "nuclide" board was lost when OIDC user was recreated for password reset. - Boards owned by
fkrebs@nucli.de,is_public=1. 33 unique apps with ping status. - Integrations not yet wired (Proxmox / Docker / AdGuard / Gotify widgets β need tokens).
Pocket-ID¶
- LAN callback URLs added for Homarr, Grafana, Infisical, Proxmox VE so OIDC works via both bare-IP and
.nuclide.lanalias paths.
Other¶
- Immich Android upload bug diagnosed: HTTP/2 +
Keep-Aliveheader conflict. Workaround live (per-SSID LAN URL). Permanent fix pending Zoraxy header strip. - Nexa #1 filed at https://git.nuclide.systems/fkrebs/nexa/issues/1 β 9 design patterns from Obsidian + Claude session as input for Nexa Phase 1β2.
- Wi-Fi SSID captured:
nuclide. Used for per-network app routing (Immich, HA Companion).
Recently completed (2026-05-23, session continued Γ4)¶
- Docs consistency pass: zoraxy.md, arcane.md, ct-inventory.md, portmap.md, proxmox-memory-audit.md, mcp-gateway.md, RESUME.md all updated to reflect 2026-05-23 state.
- Wetty deployed on CT 109 (:4090, LAN-only).
jump-menu.shon nuc β SSH jump menu to all 10 hosts. - MCP servers added: gitea, paperless, proxmox (read-only PVEAuditor role). Total: 30 servers.
- Loki dashboard fixed: K8s labels replaced with Docker labels in 14 places.
- WAL-G monitoring: textfile collector on CT 113 + Prometheus alert rules on CT 109.
- CT 103 RAM: 2 GB β 4 GB + 1 GB swap (Backrest OOM fix for 822 GB initial backup).
- Zoraxy WS:
SkipWebSocketOriginCheckenabled on 13 routes. Arcane upstream corrected to CT 109. - CT 104 cleanup: daytona, homepage, proxy, streamio decommissioned.
- Paperless-ngx: USERMAP_UID=997 + file permissions fixed, container stable.
Recently completed (2026-05-23, session continued Γ3)¶
- Homarr board deployed: 6 category sections (AI, Monitoring, Files, Dev, Home, Identity & Admin), 27 apps with ping-based status, Mainsail included in Dev. Fixed schema:
x_offset/y_offseton section rows + paired empty sections (y=0 initial, y=1/2 per category). Boardnuclideset as home board. - Arcane environments fixed: deleted stale shared-token environments; created 6 unique edge environments (shepard, docker, nextcloud, id, dev, secrets) via API with
useApiKey=true. Each agent updated with unique token. All 8 environments online. - Arcane API key seeded:
ADMIN_STATIC_API_KEYfrom compose was never seeded (DB pre-existed). Inserted via argon2id hash. Keyarc_d3357a65now functional for automation. - Infisical SITE_URL fixed: changed from
https://secrets.nuclide.systemstohttp://192.168.1.7:8200(LAN-only, no Zoraxy route). - Infisical Pocket-ID client created: client
b2069075-ede2-4251-ad1f-9a62e6a188b3, callbackhttp://192.168.1.7:8200/api/v1/sso/oidc/callback. Manual OIDC config entry still needed in Infisical admin UI.
Recently completed (2026-05-23, session continued Γ2)¶
- PVE LXC startup order fixed: CT103/104/105/112/113 had no startup order. Set: CT113=4, CT112=6, CT104=7, CT103=8, CT105=9. Full deterministic boot sequence now in place. Also enabled CT109 onboot=1 (was missing).
- KSM enabled on PVE host: kernel samepage merging active + persisted via
ksm-enable.service. Zero-cost memory deduplication across LXC containers. - 5-minute critical watchdog deployed:
homelab-health-quick.timeron nuc;QUICK=1mode checks LXC status + critical containers every 5 min. Auto-starts stopped LXCs, notifies Gotify for HAOS KVM issues. - PVE backlog issues filed:
fkrebs/docs#2 (NFS v3βv4), #3 (ZFS ARC 16 GiB), #4 (hugepages for KVM).
Recently completed (2026-05-23, session continued)¶
- HAOS KVM OOM root-caused and fixed: karakeep_chrome on CT 104 triggered host OOM β killed HAOS KVM twice. Applied:
shm_size: '512m'to chrome,oom_score_adj=-300on KVM PID, systemd timerprotect-haos-kvm.timer(every 5 min) for persistence. - Arcane + Dozzle migrated to CT 109: servers on CT 109 (:10002, :10001). Headless agents deployed on CT 101, 104, 105, 110, 111, 112, 113. Zoraxy route updated. docs-server also on CT 109 (:13080).
- Homarr + Grafana OIDC wired: clients created via Pocket-ID API (no manual UI steps). Homarr client
63a94e30, Grafana client92d987d5(PKCE). Both SSO-active. - n8n flows tracked in Gitea: repo
fkrebs/n8n-flowswith daily sync cron (CT 104, 03:30). 10 automation ideas filed as Gitea issues. Interim health check bash/systemd on nuc (issue #1 = migrate to n8n). - CT 104 ai repo cleaned:
lobehub/data/untracked from git,.gitignorefixed, litellm-config + mcp-gateway changes committed. - zoraxy-conf repo: arcane proxy update committed and pushed (CT 108).
Recently completed (2026-05-23)¶
- Config-to-git crons: scripts + daily 03:00 crons deployed on CT 108 (Zoraxy β
zoraxy-conf), CT 102 (AdGuard βadguard-conf), PVE (rsync/etc/pveβpve-conf). Force-push. All three verified with initial push. - Syncstack β MCP gateway:
litellm_sync.py(ported from syncstack.py) mounted into gateway container._litellm_sync_loop()runs every 15 min in gateway's asyncio loop. Cron/etc/cron.d/syncstackdeleted.Dockerfile.syncstackdecommissioned./opt/stacks/CLAUDE.mdupdated.
Recently completed (session continued Γ2, 2026-05-22)¶
- crawl4ai MCP fixed: was returning 404 on
/mcp(streamable-HTTP). Current 0.8.6 image already has MCP over SSE at/mcp/sse. Added SSE transport support tomcp-gateway/server.py: per-request SSE round-trip with auto-initialize handshake;transport: ssein hardcoded SERVERS + config.json. Gateway health now shows crawl4ai ok; lobe-sync shows 27/27 servers. - syncstack cron fixed: missing
cd /opt/stacks/ai &&prefix caused "no configuration file" every 15 min since ~May 18. Fixed. Manual run confirmed 60 models including 5 Claude models; LobeChat recreated.
Recently completed (session continued, 2026-05-22)¶
- claude-max-bridge
/v1/responsesendpoint: implemented OpenAI Responses API withprevious_response_idchaining. Root cause of "session already in use": Claude CLI leaves session JSONL files in an un-resumable "dequeued" state after each--printrun. Fix: maintain conversation history server-side as formatted text; inject into system prompt for continuations; always use--no-session-persistence. Also fixed: assistant turns in--input-format stream-jsonrequirecontentas array-of-blocks not string (JS error otherwise). Assistant content array format also fixed in_parse_messages/_parse_responses_input. - LiteLLM pass-through for
/v1/responses: addedpass_through_endpointsentry in/opt/stacks/ai/litellm-config/config.yamlβhttp://claude-max-bridge:8000/v1/responses. LiteLLM appends its token hash to the responseid, soprevious_response_idchaining only works when calling the bridge directly (not through LiteLLM).
Recently completed (this session, 2026-05-22)¶
- Pocket-ID backup: pre-hook on CT 103 runs
pocket-id export+ scp keys β UNAS staging;services-backup-plansnapshots β jottacloud. Verified. - Stale NFS vaultwarden dir deleted:
/mnt/pve/unas/services/vaultwarden/removed. - Nextcloud CIFS β NFS: crash-loop fixed; CT 105 mp0 migrated from
/mnt/pve/unas_smbto/mnt/pve/unas; CIFS fstab entry removed. - Vaultwarden β local zfs:
/mnt/pve/unas/services/vaultwardenβ/opt/stacks/vaultwarden/data; staledb.sqlite3deleted; DB already on CT 113 postgres. - WAL-G fixed:
immich_postgresandlobe-postgresbackups now succeed. Fixed: missing-u postgres, missing data path,set -eabort, deadshared-postgresreference. - ComfyUI
--async-offloadremoved: caused CPU fallback + pure-noise output on GGUF img2img with XPU. - apps/ decommissioned: dead duplicate compose files in
/opt/stacks/apps/renamed.DECOMMISSIONED-2026-05-22. - Docs consolidated: storage.md, volumes.md, homelab-architecture.md, proxmox-state.md, proxmox-memory-audit.md, ct-inventory.md, README.md all reconciled.
Key system state¶
| Host | IP | Role |
|---|---|---|
| nuc (PVE) | 192.168.1.20 | Proxmox host β SSH gateway to all CTs; jump-menu.sh |
| CT 109 ops | 192.168.1.8 | Monitoring β Prometheus + Grafana + Loki + Arcane + Dozzle + Homarr + Wetty |
| CT 104 docker | 192.168.1.40 | Main Docker host β AI/ML, media, ~65 containers |
| CT 113 db | 192.168.1.6 | Shared Postgres 17 + WAL-G β Garage S3 (cron 02:00) |
| CT 110 id | 192.168.1.5 | Pocket-ID OIDC IdP |
| CT 103 backrest | 192.168.1.3 | Backrest β jottacloud via rclone; UNAS at /mnt/pve/unas |
| CT 111 dev | 192.168.1.42 | Coder + Gitea |
| CT 108 zoraxy | 192.168.1.4 | Reverse proxy + ACME β always confirm before changes |
Constraints to remember¶
- Zoraxy (CT 108): always get explicit user confirmation before any config change.
- Infisical (CT 112): LAN-only, no Zoraxy route β must not be internet-exposed.
- CT 104 has a separate agent reconciling compose files β rename decommissioned files (don't just stop), update
/opt/stacks/CLAUDE.md. - ComfyUI container limit: 24 G. Do not raise without measuring host impact.
- Pocket-ID is SQLite-only β no Postgres migration possible.
- Use
*.nuclide.lanaliases when presenting URLs to the user (never bare IPs). Wi-Fi SSID isnuclide. - Vault edits append to
Work/Journal/YYYY/MM/YYYY-MM-DD.mdunder## π€ Claude edits; never create a parallel folder.