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.