Blocken är sekventiella med flit: standarderna i block 1 är förutsättningen för skyddsräckena i block 2,
som tillsammans med kontexten i block 3 paketeras i block 4.
1
Byggblock 1 · Fundamentet
Gör web-app-starter till den auktoritativa källan
Startern är navet i hela lösningen. Eftersom varje ny app skapas via npx tiged från den, sprids allt som ligger där automatiskt till varje nytt projekt — utan utrullning, utan migrering.
1a · Fatta standardbesluten
Innan något dokumenteras måste startern entydigt representera nuvarande standard: App Router eller Pages Router, aktuella sk-web-gui-versioner, samlingspaket eller enskilda paket, pinnade eller caret-versioner. För nya appar räcker det att startern är rätt — och att besluten är nedskrivna.
1b · Skriv agentfilen i startern
Planens enskilt viktigaste fil. Skriv kanon i en verktygsoberoende AGENTS.md och låt CLAUDE.md importera den (@AGENTS.md) — då fungerar samma kontext i Claude Code, Cursor och andra agenter utan inlåsning. Innehåll: arkitekturöversikten (BFF-mönstret, varför frontend aldrig anropar mikrotjänster direkt, WSO2-flödet), alla kommandon, mappkonventionerna, proceduren för att koppla på ett nytt API (README-tabell → api-config.ts → generate:contracts), SAML-utveckling mot fake-sso-idp, samt grundreglerna från ui.sundsvall.dev. Plus en markerad sektion som fylls i per app: namn, syfte, API-tabell.
Håll filen kort (<200 rader): bryt ut områdesspecifika regler till path-scoped .claude/rules/ som bara laddas när agenten rör matchande filer, i stället för en växande monolit.
1c · Putsa de kanoniska exemplen
Gör starterns user-service och example-page till fläckfria, kommenterade mallar: service + Zustand-store, sida med i18n och layout, formulär med react-hook-form + yup + sk-web-gui, backend-controller med routing-controllers. Peka ut dem i CLAUDE.md: ”kopiera detta mönster”.
Därför förstAllt nedströms — skyddsräcken, skill, utvärdering — refererar till starterns innehåll. Är startern fel blir allt annat fel, fast snabbare.
2
Byggblock 2 · Skyddsräckena
Maskinella kontroller istället för instruktionstext
Här tillämpas princip 1. Varje regel som kan verifieras automatiskt flyttas från prosa till verktyg, så att Claude Code rättar sig självt medan det arbetar.
2a · ESLint-regel mot hårdkodade färger
En custom regel som förbjuder hex-värden och egendefinierade --color-*-variabler utanför node_modules. Designsystemets viktigaste princip — ”hårdkoda aldrig” — blir därmed omöjlig att bryta tyst.
2b · Skärpta regler i startern
no-explicit-any finns redan som error. Komplettera med importregler och en regel mot direkta fetch-/axios-anrop utanför den gemensamma apiService.
2c · Ett samlat verifieringskommando
yarn verify = lint + type-check + test. Samma kommando ligger i CI-mallen som följer med startern — och körs åt agenten via en hook (2d) i stället för att enbart stå som en instruktion.
2d · Hooks som kör kontrollerna automatiskt
Hooks i starterns .claude/settings.json är skillnaden mellan ”agenten bör köra verify” och ”verify körs”. En PreToolUse-hook kan stoppa en ändring som inför hårdkodade färger innan den sparas; en Stop-hook kan kräva grön yarn verify innan agenten får avsluta sitt varv. Deterministiskt, inte beroende av att modellen kommer ihåg. ESLint är regeln — hooken är körningen.
EffektenAgenten får samma omedelbara återkoppling som en senior kollega skulle ge i kodgranskning — fast vid varje fil-spar, inte vid varje pull request, och utan att någon behöver lita på att den valde att köra kontrollen.
3
Byggblock 3 · Kontexten
Kunskap på begäran: designsystem och API-katalog
CLAUDE.md ska vara kort. Djupkunskapen — komponenters props, tokens, tjänstekatalogen — hämtas i stunden, exakt när agenten behöver den. Halva lösningen finns redan i ui.sundsvall.dev — i dag ett experiment, framåt en del av den ordinarie, förvaltade plattformen.
3a · MCP-server mot designsystemet
Den experimentella portalen har redan markdown-endpoints per komponent, så steget är kort. Verktyg som sök_komponent, hämta_tokens och lista_ai_komponenter låter agenten hämta rätt dokumentation utan att svälja hela llms-full.txt. MCP ger mer än verktyg — exponera komponentdokar som resources och färdiga arbetsflöden som prompts, så agenten kan referera dem direkt. Servern förkonfigureras i starterns .mcp.json — varje nytt projekt är anslutet från start. Att bygga MCP-servern ovanpå portalen är också det som tar den från proof of concept till något appar faktiskt kan luta sig mot.
3b · Maskinläsbar API-katalog
Det största kunskapsgapet vid nybygge är ”vilka mikrotjänster finns och vad gör de?”. Generera en katalog från repo-beskrivningar och OpenAPI-specar för de ~60 api-service-*-tjänsterna: namn, version, syfte, viktigaste endpoints. Då kan agenten själv föreslå ”för detta behöver du CaseData och Messaging” och fylla i api-config.ts korrekt.
3c · Arkitektursidor på portalen
Komplettera ui.sundsvall.dev med sidorna som saknas för nyutveckling: BFF-arkitekturen, contracts-flödet, auth-flödet, namnkonventionerna. Samma publiceringsteknik som redan finns — md-varianter, llms.txt, no-cache. I samma veva bör portalens experimentstatus formaliseras: ägarskap, drift och förvaltning så att den blir en stabil del av plattformen, inte en sidoprodukt.
Genererat, inte handskrivetKatalogen och komponentdokumentationen byggs i CI från källorna — då kan dokumentationen aldrig ljuga om verkligheten.
4
Byggblock 4 · Paketeringen
Allt som en plugin: skapa-sundsvall-app
Knyt ihop allt i en plugin — inte bara en lös skill — som bundlar skapandeflödet, domänskills, granskar-subagents, hooks och .mcp.json i ett versionerat paket. Distribuera via en intern marketplace så att en utvecklare installerar hela verktygslådan med /plugin add, och stäng av den lika lätt. Skillarna skrivs enligt den öppna Agent Skills-specen, vilket gör dem portabla över Claude Code, Cursor och andra agenter.
Scaffold-skillen: proceduren steg för steg
Scaffolda via tiged från startern → initiera git → fyll i appnamn och syfte i agentfilen → fråga vilka API:er som behövs (slå upp i katalogen) → uppdatera api-config.ts och README-tabellen → sätt upp .env-filer från exempel → kör generate:contracts → verifiera med yarn verify.
Domänskills med progressive disclosure
Utöver scaffold-skillen: små, fokuserade skills som api-konventioner, säkerhetschecklista och tillgänglighet. Bara namn + beskrivning laddas i förväg; hela innehållet hämtas först när det behövs — djup kunskap utan att tynga kontexten.
Granskar-subagents i paketet
Specialiserade subagents i .claude/agents/ — en för tillgänglighet, en för designsystemsefterlevnad, en för säkerhet — som arbetar i eget kontextfönster och kan kallas in för granskning utan att belamra huvudsessionen.
Dubbel nytta
Pluginen blir samtidigt den mänskliga dokumentationen av flödet — proceduren som en ny utvecklare läser är exakt samma som agenten följer. En källa, två läsare.