Arkitekturbeslut
Elva beslut som format agentplattformen, i den ordning de fattades. Datum där det finns ett. Senast ändrad 2026-10-10.
Det här är inte en arkitekturbeskrivning utan en logg: vad som var problemet, vad som valdes, och vad det kostade. Beslut som visat sig fel står kvar med sina följder. Det som ännu inte är löst står i hotmodellen.
ADR-01 Godkännande per exakt åtgärd, inte per kategori
- Läge
- Agenter kan skicka, publicera och betala. Ett ja i stil med "du får mejla" gäller för evigt och för allt.
- Beslut
- Varje åtgärd som lämnar huset får ett fingeravtryck av verktyg och indata. Ett ja gäller det fingeravtrycket, en gång, i 30 minuter. Ett ändrat kommando är en ny fråga.
- Följder
- Fler frågor till mobilen. Mellan 0 och 30 på en dag. I gengäld finns inget stående tillstånd att missbruka.
- Not
- Samma princip som öppen källkod i agent-permit.
ADR-02 Klientdata går bara till en lokal modell
- Läge
- Klienternas filer innehåller personuppgifter och affärshemligheter. Molnmodeller sparar, och leverantörens villkor ändras.
- Beslut
- En lokal Qwen via LM Studio svarar på allt som rör klientmappen, efter pseudonymisering med nyckel per klient. Molnmodeller får bara text som grinden släppt.
- Följder
- Sämre modell för klientarbete. Långsammare. Men inget avtal med en leverantör avgör om klientdata är säkra.
ADR-03 Stängd som standard 2026-09
- Läge
- Skyddet mot läckor är en separat process. Processer dör.
- Beslut
- Svarar grinden inte stoppas det utgående anropet. Fel i skyddet blir stopp, inte hål. Undantag: krokens egna fel släpper igenom (loggade) så att Claude Code inte låser sig helt, utom för klientmappen som alltid stoppas.
- Följder
- Tre falska stopp 3 och 4 oktober 2026 när en tidsgräns var för kort. Ingen läcka. Postmortem skrivet, tidsgräns uppmätt och ändrad.
- Not
- Prövas varje natt av kaosprovet.
ADR-04 Krok i agenten i stället för proxy framför den
- Läge
- Skyddet kan sitta som nätverksproxy (fångar allt, ser inget sammanhang) eller som krok i verktygsanropet (ser verktyg och indata, missar det som går förbi).
- Beslut
- Krok i Claude Code (PreToolUse) som ser verktygsnamn och indata, plus middleware i modellroutern för modellanrop. Nätverksproxy valdes bort tills vidare.
- Följder
- Ett skript som agenten skriver och kör syns inte som ett anrop. Det är den största kända luckan, dokumenterad i hotmodellen.
ADR-05 SQLite som Hubs databas
- Läge
- Hub är en process på en maskin med en användare. Händelser, godkännanden, kostnader och vakter behöver en databas, inte en databasserver.
- Beslut
- En SQLite-fil, hub.db, med WAL. Alla agenter och launchd-jobb skriver dit via hubdb.py. Postgres med pgvector används där det behövs: minnet.
- Följder
- Ingen nätverksåtkomst till databasen, vilket är poängen. Export till Databricks och SIEM sker per rad, varje minut.
ADR-06 launchd på Macen, Kubernetes för det som ska kunna flytta 2026-10
- Läge
- Allt kunde köras i klustret. Det mesta behöver inte det.
- Beslut
- Grinden, nattskiftet, vakterna, exporterna och kaosprovet körs som launchd-jobb med KeepAlive eller schema. Minnet (RAG) körs på k3s med Terraform, Argo CD och Kyverno, eftersom det är det som ska kunna flytta till en server.
- Följder
- Två driftmodeller att kunna. I gengäld startar grinden om på en sekund och klustret visar hur plattformen ser ut när den lämnar Macen.
ADR-07 Egen SIEM i stället för bara loggfiler 2026-09
- Läge
- Stopp och godkännanden loggades i Hub, men ingen tittade. Loggar utan larm är arkiv.
- Beslut
- Wazuh i en egen container, med 17 egna regler för plattformens händelser: stopp, klientfiler, grinden nere, upprepade nej, nödstopp, budgetstopp. Exporten går varje minut.
- Följder
- En container till, 1,5 GB minne. Larmhistoriken börjar 8 oktober 2026 efter en ombyggnad; det står på plattformssidan.
ADR-08 Nödstopp som en fil 2026-10-09
- Läge
- När något går fel behövs ett stopp som inte kräver att Hub, Telegram eller nätverket fungerar.
- Beslut
- En fil på disken. Finns den nekar kroken allt och nattskiftet startar inte. Den skrivs av ett kommando, från mobilen, eller av kaosprovet, och den släpps bara av en människa (eller av kaosprovet, bara om det själv satte den).
- Följder
- Täcker inte processer som redan kör och inte går genom kroken. De dödas för hand.
- Not
- Samma mekanism som freeze i agent-permit 0.2.0.
ADR-09 Bevis i stället för påståenden på webben 2026-10
- Läge
- Ett CV och en sajt kan påstå vad som helst. Rekryterare och kunder har ingen anledning att tro på det.
- Beslut
- Plattformssidan visar utdata från varje kontroll, oredigerad. Kontoret hämtar riktiga siffror var femte minut via en publik JSON som bara innehåller antal. Kaosprovet publicerar sitt resultat och ett märke som blir rött när det faller.
- Följder
- Mer yta att hålla ren: exporten vägrar skriva om utdatan innehåller innehåll i stället för antal. Siffrorna är ibland obekväma: fyra dagar med noll klara uppgifter syns.
ADR-10 Mät innan tidsgränser sätts 2026-10-09
- Läge
- Krokens tidsgräns mot grinden var 3 sekunder, satt när grinden bara körde regler. Namnigenkänning lades till utan att gränsen mättes om.
- Beslut
- Varje tidsgräns får en mätning som kommentar bredvid sig i koden. Grinden exponerar skanningstid som histogram till Prometheus, och en vakt larmar vid p95 över halva gränsen.
- Följder
- Postmortem 2026-10-04 är orsaken. Gäller från och med nu för alla nya gränser.
ADR-11 En publik agent, bakom samma grind 2026-10-10
- Läge
- Rekryterare och kunder läser sidor. Få av dem provar något. En agent som svarar på frågor om plattformen visar den i drift, men en publik modell är en kostnad och en yta mot internet.
- Beslut
- En egen Cloud Run-tjänst, skild från moln-grinden, med Gemini på Vertex AI i EU. Underlaget är bara publicerat material och ligger i avbilden. Varje fråga går genom grinden före modellen, och svaret skannas efter. Dagstak, gräns per adress, en instans, ett tjänstekonto med en roll, budgetlarm. Inget innehåll loggas.
- Följder
- Svaren kan vara fel även med rätt källor, och sidan säger det. Räknarna nollas när instansen startar om. Kostnaden är begränsad av taket, inte av att ingen frågar.
- Not
- Hotmodellen har fått en tolfte rad. Kontoret visar antalet svar per dag.
Tillbaka till plattformens kontroller.