<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Maguyva-bloggen</title><description>Tekniska djupdykningar i MCP-kodintelligens, AI-agentarkitektur och lärdomar från att bygga en flerspråkig kodsökplattform.</description><link>https://maguyva.ai/sv/blog</link><language>sv</language><atom:link href="https://maguyva.ai/sv/rss.xml" rel="self" type="application/rss+xml"/><item><title>Kontext som följer med dig</title><link>https://maguyva.ai/sv/blog/context-that-travels</link><guid isPermaLink="true">https://maguyva.ai/sv/blog/context-that-travels</guid><description>Cursors indexerare är utmärkt inuti Cursor. Maguyva är den värdbaserade MCP-kartan som samma agent kan fråga från andra editorer, CLI:er och CI.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Cursors indexerare är utmärkt inuti Cursor. Tab-komplettering, inline-redigering, chatt, och agenten i det fönstret vilar redan på ett projektindex som Cursor driver för det öppna arbetsområdet. Om Cursor är den enda ytan du skriver i, och det indexet redan hittar rätt filer, stanna där. Det är det ärliga ‘stanna där du är’-fallet, och det förtjänar att vara den första meningen på den här sidan.&lt;/p&gt;
&lt;p&gt;Den här texten handlar om den andra halvan av en vanlig vecka. Samma repo öppnas också i Claude Code, tillfrågas från Codex CLI, granskas på en andra maskin, eller frågas av en agent som körs i CI. Frågan är inte ‘vilken indexerare är bäst’. Frågan är om kartan agenten litar på i ett fönster är samma karta den litar på i nästa.&lt;/p&gt;
&lt;p&gt;Maguyva är den kartan som följer med dig. Det är ett fjärranslutet MCP-lager för kodbaskontext. Agenten frågar den på samma sätt som den frågar vilket annat MCP-verktyg som helst. Resultaten kommer tillbaka som rankade sökvägar med radnummer. Cursor förblir editorn. Det är kontexten som flyttar sig.&lt;/p&gt;
&lt;h2 id=&quot;vad-cursors-indexerare-är-till-för&quot;&gt;Vad Cursors indexerare är till för&lt;/h2&gt;
&lt;p&gt;Cursors inbyggda indexering finns så att chatt, agent och sökning inuti editorn kan hämta relevant kod istället för att förlita sig enbart på det som får plats i modellens råa kontextfönster. Det är rätt design för en IDE. Det här indexet är nativt för Cursor. Det är ingen MCP-server och är inte nåbart från någon annan klient.&lt;/p&gt;
&lt;p&gt;Så fungerar det, enligt Cursors offentliga dokumentation och Cursors egen redogörelse vid tidpunkten för skrivandet: den primära sökvägen är inte längre ett molnbaserat embedding-index. Cursors team har uttalat på sitt community-forum att dedikerad semantisk, embedding-baserad sökning trappas ner till förmån för grep-baserad hämtning, eftersom dagens modeller redan utforskar ett levande träd tillräckligt bra på egen hand. I dess ställe finns Instant Grep, ett lokalt sökindex byggt av n-gram, inverterade listor och Bloom-filter, hållet i en minneskartlagd uppslagstabell, så att förfrågningar löses på utvecklarens egen maskin istället för på en server.&lt;/p&gt;
&lt;p&gt;Själva indexet lever i repots egen &lt;code&gt;.git/cursor/&lt;/code&gt;-katalog, förankrat till en specifik git-commit; ändringar sedan den commiten läggs ovanpå den istället för att utlösa en ny skanning, och indexet byggs bara om när det lokala tillståndet har avvikit långt från det det byggdes mot. Eftersom det ligger inuti &lt;code&gt;.git&lt;/code&gt; spåras det aldrig och pushas aldrig — ta bort mappen, och indexet är borta. &lt;code&gt;.gitignore&lt;/code&gt; respekteras genom konstruktion, eftersom bara git-spårat innehåll är kvalificerat, och &lt;code&gt;.cursorignore&lt;/code&gt; tillämpas på läsvägen. Det finns inte längre något embedding-steg på serversidan eller någon fjärransluten vektordatabas i den vägen. Tidigare dokumentation beskrev en molnassisterad design — kryptering av chunkar, synkronisering via Merkle-träd, återanvändning av index mellan lagmedlemmar — och Cursors eget team har sedan dess sagt att den designen trappas ner, så den här texten beskriver den inte längre som aktuell.&lt;/p&gt;
&lt;p&gt;En framstående styrka inuti editorn är Cursors Explore-subagent. Den kan starta flera parallella sökningar i sitt eget kontextfönster på en snabbare modell och bara returnera de relevanta fynden, så att huvudkonversationen inte sväller av sökresultat. Det är en verklig styrka inuti editorn. Behåll den.&lt;/p&gt;
&lt;p&gt;Arbetsytor med flera rotmappar stöds: kontexten för varje öppnad mapp är tillgänglig för Agent. Vissa git-beroende funktioner, som worktrees, är avaktiverade i multi-root-konfigurationer, och Cloud Agents stöder inte alls arbetsytor med flera rotmappar.&lt;/p&gt;
&lt;p&gt;Inget av detta är en anledning att lämna Cursor. Det är en exakt beskrivning av en karta som är utmärkt där den lever.&lt;/p&gt;
&lt;h2 id=&quot;vad-följa-med-dig-egentligen-betyder&quot;&gt;Vad ‘följa med dig’ egentligen betyder&lt;/h2&gt;
&lt;p&gt;En karta följer med dig när samma frågor returnerar samma typ av svar, med citat du kan öppna, från mer än en klient.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I Cursor: ‘Var är &lt;code&gt;parseConfig&lt;/code&gt; definierad, och vem anropar den?’&lt;/li&gt;
&lt;li&gt;I Claude Code, på samma repo: samma fråga.&lt;/li&gt;
&lt;li&gt;I Codex CLI, på en granskningsmaskin som aldrig öppnat Cursor-fönstret: samma fråga.&lt;/li&gt;
&lt;li&gt;I en CI-agent som talar MCP: samma fråga, mot samma värdbaserade ögonblicksbild.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Om varje yta bygger sitt eget privata index har du inte en karta. Du har flera cacher som glider isär. Editorindexet kan vara aktuellt för trädet på disk. CLI-sessionen kan ligga en dag efter. CI-jobbet kan titta på en annan checkout. Och agenten kommer ändå att låta säker.&lt;/p&gt;
&lt;p&gt;Cursors indexerare är inte tänkt att lösa det. Eftersom den lever inuti editorn är kontexten den bygger för den editorn. En läsare som också behöver en CLI, en CI-pipeline, eller en annan editor behöver ett separat verktyg för de ytorna. Det är ett faktum om omfattning, inte en brist. Maguyva är det separata verktyget.&lt;/p&gt;
&lt;p&gt;Ett publicerat antal språk för Cursors indexerare anges inte i det material den här texten får använda. Maguyva publicerar stöd för över 279 språk och textbaserade teknologier. Cursors priser återges inte heller här; se deras prissida. Maguyva tar betalt per arbetsyta, inte per plats, med publicerade planer på $0, $19, $49 och $149 beroende på indexerad omfattning och arbetsytans storlek.&lt;/p&gt;
&lt;h2 id=&quot;en-värdbaserad-karta-varje-mcp-klient&quot;&gt;En värdbaserad karta, varje MCP-klient&lt;/h2&gt;
&lt;p&gt;Maguyva är en fjärransluten MCP-server. Du kopplar GitHub, väljer repona, och molnpipelinen bygger symboler, grafkanter och en rankad karta. Du lägger till en API-nyckel i MCP-konfigurationen för klienten du redan använder. Maguyva har installationsguider för 24 dokumenterade MCP-klienter — inklusive Cursor — och kan ansluta till andra MCP-kompatibla klienter som stöder standardkonfiguration.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://maguyva.ai/sv/for-cursor&quot;&gt;Cursor-installationssidan&lt;/a&gt; är den editorspecifika vägen om det är där du arbetar. Samma server svarar Claude Code, VS Code, Windsurf, Codex CLI och resten. Du byter inte editor. Du ger varje agent samma verktygsyta: 11 kundvända MCP-verktyg för sökning, symboler, beroendeanalys, filhämtning, repo-kontext och deterministiska hjälpverktygsflöden. Semantisk, strukturell, graf- och textsökning smälts samman till rankade resultat.&lt;/p&gt;
&lt;p&gt;Det är portabilitetsfördelen. Citaten du kontrollerade i Cursor i morse har samma form som citaten Codex CLI returnerar i kväll. Filsökväg och radnummer. Öppna dem. Om de är fel ser du det. Om de är rätt har nästa ändring en plats att landa på. Det godkända påståendet är färre hallucinerade ändringar, inte ett löfte om att varje ändring är korrekt.&lt;/p&gt;
&lt;p&gt;Fräschhet publiceras. Ögonblicksbilder är tidsstämplade, så agenten vet vilken version av trädet den läser. Ombyggnadstakten är daglig i gratisplanen och varje timme i betalplanerna. Den ärliga begränsningen är osynkroniserat lokalt arbete: en ändring som bara finns i ett arbetsträd är ännu inte i den värdbaserade kartan. Den begränsningen är densamma oavsett vilken klient du frågar från, och det är precis poängen. Drift mellan klienter är inte längre en andra, dold begränsning.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://maguyva.ai/sv/docs&quot;&gt;Dokumentationen&lt;/a&gt; ger aktiveringsloopen som gäller för varje klient: indexera ett repo du redan känner till, anslut klienten, ställ en fråga du kan verifiera. Gör det en gång i Cursor. Gör det igen från den CLI du faktiskt använder på granskningsdagar. Om båda svaren citerar samma handler har kartan verkligen följt med dig.&lt;/p&gt;
&lt;h2 id=&quot;hur-de-två-kartorna-samexisterar&quot;&gt;Hur de två kartorna samexisterar&lt;/h2&gt;
&lt;p&gt;Använd båda. De är inte alternativ i en jämförelsesidas mening.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Låt Cursors indexerare vara på för projektet på disk. Låt Explore, Instant Grep och agenten inuti editorn använda den. Den loopen är nativ och snabb.&lt;/li&gt;
&lt;li&gt;Lägg till Maguyva som MCP-server i Cursor så att samma session också kan fråga den värdbaserade arbetsytekartan. Cursor är en dokumenterad Maguyva-klient. Du väljer inte ett index och raderar det andra.&lt;/li&gt;
&lt;li&gt;Lägg till samma Maguyva-server till Claude Code, Codex CLI, eller vilken annan MCP-klient som helst som rör repot. En API-nyckelform. En arbetsyta.&lt;/li&gt;
&lt;li&gt;Om en CI-agent är MCP-kompatibel, peka den mot samma server. Den läser samma tidsstämplade ögonblicksbild som laptopen läste.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Editorindexet förblir det bästa verktyget för ‘vad finns på disk i det här fönstret, just nu’. Den värdbaserade kartan är det bästa verktyget för ‘hur ser den här arbetsytan ut för varje agent som rör den idag’. De meningarna konkurrerar inte.&lt;/p&gt;
&lt;p&gt;Arbetsytekvoter publiceras på &lt;a href=&quot;https://maguyva.ai/sv/pricing&quot;&gt;prissidan&lt;/a&gt;: repon, indexerade rader och användare, fakturerade per arbetsyta. Agenter och människor delar samma användarantal. Börja gratis med ett repo du redan kan bedöma. Höj arbetsytan först efter att citaten har överlevt kontakt med trädet.&lt;/p&gt;
&lt;h2 id=&quot;vad-den-här-sidan-inte-hävdar&quot;&gt;Vad den här sidan inte hävdar&lt;/h2&gt;
&lt;p&gt;Den hävdar inte att Cursors indexerare är svag, ofullständig, eller en anledning att byta editor. Den första meningen i den här texten säger motsatsen.&lt;/p&gt;
&lt;p&gt;Den hävdar inte att Maguyva ersätter Instant Grep eller Explore-subagenten. Det är Cursor-funktioner. De stannar i Cursor.&lt;/p&gt;
&lt;p&gt;Den hittar inte på ett antal språk, en latenssiffra, eller en tokenbesparing för någon av produkterna. Okända siffror förblir opublicerade.&lt;/p&gt;
&lt;p&gt;Den låtsas inte att opushat lokalt arbete finns i den värdbaserade kartan. Tidsstämplade ögonblicksbilder gör den begränsningen synlig. De tar inte bort den.&lt;/p&gt;
&lt;p&gt;Testet är vanligt. Indexera ett repo du redan känner till. Ställ en fråga du kan verifiera, först i Cursor, sedan i en andra MCP-klient. Kontext som följer med dig är samma citat på båda ställena.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// same map, wherever you opened it.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Ecosystem</category><category>MCP</category><category>Portability</category></item><item><title>Kartan först, granskningen sedan</title><link>https://maguyva.ai/sv/blog/map-first-review-second</link><guid isPermaLink="true">https://maguyva.ai/sv/blog/map-first-review-second</guid><description>Förankra den kodande agenten i en repo-karta innan den skriver. Låt Greptile granska pull requesten efteråt. Ett kompletterande par, inte en ersättning.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Två olika uppgifter sitter på var sin sida av en pull request. Innan agenten skriver behöver den en karta över trädet den är på väg att ändra. Efter att agenten öppnat en PR bör något läsa den ändringen mot resten av systemet och lämna kommentarer en människa kan agera på.&lt;/p&gt;
&lt;p&gt;De här uppgifterna ser lika ut på avstånd eftersom båda involverar ‘att förstå kodbasen’. Det är inte samma produkt. Den ena svarar på ‘var borde den här ändringen landa?’. Den andra svarar på ‘vad bröt det här diffet som en rad-för-rad-linter kommer att missa?’. Att blanda ihop dem ger ett sämre första utkast och en mer högljudd granskning.&lt;/p&gt;
&lt;p&gt;Den här texten är en guide till ett gemensamt arbetsflöde. Maguyva är kartan agenten frågar först. Greptile är granskningsagenten som kommenterar PR:en efteråt. Paret är kompletterande genom konstruktion: Maguyva granskar inte pull requests, och Greptile ersätter inte kontextlagret agenten använde för att skriva dem.&lt;/p&gt;
&lt;h2 id=&quot;varför-den-här-uppdelningen-är-användbar&quot;&gt;Varför den här uppdelningen är användbar&lt;/h2&gt;
&lt;p&gt;En kodande agent som utgår från träningspriors plus några inklistrade filer kommer att hitta på en trolig sökväg och redigera den. Det är misslyckandet med ‘fel fil’, och det är ett hämtningsproblem. Maguyva är ett fjärranslutet MCP-lager för kodbaskontext: semantisk, strukturell (AST), graf-/beroende- och textbaserad hämtning smälts samman till rankade resultat, plus symbolsökning och filhämtning. Underbyggda svar kommer tillbaka som &lt;code&gt;path/file.ext:line&lt;/code&gt;, så att du kan avvisa en miss innan en patch existerar. Påståendet förblir blygsamt: färre hallucinerade ändringar. Modellen kan fortfarande gissa. Det är bara det första steget som slutar vara en gissning.&lt;/p&gt;
&lt;p&gt;Greptile är en AI-kodgranskningsagent. Med deras egna ord granskar den automatiskt varje pull request med full förståelse av kodbasen, och ställer det mot traditionella lintrar som kontrollerar filer isolerat istället för hela systemet. Installationen består i att installera GitHub- eller GitLab-appen och välja repon. Det finns inget lokalt index du behöver driva. Hostingen är Greptile Cloud (de anger SOC 2 Type II-efterlevnad, med en rapport tillgänglig på begäran), med ett självhostat alternativ erbjudet till företag.&lt;/p&gt;
&lt;p&gt;Deras eget numrerade flöde är: anslut och bygg en beroendegraf för varje funktion, klass och beroende; vid varje pull request, analysera ändringen med den fullständiga repo-grafen och publicera fynd som PR-kommentarer med föreslagna korrigeringar, på ungefär tre minuter; varje kommentar kan lämna över problemet till en kodande agent teamet redan använder. De anger också att de läser tidigare mänskliga PR-kommentarer över tid för att lära sig ett teams kodstandarder och minska högljudda förslag. Deras inlärningssystem behöver, enligt dem själva, 2-3 veckor för att anpassa sig.&lt;/p&gt;
&lt;p&gt;Det är granskning, inte utkastskrivning. Greptiles styrka är kontexten från en fullständig repo-graf på ändringen som redan landat i en PR, följt av en sluten loop som skickar fyndet till Claude Code, Codex, Conductor, Cursor, eller Devin. Maguyvas styrka är den rankade kartan agenten frågade innan den ändringen skrevs. Använd båda. Be inte någon av dem göra den andres jobb.&lt;/p&gt;
&lt;p&gt;En förstapartsprodukt-integration mellan Maguyva och Greptile anges inte. Du behöver den inte heller. Maguyva pratar med agenten via MCP. Greptile pratar med GitHub eller GitLab genom sin egen app. De möts vid pull requesten. Inget limskript, ingen cron som kopplar ett verktyg till det andra. Paret klarar sig utan bash eftersom varje produkt redan sitter på ytan den äger.&lt;/p&gt;
&lt;h2 id=&quot;vad-det-här-inte-är&quot;&gt;Vad det här inte är&lt;/h2&gt;
&lt;p&gt;Det här är inte en rivning av Greptile. Det är inte en ‘byt granskare’-sida. Greptile lanserades på Hacker News den 5 mars 2024 som ett Y Combinator W24-bolag, och den tråden är hur många människor först lärde känna produkten. Om det är så du hittade dem, fortsätt använda dem. Den här sidan är den saknade främre halvan av den loopen: att förankra agenten i förväg så att PR:en Greptile ser redan siktar på rätt filer.&lt;/p&gt;
&lt;p&gt;Greptiles marknadsföringsmaterial leder med påståenden om granskningshastighet och att fånga buggar. Behandla dem som Greptiles egna påståenden, inte som oberoende verifierade siffror. Den här texten upprepar dem inte som fakta.&lt;/p&gt;
&lt;p&gt;Språktäckning är samma sorts ärlighet. Greptile ramar in stöd som täckning av alla programmeringsspråk istället för en uppräknad lista; ett exakt antal anges inte. Maguyva publicerar stöd för över 279 språk och textbaserade teknologier, med en teknisk uppdelning (parserstödd AST kontra bara text) på sajten när frågan är teknisk. Det är olika produkter som gör olika påståenden. Blanda inte ihop dem.&lt;/p&gt;
&lt;p&gt;Greptiles priser anges inte i det material den här texten får använda. Betalplaner finns; se deras prissida. Maguyva tar betalt per arbetsyta, inte per plats. Planer börjar gratis. &lt;a href=&quot;https://maguyva.ai/sv/pricing&quot;&gt;Prissidan&lt;/a&gt; listar de publicerade nivåerna om du behöver arbetsytesiffrorna.&lt;/p&gt;
&lt;h2 id=&quot;arbetsflöde&quot;&gt;Arbetsflöde&lt;/h2&gt;
&lt;p&gt;Tre namngivna steg. Utför dem i den här ordningen. Hoppa inte över något av dem första gången du provar paret.&lt;/p&gt;
&lt;h3 id=&quot;1-maguyva-kontext&quot;&gt;1. Maguyva-kontext&lt;/h3&gt;
&lt;p&gt;Indexera ett repo du redan känner till. Anslut MCP-klienten du redan skriver i — Claude Code, Cursor, Codex CLI, VS Code, Windsurf, eller en annan MCP-kompatibel klient. Maguyva har installationsguider för 24 dokumenterade MCP-klienter och kan ansluta till andra klienter som stöder standard MCP-konfiguration.&lt;/p&gt;
&lt;p&gt;Ställ en fråga du kan bedöma innan någon skriver en rad. ‘Var hanteras sessionsutgång, och vad anropar det?’ är ett bättre första drag än ‘fixa auth’. Kräv citat. Öppna &lt;code&gt;file.ext:line&lt;/code&gt;-resultaten. Följ symbolen. Bekräfta beroendet du är på väg att röra.&lt;/p&gt;
&lt;p&gt;Maguyva exponerar 11 kundvända MCP-verktyg för sökning, symboler, beroendeanalys, filhämtning, repo-kontext och deterministiska hjälpverktygsflöden. Fyra hämtningslägen smälts samman till rankade resultat; &lt;code&gt;find_symbol&lt;/code&gt; är ett separat verktyg när du redan känner till namnet. &lt;a href=&quot;https://maguyva.ai/sv/docs&quot;&gt;Dokumentationen&lt;/a&gt; beskriver den kortaste vägen: börja gratis, indexera ett repo du redan känner till, anslut klienten, ställ sedan en fråga du kan verifiera.&lt;/p&gt;
&lt;p&gt;Ögonblicksbilder är tidsstämplade, så agenten kan avgöra vilken version av trädet den läser. Den ärliga begränsningen är osynkroniserat lokalt arbete. Om ändringen bara finns i ett arbetsträd och inte har pushats innehåller den värdbaserade kartan den ännu inte. Instruktionsfiler (&lt;code&gt;CLAUDE.md&lt;/code&gt;, &lt;code&gt;AGENTS.md&lt;/code&gt;) hör fortfarande hemma här, för konventioner och det som inte ska röras. De är ingen levande karta. Använd dem för beteende. Använd Maguyva för fakta.&lt;/p&gt;
&lt;p&gt;Låt inte agenten öppna en PR innan citaten överlever kontakt med repot. Den grinden är hela poängen med det här steget.&lt;/p&gt;
&lt;h3 id=&quot;2-agentens-pr&quot;&gt;2. Agentens PR&lt;/h3&gt;
&lt;p&gt;Samma agent skriver nu ändringen i klienten du redan betalar för. Maguyva är varken en editor eller en granskare. Agenten producerar fortfarande diffen. Du öppnar fortfarande pull requesten på GitHub eller GitLab som du redan gör.&lt;/p&gt;
&lt;p&gt;Det som borde vara annorlunda är den första filen. PR:en borde namnge handlern som faktiskt implementerar beteendet, anroparen som kommer att gå sönder, och testet som kommer att misslyckas om ändringen är fel. Om steg 1 hoppades över kommer steg 3 att spendera sina kommentarer på en ändring som landat i fel paket. Greptile kan fortfarande hitta systemiska problem. Det borde inte dessutom behöva återhämta sig från en hallucinerad sökväg.&lt;/p&gt;
&lt;p&gt;Håll PR:en avgränsad. En underbyggd första fil är inget tillstånd att skriva om modulen. Det här kompletterande paret fungerar när agenten gjorde ett jobb med en karta, och sedan bad en granskare göra ett annat jobb på ett avgränsat diff.&lt;/p&gt;
&lt;h3 id=&quot;3-greptile-granskning&quot;&gt;3. Greptile-granskning&lt;/h3&gt;
&lt;p&gt;Greptile är redan anslutet till repot via GitHub- eller GitLab-appen. På den nya pull requesten analyserar den ändringen med hjälp av den fullständiga repo-grafen den byggt, och publicerar fynd som kommentarer med föreslagna korrigeringar. Deras eget material sätter den genomgången till ungefär tre minuter.&lt;/p&gt;
&lt;p&gt;Läs kommentarerna som du skulle läsa en noggrann lagkamrat: öppna den citerade platsen, avgör om fyndet är verkligt, agera sedan. Där Greptile erbjuder ‘Fix with your Agent’ skickar det problemet — filsökvägar, radnummer, föreslagen kod — till Claude Code, Codex, Conductor, Cursor, eller Devin. ‘Fix All’ skickar alla problem i granskningen på en gång. De levererar också en Greptile MCP och en Claude Code-plugin för den överlämningen. Maguyva finns inte på den namngivna mållistan; den frånvaron är inget problem. Maguyva har redan gjort sitt jobb i steg 1. Den kodande agenten som skrev PR:en är den som borde ta emot korrigeringspayloaden.&lt;/p&gt;
&lt;p&gt;Förvänta dig brus de första 2-3 veckorna medan Greptiles inlärningssystem anpassar sig till kommentarerna ditt team faktiskt lämnar. Det är deras angivna tidslinje, inte en brist i paret. Mänsklig granskning stannar kvar i loopen. Greptile är den automatiserade första genomgången, inte sammanslagningsknappen.&lt;/p&gt;
&lt;p&gt;Om en Greptile-kommentar pekar på en fil agenten aldrig frågade i steg 1 är det en användbar signal. Antingen missade kartan en anropare, eller så hoppade agenten över ett citat. Fixa utkastet enligt kommentaren. Avaktivera inte granskaren.&lt;/p&gt;
&lt;h2 id=&quot;hur-du-håller-det-här-komplementet-ärligt&quot;&gt;Hur du håller det här komplementet ärligt&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Maguyva alltid först. En granskning av en PR med fel fil är fortfarande en granskning av fel fil.&lt;/li&gt;
&lt;li&gt;Greptile alltid efteråt. Ett väl citerat utkast behöver ändå en genomläsning av diffet på hela systemets nivå.&lt;/li&gt;
&lt;li&gt;Be inte Maguyva publicera PR-kommentarer. Det gör den inte.&lt;/li&gt;
&lt;li&gt;Be inte Greptile vara agentens första hämtningslager medan den fortfarande väljer sökväg. Det är inte jobbet deras GitHub- eller GitLab-app är kopplad för.&lt;/li&gt;
&lt;li&gt;Hitta inte på en bash-pipeline som ‘synkroniserar’ dem. PR:en är gränssnittet.&lt;/li&gt;
&lt;li&gt;Verifiera båda sidor oberoende. Indexera ett repo du redan känner till. Ställ en fråga du kan verifiera. Öppna sedan en liten PR och läs vad Greptile faktiskt kommenterar.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Loopen är vanlig så snart den får ett namn. Kartan först. Agentens PR. Granskningen sedan. Varje produkt stannar på den sida av pull requesten den är bra på.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// map first. review second. in that order.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Ecosystem</category><category>Workflow</category><category>Code Review</category></item><item><title>Ge en AI-agent kontext om ett stort repo utan en lokal indexerare</title><link>https://maguyva.ai/sv/blog/large-repo-context-without-a-local-indexer</link><guid isPermaLink="true">https://maguyva.ai/sv/blog/large-repo-context-without-a-local-indexer</guid><description>Hur du ger en kodande agent en sökbar karta över ett stort repo från molnet, utan att köra en lokal indexerare på din laptop.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Ett stort repo får inte plats i ett kontextfönster, och om du någonsin pekat en laptop-indexerare mot ett riktigt monorepo vet du att det inte får bekväm plats där heller — RAM-minnet skjuter i höjden, den första indexeringen tar en timme, och din agent börjar ändå nästa session med att gissa vilka filer som spelar roll.&lt;/p&gt;
&lt;p&gt;Det vanliga svaret är att köra en indexerare bredvid editorn, och för ett repo som får bekväm plats på en maskin är det ett bra svar. Om ditt monorepo redan indexeras snabbt i Cursor och det är det enda stället du behöver kartan, har den här texten inget att tillägga — hoppa över den.&lt;/p&gt;
&lt;p&gt;Den här texten handlar om det andra fallet — när en agent behöver en sökbar karta över ett stort repo, och du inte vill köra en lokal indexerare för att få den.&lt;/p&gt;
&lt;h2 id=&quot;när-en-lokal-indexerare-är-fel-verktyg&quot;&gt;När en lokal indexerare är fel verktyg&lt;/h2&gt;
&lt;p&gt;Ett lokalt index förutsätter att koden lever på maskinen som frågar den, och i verklig monorepo-skala spänns det antagandet även inom en enda editor. Repot är helt enkelt större än du vill hålla ‘varmt’ på en laptop: du arbetar i ett paket medan påverkansradien ligger tre kataloger bort, och en första kall indexering av ett träd på två miljoner rader är inte något du vill genomlida två gånger — varken på din egen maskin, eller på en CI-runner som aldrig tidigare klonat det trädet. Eller så borde en kollega kunna fråga samma karta som du, utan att vänta på att den egna maskinen ska kämpa sig igenom samma index.&lt;/p&gt;
&lt;p&gt;Inget av detta är en anledning att kasta bort en bra editor-indexerare. Det är en anledning att dessutom ha en värdbaserad karta som vilken som helst av dina agenter kan fråga via MCP.&lt;/p&gt;
&lt;p&gt;Och skalproblemet går djupare än ‘för många filer att klistra in’. På ett stort träd är den intressanta frågan nästan aldrig ‘visa mig den här filen’ — det är vilken fil, vilken symbol, vilka anropare, vilka tester. En agent som börjar med att lista &lt;code&gt;src/&lt;/code&gt; och läsa de tre första träffarna missar glatt handlern i &lt;code&gt;apps/api&lt;/code&gt; och den genererade klienten i &lt;code&gt;packages/sdk&lt;/code&gt;. Det du behöver är hämtning byggd från hela trädet, sedan rankad, sedan citerad.&lt;/p&gt;
&lt;h2 id=&quot;vad-kontext-om-ett-stort-repo-egentligen-betyder&quot;&gt;Vad ‘kontext om ett stort repo’ egentligen betyder&lt;/h2&gt;
&lt;p&gt;Att dumpa filer i prompten är inte kontext — det är en mindre, sämre kopia av trädet. Det din agent verkligen behöver är att ställa frågor och få citerade svar tillbaka: var den här symbolen är definierad och vem som anropar den, vad som beror på modulen jag är på väg att ändra, vilken testfil som täcker det här beteendet, och hur trädet ser ut &lt;em&gt;nu&lt;/em&gt;, inte förra kvartalet.&lt;/p&gt;
&lt;p&gt;De svaren måste komma från ett index byggt från ditt repo, inte från modellens minne av andras repon, och indexet måste leva någonstans utanför agentens kontextfönster. För det här problemet borde det också leva någonstans utanför din laptop.&lt;/p&gt;
&lt;p&gt;Ännu en sak instruktionsfiler inte kan göra åt dig: &lt;code&gt;CLAUDE.md&lt;/code&gt; och &lt;code&gt;AGENTS.md&lt;/code&gt; är rätt plats för konventioner och beteende, men de är inte en levande, rankad, sökbar karta över ett träd på två miljoner rader. Använd regler för beteende; använd repo-intelligens för fakta.&lt;/p&gt;
&lt;h2 id=&quot;vi-bygger-kartan-i-molnet-frågar-den-från-vilken-klient-som-helst&quot;&gt;Vi bygger kartan i molnet, frågar den från vilken klient som helst&lt;/h2&gt;
&lt;p&gt;Maguyva är ett fjärranslutet MCP-lager för kodbaskontext. Du kopplar GitHub, väljer dina repon, och kan gå därifrån medan molnpipelines analyserar trädet, bygger symboler och grafkanter, och underhåller en rankad karta — aldrig en lokal indexerare.&lt;/p&gt;
&lt;p&gt;När du pushar kod analyseras ändrade filer inkrementellt, och graf- och rankningslagren byggs om enligt ett schema: dagligen i gratisplanen, varje timme i betalplanerna. Varje ögonblicksbild är tidsstämplad, så din agent kan avgöra vilken version av trädet den läser. Den ärliga begränsningen här är osynkroniserat lokalt arbete — en ändring som bara finns i ditt arbetsträd, aldrig pushad, är ännu inte i den värdbaserade kartan.&lt;/p&gt;
&lt;p&gt;Sedan ansluter du vilken klient du än redan använder genom att lägga till en API-nyckel i dess MCP-konfiguration. Det finns installationsguider för 24 dokumenterade MCP-klienter, och vilken annan MCP-kompatibel klient som helst som stöder standardkonfiguration kan också ansluta. Om Cursor är där du bor går &lt;a href=&quot;https://maguyva.ai/sv/for-cursor&quot;&gt;Cursor-sidan&lt;/a&gt; igenom den vägen; samma server svarar Claude Code, VS Code, Windsurf, Codex CLI och resten.&lt;/p&gt;
&lt;p&gt;Du byter inte editor. Du ger din agent en verktygsyta — 11 MCP-verktyg för sökning, symboler, beroendeanalys, filhämtning och repo-kontext — med täckning över 279 fler språk och textbaserade teknologier, vilket betyder mer än du tror på ett monorepo som slutade vara ett enda språk för länge sedan.&lt;/p&gt;
&lt;p&gt;Svar kommer tillbaka underbyggda, som filsökvägar med radnummer. Semantisk, strukturell, graf- och textsökning smälts samman till rankade resultat, så att en fråga som ‘vad beror på parseConfig’ varken ger dig en grep-dump eller ett enda semantiskt utdrag, utan den handfull platser som verkligen spelar roll.&lt;/p&gt;
&lt;h2 id=&quot;en-konkret-guide&quot;&gt;En konkret guide&lt;/h2&gt;
&lt;p&gt;Börja inte med att indexera hela företaget. Här är vägen som fungerar:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Välj ett repo du redan känner väl — ett paket du kan bedöma för hand är värt mer än det största trädet du har.&lt;/li&gt;
&lt;li&gt;Börja gratis: 3 repon, 50k indexerade rader, alla 11 verktyg, ingen månatlig frågekvot. Om ditt representativa repo är större listar &lt;a href=&quot;https://maguyva.ai/sv/pricing&quot;&gt;prissidan&lt;/a&gt; arbetsytenivåerna ($0, $19, $49, $149) efter indexerad omfattning — inte efter antal platser.&lt;/li&gt;
&lt;li&gt;Anslut GitHub och vänta tills den första indexeringen är klar. Du kompilerar inget lokalt.&lt;/li&gt;
&lt;li&gt;Anslut MCP-klienten — några rader konfiguration. Maguyva är en fjärransluten MCP-server, så det finns inga plugins, inga tillägg, och ingen andra editor att anamma.&lt;/li&gt;
&lt;li&gt;Ställ en fråga du kan verifiera. ‘Vad beror på parseConfig?’ eller ‘Var hanteras utgången av inloggningssessionen?’ Öppna sedan de citerade &lt;code&gt;file.ext:line&lt;/code&gt;-resultaten och kontrollera dem mot trädet framför dig.&lt;/li&gt;
&lt;li&gt;Först efter att citaten överlever den kontakten låter du agenten redigera.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Om det första repot passar bra och ditt träd är stort, höj arbetsytan för att matcha dina indexerade rader och ombyggnadstakt. Människor och agenter delar samma användarantal — Maguyva tar betalt per arbetsyta, inte per plats — så att lägga till en tredje agent i loopen kostar dig ingenting.&lt;/p&gt;
&lt;p&gt;Aktiveringstestet är detsamma som &lt;a href=&quot;https://maguyva.ai/sv/docs&quot;&gt;dokumentationen&lt;/a&gt; rekommenderar för varje första körning: indexera ett repo du redan känner till, ställ en fråga du kan verifiera. Ett stort repo förändrar inte testet; det gör bara en felaktig första fil dyrare.&lt;/p&gt;
&lt;h2 id=&quot;vad-du-bör-hålla-koll-på-efter-anslutning&quot;&gt;Vad du bör hålla koll på efter anslutning&lt;/h2&gt;
&lt;p&gt;Håll koll på tre saker. Fräschhet: betalplaner byggs om varje timme, gratisplaner dagligen, och opushat lokalt arbete kommer inte att finnas i kartan — det är avvägningen du gör. Omfattning: indexera en representativ uppsättning repon, inte varje arkiverad fork; gratisnivån är medvetet dimensionerad för att ta reda på om svaren är värda att behålla. Och verifiering: en karta över ett stort repo som inte kan citera sökvägar och radnummer är bara en långsammare gissningsmaskin, så låt din agent visa platsen innan den levererar patchen.&lt;/p&gt;
&lt;p&gt;Kör sedan samma test du skulle köra på ett litet repo. Indexera ett repo du redan känner till. Ställ en fråga du kan verifiera. Om kartan är verklig slutar din agent att börja från ett kallt träd.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// no laptop got hot building this map.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>AI Agents</category><category>MCP</category><category>Indexing</category><category>Monorepos</category></item><item><title>Varför din AI-kodande agent hallucinerar filsökvägar</title><link>https://maguyva.ai/sv/blog/why-ai-coding-agents-hallucinate-file-paths</link><guid isPermaLink="true">https://maguyva.ai/sv/blog/why-ai-coding-agents-hallucinate-file-paths</guid><description>AI-kodande agenter hittar på filsökvägar när de inte har en verklig karta över repot. Här är varför det händer, och hur förankring leder till färre hallucinerade ändringar.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Tecknet är inte en felaktig funktionskropp. Det är en självsäker ändring i en fil som inte finns, eller i en fil som finns men inte är den som implementerar beteendet.&lt;/p&gt;
&lt;p&gt;Du bad om en fix för sessionsutgång. Agenten öppnade &lt;code&gt;src/auth/session.ts&lt;/code&gt;. Den sökvägen är trolig. Den är också fel. Den verkliga handlern lever i &lt;code&gt;apps/api/src/middleware/expiry.ts&lt;/code&gt;, omdöpt för två refaktoreringar sedan. Agenten ljög inte för dig. Den kompletterade en sökvägsformad sträng utifrån träningspriors plus vad som redan fanns i kontextfönstret.&lt;/p&gt;
&lt;p&gt;Det här är det vanliga misslyckandemönstret på ett verkligt repo. Modellen kan skriva kod. Missen är att välja fel plats att skriva den på.&lt;/p&gt;
&lt;h2 id=&quot;varför-agenter-hittar-på-sökvägar&quot;&gt;Varför agenter hittar på sökvägar&lt;/h2&gt;
&lt;p&gt;En kodande agent är en modell för nästa-token-förutsägelse med verktyg. När du säger ‘fixa sessionsutgång’ måste den namnge en fil innan den kan läsa eller patcha något. Om den inte redan har en förankrad karta konstruerar den en sökväg från:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Namngivningskonventioner den sett i andra repon. &lt;code&gt;src/auth/session.ts&lt;/code&gt; är en vanlig form.&lt;/li&gt;
&lt;li&gt;Filer redan i konversationen, som kanske är de du klistrade in förra veckan, inte de som spelar roll nu.&lt;/li&gt;
&lt;li&gt;Kataloglistningar den råkade köra, ofullständiga på ett stort träd.&lt;/li&gt;
&lt;li&gt;Instruktionsfiler. &lt;code&gt;CLAUDE.md&lt;/code&gt; och &lt;code&gt;AGENTS.md&lt;/code&gt; berättar för agenten hur den ska bete sig. De är inget levande index över symboler, anropare, eller aktuella sökvägar.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ingen av dessa källor är en karta över det här repot, idag. Modellen fyller luckan på samma sätt som den fyller varje lucka: med en fortsättning med hög sannolikhet. Den fortsättningen ser ofta ut som en verklig sökväg. Ibland finns filen och ligger bredvid den rätta. Ibland fanns den på en gren som slogs samman förra månaden. Ibland har den aldrig funnits.&lt;/p&gt;
&lt;p&gt;Grep räddar dig inte här om agenten aldrig söker efter rätt sträng. Agenten gissade en sökväg, läste sedan vad den sökvägen returnerade, och redigerade den sedan. Det första felsteget var sökvägen, inte patchen.&lt;/p&gt;
&lt;p&gt;Att läsa filer är inte heller detsamma som att hitta de rätta. Claude Code, Cursor, Codex, och liknande verktyg kan öppna vad du än pekar dem mot. Frågan är om de tillförlitligt hittar rätt filer, de viktiga symbolerna, beroendena, testerna, och påverkansradien innan de redigerar. Filåtkomst utan en karta börjar fortfarande med en gissning.&lt;/p&gt;
&lt;h2 id=&quot;redigering-av-fel-fil-är-ett-hämtningsproblem&quot;&gt;Redigering av fel fil är ett hämtningsproblem&lt;/h2&gt;
&lt;p&gt;Behandla den påhittade sökvägen som en hämtningsmiss, inte som en karaktärsbrist.&lt;/p&gt;
&lt;p&gt;Om agenten var tvungen att returnera &lt;code&gt;path/file.ext:line&lt;/code&gt; innan den fick lov att redigera skulle två saker hända. För det första skulle du kunna öppna citatet och avvisa arbetet på tio sekunder. För det andra skulle agenten behöva fråga något som verkligen känner till trädet.&lt;/p&gt;
&lt;p&gt;Det är jobbet för ett kodbaskontextlager. Enbart semantisk sökning räcker inte. Ett fragment som ‘låter som sessionsutgång’ kan ändå landa i ett avvecklat paket. Du behöver också exakt text när du känner till strängen, symbolsökning när du känner till namnet, strukturell sökning när du känner till formen, och en beroendegraf när du behöver anropare och påverkansradie.&lt;/p&gt;
&lt;p&gt;Maguyva är det lagret för MCP-kompatibla kodande agenter. Det är ingen editor. Claude Code, Cursor, Codex CLI, VS Code, Windsurf, och andra MCP-klienter stannar där de är. Agenten frågar en rankad karta innan den rör en rad.&lt;/p&gt;
&lt;p&gt;Påståendet är medvetet blygsamt: färre hallucinerade ändringar. Maguyva tar inte bort modellens förmåga att gissa. Det ändrar standardens första steg från ‘hitta på en trolig sökväg’ till ‘be om rankade, citerade platser’.&lt;/p&gt;
&lt;h2 id=&quot;hur-ett-underbyggt-svar-ser-ut&quot;&gt;Hur ett underbyggt svar ser ut&lt;/h2&gt;
&lt;p&gt;Ett användbart svar på ‘var hanteras sessionsutgång’ är inte ett stycke. Det är en kort lista med platser:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;apps/api/src/middleware/expiry.ts:48&lt;/code&gt; - handlern&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apps/web/src/lib/auth-client.ts:112&lt;/code&gt; - anroparen&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apps/api/tests/expiry.test.ts:20&lt;/code&gt; - testet som misslyckas om ändringen är fel&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Du kan öppna de här raderna. Om de är fel stannar du. Om de är rätt kan agenten redigera. Verifieringen är poängen, inte en slogan.&lt;/p&gt;
&lt;p&gt;Maguyva exponerar 11 kundvända MCP-verktyg för sökning, symboler, beroendeanalys, filhämtning, repo-kontext och deterministiska hjälpverktygsflöden. Fyra hämtningslägen (semantiskt, strukturellt, graf/beroende, och text) smälts samman till rankade resultat; symbolsökning är ett separat MCP-verktyg (&lt;code&gt;find_symbol&lt;/code&gt;). Underbyggda svar kommer tillbaka med filsökvägar och radnummer, så att du kan bedöma dem mot trädet framför dig.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://maguyva.ai/sv/docs&quot;&gt;Dokumentationen&lt;/a&gt; beskriver den kortaste vägen: börja gratis, indexera ett repo du redan känner till, anslut klienten, ställ sedan en fråga du kan verifiera.&lt;/p&gt;
&lt;h2 id=&quot;en-loop-som-förändrar-den-första-ändringen&quot;&gt;En loop som förändrar den första ändringen&lt;/h2&gt;
&lt;p&gt;Du behöver ingen ny arbetsflödesreligion. Du behöver ett extra steg innan den första skrivningen.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ställ en fråga du redan kan bedöma. ‘Vilken kod hanterar inloggning och sessionsutgång?’ är bättre än ‘fixa auth’.&lt;/li&gt;
&lt;li&gt;Kräv citat. Filsökväg och radnummer, inte en sammanfattning av ‘auth-modulen’.&lt;/li&gt;
&lt;li&gt;Öppna de citerade filerna. Följ symbolen. Bekräfta beroendet du är på väg att röra.&lt;/li&gt;
&lt;li&gt;Först då låter du agenten patcha.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Om steg 2 inte returnerar något användbart har agenten inte rätt att improvisera en sökväg. Den söker igen, eller så pekar du åt den. Precis den enda grinden är vad som ger färre hallucinerade ändringar. Modellen är samma modell. Kartan är vad som har förändrats.&lt;/p&gt;
&lt;p&gt;Instruktionsfiler spelar fortfarande roll. Behåll dem. Använd dem för konventioner, granskningsregler, och det som inte ska röras. Be dem inte vara indexet. En &lt;code&gt;CLAUDE.md&lt;/code&gt; som listar tre viktiga kataloger blir föråldrad veckan efter en paketuppdelning. En sökbar karta uppdateras när repot uppdateras.&lt;/p&gt;
&lt;p&gt;Ett besläktat misslyckande är nästan-rätt-filen: agenten öppnar &lt;code&gt;auth.ts&lt;/code&gt; när beteendet lever i &lt;code&gt;auth-client.ts&lt;/code&gt;, eller patchar en genererad fil istället för källan, eller redigerar kopian i &lt;code&gt;packages/legacy&lt;/code&gt; eftersom namnet stämde. Citat gör inte de här misstagen omöjliga. De gör dem synliga innan diffet landar.&lt;/p&gt;
&lt;h2 id=&quot;vad-en-karta-inte-fixar-åt-dig&quot;&gt;Vad en karta inte fixar åt dig&lt;/h2&gt;
&lt;p&gt;Var nykter om vad du får. En underbyggd karta gör inte varje ändring korrekt — din agent kan fortfarande skriva en dålig patch i exakt rätt fil. Om din kodbas lutar sig mot dynamisk dispatch, reflektion, eller monkey-patching kommer vissa symbolsökningar att returnera magrare än du skulle vilja, eftersom det är vad körtidsindirektion gör med varje statiskt index. Och om du hoppas på en procentandel — ‘hallucinerade sökvägar minskade med X%’ — hittar du den inte här, eftersom ingen ärligt kan mäta det talet för ditt repo förutom du själv.&lt;/p&gt;
&lt;p&gt;Det du kan förvänta dig är smalare och mer användbart: agenten slutar öppna sina ändringar med en gissad sökväg. Det första steget blir förankrat i en verklig karta, och det är därifrån färre hallucinerade ändringar kommer. Allt efter citatet — att läsa diffet, bedöma patchen — är fortfarande ditt jobb, precis som det alltid varit.&lt;/p&gt;
&lt;p&gt;Testet kostar dig nästan ingenting: indexera ett repo du redan känner till och ställ en fråga du kan verifiera. Börja med en sökväg du redan blivit bränd av. Om citaten är fel ser du det omedelbart. Om de är rätt har din agents nästa ändring en bättre plats att landa på.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// it doesn&apos;t know the file. it knows how to find it.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>AI Agents</category><category>Hallucination</category><category>Retrieval</category><category>MCP</category></item><item><title>Varför vi uppgraderade kodsökningen till voyage-4-large</title><link>https://maguyva.ai/sv/blog/upgrading-code-search-to-voyage-4-large</link><guid isPermaLink="true">https://maguyva.ai/sv/blog/upgrading-code-search-to-voyage-4-large</guid><description>Vi flyttade våra kodinbäddningar till voyage-4-large — för närvarande etta på den offentliga RTEB-topplistan för kodhämtning. Den ärliga versionen: avvägningen vi gör, vad vi faktiskt indexerar, och varför vi betalar för premiuminbäddningar.</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Benchmarksiffrorna i det här inlägget speglar RTEB-topplistorna vid publicering (juni 2026). Topplistor rör sig; behandla rankningarna som en ögonblicksbild, inte ett permanent faktum.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Semantisk sökning är bara så bra som inbäddningarna under den.&lt;/p&gt;
&lt;p&gt;När en agent frågar Maguyva “var hanterar vi återförsök” grepar den inte efter ordet “retry”. Den frågar efter &lt;em&gt;betydelsen&lt;/em&gt; — backoff-loopen, circuit breakern, det som omsluter ett instabilt anrop. Den frågan besvaras av en vektormodell som förvandlar kod till en punkt i rymden och hittar grannarna. Väljer man en bättre modell blir varje semantisk sökfråga i produkten bättre utan att det märks.&lt;/p&gt;
&lt;p&gt;Så vi bytte vår. Från och med juni 2026 körs Maguyvas kodinbäddningar på &lt;strong&gt;&lt;code&gt;voyage-4-large&lt;/code&gt;&lt;/strong&gt;, som ersätter &lt;code&gt;voyage-code-3&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;benchmarket&quot;&gt;Benchmarket&lt;/h2&gt;
&lt;p&gt;Vi tog inte det här beslutet på känn. Den offentliga &lt;a href=&quot;https://embedding-benchmark-rteb.hf.space/code&quot;&gt;Retrieval Embedding Benchmark (RTEB)&lt;/a&gt; rankar inbäddningsmodeller på verkliga hämtningsuppgifter, och på dess &lt;strong&gt;Code&lt;/strong&gt;-topplista ligger &lt;code&gt;voyage-4-large&lt;/code&gt; på &lt;strong&gt;förstaplats totalt (90,86)&lt;/strong&gt; — före &lt;code&gt;gemini-embedding-2-preview&lt;/code&gt; (90,26) och, anmärkningsvärt, före modellen vi redan använde, &lt;code&gt;voyage-code-3&lt;/code&gt; (89,73, plats 3).&lt;/p&gt;
&lt;p&gt;Det är ett litet absolut gap. Men det är ett gap åt rätt håll, på ett offentligt benchmark, på exakt den uppgift vi bryr oss om: att hitta kod utifrån dess betydelse.&lt;/p&gt;
&lt;h2 id=&quot;avvägningen-vi-accepterar-binär-kvantisering&quot;&gt;Avvägningen vi accepterar: binär kvantisering&lt;/h2&gt;
&lt;p&gt;Här är delen de flesta “vi uppgraderade vår modell”-inlägg utelämnar.&lt;/p&gt;
&lt;p&gt;Maguyva lagrar inte fullprecisionsvektorer. Vi lagrar &lt;strong&gt;binärt kvantiserade&lt;/strong&gt; inbäddningar: varje 2048-dimensionell vektor komprimeras till en 2048-bitars signatur — &lt;strong&gt;256 byte per vektor&lt;/strong&gt;. De signaturerna söks med Hamming-avstånd, indexerade och partitionerade per tenant.&lt;/p&gt;
&lt;p&gt;Det är en avsiktlig avvägning. Binär kvantisering ger upp viss hämtningsprecision i utbyte mot dramatiskt mindre lagring och snabb, billig avståndsmatematik utan en separat vektordatabas att driva. För en produkt som indexerar hela repositorier per arbetsyta väger den ekonomin tyngre än att pressa ut den sista bråkdelen av en benchmarkpoäng.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;voyage-4-large&lt;/code&gt; passar den här designen utan att tvinga fram en migrering av lagringslagret: den producerar 2048-dimensionell utdata, precis som &lt;code&gt;voyage-code-3&lt;/code&gt;, så våra &lt;code&gt;bit(2048)&lt;/code&gt;-kolumner och Hamming-sökvägen ändrades inte. Modellen blev bättre; schemat stod kvar.&lt;/p&gt;
&lt;h2 id=&quot;kod-var-bara-början&quot;&gt;Kod var bara början&lt;/h2&gt;
&lt;p&gt;Maguyva är ett kodintelligensverktyg. Men vi är också vår egen första kund, och vi riktar det mot något annat: markdownen som lever i våra repon vid sidan av koden. Arkitekturbeslutsregister, runbooks, kontrakt, finans- och policydokument — allt versionshanterat i Git, allt bakom samma MCP-server, ett semantiskt index över &lt;em&gt;dokumenten&lt;/em&gt;, inte bara källkoden.&lt;/p&gt;
&lt;p&gt;Det är exakt därför voyage-4-larges bredd spelar roll. På samma RTEB-familj av topplistor ligger den på &lt;strong&gt;förstaplats inom finans, förstaplats inom sjukvård, och förstaplats i övergripande texthämtning&lt;/strong&gt; — före Googles Gemini Embedding, Coheres Embed v4, och OpenAIs text-embedding-3-large. (Voyage är en av skaparna av RTEB, så vi läser det som en stark offentlig signal snarare än en helt neutral domare — men den benchmarkas direkt mot alla stora kommersiella modeller, på privata hold-out-set.) Samma index som hittar rätt funktion åt en agent hittar rätt klausul i ett kontrakt eller rätt rad i en policy — och på de domänerna är voyage-4-large inte en kompromiss, det är ledaren.&lt;/p&gt;
&lt;h2 id=&quot;varför-vi-betalar-för-premiuminbäddningar&quot;&gt;Varför vi betalar för premiuminbäddningar&lt;/h2&gt;
&lt;p&gt;Det finns ett billigare sätt att göra sökning på, och mycket av det är gratis. Lexikal sökning — BM25 och dess släktingar — matchar nyckelord, körs lokalt och kostar ingenting. Öppna inbäddningsmodeller som BGE, Nomic och embeddinggemma ger genuint &lt;em&gt;hyggig&lt;/em&gt; semantisk hämtning, och man kan self-hosta dem för priset av en GPU. Maguyva använder den gratis sidan också: varje sökfråga slår ihop text-, AST-, graf- och semantisk sökning. Det vi inte snålar på är det semantiska lagret.&lt;/p&gt;
&lt;p&gt;Vi betalar per token för premiuminbäddningar — &lt;code&gt;voyage-4-large&lt;/code&gt; — istället för att self-hosta en gratis modell, av två skäl. För det första kan nyckelordssökning ensam inte besvara “var hanterar vi återförsök” när koden säger &lt;code&gt;backoff&lt;/code&gt; och &lt;code&gt;circuit breaker&lt;/code&gt; och aldrig säger ordet “retry” — mening är hela poängen med inbäddningen, och på de domäner vi betjänar ligger de öppna modellerna efter premiummodellerna: några poäng efter på allmän text, och längre efter inom nischer som kod, kontrakt och finans. För det andra formar hämtningskvaliteten enligt vår erfarenhet det slutgiltiga svaret mer än modellen i andra änden gör — en stark agent som får fel kontext svarar ändå fel, och den ser aldrig dokumentet den aldrig fick.&lt;/p&gt;
&lt;p&gt;Så premiuminbäddningar är en per-token-räkning som skalar med varje repo och dokument vi indexerar — och vi betalar den med flit. För resultatet våra användare får, rätt funktion eller rätt klausul, tycker vi att den avvägningen är värd det.&lt;/p&gt;
&lt;h2 id=&quot;den-ärliga-delen&quot;&gt;Den ärliga delen&lt;/h2&gt;
&lt;p&gt;Voyages egen dokumentation märker fortfarande &lt;code&gt;voyage-code-3&lt;/code&gt; som den kodoptimerade modellen. Så varför byta?&lt;/p&gt;
&lt;p&gt;Eftersom vi läser det offentliga benchmarket, inte bara leverantörens modelltabell, och benchmarket satte &lt;code&gt;voyage-4-large&lt;/code&gt; i topp för kodhämtning. Det här var ett framåtblickande beslut: ta den nyare, generellt starkare modellen och validera den mot en offentlig topplista på de uppgifter som spelar roll. Vi känner oss trygga med den satsningen eftersom beviset är brett — voyage-4-large vinner inte bara inom kod, den leder inom finans, sjukvård och övergripande hämtning också.&lt;/p&gt;
&lt;h2 id=&quot;den-osynliga-grunden&quot;&gt;Den osynliga grunden&lt;/h2&gt;
&lt;p&gt;Varje verktyg vi exponerar — semantisk sökning, task-context-insamling, grundade frågor och svar — bygger i grunden på sökning. När hämtaren förbättras får agenten i andra änden bättre bevis, gör färre felaktiga vägval, och förankrar sina svar i rätt kod — eller rätt klausul, eller rätt policy. En skarpare inbäddningsmodell är inte en flashig funktion. Det är grunden för allt annat, och den förbättrade vi just. Du kommer inte märka det. Det är poängen.&lt;/p&gt;
</content:encoded><category>Embeddings</category><category>Search</category><category>Architecture</category></item><item><title>Rekursiv självförbättring för språk: att slita fram kodintelligens över ~280 språk</title><link>https://maguyva.ai/sv/blog/autonomous-quality-loops-language-grind</link><guid isPermaLink="true">https://maguyva.ai/sv/blog/autonomous-quality-loops-language-grind</guid><description>Vi stöder kodintelligens för cirka 280 språk. Ingen människa kan granska det för hand. Så vi byggde en rekursiv självförbättringsloop för språk — stickprov, LLM som domare, fixa en sak, omvalidera — och kör den med en flotta av isolerade agenter tills extraktionen faktiskt är korrekt, inte bara grön.</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Siffrorna i det här inlägget speglar systemet vid publicering (maj 2026). Se vår &lt;a href=&quot;https://maguyva.ai/sv/team&quot;&gt;teamsida&lt;/a&gt; för aktuella siffror.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Maguyva extraherar symboler, referenser och en beroendegraf ur källkod på ungefär 280 språk. Varje språk har en skräddarsydd tree-sitter-hanterare — queries, heuristik, specialfall — och varje hanterare kan vara subtilt fel på sitt eget sätt. Ett metodanrop som avges som en läsning. En funktion som tillskrivs fel omslutande scope. En relation som helt enkelt inte finns.&lt;/p&gt;
&lt;p&gt;Det går inte att granska för hand. Inget team kan läsa extraktionsutdata över 280 grammatiker och upptäcka de dåliga kanterna. Så den intressanta frågan är inte “är vår extraktion korrekt” — den är “hur &lt;em&gt;tar man reda på&lt;/em&gt; att den är fel, i den här skalan, utan en människa i varje loop.” Vårt svar är rekursiv självförbättring för språk: en kvalitetsloop driven av språkagenter, en LLM som fungerar som domare, och en regel vi ständigt lär oss om igen: grönt är inte samma sak som korrekt.&lt;/p&gt;
&lt;h2 id=&quot;grönt-är-inte-korrekt&quot;&gt;Grönt är inte korrekt&lt;/h2&gt;
&lt;p&gt;Varje språk har en fixture-svit, och en releasegrind poängsätter den över fem dimensioner — noggrannhet, strukturell integritet, fullständighet, kvalitet och prestanda. Ett språk blir &lt;strong&gt;GRÖNT&lt;/strong&gt; bara när precisionen är ≥ 0,95, recall ≥ 0,99 och F1 ≥ 0,97 på dess fixtures, med minst 20 förväntade kanter för statistisk tillförlitlighet. Under det är det GULT eller RÖTT, och det skeppas inte.&lt;/p&gt;
&lt;p&gt;Den grinden är nödvändig men inte tillräcklig. Fixtures valideras mot fixtures &lt;em&gt;vi själva skrivit&lt;/em&gt;. De kodifierar de fall vi redan tänkt på. En hanterare kan vara felfri på sina fixtures och ändå förvanska ett mönster som bara dyker upp i verklig kod — ett makroidiom, en generisk-bunden metod, en språkfunktion ingen skrev en fixture för. GRÖNT betyder att fixtures godkänns. Det betyder inte att ett verkligt repositorium extraheras rent. Så loopen måste lämna fixtures bakom sig och undersöka kod i verkliga repositorier.&lt;/p&gt;
&lt;h2 id=&quot;innerloopen-stickprov-döma-fixa-bevisa&quot;&gt;Innerloopen: stickprov, döma, fixa, bevisa&lt;/h2&gt;
&lt;p&gt;Kärnloopen kör ett språk i taget:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ┌──────────────────────────────────────────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  1. corpus run ── clone real-world repos, extract relationships   │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  2. spot-check 100 edges (seed 42, then seed 123 to cross-check)  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  3. LLM judge classifies every sampled edge:                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        CORRECT · FALSE_POSITIVE · TYPE_ERROR ·                    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        SCOPE_ERROR · METADATA_ERROR                               │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  4. fix ONE thing — handler .py, .scm query, or config           │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  5. re-validate — F1 + re-classify + manifest diff (no regressions)│&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   better? ──no──► revert, try a different fix ────────────────────┤&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │ yes                                                       │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                           │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  6. promote the fix into fixtures (a permanent regression guard) ──┘&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ett par saker gör att det här fungerar istället för att stampa på stället.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Domaren är agenten, inte ett API-anrop.&lt;/strong&gt; När vi säger “LLM som domare” menar vi att språkagenten själv läser varje utvald kant mot den verkliga källan och klassificerar den enligt en fast bedömningsmall med fem kategorier: är kanten korrekt, en falsk positiv, rätt relation med fel typ, kopplad till fel scope, eller bärande på fel metadata? Den bedömningsmallen är helt avgörande — “23 % felfrekvens” är meningslöst tills man vet om det är verkliga defekter eller domaren som räknar fel.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fixa en sak, bevisa den sedan.&lt;/strong&gt; Varje iteration ändrar exakt en redigerbar tillgång, kör sedan om mot ett fast testupplägg och behåller ändringen bara om F1 förbättras och omklassificeringen ser bättre ut. Om inte, återställs den. Ingen bunt spekulativa ändringar, inget “borde bli bättre”. En ändring förtjänar sin plats eller så är den borta. Och när en fix håller, befordras den in i fixture-sviten — så att buggen den fixade aldrig tyst kan komma tillbaka. Det befordringssteget är det som gör loopen &lt;em&gt;rekursiv&lt;/em&gt; snarare än bara repetitiv: varje pass stärker testoraklet som nästa pass valideras mot.&lt;/p&gt;
&lt;h2 id=&quot;lärdomen-vi-ständigt-lär-oss-om-igen-mätvärden-överrapporterar&quot;&gt;Lärdomen vi ständigt lär oss om igen: mätvärden överrapporterar&lt;/h2&gt;
&lt;p&gt;Här är fällan, och vi gick rakt in i den. De sekundära korpusmätvärdena — hur ofta ett extraherat mål saknar en upplösbar symbol, hur många symboler ser “föräldralösa” ut, och så vidare — överrapporterar problem massivt. De är mestadels &lt;em&gt;paradigmartefakter&lt;/em&gt;, inte buggar.&lt;/p&gt;
&lt;p&gt;Det renaste exemplet: &lt;code&gt;llvm&lt;/code&gt; visade en gång en 73-procentig andel “källa-utan-symbol” och stämplades som katastrofalt. Vi grävde i det. Den verkliga noggrannheten var &lt;strong&gt;98,5 %&lt;/strong&gt;. De “saknade symbolerna” var nästan uteslutande legitima externa referenser — anrop in i standardbiblioteket, in i ramverk, in i kod som ligger utanför repot. Måttet mätte en egenskap hos språket, inte en defekt i hanteraren. Språk som Zig, COBOL och Odin visar 65–70 % “föräldralösa” och är helt korrekta; COBOL hade noll verkliga fel.&lt;/p&gt;
&lt;p&gt;Om vi hade låtit de siffrorna styra arbetet hade vi lagt veckor på att “fixa” hanterare som redan var korrekta och ignorerat de språk som hade tysta, verkliga buggar. Slutsatsen är rättfram: de aggregerade mätvärdena är på sin höjd en grov triage-signal. &lt;strong&gt;Den verkliga kvalitetssignalen är stickprovet med kantklassificering&lt;/strong&gt; — att titta på faktiska kanter i faktiska repositorier och döma dem en och en. Data före intuition, men bara när man vet vilken data som talar sanning.&lt;/p&gt;
&lt;h2 id=&quot;ytterloopen-en-flotta-inte-ett-maraton&quot;&gt;Ytterloopen: en flotta, inte ett maraton&lt;/h2&gt;
&lt;p&gt;Ett språk i taget skulle ta en evighet över 280 av dem, så innerloopen omsluts av en ytterloop som kör många parallellt.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   pick a wave of near-GREEN / high-error languages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   fan out 10–15 agents, each ISOLATED in its own git worktree,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   each grinding ONE language, committing to its own branch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   orchestrator integrates serially: file-scoped apply, then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   `manifest diff` — any cross-language regression blocks the batch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   gated push (reviewed and confirmed) ──► rotate to the next wave&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Varje agent arbetar i en engångs-worktree så att de inte kan gå på varandras tår. Orkestreraren integrerar deras fixar en i taget, var och en bakom en regressionskontroll mot hela manifestet: en ändring som hjälper sitt eget språk men tyst förstör tre andra landar inte. Integrationen är grindad och bekräftad innan något pushas — regressionsgrinden avgör vad som är &lt;em&gt;säkert&lt;/em&gt;, en människa avgör fortfarande vad som &lt;em&gt;skeppas&lt;/em&gt;. Sedan roterar poolen till nästa uppsättning språk och alltihop körs igen.&lt;/p&gt;
&lt;h2 id=&quot;vad-som-fortfarande-är-ofullständigt&quot;&gt;Vad som fortfarande är ofullständigt&lt;/h2&gt;
&lt;p&gt;Domaren kan ha fel, och felaktigheten har en riktning: en agent som kör med för lite kontext &lt;em&gt;överrapporterar&lt;/em&gt;. I en batch flaggades åtta språk med 5–20 % fel; vid granskning var bara ett fall en verklig språkspecifik bugg — resten var domarmisstag från att missa språkets egen semantik (en källkodsrad som legitimt avger flera kanter, parameterbindningar modellerade som tilldelningar, referens-per-identifierare-språk). Det är därför vi tar stickprov med två frön och korskontrollerar, och varför en oenighet mellan domaren och fixtures behandlas som den &lt;em&gt;mest&lt;/em&gt; intressanta signalen, inte en avgjord dom — ibland är det fixturen som har fel.&lt;/p&gt;
&lt;p&gt;Vi är också ärliga om målet. Målet är noll verkliga fel, punkt slut — men “noll” är en riktning vi sliter oss mot, språk för språk, inte en ruta som bockas av. Det finns alltid ännu ett repo med ännu ett idiom.&lt;/p&gt;
&lt;h2 id=&quot;förtjänat-inte-påstått&quot;&gt;Förtjänat, inte påstått&lt;/h2&gt;
&lt;p&gt;Allt Maguyva gör för en agent — hitta en symbol, spåra ett beroende, besvara en fråga med citerad kod — vilar på att extraktionen under är korrekt. Över 280 språk kan “korrekt” inte påstås; det måste kontinuerligt &lt;em&gt;förtjänas&lt;/em&gt; mot verklig kod. Loopen är hur vi förtjänar det: en autonom cykel av stickprov och fix som behandlar sina egna mätvärden med misstänksamhet, bevisar varje ändring och gör varje fix till ett skydd mot nästa regression. Det är inte glamoröst. Det är arbetet som låter oss säga “vi stöder ditt språk” och mena det. Grönt är lätt. Korrekt är förtjänat.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Languages</category><category>Agents</category></item><item><title>Multimodal fusionssökning: att välja rätt hämtare för varje sökfråga</title><link>https://maguyva.ai/sv/blog/multi-modal-fusion-search</link><guid isPermaLink="true">https://maguyva.ai/sv/blog/multi-modal-fusion-search</guid><description>En sökfråga som &apos;var är parseConfig definierad&apos; vill ha en annan typ av sökning än &apos;hur fungerar auth&apos;. Maguyva klassificerar avsikten, viktar fyra hämtningslägen därefter, och slår samman resultaten med viktad Reciprocal Rank Fusion.</description><pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Historisk designnot: den här artikeln från april 2026 beskriver dåtidens routningsdesign, inte dagens standardbeteende. Rättelsen från september nedan gäller endast ett mätpåstående. För aktuell routning, förval och uttrycklig styrning av modaliteter, se &lt;a href=&quot;https://maguyva.ai/sv/docs/how-it-works&quot;&gt;Så fungerar det&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sökfrågor kan vara av olika slag.&lt;/p&gt;
&lt;p&gt;“var är &lt;code&gt;parseConfig&lt;/code&gt; definierad” vill ha en exakt symbol — en precis plats, snabbt. “hur fungerar autentisering” vill ha mening — spridningen av relaterad kod som förklarar ett koncept. “vad går sönder om jag ändrar den här funktionen” vill ha beroendegrafen. “hitta strängen &lt;code&gt;ECONNREFUSED&lt;/code&gt;” vill ha en bokstavlig träff, ingenting smart.&lt;/p&gt;
&lt;p&gt;Grep är utmärkt för bokstavliga träffar och användbart för viss referensjakt, men det är ingen beroendegraf och det förstår inte mening. Inbäddningar täcker den semantiska sidan, men de är fel verktyg för exakta strängar och konsekvensanalys. De flesta kodsökverktyg väljer en motor och tvingar varje sökfråga att leva med det valet. Maguyva låser sig inte vid en enda motor. Det räknar ut vilken typ av fråga du ställde, och blandar sedan fyra hämtare i den proportion frågan förtjänar.&lt;/p&gt;
&lt;h2 id=&quot;fyra-hämtningslägen&quot;&gt;Fyra hämtningslägen&lt;/h2&gt;
&lt;p&gt;Under huven finns fyra oberoende sätt att hitta kod:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;semantisk&lt;/strong&gt; — vektorsökning över Voyage-binärinbäddningar; hittar kod efter mening.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;text&lt;/strong&gt; — trigrammatchning; hittar bokstavliga strängar, felmeddelanden, exakta identifierare.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;strukturell&lt;/strong&gt; — AST-queries; hittar definitioner, signaturer och språkkonstruktioner.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;graf&lt;/strong&gt; — beroendegrafen; hittar anropare, anropade och påverkansradie.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Var och en är stark på en egen klass av frågor. Konsten ligger i att avgöra hur mycket man ska lita på var och en för sökfrågan framför sig.&lt;/p&gt;
&lt;h2 id=&quot;avsiktsklassificering&quot;&gt;Avsiktsklassificering&lt;/h2&gt;
&lt;p&gt;Innan någon hämtning körs sorterar en lättviktig klassificerare sökfrågan i en av sex avsikter, med en konfidenspoäng. Den är medvetet billig — ordnad heuristik, första träff vinner — eftersom den körs i den tidskritiska kodvägen och bara lägger till en millisekund eller två:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;börjar med &lt;code&gt;def &lt;/code&gt;, &lt;code&gt;class &lt;/code&gt;, &lt;code&gt;func &lt;/code&gt;, &lt;code&gt;import &lt;/code&gt;… → &lt;strong&gt;find_definition&lt;/strong&gt; (konfidens 0,95)&lt;/li&gt;
&lt;li&gt;“who calls”, “usages of”, “references to” (vem anropar, användningar av, referenser till) → &lt;strong&gt;find_references&lt;/strong&gt; (0,90)&lt;/li&gt;
&lt;li&gt;“impact”, “blast radius”, “what depends on” (påverkan, påverkansradie, vad som är beroende av något) → &lt;strong&gt;impact_analysis&lt;/strong&gt; (0,90)&lt;/li&gt;
&lt;li&gt;en citerad &lt;code&gt;&quot;string&quot;&lt;/code&gt; eller ett felmeddelande-token som &lt;code&gt;traceback&lt;/code&gt; → &lt;strong&gt;exact_match&lt;/strong&gt; (0,85–0,90)&lt;/li&gt;
&lt;li&gt;en identifierare av typen &lt;code&gt;CamelCase&lt;/code&gt; eller &lt;code&gt;snake_case&lt;/code&gt; → &lt;strong&gt;find_definition&lt;/strong&gt; (0,60–0,80)&lt;/li&gt;
&lt;li&gt;“how”, “why”, “explain”, “architecture” (hur, varför, förklara, arkitektur) → &lt;strong&gt;understand_code&lt;/strong&gt; (0,75)&lt;/li&gt;
&lt;li&gt;inget matchar → &lt;strong&gt;understand_code&lt;/strong&gt;, låg konfidens (0,40)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Varje avsikt bär en viktprofil över de fyra hämtningslägena. Det här är de verkliga talen:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Avsikt&lt;/th&gt;
&lt;th&gt;semantisk&lt;/th&gt;
&lt;th&gt;text&lt;/th&gt;
&lt;th&gt;strukturell (AST)&lt;/th&gt;
&lt;th&gt;graf&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;find_definition&lt;/td&gt;
&lt;td&gt;0,2&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0,6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;find_references&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;td&gt;0,2&lt;/td&gt;
&lt;td&gt;0,2&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0,5&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;understand_code&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0,5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0,2&lt;/td&gt;
&lt;td&gt;0,2&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;find_similar&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0,4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0,3&lt;/td&gt;
&lt;td&gt;0,2&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;impact_analysis&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0,7&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;exact_match&lt;/td&gt;
&lt;td&gt;0,0&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0,9&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;td&gt;0,0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Så “var är &lt;code&gt;parseConfig&lt;/code&gt; definierad” lutar tungt mot AST (0,6). “hur fungerar auth” lutar mot semantiska vektorer (0,5). “vad beror på det här” är nästan helt graf (0,7). “hitta &lt;code&gt;ECONNREFUSED&lt;/code&gt;” är nästan helt trigram (0,9), med inbäddningsmodellen helt avstängd — eftersom semantisk likhet är exakt fel verktyg för en exakt sträng.&lt;/p&gt;
&lt;h2 id=&quot;den-snabba-vägen-och-den-sammanslagna-vägen&quot;&gt;Den snabba vägen och den sammanslagna vägen&lt;/h2&gt;
&lt;p&gt;När klassificeraren är säker — poäng ≥ 0,85 — och sökfrågan är en normal sådan, hoppar Maguyva över fusion helt och dirigerar direkt till det enda dominerande hämtningsläget. “var är X definierad” behöver inte fyra hämtare; den behöver AST-indexet, direkt. Den direkta vägen rapporteras tillbaka som &lt;code&gt;fusion_strategy: &quot;direct&quot;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Allt tvetydigt går genom fusion. De fyra (eller tre, i standardinställningen) hämtningslägena körs parallellt, var och en returnerar sin egen rankade lista, och vi kombinerar dem.&lt;/p&gt;
&lt;h2 id=&quot;viktad-reciprocal-rank-fusion&quot;&gt;Viktad Reciprocal Rank Fusion&lt;/h2&gt;
&lt;p&gt;Att slå samman heterogena hämtare är svårare än det låter: en cosinuslikhet på 0,82 och en trigrampoäng på 137 och en grafcentralitet på 0,004 ligger inte på samma skala, så man kan inte bara addera dem. Reciprocal Rank Fusion kringgår problemet genom att kasta bort de råa poängen och bara behålla den &lt;strong&gt;placering&lt;/strong&gt; varje motor tilldelade. Ett resultats bidrag från ett hämtningsläge är:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;contribution = weight × 1 / (k + rank + 1)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;där &lt;code&gt;rank&lt;/code&gt; är dess position i det hämtningslägets lista och &lt;code&gt;k&lt;/code&gt; är en utjämningskonstant. Bidrag summeras över hämtningslägen för varje resultat som mer än en motor hittade — samstämmighet mellan hämtare flyter naturligt upp till toppen. Vi använder &lt;strong&gt;k = 40&lt;/strong&gt; i standardinställningen och 60 för &lt;code&gt;thorough&lt;/code&gt; (&lt;code&gt;quick&lt;/code&gt; körs enbart semantiskt, så fusion aktiveras aldrig där). Det ursprungliga RRF-arbetet landade på k = 60 för generell hämtning; vårt standardvärde ger något större tyngd åt resultat som rankas högt i flera hämtningslägen — och vi rekommenderar inte att man finjusterar den för hand.&lt;/p&gt;
&lt;p&gt;Utöver det bär resultaten en &lt;strong&gt;grafviktighetsboost&lt;/strong&gt;. Ett nav — en funktion hela kodbasen lutar sig mot — bör rankas högre än en mindre känd lövnod även vid samma textuella relevans, så vi multiplicerar varje bidrag med:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;boost = min(1 + 0.3 × ln(1 + centrality), 1.5)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Centralitet kommer från pipelinens förberäknade PageRank-/gradmått, och boosten är begränsad till 1,5× så att en populär funktion inte helt kan begrava en mer relevant men obskyr sådan. Slutligen degraderar vi resultat från vendor-, build- och arkivsökvägar, och tar bort dubbletter och behåller det bästa kodavsnittet per fil.&lt;/p&gt;
&lt;h2 id=&quot;vad-som-fortfarande-är-ofullständigt&quot;&gt;Vad som fortfarande är ofullständigt&lt;/h2&gt;
&lt;p&gt;Avsiktsklassificeraren är en samling reguljära uttryck, inte en tränad modell. Den hanterar vanliga frågeformer med heuristiker, och en tvetydig sökfråga faller tillbaka på &lt;code&gt;understand_code&lt;/code&gt; och en blandning med tonvikt på semantik. En tidigare version av det här inlägget beskrev en minskning av andelen sökningar utan resultat från cirka 15 % till under 5 % som uppnådd. Förslaget från december 2025 angav i själva verket ett uppskattat utgångsläge och ett mål; ingen underbyggande uppsättning sökfrågor eller mätdokumentation har tillhandahållits. Vi drar tillbaka påståendet om en uppnådd förbättring; se &lt;a href=&quot;https://maguyva.ai/evidence/search-quality.md&quot;&gt;källunderlaget och rättelsen (på engelska)&lt;/a&gt;. Vi har inte ersatt klassificeraren med en tränad modell eftersom den billiga versionen är snabb och tillräckligt bra för sin avsedda routningsuppgift, och eftersom en felaktig men självsäker klassificerare är sämre än ett ärligt reservalternativ. Vikterna är handvalda apriorivärden, inte inlärda från klickdata som vi inte samlar in.&lt;/p&gt;
&lt;h2 id=&quot;ställ-frågan-utan-att-välja-verktyg&quot;&gt;Ställ frågan utan att välja verktyg&lt;/h2&gt;
&lt;p&gt;En agent ska inte behöva veta om den ska ta till grep eller inbäddningar eller anropsgrafen — den ska ställa sin fråga i vanliga ord och få rätt svar. Multimodal fusion är det som låter &lt;code&gt;find_symbol&lt;/code&gt;, semantisk sökning och beroendeanalys ligga bakom en och samma sökyta: systemet läser frågans form och sätter tyst ihop rätt hämtare för den. Modellen som poängsätter inbäddningarna spelar roll, men det gör även att veta när man &lt;em&gt;inte&lt;/em&gt; ska använda dem. Att välja rätt verktyg för varje sökfråga är sin egen sorts kvalitet, och det är en vi hellre äger själva än skjuter över på anroparen.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// you bring the question. it brings the tools.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Search</category><category>Architecture</category></item><item><title>Agentobservabilitet: hooks, Alloy och Grafana</title><link>https://maguyva.ai/sv/blog/agent-observability-hooks-alloy-grafana</link><guid isPermaLink="true">https://maguyva.ai/sv/blog/agent-observability-hooks-alloy-grafana</guid><description>Vi kopplade in Claude Code och Codex i en gemensam Grafana-stack med OpenTelemetry och Alloy, och använde sedan spårningar och loggar för att hitta och åtgärda agentbeteenden vid källan.</description><pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Agentsystem kraschar på märkliga sätt.&lt;/p&gt;
&lt;p&gt;Ibland är modellen problemet. Ibland är verktyget problemet. Ibland fungerar din MCP-server perfekt, men agenten valde fel specialist, eller lade halva sessionen på skalarbete du inte förväntade dig, eller drog på sig kostnader i det tysta i en loop som såg produktiv ut utifrån.&lt;/p&gt;
&lt;p&gt;Om du inte kan se skillnaden driver du egentligen inte ett agentsystem. Du gissar.&lt;/p&gt;
&lt;p&gt;Så vi byggde en observabilitetsstack för vårt eget arbetsflöde: Claude Code, Codex, Claude-hookhändelser, Codex-notify-händelser, inbyggd OpenTelemetry, Grafana Alloy och Grafana Cloud på andra sidan.&lt;/p&gt;
&lt;p&gt;Det intressanta är inte “vi byggde en instrumentpanel”. Det intressanta är att vi var tvungna att dela upp telemetrin i två separata strömmar, eftersom ingen enskild källa gav oss hela bilden.&lt;/p&gt;
&lt;h2 id=&quot;problemet-agenttelemetri-är-fragmenterad&quot;&gt;Problemet: agenttelemetri är fragmenterad&lt;/h2&gt;
&lt;p&gt;Moderna kodningsagenter avger redan viss telemetri. Det hjälper, men det räcker inte.&lt;/p&gt;
&lt;p&gt;Inbyggd OTEL är bra på att besvara frågor som:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hur många förfrågningar gjorde vi?&lt;/li&gt;
&lt;li&gt;Vad kostade en session?&lt;/li&gt;
&lt;li&gt;Var finns spannen och spårningarna?&lt;/li&gt;
&lt;li&gt;Ökade latensen plötsligt?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Den är betydligt sämre på att besvara frågor som:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vilken MCP-server lutade agenten sig mot?&lt;/li&gt;
&lt;li&gt;Låg det här felet i &lt;code&gt;Bash&lt;/code&gt;, ett inbyggt filverktyg, eller ett MCP-anrop?&lt;/li&gt;
&lt;li&gt;Vilken skill aktiverades egentligen?&lt;/li&gt;
&lt;li&gt;Vilken typ av subagent dirigerades ut?&lt;/li&gt;
&lt;li&gt;Utförde sessionen användbart arbete, eller stampade den bara på stället?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Den andra kategorin av frågor ligger närmare hooks än spårningar.&lt;/p&gt;
&lt;p&gt;Men motsatsen gäller också: några av de viktigaste prestandafrågorna ligger närmare spårningar än hooks.&lt;/p&gt;
&lt;p&gt;Om du vill veta var latensen faktiskt ackumulerades, vilka spann som var långsamma, eller om sessionen brände tid på modellanrop kontra verktygsexekvering, behöver du spårningsdata lika väl som semantiska händelser.&lt;/p&gt;
&lt;h2 id=&quot;arkitekturen-vi-landade-i&quot;&gt;Arkitekturen vi landade i&lt;/h2&gt;
&lt;p&gt;Vi kör två telemetrivägar parallellt.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Claude Code&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  native OTEL -&amp;gt; Alloy -&amp;gt; Grafana Cloud&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  hooks        -&amp;gt; send_event.py -&amp;gt; Grafana Cloud Loki&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Codex&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  native OTEL -&amp;gt; Alloy -&amp;gt; Grafana Cloud&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  notify hook -&amp;gt; codex_notify.py -&amp;gt; shared Loki schema&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Den uppdelningen är avsiktlig.&lt;/p&gt;
&lt;p&gt;Den är också asymmetrisk. Claude Code ger oss en mycket rikare yta av livscykelhooks. Codex ger oss inbyggd OTEL plus en notify-yta, så vi normaliserar mindre detaljerade händelser när en agenttur avslutas till samma loggschema istället för att låtsas att båda körtiderna exponerar samma kontroller.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Inbyggd OTEL&lt;/strong&gt; ger oss basströmmen: loggar och spårningar från själva körtiden, plus mått där körtiden faktiskt avger dem.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hook- och notify-händelser&lt;/strong&gt; ger oss det semantiska lagret: sådant som &lt;code&gt;PreToolUse&lt;/code&gt;, &lt;code&gt;PostToolUse&lt;/code&gt;, &lt;code&gt;PostToolUseFailure&lt;/code&gt;, &lt;code&gt;UserPromptSubmit&lt;/code&gt;, &lt;code&gt;SubagentStop&lt;/code&gt;, &lt;code&gt;SkillActivated&lt;/code&gt;, och den klassificerade metadata vi faktiskt bryr oss om när vi felsöker agentbeteende. Claude Code bidrar med den rikare händelseströmmen här. Codex bidrar med en tunnare men fortfarande användbar normaliserad ström.&lt;/p&gt;
&lt;h2 id=&quot;varför-hooks-finns-över-huvud-taget&quot;&gt;Varför hooks finns över huvud taget&lt;/h2&gt;
&lt;p&gt;Vår hook-pipeline berikar händelser innan de når Loki.&lt;/p&gt;
&lt;p&gt;Istället för att bara säga “ett verktyg kördes” klassificerar vi händelsen i fält som:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;tool_type&lt;/code&gt;: builtin, mcp, skill, agent, bash&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mcp_server&lt;/code&gt;: vilken MCP-backend som hanterade anropet&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bash_cli&lt;/code&gt;: skalkommandots familj&lt;/li&gt;
&lt;li&gt;&lt;code&gt;subagent_type&lt;/code&gt;: vilken typ av specialist som dirigerades ut&lt;/li&gt;
&lt;li&gt;&lt;code&gt;agent_tool&lt;/code&gt;: om källan var Claude Code eller Codex&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Det betyder att vi kan ställa frågor som spelar roll operativt:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | agent_tool=&quot;codex-cli&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | tool_type=&quot;mcp&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | json | bash_cli=&quot;git&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Det där är inte skrytfält. De är skillnaden mellan “agenten kändes långsam” och “agenten spenderade de senaste tio minuterna i skaltunga git-operationer med hög andel verktygsfel”.&lt;/p&gt;
&lt;p&gt;En implementationsdetalj som ser konstigare ut än den är: den delade Loki-strömmen använder fortfarande &lt;code&gt;service_name=&quot;claude-code-hooks&quot;&lt;/code&gt; som etikett även när händelsen kom från Codex. Den verkliga uppdelningen mellan körtiderna sker på &lt;code&gt;agent_tool&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;varför-alloy-sitter-i-mitten&quot;&gt;Varför Alloy sitter i mitten&lt;/h2&gt;
&lt;p&gt;Grafana Alloy är inte bara en vidarebefordrare i den här uppsättningen. Det är policygränsen.&lt;/p&gt;
&lt;p&gt;Vi pekar den inbyggda OTEL-strömmen från Claude Code och Codex mot en lokal Alloy-proxy på &lt;code&gt;localhost:4318&lt;/code&gt;, och låter sedan Alloy städa upp payloaden innan den vidarebefordras till Grafana Cloud.&lt;/p&gt;
&lt;p&gt;Det spelar roll eftersom rå agenttelemetri är full av högkardinalitetsfält som är användbara för analys men förskräckliga som indexerade etiketter:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;session_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;prompt_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;tokenantal&lt;/li&gt;
&lt;li&gt;varaktigheter&lt;/li&gt;
&lt;li&gt;blobbar med verktygsparametrar&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Om du indexerar allt får du en etikettexplosion och en dålig dag.&lt;/p&gt;
&lt;p&gt;Så Alloy gör tre saker åt oss:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Håller en mycket liten uppsättning lågkardinalitetsetiketter indexerade.&lt;/li&gt;
&lt;li&gt;Flyttar brusiga men användbara fält till strukturerad metadata.&lt;/li&gt;
&lt;li&gt;Slänger rent brus helt och hållet.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Den viktiga idén är enkel: &lt;strong&gt;observera mer, indexera mindre&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;varför-hookströmmen-går-förbi-alloy&quot;&gt;Varför hookströmmen går förbi Alloy&lt;/h2&gt;
&lt;p&gt;Hookströmmen är redan formad för Loki.&lt;/p&gt;
&lt;p&gt;När &lt;code&gt;send_event.py&lt;/code&gt; skickar en händelse har vi redan bestämt vilka fält som förtjänar etikettbehandling och vilka som hör hemma i den strukturerade JSON-kroppen. Den strömmen går rakt till Grafana Clouds OTLP-gateway istället för att ta ytterligare ett varv genom Alloy.&lt;/p&gt;
&lt;p&gt;Systemet har alltså en tydlig arbetsfördelning:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Alloy&lt;/strong&gt; tämjer den råa inbyggda OTEL-strömmen.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hook-berikning&lt;/strong&gt; gör semantiska händelser sökbara.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Det håller arkitekturen enklare än att försöka tvinga allt genom en enda väg.&lt;/p&gt;
&lt;h2 id=&quot;vad-instrumentpanelen-faktiskt-visar&quot;&gt;Vad instrumentpanelen faktiskt visar&lt;/h2&gt;
&lt;p&gt;Skärmdumpen nedan är från en av observabilitetspanelerna bakom vårt agentarbetsflöde. Det är inte ett benchmark, och siffrorna är bara en ögonblicksbild. Poängen är formen på datan: aktivitetsflöde, verktygsanrop, fel, prompter, och uppdelningar efter agent, inbyggda verktyg, MCP-användning, skalkommandon och skills.&lt;/p&gt;
&lt;p&gt;Det användbara är att den här panelen lever på samma Grafana-stack som resten av agenttelemetrin. Vi kan filtrera på källagent och verktygsfamilj och titta över körtiderna utan att behöva uppfinna en separat observabilitetsberättelse för varje system.&lt;/p&gt;
&lt;figure class=&quot;feature-figure feature-figure--wide&quot;&gt;
  &lt;a
    href=&quot;https://maguyva.ai/blog/agent-observability-dashboard.png&quot;
    target=&quot;_blank&quot;
    rel=&quot;noreferrer&quot;
    aria-label=&quot;Öppna skärmdumpen av observabilitetspanelen i full upplösning&quot;
  &gt;
    &lt;img
      src=&quot;https://maguyva.ai/blog/agent-observability-dashboard.png&quot;
      alt=&quot;Grafana-instrumentpanel som visar ett aktivitetsflöde, antal verktygsanrop, fel, prompter och uppdelningar efter agenter, inbyggda verktyg, MCP-användning, CLI-kommandon och skills för ett agentarbetsflöde.&quot;
    /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;
    En av de skarpa instrumentpanelerna bakom vårt agentarbetsflöde. Den här skärmdumpen är bara ett utsnitt av en delad Grafana-stack som även tar emot telemetri från våra andra agentkörtider och system. Klicka på bilden för full upplösning.
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;varför-spårningar-spelar-större-roll-än-de-först-verkar&quot;&gt;Varför spårningar spelar större roll än de först verkar&lt;/h2&gt;
&lt;p&gt;Loggar berättar vilken kategori av arbete som skedde. Spårningar berättar hur arbetet utspelade sig över tid.&lt;/p&gt;
&lt;p&gt;Den distinktionen spelar roll i agentsystem eftersom “långsamt” är för trubbigt för att vara användbart.&lt;/p&gt;
&lt;p&gt;En spårning kan berätta om smärtan kom från:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;modellens latens&lt;/li&gt;
&lt;li&gt;verktygsexekveringstid&lt;/li&gt;
&lt;li&gt;upprepade återförsök&lt;/li&gt;
&lt;li&gt;en särskilt kostsam MCP-interaktion&lt;/li&gt;
&lt;li&gt;en lång svans av små operationer som såg ofarliga ut var för sig&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I praktiken använder vi hookströmmen och Tempo-spårningar tillsammans.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hook-loggar&lt;/strong&gt; svarar på: vilken typ av sak hände?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Spårningar&lt;/strong&gt; svarar på: vart tog tiden vägen?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Kombinationen är det som förvandlar observabilitet från en instrumentpanel till en förklaring.&lt;/p&gt;
&lt;h2 id=&quot;var-codex-passar-in&quot;&gt;Var Codex passar in&lt;/h2&gt;
&lt;p&gt;Codex är en del av samma stack, men det är inte identiskt med Claude Code.&lt;/p&gt;
&lt;p&gt;För Codex kopplar vi in två delar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Inbyggd OTEL från Codex till Alloy&lt;/li&gt;
&lt;li&gt;En notify-webhook till &lt;code&gt;codex_notify.py&lt;/code&gt;, som mappar avslutade agentturer till samma Loki-schema vi använder för hook-händelser&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Det ger oss ett enhetligt filter som &lt;code&gt;agent_tool=&quot;codex-cli&quot;&lt;/code&gt; inom samma loggström.&lt;/p&gt;
&lt;p&gt;Den ärliga brasklappen: Codex notify-payload är i dagsläget tunnare än Claude Codes hook-payload, eftersom det inte är samma typ av integrationsyta. I vår nuvarande uppsättning kan avslutade agentturer i Codex normaliseras till det delade schemat, men rik verktyg-för-verktyg-extraktion är fortfarande bättre i den inbyggda OTEL-strömmen än i notify-bryggan.&lt;/p&gt;
&lt;p&gt;Det är inte ett skäl att undvika inlägget. Det är själva poängen med inlägget. Riktiga observabilitetssystem byggs ihop av ofullständiga signaler.&lt;/p&gt;
&lt;h2 id=&quot;grafana-över-mcp-ändrar-spelplanen&quot;&gt;Grafana över MCP ändrar spelplanen&lt;/h2&gt;
&lt;p&gt;Det större skiftet är att Grafana inte bara är en plats människor besöker i en webbläsare.&lt;/p&gt;
&lt;p&gt;I det här repot exponerar vi också Grafana via MCP. Det betyder att en agent kan fråga Loki, Prometheus och Tempo direkt istället för att vänta på att en människa manuellt ska inspektera instrumentpanelerna först.&lt;/p&gt;
&lt;p&gt;Det förvandlar observabilitet till ett aktivt underlag i arbetsflödet.&lt;/p&gt;
&lt;p&gt;En agent kan fråga:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vilka verktygsfamiljer misslyckades mest den senaste timmen?&lt;/li&gt;
&lt;li&gt;Vilken MCP-server dominerade en session?&lt;/li&gt;
&lt;li&gt;Minskade nyligen genomförda ändringar verktygsfelen, eller flyttade de bara arbetet till mer skaltunga vägar med samma misstag?&lt;/li&gt;
&lt;li&gt;Vilka spårningar visar högst latens eller upprepade återförsök?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;När du har det där är du väldigt nära en självförbättringsloop.&lt;/p&gt;
&lt;h2 id=&quot;från-instrumentpanel-till-återkopplingsloop&quot;&gt;Från instrumentpanel till återkopplingsloop&lt;/h2&gt;
&lt;p&gt;Det här är den del vi tycker är mest intressant.&lt;/p&gt;
&lt;p&gt;När observabilitetsstacken går att fråga från agentlagret slutar telemetrin vara en passiv rapporteringsyta och blir en styrsignal.&lt;/p&gt;
&lt;p&gt;Loopen ser ut så här:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Agentaktivitet avger spårningar, mått och berikade hook-loggar.&lt;/li&gt;
&lt;li&gt;Grafana lagrar beviset i Loki, Tempo och Prometheus där mått finns.&lt;/li&gt;
&lt;li&gt;Agenter söker i det underlaget via Grafana MCP.&lt;/li&gt;
&lt;li&gt;Systemet identifierar dålig verktygsmix, sköra skills, svag dirigering eller skaltunga arbetsflöden som fortsätter producera undvikbara misstag.&lt;/li&gt;
&lt;li&gt;Agenter eller operatörer justerar prompter, agentkonfigurationer, skill-beskrivningar, dirigeringsregler eller verktygsåtkomst.&lt;/li&gt;
&lt;li&gt;Nästa session ger en ny telemetriform, och cykeln upprepas.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Så tar man sig från “intressant instrumentpanel” till “mätbart förbättringssystem”.&lt;/p&gt;
&lt;p&gt;Målet är inte att maximera en verktygskategori. Det är att landa i rätt mix av CLI, inbyggda verktyg, MCP-anrop och skills för det arbete som faktiskt utförs.&lt;/p&gt;
&lt;h2 id=&quot;vad-det-här-låter-oss-besvara&quot;&gt;Vad det här låter oss besvara&lt;/h2&gt;
&lt;p&gt;När båda körtiderna landar i samma Grafana-stack kan vi besvara operativa frågor mycket snabbare:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Är fel koncentrerade till en verktygsfamilj?&lt;/li&gt;
&lt;li&gt;Skapar skaltunga arbetsflöden undvikbara misstag där ett verktyg på högre nivå borde finnas?&lt;/li&gt;
&lt;li&gt;Vilka MCP-servrar bär arbetsbördan?&lt;/li&gt;
&lt;li&gt;Betalar vi för agentaktivitet som inte producerar meningsfulla framsteg?&lt;/li&gt;
&lt;li&gt;Är en session ohälsosam på grund av modellen, verktygen eller orkestreringslagret?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Det här är särskilt användbart i arbetsflöden med flera agenter, där “agenten var upptagen” nästan inte säger någonting.&lt;/p&gt;
&lt;p&gt;Om en specialist ständigt dirigeras ut och producerar hög felfrekvens är det ett dirigerings- eller promptutformningsproblem.&lt;/p&gt;
&lt;p&gt;Om en MCP-server dominerar alla anrop kan det vara god arkitektur, eller ett tecken på att allt annat är dödvikt.&lt;/p&gt;
&lt;p&gt;Om verktygsfel ökar samtidigt som kostnaden förblir hög har du ett operativt problem, inte ett kvalitetsproblem.&lt;/p&gt;
&lt;p&gt;Om skalarbete fortsätter misslyckas på förutsägbara, undvikbara sätt där ett verktyg på högre nivå borde finnas, är det en produktsignal.&lt;/p&gt;
&lt;p&gt;Om en skill aktiveras ständigt men inte förbättrar utfallet är det en prompt- eller dirigeringssignal.&lt;/p&gt;
&lt;h2 id=&quot;den-verkliga-lärdomen&quot;&gt;Den verkliga lärdomen&lt;/h2&gt;
&lt;p&gt;Den djupare lärdomen här är att agentobservabilitet behöver både &lt;strong&gt;körtidstelemetri&lt;/strong&gt; och &lt;strong&gt;arbetsflödestelemetri&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Körtidstelemetri berättar vad systemet gjorde.&lt;/p&gt;
&lt;p&gt;Arbetsflödestelemetri berättar vad agenten trodde att den gjorde.&lt;/p&gt;
&lt;p&gt;Vi behöver båda.&lt;/p&gt;
&lt;p&gt;Om du bara behåller spårningar och räknare missar du det semantiska lagret. Om du bara behåller hook-händelser missar du latens, spann och den bredare körtidsbilden.&lt;/p&gt;
&lt;p&gt;Och om du behåller båda men aldrig matar tillbaka dem till agentlagret har du övervakning, inte anpassning.&lt;/p&gt;
&lt;p&gt;Kombinationen är det som gör systemet tillräckligt förklarbart för att driva och tillräckligt justerbart för att förbättra.&lt;/p&gt;
&lt;h2 id=&quot;vad-som-fortfarande-är-ofullständigt&quot;&gt;Vad som fortfarande är ofullständigt&lt;/h2&gt;
&lt;p&gt;Det finns fortfarande skarpa kanter.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Inte varje hook-händelse innehåller den varaktighets- och tokendata vi skulle vilja ha.&lt;/li&gt;
&lt;li&gt;En del av de bästa tidsvyerna kommer fortfarande från Tempo-spårningar, inte hook-loggarna.&lt;/li&gt;
&lt;li&gt;Codex är idag mindre semantiskt rikt än Claude Code i den berikade händelseströmmen.&lt;/li&gt;
&lt;li&gt;Skärmdumpen av instrumentpanelen är en levande driftsyta, inte en polerad marknadsföringsartefakt.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Den sista punkten är avsiktlig. Vi föredrar att visa den riktiga instrumentpanelen framför att låtsas att agentsystem magiskt förklarar sig själva.&lt;/p&gt;
&lt;h2 id=&quot;varför-det-här-spelar-roll-för-maguyva&quot;&gt;Varför det här spelar roll för Maguyva&lt;/h2&gt;
&lt;p&gt;Maguyva handlar om att ge agenter bättre kodintelligens. Men när agenter väl utför användbart arbete uppstår omedelbart ett nytt krav: du behöver se hur de beter sig.&lt;/p&gt;
&lt;p&gt;Sökkvalitet, dirigeringskvalitet, verktygsval och kontexteffektivitet blir alla observerbara problem.&lt;/p&gt;
&lt;p&gt;Det är därför vi tycker att det här är värt att skriva om. Den framtida agentstacken är inte bara prompter och verktyg. Det är prompter, verktyg och instrumenteringslagret som berättar om helheten faktiskt fungerar.&lt;/p&gt;
&lt;p&gt;Om du bygger seriösa agentarbetsflöden är observabilitet inte valfri infrastruktur. Det är en del av produkten.&lt;/p&gt;
</content:encoded><category>Observability</category><category>Grafana</category><category>OpenTelemetry</category><category>Architecture</category></item><item><title>Att sluta loopen med mining: hur ändringar blir institutionellt minne</title><link>https://maguyva.ai/sv/blog/mining-workflow-closing-the-loop</link><guid isPermaLink="true">https://maguyva.ai/sv/blog/mining-workflow-closing-the-loop</guid><description>Git-commits blir strukturerade changelog-poster och poster med arkitekturbeslut, som sedan matas tillbaka till AI-agenter som sökbart institutionellt minne.</description><pubDate>Tue, 03 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Siffrorna i det här inlägget speglar systemet vid publicering (februari 2026). Se vår &lt;a href=&quot;https://maguyva.ai/sv/team&quot;&gt;teamsida&lt;/a&gt; för aktuella siffror.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Varje utvecklingsteam möter samma utmaning: ändringar sker hela tiden, men skälen bakom dessa ändringar försvinner. Sex månader senare frågar någon “varför valde vi DuckDB för pipeline-steg?” och svaret finns bara i huvudet på den som fattade det beslutet — om personen fortfarande är kvar.&lt;/p&gt;
&lt;p&gt;Vi byggde ett mining-arbetsflöde som sluter den här loopen. Ändringar flödar genom git-commits, bearbetas av vår mining-pipeline, blir strukturerade changelog-poster och poster med arkitekturbeslut, och matas sedan tillbaka till våra AI-agenter via CLI-frågor. Resultatet: institutionellt minne som både människor och AI kan komma åt.&lt;/p&gt;
&lt;h2 id=&quot;problemet-beslut-avdunstar&quot;&gt;Problemet: beslut avdunstar&lt;/h2&gt;
&lt;p&gt;Betrakta ett typiskt scenario. En utvecklare committar:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;feat(canonical): add DuckDB runtime for pipeline stages&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Den här commiten representerar ett betydande arkitektoniskt val. Teamet utvärderade alternativ, övervägde avvägningar, och landade i DuckDB av specifika skäl. Men all den kontexten finns bara i:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En Slack-tråd (förmodligen raderad)&lt;/li&gt;
&lt;li&gt;Någons minne (garanterat bleknande)&lt;/li&gt;
&lt;li&gt;En kommentar i koden (kanske, om du har tur)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tre månader senare frågar en ny teammedlem: “Ska jag använda DuckDB eller SQLite för det här nya steget?” Utan institutionellt minne uppfinner de antingen hjulet på nytt eller fattar inkonsekventa beslut.&lt;/p&gt;
&lt;h2 id=&quot;loopen-från-commits-till-kontext&quot;&gt;Loopen: från commits till kontext&lt;/h2&gt;
&lt;p&gt;Vårt mining-arbetsflöde omvandlar git-historik till sökbar kunskap:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Git Commits&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  mine sync          │  ← Build index from git history&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  mine candidates    │  ← Surface commits for review&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  Classification     │  ← Human or LLM assessment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  (changelog or ADR) │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├──────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼                      ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────┐    ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ Changelog   │    │ Decisions     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ Ledger      │    │ Registry      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ (JSONL)     │    │ (YAML files)  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────┘    └───────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼                      ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────┐    ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ CHANGELOG.md│    │ orkestra CLI  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ per package │    │ queries       │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────┘    └───────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    └──────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;              │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;              ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      │ AI Agents     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      │ (via CLI)     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      └───────────────┘&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Den centrala insikten: både changelogs och arkitektoniska beslut flödar från samma git-historik, bearbetade genom en enhetlig pipeline. Det säkerställer att ingenting faller mellan stolarna.&lt;/p&gt;
&lt;h2 id=&quot;så-fungerar-mining&quot;&gt;Så fungerar mining&lt;/h2&gt;
&lt;h3 id=&quot;steg-1-synka-indexet&quot;&gt;Steg 1: Synka indexet&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Det här kommandot skannar git-historiken och bygger ett index över alla commits. Det extraherar strukturerade signaler från varje commit:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Conventional commit-typ (&lt;code&gt;feat&lt;/code&gt;, &lt;code&gt;fix&lt;/code&gt;, &lt;code&gt;chore&lt;/code&gt;, &lt;code&gt;docs&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Scope (vilket paket eller område)&lt;/li&gt;
&lt;li&gt;Markörer för brytande ändringar&lt;/li&gt;
&lt;li&gt;Berörda filer och komplexitetsmått&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;steg-2-kontrollera-täckningsstatus&quot;&gt;Steg 2: Kontrollera täckningsstatus&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Så här ser vår nuvarande status ut:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Mining Status&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;=============&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Decisions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;---------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  Coverage:        100.0%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Processed:     15637  (of 15637)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Extracted:       476&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Skipped:       15161&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Changelog&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;---------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  Coverage:        100.0%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Processed:     15637  (of 15637)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Released:       6799&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Skipped:        8838&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;15 637 commits bearbetade. 476 blev arkitektoniska beslut. 6 799 blev changelog-poster. Varje commit klassificerad.&lt;/p&gt;
&lt;h3 id=&quot;steg-3-hämta-kandidater-för-granskning&quot;&gt;Steg 3: Hämta kandidater för granskning&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; candidates&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --limit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 50&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --full&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Det här lyfter fram commits som ännu inte bearbetats, med full kontext för klassificering:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;90571786d99166c0039ca2e80e4d9cd96184bd85&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;date&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;subject&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat(canonical): add DuckDB runtime for pipeline stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;signals&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;commit_type&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;scope&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;canonical&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;breaking&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;is_releasable_type&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;domains_affected&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;pipeline&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;data-architecture&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;body&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Establishes DuckDB as canonical in-process analytical database...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;files_changed&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/canonical/pipelines/stages/duckdb_runtime.py&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;stats&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;files&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;insertions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;450&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;deletions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;120&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Signalerna hjälper till att styra klassificeringen: &lt;code&gt;is_releasable_type: true&lt;/code&gt; antyder att det här bör synas i changelogen. Det stora antalet insättningar och infrastrukturfilerna antyder att det också kan vara ett arkitektoniskt beslut.&lt;/p&gt;
&lt;h3 id=&quot;steg-4-klassificera-commits&quot;&gt;Steg 4: Klassificera commits&lt;/h3&gt;
&lt;p&gt;Här delar sig två vägar: changelog-poster och arkitektoniska beslut.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;För changelog-poster:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classify&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; abc123&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --changelog&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; added&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Det här registrerar att commit &lt;code&gt;abc123&lt;/code&gt; bör synas i changelogen under kategorin “Added”.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;För arkitektoniska beslut:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Skaffa först ett riktigt beslut-ID:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --domain&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; pipeline&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --dry-run&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Returns: DEC-PL-143&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Klassificera sedan med beslut-ID:t:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classify&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; abc123&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --decision&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-PL-143&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Det här länkar commiten till en beslutspost som kommer att skapas eller uppdateras.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;För batchbearbetning (vad vi faktiskt gör):&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Generate classifications file with LLM assistance&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; commit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --input&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classifications.jsonl&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;JSONL-formatet stödjer båda domänerna i en enda genomgång:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;jsonl&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;abc123&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;changelog&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;release&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;category&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;added&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;summary&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Add DuckDB runtime for pipeline stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;abc123&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;decisions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;extract&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;decision_id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-PL-142&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;def456&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;changelog&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;skip&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;reason&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Chore: dependency update&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;steg-5-rendera-utdata&quot;&gt;Steg 5: Rendera utdata&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; changelog&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; render&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --package&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;pk&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Det här genererar &lt;code&gt;CHANGELOG.md&lt;/code&gt;-filer per paket från liggaren. Changelogsen är härledda artefakter — radera dem och de återskapas perfekt från källiggaren.&lt;/p&gt;
&lt;h2 id=&quot;beslutsregistrets-struktur&quot;&gt;Beslutsregistrets struktur&lt;/h2&gt;
&lt;p&gt;Extraherade beslut blir YAML-filer med rik metadata:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DEC-PL-142&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Adopt DuckDB as Canonical Processing Runtime for Pipeline Stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;domain&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;active&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;created&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-26&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;summary&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  Establishes DuckDB as the canonical in-process analytical database for pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  stage transformations. Provides a shared runtime module that resolves settings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  from pipeline defaults with stage-level overrides.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;context&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  Pipeline stages performing data transformations each independently configured&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  DuckDB connections. This led to inconsistent settings, duplicated configuration&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  code, and no way to tune DuckDB globally for a pipeline run.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DuckDB provides efficient in-process OLAP with zero configuration deployment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Centralized runtime module eliminates duplicated DuckDB setup across stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Hierarchical settings enable global tuning with stage-level overrides&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Memory limits and thread counts can be adjusted per-pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;impact&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  positive&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Consistent DuckDB configuration across all pipeline stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Single point of control for memory/thread tuning&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Reduced code duplication in conversion and export stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  negative&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Adds dependency on shared runtime module&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Stages must adopt new configuration pattern&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;source_commits&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;sha&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;90571786d99166c0039ca2e80e4d9cd96184bd85&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    message&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;feat(canonical): add DuckDB runtime for pipeline stages&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    date&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-26&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    role&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;primary&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;files&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/stages/duckdb_runtime.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/runner.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/stages/convert_hdx_admin_boundaries_to_geoparquet.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;related&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DEC-DA-014&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Data architecture decisions that influenced this&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Varje beslut länkar tillbaka till sina källcommits. Varje beslut anger vilka filer det påverkar. Relationer mellan beslut är explicita.&lt;/p&gt;
&lt;h2 id=&quot;cli-integration-att-fråga-institutionellt-minne&quot;&gt;CLI-integration: att fråga institutionellt minne&lt;/h2&gt;
&lt;p&gt;Det är här loopen sluts. Agenter kan fråga beslut via CLI:t:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Search by topic&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --query&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;retry&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Returnerar beslut om återförsökslogik, felhantering, återhämtningsmönster.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Get full details on a specific decision&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-PL-142&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Returnerar den fullständiga beslutsposten med kontext, motivering och effekt.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# List recent decisions for context&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --limit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 15&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Visar vilka arkitektoniska val som gjorts nyligen.&lt;/p&gt;
&lt;h3 id=&quot;hur-agenter-använder-det-här&quot;&gt;Hur agenter använder det här&lt;/h3&gt;
&lt;p&gt;Vår orkestrerares grundinstruktioner inkluderar:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8;font-weight:bold&quot;&gt;**Essential CLI commands:**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; `orkestra registry decisions search &quot;X&quot;`&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; — Find architectural decisions&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;När en agent ombeds implementera något relaterat till DuckDB kan den först kontrollera:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --query&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;DuckDB&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Och upptäcka DEC-PL-142, och lära sig:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Varför vi valde DuckDB (context)&lt;/li&gt;
&lt;li&gt;Hur man använder det korrekt (agent_guidance)&lt;/li&gt;
&lt;li&gt;Vilka filer man ska titta på (files)&lt;/li&gt;
&lt;li&gt;Vilka relaterade beslut som finns (related)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Agenten uppfinner inte hjulet på nytt. Den bygger vidare på etablerade mönster.&lt;/p&gt;
&lt;h2 id=&quot;trefrågorstestet&quot;&gt;Trefrågorstestet&lt;/h2&gt;
&lt;p&gt;Inte varje commit förtjänar en beslutspost. Vi använder Trefrågorstestet för att filtrera:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Var det svårt att fatta?&lt;/strong&gt; Krävde det betydande analys, avvägningsutvärdering eller diskussion?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Är det kostsamt att ändra?&lt;/strong&gt; Skulle det kräva betydande omarbete att göra beslutet ogjort?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Har det systemomfattande påverkan?&lt;/strong&gt; Påverkar det flera paket eller etablerar det mönster andra kommer att följa?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Om en commit svarar “ja” på minst en av dessa frågor är den en kandidat för beslutsextraktion. Vår typiska andel: 1–4 beslut per 100 commits (cirka 1–4 %).&lt;/p&gt;
&lt;p&gt;För changelog-poster är ribban lägre: varje ändring som märks för användaren (funktioner, fixar, förbättringar) registreras. Internt underhåll, dokumentationsuppdateringar och refaktoreringar hoppas vanligtvis över. Vår typiska andel: 30–50 changelog-poster per 100 commits.&lt;/p&gt;
&lt;h2 id=&quot;datalagring-append-only-liggare&quot;&gt;Datalagring: append-only-liggare&lt;/h2&gt;
&lt;p&gt;Mining-systemet använder append-only JSONL-liggare för konfliktfri drift med flera agenter:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;packages/orchestration/ai_assets/reference/changelog/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── commits_processed.jsonl  # Classification ledger (both domains)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── release_notes.jsonl      # Changelog entries&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── commits_index.yaml       # Derived index (gitignored)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;packages/orchestration/ai_assets/reference/decisions/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── registry.yaml            # Decision index&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── records/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├── DEC-AD-001.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├── DEC-AD-002.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    └── ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;JSONL-formatet med &lt;code&gt;merge=union&lt;/code&gt; i &lt;code&gt;.gitattributes&lt;/code&gt; innebär att flera agenter kan klassificera commits samtidigt utan sammanslagningskonflikter. Varje rad är oberoende.&lt;/p&gt;
&lt;h2 id=&quot;valideringsgrindar&quot;&gt;Valideringsgrindar&lt;/h2&gt;
&lt;p&gt;Innan varje mining-session kör vi validering:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --quick&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Det här kontrollerar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Giltig SHA-formatering&lt;/li&gt;
&lt;li&gt;Efterlevnad av beslut-ID-format&lt;/li&gt;
&lt;li&gt;Inga dubbletter för samma SHA&lt;/li&gt;
&lt;li&gt;Att refererade beslut faktiskt existerar&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Efter klassificering validerar vi igen innan vi committar ändringarna.&lt;/p&gt;
&lt;h2 id=&quot;varför-det-här-spelar-roll&quot;&gt;Varför det här spelar roll&lt;/h2&gt;
&lt;p&gt;Återkopplingsloopen vi byggt löser flera problem:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;För nya teammedlemmar:&lt;/strong&gt; Istället för att fråga “varför gjorde vi X?” kan de söka i beslutsregistret. Kontexten är bevarad.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;För AI-agenter:&lt;/strong&gt; De verkar inte i ett vakuum. De kan fråga institutionell kunskap innan de ger rekommendationer. När de ombeds lägga till ett nytt pipeline-steg kan de upptäcka DuckDB-mönstret och följa det.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;För arkitektonisk konsekvens:&lt;/strong&gt; Beslut är explicita och sökbara. När någon föreslår en metod som strider mot ett befintligt beslut kan systemet lyfta fram konflikten.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;För changelog-generering:&lt;/strong&gt; Versionsanteckningar är inte en sista-minuten-stress. De är en biprodukt av kontinuerlig klassificering under utveckling.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;För onboarding:&lt;/strong&gt; Nya agenter ärver kodbasens fulla kontext. De ser inte bara koden — de ser besluten som formade den.&lt;/p&gt;
&lt;h2 id=&quot;nuvarande-läge&quot;&gt;Nuvarande läge&lt;/h2&gt;
&lt;p&gt;Per idag:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;15 637 commits&lt;/strong&gt; bearbetade genom pipelinen&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;476 arkitektoniska beslut&lt;/strong&gt; extraherade och dokumenterade&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;6 799 changelog-poster&lt;/strong&gt; registrerade&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;100 % täckning&lt;/strong&gt; över båda domänerna&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Varje commit sedan vi började har klassificerats. Det institutionella minnet är komplett och sökbart.&lt;/p&gt;
&lt;h2 id=&quot;komma-igång&quot;&gt;Komma igång&lt;/h2&gt;
&lt;p&gt;Om du vill implementera något liknande:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Börja med conventional commits.&lt;/strong&gt; Mining-pipelinen fungerar bäst när commits har strukturerade prefix (&lt;code&gt;feat:&lt;/code&gt;, &lt;code&gt;fix:&lt;/code&gt;, &lt;code&gt;chore:&lt;/code&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Definiera dina domäner.&lt;/strong&gt; Vi använder domäner som &lt;code&gt;pipeline&lt;/code&gt;, &lt;code&gt;agent-design&lt;/code&gt;, &lt;code&gt;observability&lt;/code&gt;, &lt;code&gt;data-modeling&lt;/code&gt;. De organiserar beslut efter område.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Bygg upp klassificeringsvanan.&lt;/strong&gt; Mining fungerar när team regelbundet klassificerar commits. Batchbearbetning med LLM-hjälp gör det skalbart.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Gör besluten sökbara.&lt;/strong&gt; Värdet växer när agenter kan söka beslut via CLI:t. Strukturera din utdata för maskinkonsumtion.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Slut loopen.&lt;/strong&gt; Beslut bör påverka framtida arbete. Inkludera beslutsreferenser i agentinstruktioner och checklistor för kodgranskning.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Målet är inte perfekt dokumentation. Det är att göra skälen bakom ändringar tillgängliga för både människor och AI, idag och om sex månader. När ändringar blir institutionellt minne bygger team vidare på etablerade mönster istället för att uppfinna dem på nytt.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Mining-arbetsflödet är en del av vår orkestreringsmotor, närmare bestämt kontextmotor-modulen i vårt orkestreringspaket.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Workflows</category></item><item><title>Skill-mining: från 3 500 kandidater till 466 förmågor</title><link>https://maguyva.ai/sv/blog/skill-mining-3500-and-counting</link><guid isPermaLink="true">https://maguyva.ai/sv/blog/skill-mining-3500-and-counting</guid><description>Vi granskade 3 500 skill-kandidater och antog 466. En systematisk mining- och intagsloop för att bygga ett sammanhängande skill-bibliotek för AI-agenter i stor skala.</description><pubDate>Tue, 27 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Siffrorna i det här inlägget speglar systemet vid publiceringen (januari 2026). Se vår &lt;a href=&quot;https://maguyva.ai/sv/team&quot;&gt;teamsida&lt;/a&gt; för aktuella siffror.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;3500-skillproblemet&quot;&gt;3500-skillproblemet&lt;/h2&gt;
&lt;p&gt;När vi började bygga ett agentorkestreringssystem stod vi inför en intressant utmaning: det finns tusentals potentiella skills utspridda över hela AI-ekosystemet. GitHub-repositorier, leverantörsdokumentation, communityprojekt, interna mönster — skills finns överallt. Men vilka spelar roll? Vilka fungerar? Och hur underhåller man ett sammanhängande skill-bibliotek som agenter faktiskt kan använda?&lt;/p&gt;
&lt;p&gt;Vårt svar: en systematisk mining- och intagsloop.&lt;/p&gt;
&lt;h2 id=&quot;siffrorna-idag&quot;&gt;Siffrorna idag&lt;/h2&gt;
&lt;p&gt;Bara drygt tre månader efter att Anthropic lanserade Agent Skills den 16 oktober 2025 såg det ut så här när det här inlägget publicerades den 27 januari 2026:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mätvärde&lt;/th&gt;
&lt;th&gt;Antal&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Identifierade kandidater&lt;/td&gt;
&lt;td&gt;3 500+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Antagna skills&lt;/td&gt;
&lt;td&gt;466&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Leverantörsskills&lt;/td&gt;
&lt;td&gt;373&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interna skills&lt;/td&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Aktiva leverantörer&lt;/td&gt;
&lt;td&gt;25+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Genomsnittliga tokens per skill&lt;/td&gt;
&lt;td&gt;2 834&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Refererade verktyg&lt;/td&gt;
&lt;td&gt;89&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unika taggar&lt;/td&gt;
&lt;td&gt;635&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Vi har granskat över 3 500 skill-kandidater. Vi har antagit 466. Det är en antagandegrad på 13 % — och den selektiviteten är avsiktlig.&lt;/p&gt;
&lt;h2 id=&quot;kunskapsnivåsystemet&quot;&gt;Kunskapsnivåsystemet&lt;/h2&gt;
&lt;p&gt;Alla skills är inte likvärdiga. Vi organiserar dem i fem kunskapslager (K0–K4), där vart och ett har ett eget tillämpningsområde:&lt;/p&gt;
&lt;h3 id=&quot;k0-grunder-universellt&quot;&gt;K0: Grunder (universellt)&lt;/h3&gt;
&lt;p&gt;Skills alla agenter bör ha. De representerar “god tänkare”-förmågor som fungerar överallt.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;foundations/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── test-first-discipline       # TDD: Red-Green-Refactor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── evidence-based-completion   # Verify before claiming done&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── systematic-debugging        # Root cause methodology&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── structured-planning         # Break work into tasks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── context-budget-awareness    # Manage token consumption&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;K0-skills är portabla till vilket projekt, vilken domän, vilken stack som helst. De kodifierar universella kognitiva mönster.&lt;/p&gt;
&lt;h3 id=&quot;k1-identiteter-disciplin&quot;&gt;K1: Identiteter (disciplin)&lt;/h3&gt;
&lt;p&gt;“God ingenjör”- eller “god forskare”-skills som gäller över projekt inom en disciplin.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;identities/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── research-workflows          # Multi-source research&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── web-extraction-playbook     # Content extraction&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── code-review                 # PR review patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── cli-interface-standards     # CLI design patterns&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k2-domäner-ämnesexpertis&quot;&gt;K2: Domäner (ämnesexpertis)&lt;/h3&gt;
&lt;p&gt;“God databasexpert”- eller “god säkerhetsingenjör”-skills portabla inom ett fält.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;domains/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── schema-migration-workflow   # Safe migration patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── rpc-validation-checklist    # RPC health checks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── auth-validation-checklist   # JWT/OAuth patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── secrets-audit-checklist     # Credential scanning&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k3-stackar-teknik&quot;&gt;K3: Stackar (teknik)&lt;/h3&gt;
&lt;p&gt;“God Supabase-användare”- eller “god Cloudflare-utvecklare”-skills för specifika teknikstackar.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;stacks/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── maguyva-quickstart          # Our semantic search patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── cloudflare-deployment       # Workers/Pages deployment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── mcp-tool-best-practices     # MCP tool selection&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k4-projekt-organisation&quot;&gt;K4: Projekt (organisation)&lt;/h3&gt;
&lt;p&gt;Skills specifika för vår organisation och våra arbetsflöden.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;project/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── agent-creation-workflow     # How we build agents&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── skill-authoring-workflow    # How we write skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── mining-session-workflow     # This very process&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── vendor-skill-evaluation     # Evaluation rubrics&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;mining-loopen&quot;&gt;Mining-loopen&lt;/h2&gt;
&lt;h3 id=&quot;fas-1-upptäckt&quot;&gt;Fas 1: Upptäckt&lt;/h3&gt;
&lt;p&gt;Skills kommer från överallt:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Leverantörsrepositorier&lt;/strong&gt;: AWS, Anthropic, Cloudflare, Supabase och communitybidragsgivare publicerar skill-samlingar. Vi bevakar 25+ leverantörsrötter.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Communityprojekt&lt;/strong&gt;: GitHub är fullt av Claude Code-mallar, agentmönster och arbetsflödesdefinitioner.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Interna mönster&lt;/strong&gt;: Allteftersom vårt team löser problem uppstår mönster. De formaliseras till skills.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dokumentationsmining&lt;/strong&gt;: Teknisk dokumentation innehåller ofta implicita skills — procedurer, checklistor, beslutsträd.&lt;/p&gt;
&lt;p&gt;Upptäckten är kontinuerlig. Vi använder en skill-backlogg för att spåra kandidater innan formell utvärdering.&lt;/p&gt;
&lt;h3 id=&quot;fas-2-utvärdering&quot;&gt;Fas 2: Utvärdering&lt;/h3&gt;
&lt;p&gt;Varje kandidat bedöms enligt samma kriterier:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;adoption_criteria&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;fills_real_gap&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # We lack this capability&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;well_structured&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Progressive disclosure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;actively_maintained&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # Commits in last 6 months&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;portable&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;            # Not hyper-specific&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;tested&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;              # Evidence of usage&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Alla fem produktkriterier måste godkännas. Det är därför 87 % av kandidaterna avvisas.&lt;/p&gt;
&lt;p&gt;Sedan går varje kandidat igenom en separat förtroendegranskning. Vi behandlar inte ett officiellt leverantörsrepositorium, en välkänd community-underhållare och ett slumpmässigt GitHub-repo som likvärdiga sanningskällor.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;trust_review&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  vendor_credibility&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;ownership_verified&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Official vendor, known maintainer, or internal source&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;maintenance_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Recent commits, issue response, release history&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adoption_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Evidence of real use, stars alone are not enough&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;provenance_clear&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;         # We can trace where the skill came from&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  prompt_injection_scan&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;hidden_instruction_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # Buried &quot;ignore previous instructions&quot; patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;exfiltration_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Prompts that try to leak files, secrets, or context&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;authority_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Claims of priority over system or developer rules&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  script_audit&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;inspect_scripts&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Read shell/python/js helpers before adoption&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;network_and_exec_review&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # curl|bash, remote downloads, subprocess execution&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;file_and_secret_review&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;   # Env vars, credential access, broad file writes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;destructive_action_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # rm, reset, overwrite, or unsafe automation&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Betrodda leverantörer får en lättare proveniensgranskning, men inget frikort. Obetrodda eller okända källor får en djupare manuell granskning, och vi kör inte bifogade skript förrän de har lästs, avgränsats och klassificerats som säkra.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Luckanalys&lt;/strong&gt;: Innan vi antar söker vi i vårt register:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;&amp;lt;capability&amp;gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Har vi redan det behöver vi det inte. Har vi något liknande kanske vi slår ihop istället för att anta.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Djup- och standardpoängsättning&lt;/strong&gt;: Vi poängsätter också hur fullt en kandidat använder agent-skill-modellen. En ensam &lt;code&gt;SKILL.md&lt;/code&gt; kan fortfarande vara användbar, men djupare skills är mer värdefulla när de separerar instruktioner från referenser, skript och tillgångar på det sätt &lt;code&gt;agentskills.io&lt;/code&gt; uppmuntrar.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;skill_depth&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;SKILL.md only&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;                     # Single instruction file&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;SKILL.md + strong description&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Clear triggers and scope&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds references/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;                  # Load docs only when needed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds atomic scripts/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;              # Small, reviewable helpers&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_5&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds assets/examples/templates&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;    # Full progressive disclosure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;depth_signals&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;standards_adherence&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;        # Structure aligns with agentskills.io conventions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;reference_quality&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Curated references, not giant context dumps&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;script_atomicity&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Focused helpers, not opaque monoliths&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tool_boundary_clarity&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # Clear limits on what the skill can execute&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;community_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Stars/forks/users help, but only as a weak boost&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;GitHub-stjärnor kan höja en trovärdighetspoäng lite, men de räddar aldrig en ytlig eller osäker skill. Ett repo med många stjärnor och en vag &lt;code&gt;SKILL.md&lt;/code&gt; och opaka skript poängsätts lägre än ett mindre repo med en precis beskrivning, kuraterade &lt;code&gt;references/&lt;/code&gt;, och små, avgränsade hjälpskript som faktiskt utnyttjar hela skill-förmågan.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Strukturell analys&lt;/strong&gt;: Vi kontrollerar skill-kvalitet:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;wc&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -l&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/SKILL.md&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Size check&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/scripts/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Supporting files&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/references/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Bundled docs&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Om en kandidat innehåller skript blir den granskningen strängare. En bra skill är inte bara användbar; den måste vara läsbar, avgränsad och säker att lämna över till en agent. Det säkerhetsfiltret ensamt diskvalificerar en betydande andel av annars intressanta kandidater.&lt;/p&gt;
&lt;h3 id=&quot;fas-3-intag&quot;&gt;Fas 3: Intag&lt;/h3&gt;
&lt;p&gt;När en skill klarar utvärderingen kommer den in i registret. Men skills antas aldrig oförändrade. De modifieras för att passa vårt system.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Modifieringar vid antagande&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Metadatanormalisering&lt;/strong&gt;: Varje skill får vårt frontmatter-schema&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;K-nivåtilldelning&lt;/strong&gt;: Skills placeras i lämpligt kunskapslager&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Taggberikning&lt;/strong&gt;: Taggar läggs till för upptäckbarhet&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verktygsdeklaration&lt;/strong&gt;: Tillåtna verktyg deklareras explicit&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sektionsjustering&lt;/strong&gt;: Innehåll omstruktureras för att matcha vår mall&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;En typisk skill-YAML efter intag:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;metadata&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  identifier&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor-skill-evaluation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  name&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor-skill-evaluation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  description&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Systematic evaluation of vendor skills for adoption.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  layer&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;K4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  semantic_folder&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;project&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  source&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;core&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_updated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-17&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;frontmatter&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;agents&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;meta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skill-adoption&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  allowed_tools&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Read&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Write&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Edit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Grep&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Glob&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Task&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;fas-4-scope-tilldelning&quot;&gt;Fas 4: Scope-tilldelning&lt;/h3&gt;
&lt;p&gt;Skills tilldelas scopes — kategorier som avgör vilka agenter som laddar vilka skills:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  database&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;domains/schema-migration-workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;domains/rpc-validation-checklist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase/supabase-database&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase/supabase-auth&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/research-workflows&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/web-extraction-playbook&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/dataset-discovery-quickstart&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Agenter deklarerar sina scopes, och skills tilldelas automatiskt:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Agent definition&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;database&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Gets: all database skills + all research skills + universal skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;fas-5-materialisering&quot;&gt;Fas 5: Materialisering&lt;/h3&gt;
&lt;p&gt;Skills lever inte som YAML i produktion. De renderas till SKILL.md-filer som Claude Code kan ladda:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Det här kommandot:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Läser alla skill-YAML-definitioner&lt;/li&gt;
&lt;li&gt;Renderar dem genom Jinja-mallar&lt;/li&gt;
&lt;li&gt;Skriver SKILL.md-filer till &lt;code&gt;.claude/skills/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Organiserar efter K-nivå (foundations/, identities/, domains/, stacks/, project/)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Den slutgiltiga utdatastrukturen:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;.claude/skills/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── foundations/     # K0: Universal&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── identities/      # K1: Discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── domains/         # K2: Subject&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── stacks/          # K3: Technology&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── project/         # K4: Organization&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── vendor/          # External skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;det-vilande-scope-mönstret&quot;&gt;Det vilande scope-mönstret&lt;/h2&gt;
&lt;p&gt;Ett av våra kraftfullaste mönster är “antagen-men-inte-laddad”-skills. Vi kallar de här vilande scopes.&lt;/p&gt;
&lt;p&gt;Betrakta skills för vetenskaplig databehandling från repositoriet k-dense-scientific. Vi har antagit 120+ skills som täcker bioinformatik, kemi, kvantberäkning och klinisk informatik. Men de flesta av våra agenter behöver inte molekylär docking eller genuttrycksanalys.&lt;/p&gt;
&lt;p&gt;Istället för att ladda alla 120 skills i varje agent (vilket blåser upp kontextfönstren) gör vi så här:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Antar&lt;/strong&gt; skills med ett specifikt scope (t.ex. &lt;code&gt;bioinformatics&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Håller dem &lt;strong&gt;vilande&lt;/strong&gt; — registrerade men inte laddade&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Aktiverar&lt;/strong&gt; dem bara när en agent deklarerar det scopet&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# In scopes.yaml - dormant scope&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;bioinformatics&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  description&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Bioinformatics and genomics&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: []  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Empty - skills exist but aren&apos;t loaded&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# When an agent needs bioinformatics:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Agent YAML&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;bioinformatics&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Now loads bioinformatics skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Det här mönstret låter oss ha 466 skills i registret medan typiska agenter bara laddar 40–60 relevanta.&lt;/p&gt;
&lt;h2 id=&quot;skill-typer&quot;&gt;Skill-typer&lt;/h2&gt;
&lt;p&gt;Skills finns i tre kognitiva mönster:&lt;/p&gt;
&lt;h3 id=&quot;arbetsflöde&quot;&gt;Arbetsflöde&lt;/h3&gt;
&lt;p&gt;Ordnade procedursteg: “1. Gör X, 2. Sedan Y, 3. Slutligen Z”&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: schema-migration-workflow, mining-session-workflow&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;disciplin&quot;&gt;Disciplin&lt;/h3&gt;
&lt;p&gt;Beteendemässiga skyddsräcken: “Alltid X”, “Aldrig Y”, “Föredra Z”&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: test-first-discipline, evidence-based-completion&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;checklista&quot;&gt;Checklista&lt;/h3&gt;
&lt;p&gt;Verifieringskriterier: “Bekräfta X”, “Verifiera Y”, “Kontrollera Z”&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;checklist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: auth-validation-checklist, secrets-audit-checklist&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;kvalitetsgrindar&quot;&gt;Kvalitetsgrindar&lt;/h2&gt;
&lt;p&gt;Varje skill måste klara validering innan den skeppas:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;validation&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  file_exists&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Skill file at declared path&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  frontmatter_valid&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Frontmatter parses correctly&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  sections_complete&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Expected sections present&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tools_registered&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # Declared tools exist in registry&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Beskrivningar måste vara 50–400 tecken med utlösarfraser (“Använd när…”, “När du behöver…”) så att Claude Code vet när de ska föreslås.&lt;/p&gt;
&lt;p&gt;Vi validerar kontinuerligt:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --show-warnings&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;leverantörsekosystemet&quot;&gt;Leverantörsekosystemet&lt;/h2&gt;
&lt;p&gt;Våra 373 leverantörsskills kommer från:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Leverantör&lt;/th&gt;
&lt;th&gt;Skills&lt;/th&gt;
&lt;th&gt;Domän&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AWS Agent&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;Molntjänster&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;Dokumentgenerering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Edge computing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Supabase&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Databas&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;k-dense&lt;/td&gt;
&lt;td&gt;100+&lt;/td&gt;
&lt;td&gt;Vetenskaplig databehandling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;silvainfm&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Datavetenskap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java Developer Kit&lt;/td&gt;
&lt;td&gt;45+&lt;/td&gt;
&lt;td&gt;Spring/Java&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vercel&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Webbläsarautomation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Varje leverantörsrot deklareras i metadata.yaml:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;vendor_roots&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/aws-agent-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;aws&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/k-dense-scientific/scientific-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;k-dense&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;supabase&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;När &lt;code&gt;orkestra sync&lt;/code&gt; körs symlänkas leverantörsskills in i &lt;code&gt;.claude/skills/vendor/&lt;/code&gt; under sin leverantörs namnrymd.&lt;/p&gt;
&lt;h2 id=&quot;vad-vi-har-lärt-oss&quot;&gt;Vad vi har lärt oss&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Selektivitet lönar sig.&lt;/strong&gt; Det är frestande att anta allt som ser användbart ut. Men varje skill kostar tokens. Med i genomsnitt 2 834 tokens per skill blir onödig volym snabbt kostsam. Vår antagandegrad på 13 % håller agenterna slimmade.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Struktur möjliggör upptäckt.&lt;/strong&gt; K-nivåsystemet är inte bara organisation — det handlar om portabilitet. K0-skills kan återanvändas var som helst. K4-skills är avsiktligt projektspecifika. Den här tydligheten hjälper både människor och agenter att hitta det de behöver.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vilande scopes skalar.&lt;/strong&gt; Man kan anta hundratals skills utan att ladda dem alla. Scopes låter en bygga ett heltäckande register samtidigt som enskilda agenters kontextfönster hålls hanterbara.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Modifiering vid antagande är avgörande.&lt;/strong&gt; Råa leverantörsskills passar sällan ens system rakt av. Intagsprocessen — att lägga till metadata, tilldela nivåer, berika taggar — gör att externa skills fungerar internt.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mining är kontinuerligt.&lt;/strong&gt; Siffran 3 500 fortsätter växa. Nya leverantörsrepon dyker upp. Communitymönster uppstår. Interna arbetsflöden befästs. Loopen stannar aldrig.&lt;/p&gt;
&lt;h2 id=&quot;vad-som-kommer-härnäst&quot;&gt;Vad som kommer härnäst&lt;/h2&gt;
&lt;p&gt;Vi arbetar på flera förbättringar:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Automatiserad luckdetektion&lt;/strong&gt;: Larm när vanliga agentfel skulle kunna åtgärdas av en icke-antagen skill&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Arbetsflöden för utfasning av skills&lt;/strong&gt;: Formell process för att pensionera skills som ersatts eller inte används&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Beroenden mellan skills&lt;/strong&gt;: Explicit deklaration av skill-förutsättningar&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Användningsanalys&lt;/strong&gt;: Spåra vilka skills agenter faktiskt åberopar kontra bara laddar&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Mining-loopen för skills är infrastruktur. Den är inte glamorös. Men det är den som gör att 41 agenter fungerar sammanhängande med 466 förmågor samtidigt som de håller sig inom kontextgränserna.&lt;/p&gt;
&lt;p&gt;Det är historien om hur 3 500 blir 466. Inte genom att ignorera 3 000 — utan genom att utvärdera dem systematiskt och bara anta det som fungerar.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Vill du se skill-systemet i praktiken? Kolla in &lt;code&gt;uv run orkestra skills list&lt;/code&gt; för att utforska vårt nuvarande register.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Skills</category></item><item><title>Progressiv exponering: CLI-fönster in i agentsystem</title><link>https://maguyva.ai/sv/blog/progressive-disclosure-cli-into-agents</link><guid isPermaLink="true">https://maguyva.ai/sv/blog/progressive-disclosure-cli-into-agents</guid><description>Agentsystem är ogenomskinliga som standard. Progressiv exponering ger operatörer skiktade CLI-vyer, från snabba statuskontroller till fullständig insyn i agenternas inre struktur och beslutsspår.</description><pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Siffrorna i det här inlägget speglar systemet vid publicering (januari 2026). Se vår &lt;a href=&quot;https://maguyva.ai/sv/team&quot;&gt;teamsida&lt;/a&gt; för aktuella siffror.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Agentsystem är ogenomskinliga med avsikt. De fattar beslut, anropar verktyg och koordinerar arbete över dussintals specialister. Men när något går fel — eller när man helt enkelt vill förstå vad som händer — var tittar man då?&lt;/p&gt;
&lt;p&gt;Svaret är progressiv exponering: ett skiktat gränssnitt som avslöjar exakt så mycket komplexitet som man behöver, exakt när man behöver det.&lt;/p&gt;
&lt;h2 id=&quot;ogenomskinlighetsproblemet&quot;&gt;Ogenomskinlighetsproblemet&lt;/h2&gt;
&lt;p&gt;Ett modernt agentorkestreringssystem kan ha:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;40+ specialistagenter, var och en med distinkta förmågor&lt;/li&gt;
&lt;li&gt;700+ skills som spänner över intern automation och leverantörsintegrationer&lt;/li&gt;
&lt;li&gt;470+ arkitektoniska beslut som formar beteende&lt;/li&gt;
&lt;li&gt;Dussintals MCP-verktygsservrar som tillhandahåller externa förmågor&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Den här komplexiteten är avsiktlig. Agenter behöver tillgång till rik kontext — domänkunskap, kodintelligens, databasscheman — för att fatta bra beslut. Men samma rikedom skapar ett synlighetsproblem.&lt;/p&gt;
&lt;p&gt;Hur vet man vilken agent som hanterar databasmigreringar? Vilka beslut formade söksystemets rankningsbeteende? Vilka verktyg har arkitekturrådgivaren tillgång till?&lt;/p&gt;
&lt;p&gt;Utan strukturerad åtkomst är man hänvisad till att läsa källkod eller hoppas att dokumentationen är aktuell.&lt;/p&gt;
&lt;h2 id=&quot;progressiv-exponering-som-arkitektur&quot;&gt;Progressiv exponering som arkitektur&lt;/h2&gt;
&lt;p&gt;Progressiv exponering är inte bara ett UI-mönster. Det är en arkitektonisk princip: organisera information i lager, vart och ett djupare än det förra, så att användare kan stanna på den nivå som besvarar deras fråga.&lt;/p&gt;
&lt;p&gt;För agentsystem översätts det här till CLI-kommandon på stigande djup:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Nivå&lt;/th&gt;
&lt;th&gt;Kommando&lt;/th&gt;
&lt;th&gt;Fråga som besvaras&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra system status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Är allt friskt?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra agents list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Vilka agenter finns?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra agents info &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Vad gör den här agenten?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra decisions search&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Varför fungerar det på det här sättet?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;MCP-verktyg i Maguyva&lt;/td&gt;
&lt;td&gt;Visa mig koden.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Varje nivå besvarar en naturlig följdfråga. Man behöver sällan hoppa direkt till nivå 5.&lt;/p&gt;
&lt;h2 id=&quot;nivå-1-systemhälsa&quot;&gt;Nivå 1: Systemhälsa&lt;/h2&gt;
&lt;p&gt;Den första frågan är alltid: fungerar allt?&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; system&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;agents&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_internal&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;466&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_vendor&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;240&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_total&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;706&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;commands&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;17&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ett kommando. Fyra siffror. Tillräckligt för att veta att systemet är konfigurerat och registren innehåller data.&lt;/p&gt;
&lt;p&gt;Om antalet agenter sjunker oväntat eller skills misslyckas med att laddas ser man det här först. Ingen loggdykning krävs.&lt;/p&gt;
&lt;h2 id=&quot;nivå-2-agentinventering&quot;&gt;Nivå 2: Agentinventering&lt;/h2&gt;
&lt;p&gt;När man väl vet att systemet är friskt är nästa fråga: vad finns tillgängligt?&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Det här returnerar strukturerad data — agentnamn, beskrivningar, modellpreferenser, domäntäckning. Utdatan är JSON som standard, vilket gör det enkelt att leda vidare till &lt;code&gt;jq&lt;/code&gt; för filtrering:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; jq&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &apos;.agents[] | select(.model == &quot;opus&quot;) | .name&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Vill man ha agenter som hanterar databasarbete? Sökkommandot begränsar urvalet:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Det här skannar namn, beskrivningar och förmågor. Man hittar rätt specialist utan att läsa 40 agentdefinitioner.&lt;/p&gt;
&lt;h2 id=&quot;nivå-3-djupdykning-i-agenten&quot;&gt;Nivå 3: Djupdykning i agenten&lt;/h2&gt;
&lt;p&gt;Har man hittat en agent som verkar relevant? Kommandot &lt;code&gt;info&lt;/code&gt; avslöjar allt:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; architecture-advisor&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Utdatan innehåller:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Metadata&lt;/strong&gt;: Namn, kategori, modellpreferens, beskrivning&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Domäner&lt;/strong&gt;: Vilka kunskapsområden agenten täcker&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Identitet&lt;/strong&gt;: Karaktärsdrag (arkitekt, strateg, kunskapsarkitekt)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verktygsguider&lt;/strong&gt;: Vilken verktygsdokumentation som injiceras i kontexten&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verktyg&lt;/strong&gt;: Den fullständiga listan av MCP-verktyg agenten har tillgång till&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Här är ett smakprov på vad man ser:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;jsonc&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;metadata&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;name&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;architecture-advisor&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;model&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;opus&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;description&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Strategic decision-making and architectural guidance...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;domains&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;product&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;development/architecture&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;meta/strategy&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;tools&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;mcp_tools&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__maguyva__intelligent_search&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__maguyva__analyze_dependencies&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__supabase__execute_sql&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FDAEB7;font-style:italic&quot;&gt;      ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Det här berättar exakt vad agenten kan göra. Du behöver inte läsa källkoden.&lt;/p&gt;
&lt;h2 id=&quot;nivå-4-beslutsarkeologi&quot;&gt;Nivå 4: Beslutsarkeologi&lt;/h2&gt;
&lt;p&gt;Agenter beter sig enligt dokumenterade beslut. När man behöver förstå &lt;em&gt;varför&lt;/em&gt; något fungerar på ett visst sätt är beslutsregistret sanningskällan.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;agent&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Det här returnerar matchande arkitektoniska beslut:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;results&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-SR-049&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;title&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;AI-Agent-First Defaults with Graph Intelligence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;search&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;status&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;active&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Varje beslut har full proveniens — när det fattades, varför, vilka avvägningar som övervägdes, vilka commits som implementerade det:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-SR-049&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-SR-049&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;title&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;AI-Agent-First Defaults with Graph Intelligence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;summary&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Changes default values for search tools to AI-agent-optimal behavior...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;rationale&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;AI agents work better with pre-ranked, importance-weighted results&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;Graph metrics already computed by pipeline - leverage them&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;Community context helps agents understand feature scope in single query&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;source_commits&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;156a880d05eae295669ef7c194b039023f245511&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;message&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat(maguyva): enable boost_by_importance...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Det här är arkitektonisk dokumentation som förblir aktuell eftersom den bryts ut ur commits, inte underhålls manuellt.&lt;/p&gt;
&lt;h2 id=&quot;nivå-5-direkt-kodintelligens&quot;&gt;Nivå 5: Direkt kodintelligens&lt;/h2&gt;
&lt;p&gt;När man behöver se den faktiska implementationen — inte metadata om den — ger MCP-verktygen i Maguyva direkt åtkomst.&lt;/p&gt;
&lt;p&gt;Inifrån en agentsession:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__intelligent_search&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  query: &quot;agent context loading&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Det här dirigerar automatiskt över semantisk, text- och AST-sökning för att hitta relevant kod. För specifika symboler:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__find_symbol&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  symbol_name: &quot;load_agent_context&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;För beroendeanalys:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__analyze_dependencies&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  target: &quot;packages/orchestration/core/agents.py&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Det här är inte bara grep-ersättningar. De är grafmedvetna, semantiskt indexerade, och integrerade med samma kodintelligens som driver agenterna själva.&lt;/p&gt;
&lt;h2 id=&quot;enhetlig-sökning-över-register&quot;&gt;Enhetlig sökning över register&lt;/h2&gt;
&lt;p&gt;Ibland vet man inte vilket register som har svaret. Den enhetliga sökningen spänner över allt:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --summary&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;query&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;database&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;total&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;254&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;counts&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;agents&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;skills&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;59&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;decisions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;476&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;truths&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;packages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;254 träffar över fem register. Sammanfattningen berättar var man ska gräva djupare. Ta bort &lt;code&gt;--summary&lt;/code&gt; för detaljerade resultat, eller lägg till &lt;code&gt;--limit 5&lt;/code&gt; för att hålla utdatan hanterbar.&lt;/p&gt;
&lt;h2 id=&quot;varför-det-här-spelar-roll&quot;&gt;Varför det här spelar roll&lt;/h2&gt;
&lt;p&gt;Progressiv exponering handlar inte bara om bekvämlighet. Det förändrar hur man interagerar med komplexa system.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Felsökning blir hanterbar.&lt;/strong&gt; När en agent fattar ett oväntat beslut behöver man inte grepa genom loggar. Man kontrollerar vilka verktyg den har tillgång till (&lt;code&gt;agents info&lt;/code&gt;), vilka beslut som formar dess beteende (&lt;code&gt;decisions search&lt;/code&gt;), och spårar implementationen om det behövs (&lt;code&gt;intelligent_search&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Onboarding går snabbare.&lt;/strong&gt; Nya teammedlemmar behöver inte läsa hela kodbasen. De börjar med &lt;code&gt;system status&lt;/code&gt;, utforskar med &lt;code&gt;agents list&lt;/code&gt;, och går djupare bara när de stöter på något de inte förstår.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dokumentationen förblir aktuell.&lt;/strong&gt; Eftersom CLI:t läser från samma register som konfigurerar agenterna är utdatan alltid korrekt. Det finns ingen glidning mellan vad dokumentationen säger och vad systemet gör.&lt;/p&gt;
&lt;h2 id=&quot;clit-som-gränssnitt&quot;&gt;CLI:t som gränssnitt&lt;/h2&gt;
&lt;p&gt;Vi kunde ha byggt en webbaserad instrumentpanel. Vi kunde ha skrivit omfattande dokumentation. Istället byggde vi ett CLI som läser från sanningskällan.&lt;/p&gt;
&lt;p&gt;CLI:t har fördelar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Komponerbart&lt;/strong&gt;: Led utdata genom &lt;code&gt;jq&lt;/code&gt;, integrera med skript&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skriptbart&lt;/strong&gt;: Automatisera kontroller, generera rapporter&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Snabbt&lt;/strong&gt;: Inga sidladdningar, inga autentiseringsflöden&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Korrekt&lt;/strong&gt;: Läser den faktiska konfigurationen, inte en cachad representation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;För system där korrekthet spelar större roll än estetik vinner CLI:t.&lt;/p&gt;
&lt;h2 id=&quot;att-bygga-sin-egen-progressiva-exponering&quot;&gt;Att bygga sin egen progressiva exponering&lt;/h2&gt;
&lt;p&gt;Om man bygger agentsystem, fundera på hur användare kommer att inspektera dem:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Börja med hälsokontroller.&lt;/strong&gt; Ett kommando som berättar om saker fungerar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Erbjud inventeringsvyer.&lt;/strong&gt; Lista vad som finns innan man förklarar vad det gör.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Möjliggör riktade sökningar.&lt;/strong&gt; Sökning slår bläddring i stor skala.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exponera proveniens.&lt;/strong&gt; Låt användare spåra beslut till deras ursprung.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Koppla till kodintelligens.&lt;/strong&gt; Till slut behöver användare se implementationen.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Varje lager besvarar en följdfråga. Bygg dem i frekvensordning — de flesta användare stannar på lager 2 eller 3. Bara superanvändare når lager 5.&lt;/p&gt;
&lt;p&gt;Målet är inte att exponera allt. Det är att exponera exakt det som behövs, exakt när det behövs. Det är progressiv exponering tillämpad på agentarkitektur.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>CLI</category><category>Tooling</category></item><item><title>Grundsanningar: att förankra AI-agenter i verkligheten</title><link>https://maguyva.ai/sv/blog/ground-truths-anchoring-ai-to-reality</link><guid isPermaLink="true">https://maguyva.ai/sv/blog/ground-truths-anchoring-ai-to-reality</guid><description>AI-agenter hallucinerar med självförtroende. Grundsanningar är versionshanterade, avgränsade fakta som förankrar agentbeteende i verkligheten. Så här byggde och upprätthåller vi dem.</description><pubDate>Tue, 13 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Siffrorna i det här inlägget speglar systemet vid publicering (januari 2026). Se vår &lt;a href=&quot;https://maguyva.ai/sv/team&quot;&gt;teamsida&lt;/a&gt; för aktuella siffror.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;AI-agenter är anmärkningsvärt kapabla. De kan resonera, syntetisera och generera. Men de har en grundläggande svaghet: de hittar på saker. Inte illvilligt, men med självförtroende. En agent kan uppfinna API-parametrar som inte existerar, referera till konfigurationer som aldrig definierats, eller tillämpa mönster från sina träningsdata som strider mot din faktiska arkitektur.&lt;/p&gt;
&lt;p&gt;Standardåtgärden är “ge agenten mer kontext”. Men kontext kan vara motsägelsefull. Dokumentation glider isär från implementationen. Kommentarer ljuger. Även kod kan vilseleda om den läses utan att man förstår avsikten.&lt;/p&gt;
&lt;p&gt;Vi behövde något mer explicit. Något som inte kunde ignoreras eller misstolkas. Något som skulle förankra agenter i verifierbar verklighet.&lt;/p&gt;
&lt;p&gt;Vi kallar dem Grundsanningar.&lt;/p&gt;
&lt;h2 id=&quot;vad-är-en-grundsanning&quot;&gt;Vad är en grundsanning?&lt;/h2&gt;
&lt;p&gt;En grundsanning är ett explicit, versionshanterat sakpåstående som agenter måste respektera. Det är inte dokumentation. Det är inte en kommentar. Det är en förstklassig entitet i systemet med:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;En unik identifierare&lt;/strong&gt; (som &lt;code&gt;GT-MAG-015&lt;/code&gt; eller &lt;code&gt;GT-MAG-036&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;En livscykelstatus&lt;/strong&gt; (aktuell, preliminär eller utfasad)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ett scope&lt;/strong&gt; (plattformsomfattande, paketspecifikt eller domänbundet)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bevis&lt;/strong&gt; (filsökvägar, URL:er eller referenser som styrker påståendet)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agentvägledning&lt;/strong&gt; (explicita gör/undvik-instruktioner)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Här är ett exempel från vår Maguyva-kodintelligensplattform:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-015&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  scope&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;package&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Fuzzy symbol matching is opt-in via `find_similar=true`.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Default behavior returns empty results for non-existent symbols;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    `exact_match=true` enforces strict matching and disables all fuzzy fallbacks.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Deterministic defaults prevent agents from receiving misleading results.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Typos should fail explicitly rather than silently returning unrelated symbols.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  evidence&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/src/maguyva/services/code_analysis_service.py&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/docs/quick_reference/parameters.md&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_verified&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-25&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;product&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;ai_first&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;principle&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Det här är inte löpande text. Det är ett kontrakt. När en agent stöter på den här grundsanningen vet den:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Standardbeteendet är deterministiskt (tomma resultat, inte gissningar baserade på ungefärlig matchning)&lt;/li&gt;
&lt;li&gt;Det finns specifika parametrar (&lt;code&gt;find_similar&lt;/code&gt;, &lt;code&gt;exact_match&lt;/code&gt;) med definierade beteenden&lt;/li&gt;
&lt;li&gt;Bevis finns i specifika filer som kan verifieras&lt;/li&gt;
&lt;li&gt;Påståendet verifierades ett specifikt datum&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;anatomin-hos-ett-grundsanningsregister&quot;&gt;Anatomin hos ett grundsanningsregister&lt;/h2&gt;
&lt;p&gt;Grundsanningar lever i YAML-register under &lt;code&gt;ai_assets/reference/ground_truths.yaml&lt;/code&gt;. Varje paket eller domän kan ha sitt eget register. Strukturen är:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;metadata&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Maguyva Ground Truths&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  summary&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Foundational constraints and principles that guide Maguyva.&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_updated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  owner&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;maguyva&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  render&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    include_statuses&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tentative&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    show_deprecated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    groups&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Product Principles&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;product&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;principle&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;brand&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Architecture &amp;amp; Boundaries&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;architecture&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;boundaries&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;cqrs&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;statements&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-001&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    scope&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;package&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Maguyva is read-only with respect to user repositories...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Registret innehåller metadata om själva samlingen, renderingskonfiguration för dokumentationsgenerering, och själva påståendena. Varje påstående följer ett strikt schema som valideras av Pydantic-modeller:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; GroundTruthStatement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;BaseModel&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    status: GTStatus  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# current, tentative, deprecated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    source: GTSource &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # claude-code, orkestra, discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    scope: GTScope  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# platform, package, domain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    statement: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    rationale: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    evidence: list[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    last_verified: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    tags: list[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    agent_guidance: AgentGuidance &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;hur-agenter-kommer-åt-grundsanningar&quot;&gt;Hur agenter kommer åt grundsanningar&lt;/h2&gt;
&lt;p&gt;Grundsanningar exponeras genom flera kanaler:&lt;/p&gt;
&lt;h3 id=&quot;1-renderad-dokumentation&quot;&gt;1. Renderad dokumentation&lt;/h3&gt;
&lt;p&gt;Kommandot &lt;code&gt;orkestra sync&lt;/code&gt; omvandlar YAML-register till läsbar markdown:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Det här genererar &lt;code&gt;GROUND_TRUTHS.md&lt;/code&gt;-filer som ingår i agentens kontext. Den renderade utdatan grupperar påståenden efter status och kategori:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;## Current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;### Product Principles&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Maguyva is read-only with respect to user repositories... (GT-MAG-001)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Design tool responses for AI agents first... (GT-MAG-009)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;### Architecture &amp;amp; Boundaries&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Pipeline and Maguyva boundaries are intentional... (GT-MAG-006)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;2-cli-sökning&quot;&gt;2. CLI-sökning&lt;/h3&gt;
&lt;p&gt;Agenter med skalåtkomst kan söka i grundsanningar programmatiskt:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;embedding&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --tag&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; security&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --status&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; current&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sökfunktionen poängsätter träffar över flera fält med viktad relevans:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; truth_fields&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(gt: GroundTruthStatement) -&amp;gt; list[FieldSpec]:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.id]),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;statement&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.statement]),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;rationale&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.rationale] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; gt.rationale &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;tags&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;gt.tags &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;evidence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;gt.evidence &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;3-kontextkomposition&quot;&gt;3. Kontextkomposition&lt;/h3&gt;
&lt;p&gt;När agenter renderas från YAML-definitioner kan deras kontext referera till grundsanningsregister:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;context_composition&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  domain_knowledge&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/maguyva/ai_assets/reference/ground_truths.yaml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Det säkerställer att relevanta grundsanningar laddas innan agenten börjar arbeta.&lt;/p&gt;
&lt;h2 id=&quot;kategorier-av-grundsanningar&quot;&gt;Kategorier av grundsanningar&lt;/h2&gt;
&lt;p&gt;Om man tittar över våra register grupperar sig grundsanningarna i flera mönster:&lt;/p&gt;
&lt;h3 id=&quot;produktprinciper&quot;&gt;Produktprinciper&lt;/h3&gt;
&lt;p&gt;Begränsningar för vad produkten är och inte är:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Maguyva är skrivskyddat gentemot användarrepositorier; den enda tillgången som inte kan återskapas är den betalda inbäddningscachen.” (GT-MAG-001)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;arkitekturgränser&quot;&gt;Arkitekturgränser&lt;/h3&gt;
&lt;p&gt;Var ansvar ligger och varför:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Gränserna mellan pipeline och Maguyva är avsiktliga: pipeline är återanvändbar, Maguyva innehåller kodspecifik logik, och CQRS separerar stegskrivningar från serverläsningar.” (GT-MAG-006)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;regler-mot-hallucinationer&quot;&gt;Regler mot hallucinationer&lt;/h3&gt;
&lt;p&gt;Explicita mandat som håller verktygskontrakt deterministiska istället för härledda:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Ungefärlig symbolmatchning är opt-in via &lt;code&gt;find_similar=true&lt;/code&gt;. Standardbeteendet returnerar tomma resultat för symboler som inte existerar; &lt;code&gt;exact_match=true&lt;/code&gt; tvingar fram strikt matchning och inaktiverar alla reservalternativ med ungefärlig matchning.” (GT-MAG-015)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;kvalitetsgrindar&quot;&gt;Kvalitetsgrindar&lt;/h3&gt;
&lt;p&gt;Standarder som måste upprätthållas:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Ändringar av delad infrastruktur (post_filters.py, relationsextraktorer, delade hanterare) MÅSTE valideras mot ALLA språk som stöds via fullständig manifestgenerering före commit. En enspråkig validering räcker inte för delad kod.” (GT-MAG-036)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;kodmönster&quot;&gt;Kodmönster&lt;/h3&gt;
&lt;p&gt;Implementationskrav:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Använd &lt;code&gt;asyncio.to_thread()&lt;/code&gt; för CPU-bundet arbete i asynkrona kontexter; det utfasade mönstret &lt;code&gt;loop.run_in_executor()&lt;/code&gt; bör inte användas i ny kod.” (GT-MAG-018)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;livscykeln-hos-en-grundsanning&quot;&gt;Livscykeln hos en grundsanning&lt;/h2&gt;
&lt;p&gt;Grundsanningar är inte statiska. De utvecklas genom en definierad livscykel:&lt;/p&gt;
&lt;h3 id=&quot;preliminär&quot;&gt;Preliminär&lt;/h3&gt;
&lt;p&gt;En föreslagen sanning under utvärdering. Påståendet är registrerat men kan komma att ändras:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-044&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tentative&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    get_file with include_metadata=false may still return metadata in the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    response because middleware may re-inject it for AI agent disambiguation.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;aktuell&quot;&gt;Aktuell&lt;/h3&gt;
&lt;p&gt;En verifierad sanning som agenter måste respektera. Beviset har validerats:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-017&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_verified&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  evidence&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/src/maguyva/services/supabase.py&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;utfasad&quot;&gt;Utfasad&lt;/h3&gt;
&lt;p&gt;En sanning som inte längre gäller. Behålls som historisk referens med en pekare till vad som ersatte den:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-099&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;deprecated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  superseded_by&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-015&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  notes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Replaced when we moved to explicit matching behavior&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;varför-inte-bara-dokumentation&quot;&gt;Varför inte bara dokumentation?&lt;/h2&gt;
&lt;p&gt;Dokumentation tjänar ett annat syfte. Den förklarar. Den undervisar. Den kan vara vag, kan använda kvalificerare som “generellt” eller “vanligtvis”.&lt;/p&gt;
&lt;p&gt;Grundsanningar kan inte vara vaga. De är påståenden. De gäller antingen eller så gör de inte det.&lt;/p&gt;
&lt;p&gt;Betrakta skillnaden:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dokumentation:&lt;/strong&gt; “API:et returnerar generellt tomma resultat när en symbol inte hittas, även om ungefärlig matchning kan vara aktiverad i vissa konfigurationer.”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Grundsanning:&lt;/strong&gt; “Standardbeteendet returnerar tomma resultat för symboler som inte existerar; &lt;code&gt;exact_match=true&lt;/code&gt; tvingar fram strikt matchning och inaktiverar alla reservalternativ med ungefärlig matchning.”&lt;/p&gt;
&lt;p&gt;Den första är till hjälp för människor som lär sig systemet. Den andra går att omsätta i handling för agenter som fattar beslut.&lt;/p&gt;
&lt;h2 id=&quot;agentvägledning-gör-och-undvik&quot;&gt;Agentvägledning: gör och undvik&lt;/h2&gt;
&lt;p&gt;Vissa grundsanningar innehåller explicit agentvägledning:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-022&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Accuracy fixes must happen at extraction time via production code,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    never via validator filters.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  agent_guidance&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    do&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Fix extraction bugs in YAML config, handlers, or tree-sitter queries&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Add test cases at the layer where the fix lives&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    avoid&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Adding validator filters to mask production bugs&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Creating test-only workarounds for extraction issues&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Det tar bort tvetydighet. En agent som läser det här vet inte bara vad som är sant, utan vilka handlingar den sanningen medför.&lt;/p&gt;
&lt;h2 id=&quot;verifiering-och-underhåll&quot;&gt;Verifiering och underhåll&lt;/h2&gt;
&lt;p&gt;Grundsanningar kräver underhåll. Vi spårar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;last_verified&lt;/strong&gt;: När någon bekräftade att påståendet fortfarande gäller&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;evidence&lt;/strong&gt;: Filer som styrker påståendet (kan kontrolleras för existens)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;source&lt;/strong&gt;: Var sanningen ursprungligen kom ifrån (CLI-inspektion, arkitekturgranskning, lärdom efter en incident)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En grundsanning med föråldrade verifieringsdatum eller trasiga bevislänkar är en signal att undersöka. Antingen är sanningen fortfarande giltig och behöver omverifieras, eller så har verkligheten förändrats och sanningen behöver uppdateras.&lt;/p&gt;
&lt;h2 id=&quot;verkliga-exempel-från-produktion&quot;&gt;Verkliga exempel från produktion&lt;/h2&gt;
&lt;h3 id=&quot;säkerhetsgräns&quot;&gt;Säkerhetsgräns&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-014&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Maguyva queries are search patterns, not executable code.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    SQL injection prevention is handled by PostgREST parameterization;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    application-layer SQL keyword blocking must never be added.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Blocking SQL keywords breaks legitimate code search. Users search FOR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    code containing patterns like &apos;DROP TABLE&apos;, they don&apos;t execute them.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Den här grundsanningen förhindrar en klass av missriktade “säkerhetsförbättringar” som skulle förstöra produkten.&lt;/p&gt;
&lt;h3 id=&quot;noggrannhet-vid-extraktionstillfället&quot;&gt;Noggrannhet vid extraktionstillfället&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-022&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Accuracy fixes must happen at extraction time via production code&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (YAML config, handlers, queries), never via validator filters.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Validator filters only run during tests. They can hide extractor bugs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    while production responses remain wrong.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Det här kom från smärtsam erfarenhet. Agenter brukade lappa ihop misslyckade språkpaket genom att lägga till filter som bara påverkade validatorn och fick testmiljön att se grönare ut, medan den skarpa Maguyva-extraktorn fortfarande producerade felaktiga kanter. Regeln tvingar tillbaka fixar till den verkliga vägen: YAML-konfiguration, queries eller hanterare.&lt;/p&gt;
&lt;h3 id=&quot;filtrering-i-flera-nivåer&quot;&gt;Filtrering i flera nivåer&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-023&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Language engine uses three-tier filtering: external_method_patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (builtins/stdlib), allowlists (legitimate idioms), and expected_call_targets&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (validation-time deduplication). Each tier serves a distinct purpose.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Conflating filter purposes leads to either over-filtering (missing real&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    relationships) or under-filtering (noise).&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Det här förhindrar att agenter lägger till filter på fel ställe, ett vanligt misstag som försämrade precisionen.&lt;/p&gt;
&lt;h2 id=&quot;integration-med-orkestreringssystemet&quot;&gt;Integration med orkestreringssystemet&lt;/h2&gt;
&lt;p&gt;Grundsanningar är ett lager i ett bredare kontextsystem:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Arkitektoniska beslut (ADR:er)&lt;/strong&gt; – Registrerar varför vi valde metod A framför B&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Grundsanningar&lt;/strong&gt; – Anger vad som är definitivt sant just nu&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Domänmönster&lt;/strong&gt; – Beskriver hur man gör saker rätt&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Antimönster&lt;/strong&gt; – Beskriver vad man ska undvika och varför&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;En agent som arbetar i systemet har tillgång till alla fyra. Grundsanningar utgör den faktabaserade förankringen, medan beslut förklarar historien, mönster vägleder implementationen och antimönster varnar för fallgropar.&lt;/p&gt;
&lt;h2 id=&quot;att-mäta-effekten&quot;&gt;Att mäta effekten&lt;/h2&gt;
&lt;p&gt;Sedan vi introducerade grundsanningar har vi observerat:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Färre cykler av “fixa den hallucinerade fixen”&lt;/li&gt;
&lt;li&gt;Säkrare agentbeslut när fakta är tydliga&lt;/li&gt;
&lt;li&gt;Bättre PR-granskningar eftersom förväntningarna är explicita&lt;/li&gt;
&lt;li&gt;Kortare onboardingtid för nya agenter (och människor)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Investeringen i att underhålla grundsanningar betalar sig i minskad felsökning och tydligare systemgränser.&lt;/p&gt;
&lt;h2 id=&quot;komma-igång&quot;&gt;Komma igång&lt;/h2&gt;
&lt;p&gt;För att lägga till en grundsanning i ditt system:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Skapa en &lt;code&gt;ground_truths.yaml&lt;/code&gt; i ditt pakets &lt;code&gt;ai_assets/reference/&lt;/code&gt;-katalog&lt;/li&gt;
&lt;li&gt;Definiera metadata och renderingskonfiguration&lt;/li&gt;
&lt;li&gt;Lägg till påståenden enligt schemat&lt;/li&gt;
&lt;li&gt;Kör &lt;code&gt;uv run orkestra sync&lt;/code&gt; för att generera dokumentation&lt;/li&gt;
&lt;li&gt;Inkludera registret i agentens kontextkomposition&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Börja med de fakta som orsakar mest förvirring, eller de begränsningar som bryts mot oftast. Det är dina mest värdefulla grundsanningar.&lt;/p&gt;
&lt;h2 id=&quot;slutsats&quot;&gt;Slutsats&lt;/h2&gt;
&lt;p&gt;AI-agenter kommer att hallucinera. Det ligger i deras natur. Men vi kan skapa miljöer där hallucination begränsas, där vissa fakta inte är förhandlingsbara, där agenter kan pröva sina antaganden mot verifierad verklighet.&lt;/p&gt;
&lt;p&gt;Grundsanningar är inte en fullständig lösning. De kräver underhåll. De kan bli föråldrade. De lägger till overhead i utvecklingsprocessen.&lt;/p&gt;
&lt;p&gt;Men de ger något värdefullt: ett gemensamt ordförråd av fakta som både människor och agenter kan lita på. I en värld där agenter i allt högre grad deltar i mjukvaruutveckling blir den gemensamma grunden avgörande.&lt;/p&gt;
&lt;p&gt;Alternativet är oändliga cykler av agenter som gör självsäkra misstag och människor som rättar till dem. Grundsanningar bryter den cykeln genom att göra rättelserna explicita och varaktiga.&lt;/p&gt;
&lt;p&gt;Dina agenter förtjänar att veta vad som är sant. Berätta det för dem.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Grounding</category></item><item><title>Orkestra: att orkestrera AI-agenter i stor skala</title><link>https://maguyva.ai/sv/blog/orkestra-agent-orchestration</link><guid isPermaLink="true">https://maguyva.ai/sv/blog/orkestra-agent-orchestration</guid><description>En orkestrerare dirigerar arbete till specialiserade AI-agenter, var och en med egna skills och minne. Så koordinerar Orkestra 46 agenter och 466 skills i produktion.</description><pubDate>Tue, 06 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Siffrorna i det här inlägget speglar systemet vid publiceringen (januari 2026). Se vår &lt;a href=&quot;https://maguyva.ai/sv/team&quot;&gt;teamsida&lt;/a&gt; för aktuella siffror.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;När vi började bygga med Claude Code stötte vi på ett problem som alla team som använder AI-kodningsassistenter förr eller senare möter: en enda agent kan inte göra allt bra.&lt;/p&gt;
&lt;p&gt;Man kan prompta en agent att vara en databasspecialist. Eller en säkerhetsgranskare. Eller en frontend-ingenjör. Men i samma stund man ber den vara alla tre samtidigt sjunker kvaliteten. Kontexten späds ut. Instruktioner krockar. Agenten blir en generalist som är medioker på allt.&lt;/p&gt;
&lt;p&gt;Så vi byggde Orkestra.&lt;/p&gt;
&lt;h2 id=&quot;vad-är-orkestra&quot;&gt;Vad är Orkestra?&lt;/h2&gt;
&lt;p&gt;Orkestra är ett agentorkestreringssystem för Claude Code och liknande AI-kodningsverktyg. Det koordinerar flera specialiserade agenter, var och en med egen expertis, under en enda orkestrerare som dirigerar arbete till rätt specialist.&lt;/p&gt;
&lt;p&gt;Tänk på det som en bemanningsbyrå för AI-agenter. Orkestreraren tar emot en uppgift, identifierar vilken specialist som bör hantera den, och delegerar med rätt kontext. När arbetet är klart flödar resultaten tillbaka till orkestreraren för sammanställning.&lt;/p&gt;
&lt;p&gt;Siffrorna berättar historien:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Komponent&lt;/th&gt;
&lt;th&gt;Antal&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Specialistagenter&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Återanvändbara skills&lt;/td&gt;
&lt;td&gt;466&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identitetsarketyper&lt;/td&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mindset&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kommunikationsstilar&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kunskapsdomäner&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;karaktärssystemet-dd-för-agenter&quot;&gt;Karaktärssystemet: D&amp;amp;D för agenter&lt;/h2&gt;
&lt;p&gt;Den centrala insikten bakom Orkestra är att agentbeteende uppstår ur tre komponerbara primitiver:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Identitet&lt;/strong&gt; definierar &lt;em&gt;vad&lt;/em&gt; agenten är. En arkitekt designar systemstrukturer. En debugger spårar fel till grundorsaken. En guardian upprätthåller efterlevnad och säkerhetsgränser. Vi har 27 identitetsarketyper som kan kombineras.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mindset&lt;/strong&gt; definierar &lt;em&gt;hur&lt;/em&gt; agenten tänker. Ett analytiskt mindset förankrar påståenden i bevis och kvantifierar osäkerhet. Ett skeptiskt mindset ifrågasätter antaganden och söker motbevisande fakta. Ett utforskande mindset omfamnar tvetydighet och prövar flera angreppssätt.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Stil&lt;/strong&gt; definierar &lt;em&gt;hur&lt;/em&gt; agenten kommunicerar. En teknisk stil inkluderar exakta värden och refererar till specifika filer. En koncis stil skär bort fluff och leder med svaret. En diplomatisk stil balanserar ärlighet med takt.&lt;/p&gt;
&lt;p&gt;En agent kombinerar de här primitiverna:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# architecture-advisor.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;identity&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;knowledge-architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;strategist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;mindset&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;analytical&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;concise&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Den här kompositionen skapar en agent som designar system (arkitekt), knyter ihop kunskap över domäner (kunskapsarkitekt), sätter strategisk riktning (strateg), tänker i bevis och data (analytisk), och kommunicerar utan fluff (koncis).&lt;/p&gt;
&lt;p&gt;Kraften ligger i den kombinatoriska explosionen. 27 identiteter gånger 11 mindset gånger 10 stilar ger nästan 3 000 möjliga agentpersonligheter. Men man definierar bara de kombinationer som spelar roll för ens arbete.&lt;/p&gt;
&lt;h2 id=&quot;skills-återanvändbara-förmågemoduler&quot;&gt;Skills: återanvändbara förmågemoduler&lt;/h2&gt;
&lt;p&gt;Skills är den kunskap och de arbetsflöden agenter kan åberopa. De följer ett nivåsystem baserat på scope:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Nivå&lt;/th&gt;
&lt;th&gt;Namn&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Exempel&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;K0&lt;/td&gt;
&lt;td&gt;Grunder&lt;/td&gt;
&lt;td&gt;Universell metodik&lt;/td&gt;
&lt;td&gt;Testdriven disciplin, evidensbaserat slutförande&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K1&lt;/td&gt;
&lt;td&gt;Identiteter&lt;/td&gt;
&lt;td&gt;Rollbaserade arbetsflöden&lt;/td&gt;
&lt;td&gt;CLI-gränssnittsstandarder, prestandaplaybook&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K2&lt;/td&gt;
&lt;td&gt;Domäner&lt;/td&gt;
&lt;td&gt;Domänspecifik kunskap&lt;/td&gt;
&lt;td&gt;Databasmigreringsmönster, autentiseringsvalidering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K3&lt;/td&gt;
&lt;td&gt;Stackar&lt;/td&gt;
&lt;td&gt;Teknikspecifikt&lt;/td&gt;
&lt;td&gt;Cloudflare-driftsättning, Supabase-drift&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K4&lt;/td&gt;
&lt;td&gt;Projekt&lt;/td&gt;
&lt;td&gt;Endast den här kodbasen&lt;/td&gt;
&lt;td&gt;Projektspecifika arbetsflöden och konventioner&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Skills laddas först när de behövs. En agent ser skill-namn och beskrivningar vid start, men fullt skill-innehåll laddas bara när det utlöses. Det håller kontexten kompakt samtidigt som hundratals skills görs upptäckbara.&lt;/p&gt;
&lt;p&gt;Varje skill innehåller:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tydliga utlösarvillkor (“Använd när du migrerar databasscheman”)&lt;/li&gt;
&lt;li&gt;Steg-för-steg-vägledning&lt;/li&gt;
&lt;li&gt;Tillåtna verktyg för arbetsflödet&lt;/li&gt;
&lt;li&gt;Framgångskriterier och återhämtningsvägar vid fel&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;De 466 skills i vårt register täcker allt från git worktree-isolering till webbresearcharbetsflöden till driftsättningshälsovalidering.&lt;/p&gt;
&lt;h2 id=&quot;varför-orkestrering-spelar-roll&quot;&gt;Varför orkestrering spelar roll&lt;/h2&gt;
&lt;p&gt;Arkitekturer med en enda agent stöter snabbt på väggar:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kontextutspädning.&lt;/strong&gt; Ett kontextfönster på 200 000 tokens låter stort ända tills man laddar in databasscheman, API-dokumentation, testfixturer och domänkunskap. Specialister kan arbeta med riktad kontext.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Instruktionskonflikter.&lt;/strong&gt; Att be en agent “vara grundlig men snabb” och “verifiera allt men inte överkonstruera” skapar spänning. Specialister löser det genom att ha tydligt scope.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Expertisdjup.&lt;/strong&gt; En generalistagent kan lite om allt. En specialistagent, komponerad med rätt identitet och skills, kan sin domän djupt.&lt;/p&gt;
&lt;p&gt;Orkestra implementerar platt orkestrering: en orkestrerare koordinerar flera specialister. Specialister kan inte skapa underspecialister. Det förhindrar en komplexitetsexplosion samtidigt som det möjliggör parallellt arbete.&lt;/p&gt;
&lt;p&gt;Orkestreraren har tillgång till 2,2 miljoner tokens effektiv kapacitet: sitt eget fönster på 200 000 plus 10 samtidiga subagenter med 200 000 var. Arbete som skulle tömma en enda agent löper bekvämt genom flottan.&lt;/p&gt;
&lt;h2 id=&quot;renderingspipelinen&quot;&gt;Renderingspipelinen&lt;/h2&gt;
&lt;p&gt;Agentdefinitioner lever i YAML. Claude Code läser Markdown. Orkestra överbryggar det gapet med en deterministisk renderingspipeline:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;YAML Registries → Jinja Templates → .claude/agents/*.md&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Operatörer redigerar YAML-källan. Kör &lt;code&gt;orkestra sync&lt;/code&gt;. Renderad Markdown dyker upp i &lt;code&gt;.claude/agents/&lt;/code&gt;. Claude Code tar upp ändringarna.&lt;/p&gt;
&lt;p&gt;Den här separationen tjänar olika målgrupper:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;YAML-källan&lt;/strong&gt; innehåller livscykelmetadata, taggar, valideringsregler och utfasningsnoteringar för tooling&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Renderad Markdown&lt;/strong&gt; innehåller bara det modellen behöver: beskrivning, verktyg, skills och beteendevägledning&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pipelinen komponerar identiteter, mindset, stilar och skills till en enda sammanhängande prompt. En arkitekt-analytisk-koncis-agent får en helt annan systemprompt än en debugger-skeptisk-teknisk-agent, även om de delar en del underliggande skills.&lt;/p&gt;
&lt;h2 id=&quot;domänkunskap-fyrafilsmönstret&quot;&gt;Domänkunskap: fyrafilsmönstret&lt;/h2&gt;
&lt;p&gt;Varje kunskapsdomän följer en konsekvent struktur:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;domain-name/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  decisions.md      # Key choices, rationale, consequences&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  patterns.md       # Step-by-step guidance and examples&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  anti-patterns.md  # Failure modes and remediation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  evolution.md      # Dated log of changes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Den här strukturen betjänar agentens kontextladdning. En agent som arbetar med autentisering laddar &lt;code&gt;authentication/patterns.md&lt;/code&gt; för vägledning och &lt;code&gt;authentication/anti-patterns.md&lt;/code&gt; för att undvika kända fallgropar. Filerna är dimensionerade för effektiv kontextladdning: tillräckligt fokuserade för att vara användbara, tillräckligt heltäckande för att vara auktoritativa.&lt;/p&gt;
&lt;p&gt;Vi underhåller 21 toppnivådomäner, bland annat analys, autentisering, datavetenskap, infrastruktur, maskininlärning, prestanda, säkerhet och mer. Varje domän kan ha underdomäner för finare granularitet.&lt;/p&gt;
&lt;h2 id=&quot;värderingar-operativsystemet&quot;&gt;Värderingar: operativsystemet&lt;/h2&gt;
&lt;p&gt;Alla agenter delar ett bottenlager av värderingar som definierar hur de opererar:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Enkelhet först.&lt;/strong&gt; Använd den enklaste lösningen som fungerar. Lägg bara till komplexitet när det är motiverat.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Åtgärda grundorsaker.&lt;/strong&gt; Lappa aldrig runt fel. Om en pipeline misslyckas, felsök pipelinen. Om ett test misslyckas, åtgärda koden eller testet.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Evidensbaserat.&lt;/strong&gt; Märk påståenden som “verifierat” (med benchmarks) eller “uppskattat” (med antaganden). Ett upptäckt mönster är inte detsamma som ett bekräftat problem.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kontextekonomi.&lt;/strong&gt; MCP-verktyg kostar 0,1 % av kontexten. Filläsningar kostar 2 % var. Tillämpa domänexpertis innan koden utforskas.&lt;/p&gt;
&lt;p&gt;De här värderingarna sprids till varje specialist genom renderingspipelinen. En agent kan inte kringgå dem genom komposition.&lt;/p&gt;
&lt;h2 id=&quot;clit-kontrollplanet&quot;&gt;CLI:t: kontrollplanet&lt;/h2&gt;
&lt;p&gt;Orkestra levereras med ett CLI för att hantera agentekosystemet:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Discovery&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; database-architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Validation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --show-warnings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Rendering&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --dry-run&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; schema-migration-workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Decisions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;authentication&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;CLI:t är sanningskällan för vilka agenter som finns, vilka skills de har, och om systemet är friskt. Det kör validering före synk för att fånga problem tidigt.&lt;/p&gt;
&lt;h2 id=&quot;överväganden-kring-öppen-källkod&quot;&gt;Överväganden kring öppen källkod&lt;/h2&gt;
&lt;p&gt;Vi byggde Orkestra för att lösa vårt eget problem: att koordinera AI-agenter i stor skala för en komplex kodbas. Mönstren vi upptäckte är inte specifika för vår domän.&lt;/p&gt;
&lt;p&gt;Karaktärskompositionssystemet (identitet + mindset + stil) gäller för alla team som definierar agentpersonligheter.&lt;/p&gt;
&lt;p&gt;Skill-nivåsystemet (K0–K4) ger en mental modell för att organisera återanvändbara förmågor efter scope.&lt;/p&gt;
&lt;p&gt;Renderingspipelinemönstret (YAML-källa + mallar + genererade artefakter) separerar tooling-hänsyn från modellkonsumtion.&lt;/p&gt;
&lt;p&gt;Den platta orkestreringsmodellen (en koordinator, många specialister) undviker komplexitet samtidigt som den möjliggör parallellism.&lt;/p&gt;
&lt;p&gt;Om Orkestra blir öppen källkod beror på om de här mönstren har värde för andra som bygger med Claude Code. Om du stöter på väggarna vi beskrev kan arkitekturen kanske hjälpa.&lt;/p&gt;
&lt;h2 id=&quot;vad-vi-lärde-oss&quot;&gt;Vad vi lärde oss&lt;/h2&gt;
&lt;p&gt;Att bygga Orkestra lärde oss att orkestrering inte handlar om att göra agenter smartare. Det handlar om att göra dem mer fokuserade.&lt;/p&gt;
&lt;p&gt;En enda agent med perfekta instruktioner får ändå slut på kontext. En enda agent med alla skills blir ändå förvirrad över vilken som ska tillämpas. En enda agent som försöker vara allt ger mediokra resultat överallt.&lt;/p&gt;
&lt;p&gt;Fyrtio specialister, var och en skicklig inom sin domän, koordinerade av en orkestrerare som vet när den ska delegera: så levererar vi.&lt;/p&gt;
&lt;p&gt;Siffrorna spelar mindre roll än arkitekturen. Man kanske behöver fem agenter eller femtio. Principen kvarstår: komposition före kapacitet, specialisering före generalisering, koordination före enskilda hjältedåd.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Orkestra driver agentekosystemet bakom Maguyva, vår kodintelligensplattform. Vill du veta mer? Hör av dig till teamet.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Open Source</category></item></channel></rss>