Secrets & Auth,
voor alle labs op één plek.
Waar we naartoe werken: één versleutelde kluis op orin3, en een MCP die Claude laat beheren, uitrollen en auditen — zodat tokens en wachtwoorden niet langer plain in unit-files of publieke pagina's staan. Elk lab blijft standalone draaien.
Van bron naar service. De kluis is de enige bron van waarheid; alles stroomt daar naar beneden uit. De MCP en CLI zijn twee gezichten op dezelfde labsctl-kern.
🔒 age-kluis
Versleuteld blob + keyfile, chmod 600, in ~/.config/labs-secrets/ — buiten elke git-repo. Plaintext bestaat alleen kort in geheugen.
◆ labsctl-core
Stdlib-only. Opent de kluis, beheert secrets, rendert naar de juiste bestanden, en scant op lekken.
✦ MCP-server
Claude krijgt 5 tools: list · get · set · render · audit. Beheren zonder secrets in de chat te plakken.
⌘ labsctl CLI
Zelfde acties met de hand: labsctl render derwisch-ritueel. Volledig zonder Claude bruikbaar.
⚙ EnvironmentFile
chmod 600, root-owned. De systemd-unit leest het via EnvironmentFile=. Geen plain keys meer in de unit.
🔑 .auth
Gebruiker + sha256(wachtwoord) voor de Basic-Auth-pagina's. Deterministisch, overleeft herstarts.
▤ services
derwisch-ritueel, sysmonitor, … blijven env/.auth lezen zoals nu — alleen de waarden komen uit de kluis.
Audit — bewaakt de randen
Scant publieke pagina's en unit-files op secret-waarden en bijna-verlopen tokens. Meldt bv. het publiek gelekte token in de transcribe-pagina — zonder de waarde te tonen.
Portabiliteit — draaibaar bij iedereen
De kluis is gemak, geen vereiste. sync-example schrijft een .env.example (alleen namen) in elke repo. git clone + je eigen .env = draaien, ook zonder orin3.
De concrete impact op de huidige situatie — precies de rommel die deze week bovenkwam.
- Live API-keys plain in systemd-unitsAnthropic- en OpenAI-key als leesbare Environment=-regels.
- GitHub-token publiek in pagina-JSWordt door GitHub telkens ingetrokken → wekelijks "auth kapot".
- Wachtwoorden als defaults / verspreidVallen terug op een default na een herstart → login geweigerd.
- Geen overzicht, geen waarschuwingNiemand ziet welk secret waar staat of bijna verloopt.
- Alle secrets in één versleutelde kluisUitgerold naar chmod 600-bestanden; units bevatten geen waarden.
- De lek-cyclus doorbrokenAudit signaleert publieke lekken; upload-secret los van je GitHub-credential.
- Deterministische, persistente loginZelfde wachtwoord na elke herstart/reboot — geen wekelijkse verrassing.
- Inventaris + verval-/lek-auditEén commando toont wat waar leeft en wat aandacht vraagt.
Klein beginnen, dan uitbouwen op dezelfde kern. Fase 1 is gebouwd; 2 en 3 hangen erboven.
Secrets & Auth
Kluis, render naar EnvironmentFile/.auth, audit, CLI + MCP. De basis waarop de rest leunt.
Uniforme ops
Zelfde MCP-kern breidt uit naar git / Vercel / Tailscale / cloudflared: status, deploy, herstart per lab.
Health-overzicht
Eén read-only beeld: welke services draaien, welke tunnels leven, welke tokens bijna verlopen.
Een token roteren of een service opnieuw uitrollen is drie stappen — met de hand of via Claude.
Zetten
secret_set plaatst een nieuwe waarde in de kluis (versleuteld).
Uitrollen
secret_render schrijft de EnvironmentFile/.auth en herstart de service — na bevestiging.
Auditen
secret_audit bevestigt dat de oude waarde nergens meer plain of publiek staat.