# dynamisk-rettsstat Plugin for Claude som kjører modellen i Den dynamiske rettsstaten på egne tall: finn leddet som binder, følg tiltaket over tid, simuler egne scenarioer og endre modellen. Notatet *Den dynamiske rettsstaten* har en modell av straffesakskjeden: hvor den binder, hva slags tiltak det krever, og hva som skjer over tid. Med denne pluginen kan du bruke modellen ved å snakke med Claude, uten å programmere: legg inn tall per ledd, eller spør «hva om …», og få svaret med modellens egne tall og forbehold. Den er laget for dem som arbeider i straffesakskjeden og for forskere som vil prøve, etterprøve eller forbedre modellen. Prinsippet bak notatet: «Innsatsen for å håndheve lover og regler bør løpende stå i forhold til hvor mye, og hvor alvorlig, de faktisk brytes.» Straffebud og strafferammer ligger fast. ## Install I Claude Code: ```bash claude plugin marketplace add https://git.fromaitochitta.com/open/ktg-plugin-marketplace.git claude plugin install dynamisk-rettsstat@ktg-plugin-marketplace ``` I Claude Cowork: last ned zip-fila for nyeste utgivelse fra [utgivelsessiden](https://git.fromaitochitta.com/open/dynamisk-rettsstat/releases) og last den opp som plugin. Cowork tar zip-fila slik den er. Det som trengs: - **Python 3.** Flaskehalsdiagnosen trenger ikke noe mer. - **numpy og scipy** for forløpet over tid, simuleringene og kontrollen. Mangler de, spør Claude før noe installeres, og installerer dem da fra PyPI i en egen mappe for pluginen (krever internett). Ingenting installeres uten at du sier ja. I Cowork fantes begge fra før da pluginen ble prøvd, så ingenting ble installert. Status: prøvd i Claude Code og i Cowork. Hva som er målt i Cowork, og hva som ikke er det, står under «Prøvd i Cowork» lenger ned. ## Hva du kan gjøre med den Pluginen har fire ferdigheter. Du trenger ikke kunne navnene: si hva du vil, så velger Claude riktig ferdighet. Eksemplene under er virkelige svar fra pluginen, kortet ned. ### Finn leddet som binder (`diagnose`) Du sier: *«Finn flaskehalsen i straffesakskjeden. Her er tallene våre for saker inn, kapasitet og restanse per ledd.»* Claude spør etter det som mangler, viser tallene slik de er forstått, og regner når du har sagt ja. Med eksempeltallene: ``` Ledd Utnyttelse Saksbeh.tid Mål Restansevekst/mnd Politi 0,86 1,7 2,0 0 Påtale 0,88 1,2 1,5 0 Domstol 1,28 5,6 3,0 29 Kriminalomsorg 0,90 1,5 2,0 0 Skranken som binder: Domstol (utnyttelse 1,28, restanse 589 mot mål 316; vekst: innstrømning minus kapasitet). ... Kapasitet: (0,80 x 134,3 + 273/24) / 0,95 = 125,1 saker/mnd, det vil si 19 % mer. ``` Svaret har tiltakene i rekkefølgen utnytt leddet, led saker utenom, utvid, etter *Theory of Constraints*. ### Følg tiltaket over tid (`forlop`) Du sier: *«Hva skjer måned for måned hvis vi følger anbefalingen? Tåler styringen forsinkelsen?»* Med samme tall: ``` Kritisk forsinkelse: 7,2 mnd. Forsinkelsen er kortere, så styringen er stabil (margin 4,2 mnd). ... - nå: bestill 19 % mer kapasitet - om 12 mnd: bestill 12 % mer kapasitet ``` Deretter en tabell med kapasitet, andel ledet utenom, restanse, saksbehandlingstid, politiinnsats, kriminalitet og tillit, med og uten tiltak, og hva det betyr for leddene etter. ### Kjør modellen med egne forutsetninger (`simuler`) Du sier: *«Hva om restansen avvikles over 6, 12, 24 eller 48 måneder i stedet for 24 i den koordinerte regelen?»* Claude beskriver scenarioet med ord, kjører det når du har sagt ja, og viser nøkkeltallene. Utdrag: ``` | Nøkkeltall | T_clear=6 | T_clear=12 | T_clear=24 | T_clear=48 | T_clear=96 | T_clear=inf | |-----------------------------------------------------------|----------:|-----------:|-----------:|-----------:|-----------:|------------:| | Kriminalitet K, gjennomsnitt fra mnd 12 | 1,093 | 1,096 | 1,098 | 1,102 | 1,111 | 1,128 | | Saksbehandlingstid i domstolen, lengste (mnd) | 8,0 | 8,1 | 8,3 | 8,5 | 8,6 | 8,8 | | Kapasitet, høyeste (1,00 = ved start) | 1,91 | 1,53 | 1,31 | 1,19 | 1,10 | 1,07 | | Kapasitetsår over utgangsnivået | 6,28 | 4,66 | 3,52 | 2,22 | 1,21 | 0,88 | ``` Parameterne er notatets stiliserte verdier, og tallene viser modellens dynamikk, ikke prognoser; det står i hvert svar. Hver kjøring skriver et sammendrag, tidsseriene som CSV og alle parametere slik de ble brukt. Claude tilbyr en figur laget av de samme tallene. Pluginen har seks ferdige scenarioer, og 21 scenariofiler som lager notatets figurgrunnlag på nytt. ### Forbedre modellen (`forbedre`) Du sier: *«Jeg vil legge til en mekanisme i modellen»* eller *«Jeg vil endre en ligning og se hva det gjør med notatets resultater.»* Claude lager en kopi av modellen som du eier, finner ligningen i modellkartet, gjør endringen sammen med deg og kjører kontrollen. Uendret modell gir `Nivå: bit for bit som notatet.` Her er kjernen i en kopi endret slik at frafallet fra domstolskøen er 0,02 i stedet for 0,01 per måned: ``` 1. Kjernen: endret fra notatet (https://git.fromaitochitta.com/open/den-dynamiske-rettsstaten @ 2badc25): sim.py er endret. 1. Fasit: uendret fra notatet (27 filer). ... 4. Full kjøring: 11 av 22 datafiler like byte for byte med notatet; utskriften endret. kjede_s2.dat (endret): største absolutte avvik per kolonne: K 9,5e-03, U 2,8e-03, L 8,4e-03, T 2,8e-02, Q 1,8e+00, tauD 1,7e+01 ... 6. Scenariokjøreren: 6 av 14 av notatets datafiler gjenskapt byte for byte fra eksempler/scenarioer/notatet/. ... Nivå: endret: Kjernen, forlop, Full kjøring, Scenariokjøreren. Dette er en arbeidskopi, så det er en opplysning, ikke en feil: detaljene over viser hvilke av notatets resultater som har flyttet seg, og hvor mye. ``` ## Prøv uten egne tall To eksempelfiler følger med. Si for eksempel *«Prøv flaskehalsdiagnosen på eksempeltallene»*: - **Stiliserte tall** (`eksempler/eksempel_domstol.json`): modellens egne tall, ikke norske. Domstolen binder, og svaret gjenskaper avsnitt 9.5 i notatet: utnyttelse 1,28 og 19 % mer kapasitet. - **Offentlige norske tall for 2025** (`eksempler/norge_2025.json`): politi og påtale 1,09, tingrett 1,04, lagmannsrett 0,88 og fengsel 1,09. Flere av tallene er anslag, og kildene står i fila. Forbeholdene står i [docs/forbehold.md](docs/forbehold.md). ## Forholdet til notatet Notatet, simuleringskoden og PDF-ene ligger i [den-dynamiske-rettsstaten](https://git.fromaitochitta.com/open/den-dynamiske-rettsstaten). - Kjernen i `modell/kjerne/` er uendrede kopier av notatets `sim.py`, `diagnose.py` og `forlop.py` ved commit 2badc25, låst med sha256 i `modell/kjerne/KILDE.json`. En test feiler hvis en av dem endres. - Kontrollen måler kjernen og fasiten mot notatets egne sjekksummer, kjører hele notatets simulering og sammenligner med notatets 22 datafiler og utskriftene, og kjører notatets scenariofiler gjennom scenariokjøreren. Målt 2026-11-11 med Python 3.14.0, numpy 2.5.4 og scipy 1.18.1 (macOS): alle 22 datafilene er like byte for byte, og 14 av 14 scenariofiler gjenskaper notatets datafiler byte for byte. Samme dag i Cowork med Python 3.13.18, numpy 2.5.3 og scipy 1.18.1 (Linux): samme resultat. Med andre versjoner av numpy og scipy sier kontrollen om tallene er like bit for bit eller innenfor én enhet i siste siffer. - Scenariokjøreren kaller kjernen uendret. Scenariofilene i `eksempler/scenarioer/notatet/` gjenskaper notatets datafiler, og testene sammenligner dem med fasiten. Du kan sjekke dette selv. Kontrollen tar et par minutter, testene noen minutter til: ```bash git clone https://git.fromaitochitta.com/open/dynamisk-rettsstat.git cd dynamisk-rettsstat python3 -m venv .venv .venv/bin/pip install --group dev .venv/bin/python modell/kjor.py kontroll .venv/bin/python -m pytest ``` Kontrollen skal ende med `Nivå: bit for bit som notatet.` når Python, numpy og scipy er versjonene over. Med andre versjoner kan den ende med `Nivå: innenfor toleranse`; det er ikke sett i noen av målingene. `kontroll --alt` viser alle linjene som er ulike, ikke bare de 40 første per sammenligning. `pip install --group dev` trenger pip 25.1 eller nyere. ## Forbedre modellen selv Modellen er en første versjon, og notatet er skrevet som en invitasjon til videre arbeid. Pluginen er bygd for at du skal kunne endre den: - **Arbeidskopi.** Endringer gjøres i en kopi av modellen i din egen mappe (`rettsstat-modell/`), ikke i pluginen, som byttes ut når den oppdateres. Finnes en kopi i mappa du jobber i, spør Claude om den skal brukes, og sier hva kontrollen sier om den før tallene legges fram. - **Modellkart.** [docs/modellkart.md](docs/modellkart.md) går fra notatets ligninger til funksjonene og parameterne i koden, med status for hver ligning. - **Utvidelser med grensetilfelle.** En ny mekanisme legges ved siden av kjernen, med en verdi der den forsvinner og modellen gir nøyaktig kjernens tall. Regelen er notatets egen. Mal og et gjennomført eksempel står i [docs/utvidelser.md](docs/utvidelser.md). - **Kontrollen** sier etter hver endring om notatets resultater står fast, eller hvilke som har flyttet seg og hvor mye. Forskere som bruker git, kan også klone dette repositoryet og starte Claude Code med `claude --plugin-dir .` i mappa. Slik sender du en forbedring tilbake: [BIDRA.md](BIDRA.md). ## Prøvd i Cowork Forfatteren prøvde v0.1.0 i Cowork i Claude-skrivebordsappen 2026-11-11. Dette ble målt: - **Installasjon.** Zip-fila for v0.1.0 fra Forgejo ble lastet opp uten advarsler, og de fire ferdighetene var på plass. - **Diagnosen** ga tallene som står i dette dokumentet, på eksempeltallene (1,28 og 19 %), på de norske tallene (1,09 / 1,04 / 0,88 / 1,09) og på egne tall oppgitt per år. Claude delte årstallene på 12, viste tallene slik de var forstått, og spurte før regningen. - **Forløpet** ga 7,2 måneder, 19 % nå og 12 % om 12 måneder, også i en ny økt. - **Kontrollen** endte med `Nivå: bit for bit som notatet.`: 22 av 22 datafiler og 14 av 14 scenariofiler. - **Miljøet.** Cowork kjørte kommandoene i en Linux-maskin (Ubuntu 24.04) der Python 3.13.18, numpy 2.5.3 og scipy 1.18.1 fantes fra før. Pluginen installerte derfor ingenting. - **Arbeidskopi.** En kopi med frafallet fra domstolskøen satt til 0,02 ga `Nivå: endret`, med 11 av 22 datafiler flyttet. Kopien ble laget i Linux-maskinen, og Claude ga den tilbake som en zip-fil sammen med kontrollutskriften. Ikke målt i Cowork: - En egen simulering fra «hva om …» til tabell og figur. Prøven stoppet ved spørsmålet Claude stilte før kjøringen. Scenariokjøreren selv ble kjørt av kontrollen. - Installasjon av numpy og scipy fra pluginen, siden de fantes fra før. - Om en arbeidskopi blir liggende til neste økt. Windows er ikke prøvd, verken i Cowork eller i Claude Code. ## Status og begrensninger - Modellen er ikke kalibrert på norske data. Parameterne er stiliserte, og simuleringene illustrerer mekanismer. De er ikke prognoser. - Av notatets 39 nummererte ligninger er 18 implementert, 12 forenklet og 9 ikke implementert. - Bare ett ledd har kø i modellen. Alle simuleringene antar feilfrie observasjoner, og resultatene er enkeltbaner uten parameterusikkerhet. - I modellene med kø i domstolen er utgangspunktet nesten, men ikke helt, en likevekt: uten noe sjokk går kriminaliteten fra 1,000 til 1,018 og saksbehandlingstiden fra 3,0 til 4,6 måneder over 240 måneder. Notatet omtaler det under begrensningene i avsnitt 10. En liten del av det kjedescenarioene viser, er denne driften, og sammendraget viser hvor langt den har kommet fram til sjokket. - Kostnader og gevinster er ikke regnet i kroner. - Svarene er tekst og tabeller, med tilbud om en figur etter en simulering. Pluginen bruker ikke det Cowork ellers kan av visuelle svar. Det er en opplagt videreutvikling for den som vil bygge videre på den. - Diagnosen regner på tallene slik de er oppgitt, og kapasitetsbehovet er et grovt anslag. Alle forbeholdene, for modellen, diagnosen, forløpet og de norske tallene: [docs/forbehold.md](docs/forbehold.md). ## Non-goals - Ingen prognoser. Kjøringene viser modellens dynamikk. - Erstatter ikke budsjettarbeidet. Den viser hvor kjeden binder, hvilken type tiltak som følger, og omtrent hvor stort tiltaket bør være. - Sier ingenting om enkeltsaker eller enkeltpersoner, og skal bare brukes på aggregerte tall. - Ingen persondata og ingen data fra enkeltsaker, verken i pluginen eller i det den skal brukes på. - Kalibrerer ikke modellen mot norske tidsserier. - Foreslår ikke å endre straffebud eller strafferammer. ## Slik er arbeidet gjort Arbeidet er et privat eksperiment. Modellen, koden og denne pluginen er i praksis laget av kunstig intelligens (Claude, Anthropic) etter forfatterens retning. Forfatteren har ikke selv etterprøvd all matematikken, og det kan være feil og mangler. Forfatteren har ansvaret for innholdet. Innspill og kritikk er velkomne, særlig fra dem som arbeider i straffesakskjeden og fra forskere som vil prøve modellen mot data. Send en e-post til hello@fromaitochitta.com. ## Lisens [MIT](LICENSE). ## Changelog See [CHANGELOG.md](CHANGELOG.md).