<?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 Blog</title><description>Tekniske dybdedyk i MCP-kodeintelligens, AI-agentarkitektur og erfaringer fra at bygge en flersproget kodesøgningsplatform.</description><link>https://maguyva.ai/da/blog</link><language>da</language><atom:link href="https://maguyva.ai/da/rss.xml" rel="self" type="application/rss+xml"/><item><title>Kontekst der rejser med dig</title><link>https://maguyva.ai/da/blog/context-that-travels</link><guid isPermaLink="true">https://maguyva.ai/da/blog/context-that-travels</guid><description>Cursors indekser er fremragende inde i Cursor. Maguyva er det hostede MCP-kort, som den samme agent kan spørge fra andre editorer, CLI&apos;er og CI.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Cursors indekser er fremragende inde i Cursor. Tabulator-autofuldførelse, inline-redigering, chat, og agenten i det vindue hviler allerede på et projektindeks, som Cursor driver for det åbne arbejdsområde. Hvis Cursor er den eneste flade, du skriver i, og det indeks allerede finder de rigtige filer, så bliv der. Det er det ærlige ‘bliv hvor du er’-tilfælde, og det fortjener at være den første sætning på denne side.&lt;/p&gt;
&lt;p&gt;Denne tekst handler om den anden halvdel af en almindelig uge. Det samme repository åbnes også i Claude Code, spørges fra Codex CLI, gennemgås på en anden maskine, eller spørges af en agent, der kører i CI. Spørgsmålet er ikke ‘hvilken indekser er bedre’. Spørgsmålet er, om det kort, agenten stoler på i ét vindue, er det samme kort, den stoler på i det næste.&lt;/p&gt;
&lt;p&gt;Maguyva er det kort, der rejser med dig. Det er et fjernt MCP-lag for kodebasekontekst. Agenten spørger det på samme måde, som den spørger ethvert andet MCP-værktøj. Resultaterne kommer tilbage som rangerede stier med linjenumre. Cursor forbliver editoren. Det er konteksten, der flytter sig.&lt;/p&gt;
&lt;h2 id=&quot;hvad-cursors-indekser-er-til&quot;&gt;Hvad Cursors indekser er til&lt;/h2&gt;
&lt;p&gt;Cursors indbyggede indeksering findes, så chat, agent og søgning inde i editoren kan hente relevant kode i stedet for udelukkende at stole på det, der passer i modellens rå kontekstvindue. Det er det rigtige design til en IDE. Dette indeks er nativt for Cursor. Det er ikke en MCP-server og er ikke tilgængeligt fra nogen anden klient.&lt;/p&gt;
&lt;p&gt;Sådan fungerer det, som beskrevet i Cursors offentlige dokumentation og Cursors egen fremstilling på skrivetidspunktet: den primære søgevej er ikke længere et cloud-embeddingindeks. Cursors team har udtalt på deres community-forum, at dedikeret semantisk, embedding-baseret søgning trappes ned til fordel for grep-baseret hentning, fordi nutidens modeller allerede udforsker et levende træ godt nok på egen hånd. I stedet er der Instant Grep, et lokalt søgeindeks bygget af n-grammer, inverterede lister og Bloom-filtre, holdt i en hukommelseskortlagt opslagstabel, så forespørgsler løses på udviklerens egen maskine i stedet for på en server.&lt;/p&gt;
&lt;p&gt;Selve indekset lever inde i repositoriets eget &lt;code&gt;.git/cursor/&lt;/code&gt;-katalog, forankret til et bestemt git-commit; ændringer siden det commit lægger sig oven på det i stedet for at udløse en ny scanning, og indekset genopbygges kun, når den lokale tilstand har afveget langt fra det, det blev bygget mod. Fordi det ligger inde i &lt;code&gt;.git&lt;/code&gt;, spores det aldrig og pushes aldrig — slet mappen, og indekset er væk. &lt;code&gt;.gitignore&lt;/code&gt; respekteres af konstruktion, da kun git-sporet indhold er kvalificeret, og &lt;code&gt;.cursorignore&lt;/code&gt; håndhæves på læsevejen. Der er ikke længere noget embedding-trin på serversiden eller en fjern vektordatabase på den vej. Tidligere dokumentation beskrev et cloud-assisteret design — kryptering af chunks, synkronisering via et Merkle-træ, genbrug af indeks mellem teammedlemmer — og Cursors eget team har siden sagt, at det design trappes ned, så denne tekst beskriver det ikke længere som aktuelt.&lt;/p&gt;
&lt;p&gt;Et fremtrædende træk inde i editoren er Cursors Explore-subagent. Den kan starte flere parallelle søgninger i sit eget kontekstvindue på en hurtigere model og kun returnere de relevante fund, så hovedsamtalen ikke svulmer op af søgeresultater. Det er en ægte styrke inde i editoren. Behold den.&lt;/p&gt;
&lt;p&gt;Multi-rod-arbejdsområder understøttes: konteksten for hver åbnet mappe er tilgængelig for Agent. Nogle git-afhængige funktioner, som worktrees, er deaktiveret i multi-rod-opsætninger, og Cloud Agents understøtter slet ikke multi-rod-arbejdsområder.&lt;/p&gt;
&lt;p&gt;Ingen af disse ting er en grund til at forlade Cursor. Det er en præcis beskrivelse af et kort, der er fremragende dér, hvor det lever.&lt;/p&gt;
&lt;h2 id=&quot;hvad-rejse-med-dig-egentlig-betyder&quot;&gt;Hvad ‘rejse med dig’ egentlig betyder&lt;/h2&gt;
&lt;p&gt;Et kort rejser med dig, når de samme spørgsmål returnerer samme type svar, med citater du kan åbne, fra mere end én klient.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I Cursor: ‘Hvor er &lt;code&gt;parseConfig&lt;/code&gt; defineret, og hvem kalder det?’&lt;/li&gt;
&lt;li&gt;I Claude Code, på samme repo: samme spørgsmål.&lt;/li&gt;
&lt;li&gt;I Codex CLI, på en gennemgangsmaskine, der aldrig har åbnet Cursor-vinduet: samme spørgsmål.&lt;/li&gt;
&lt;li&gt;I en CI-agent, der taler MCP: samme spørgsmål, mod det samme hostede øjebliksbillede.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hvis hver flade bygger sit eget private indeks, har du ikke ét kort. Du har flere caches, der driver fra hinanden. Editorindekset kan være opdateret for træet på disk. CLI-sessionen kan være en dag bagud. CI-jobbet kan se på et andet checkout. Og agenten vil stadig lyde selvsikker.&lt;/p&gt;
&lt;p&gt;Cursors indekser er ikke ment til at løse det. Fordi det lever inde i editoren, er den kontekst, det bygger, til den editor. En læser, der også har brug for en CLI, en CI-pipeline, eller en anden editor, har brug for et separat værktøj til de flader. Det er en kendsgerning om omfang, ikke en mangel. Maguyva er det separate værktøj.&lt;/p&gt;
&lt;p&gt;Et offentliggjort antal sprog for Cursors indekser er ikke angivet i det materiale, denne tekst må bruge. Maguyva offentliggør understøttelse af over 279 sprog og tekstbaserede teknologier. Cursors priser gengives heller ikke her; se deres prisside. Maguyva opkræver pr. arbejdsområde, ikke pr. plads, med offentliggjorte planer på $0, $19, $49 og $149 afhængigt af indekseret omfang og arbejdsområdets størrelse.&lt;/p&gt;
&lt;h2 id=&quot;ét-hostet-kort-hver-mcp-klient&quot;&gt;Ét hostet kort, hver MCP-klient&lt;/h2&gt;
&lt;p&gt;Maguyva er en fjern MCP-server. Du forbinder GitHub, vælger repositorierne, og cloud-pipelinen bygger symboler, grafkanter og et rangeret kort. Du tilføjer en API-nøgle til MCP-konfigurationen for den klient, du allerede bruger. Maguyva har opsætningsguider til 24 dokumenterede MCP-klienter — inklusive Cursor — og kan forbinde til andre MCP-kompatible klienter, der understøtter standardkonfiguration.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://maguyva.ai/da/for-cursor&quot;&gt;Cursor-opsætningssiden&lt;/a&gt; er den editorspecifikke vej, hvis det er der, du arbejder. Den samme server svarer Claude Code, VS Code, Windsurf, Codex CLI og resten. Du skifter ikke editor. Du giver hver agent den samme værktøjsflade: 11 kundevendte MCP-værktøjer på tværs af søgning, symboler, afhængighedsanalyse, filhentning, repo-kontekst og deterministiske hjælpeværktøjs-workflows. Semantisk, strukturel, graf- og tekstsøgning smeltes sammen til rangerede resultater.&lt;/p&gt;
&lt;p&gt;Det er portabilitetsfordelen. De citater, du tjekkede i Cursor i morges, har samme form som de citater, Codex CLI returnerer i aften. Filsti og linjenummer. Åbn dem. Hvis de er forkerte, kan du se det. Hvis de er rigtige, har den næste ændring et sted at lande. Det godkendte udsagn er færre hallucinerede ændringer, ikke et løfte om, at hver ændring er korrekt.&lt;/p&gt;
&lt;p&gt;Friskhed er offentliggjort. Øjebliksbilleder er tidsstemplede, så agenten ved, hvilken version af træet den læser. Genopbygningstakten er daglig på den gratis plan og hver time på betalte planer. Den ærlige begrænsning er usynkroniseret lokalt arbejde: en ændring, der kun findes i et arbejdstræ, er endnu ikke i det hostede kort. Denne begrænsning er den samme, uanset hvilken klient du spørger fra, og det er netop pointen. Drift mellem klienter er ikke længere en anden, skjult begrænsning.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://maguyva.ai/da/docs&quot;&gt;Dokumentationen&lt;/a&gt; giver den aktiveringsløkke, der gælder for hver klient: indekser et repo, du allerede kender, forbind klienten, stil ét spørgsmål, du kan verificere. Gør det én gang i Cursor. Gør det igen fra den CLI, du faktisk bruger på gennemgangsdage. Hvis begge svar citerer den samme handler, har kortet virkelig rejst med dig.&lt;/p&gt;
&lt;h2 id=&quot;hvordan-de-to-kort-eksisterer-side-om-side&quot;&gt;Hvordan de to kort eksisterer side om side&lt;/h2&gt;
&lt;p&gt;Brug begge. De er ikke alternativer i en sammenligningssides forstand.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Lad Cursors indekser være tændt for projektet på disk. Lad Explore, Instant Grep og agenten inde i editoren bruge det. Den løkke er nativ og hurtig.&lt;/li&gt;
&lt;li&gt;Tilføj Maguyva som en MCP-server i Cursor, så den samme session også kan spørge det hostede arbejdsområdekort. Cursor er en dokumenteret Maguyva-klient. Du vælger ikke ét indeks og sletter det andet.&lt;/li&gt;
&lt;li&gt;Tilføj den samme Maguyva-server til Claude Code, Codex CLI, eller enhver anden MCP-klient, der rører repoet. Én API-nøgleform. Ét arbejdsområde.&lt;/li&gt;
&lt;li&gt;Hvis en CI-agent er MCP-kompatibel, så peg den mod den samme server. Den vil læse det samme tidsstemplede øjebliksbillede, som bærbaren læste.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Editorindekset forbliver det bedste værktøj til ‘hvad er der på disk i dette vindue, lige nu’. Det hostede kort er det bedste værktøj til ‘hvordan ser dette arbejdsområde ud for hver agent, der rører det i dag’. De sætninger konkurrerer ikke.&lt;/p&gt;
&lt;p&gt;Arbejdsområdekvoter offentliggøres på &lt;a href=&quot;https://maguyva.ai/da/pricing&quot;&gt;prissiden&lt;/a&gt;: repos, indekserede linjer og brugere, faktureret pr. arbejdsområde. Agenter og mennesker deler det samme brugerantal. Start gratis med et repo, du allerede kan vurdere. Øg arbejdsområdet først, efter citaterne har overlevet kontakt med træet.&lt;/p&gt;
&lt;h2 id=&quot;hvad-denne-side-ikke-hævder&quot;&gt;Hvad denne side ikke hævder&lt;/h2&gt;
&lt;p&gt;Den hævder ikke, at Cursors indekser er svag, ufuldstændig, eller en grund til at skifte editor. Den første sætning i denne tekst siger det modsatte.&lt;/p&gt;
&lt;p&gt;Den hævder ikke, at Maguyva erstatter Instant Grep eller Explore-subagenten. Det er Cursor-funktioner. De bliver i Cursor.&lt;/p&gt;
&lt;p&gt;Den opfinder ikke et antal sprog, et latenstal, eller en token-besparelse for nogen af produkterne. Ukendte tal forbliver upublicerede.&lt;/p&gt;
&lt;p&gt;Den lader ikke som om upushet lokalt arbejde er i det hostede kort. Tidsstemplede øjebliksbilleder gør den begrænsning synlig. De fjerner den ikke.&lt;/p&gt;
&lt;p&gt;Testen er almindelig. Indekser et repo, du allerede kender. Stil ét spørgsmål, du kan verificere, først i Cursor, derefter i en anden MCP-klient. Kontekst, der rejser med dig, er det samme citat begge steder.&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>Kort først, gennemgang bagefter</title><link>https://maguyva.ai/da/blog/map-first-review-second</link><guid isPermaLink="true">https://maguyva.ai/da/blog/map-first-review-second</guid><description>Forankr den kodende agent i et repo-kort, før den skriver. Lad Greptile gennemgå pull requesten bagefter. Et komplementært par, ikke en erstatning.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;To forskellige opgaver sidder på hver sin side af en pull request. Før agenten skriver, har den brug for et kort over det træ, den er ved at ændre. Efter agenten har åbnet en PR, bør noget læse den ændring op mod resten af systemet og efterlade kommentarer, som et menneske kan handle på.&lt;/p&gt;
&lt;p&gt;Disse opgaver ligner hinanden på afstand, fordi begge involverer ‘at forstå kodebasen’. De er ikke det samme produkt. Den ene svarer på ‘hvor bør denne ændring lande?’. Den anden svarer på ‘hvad ødelagde dette diff, som en linje-for-linje-linter vil overse?’. At blande dem sammen giver et dårligere første udkast og en mere støjende gennemgang.&lt;/p&gt;
&lt;p&gt;Denne tekst er en guide til en fælles workflow. Maguyva er kortet, agenten spørger først. Greptile er gennemgangsagenten, der kommenterer PR’en bagefter. Parret er komplementært af konstruktion: Maguyva gennemgår ikke pull requests, og Greptile erstatter ikke det kontekstlag, agenten brugte til at skrive dem.&lt;/p&gt;
&lt;h2 id=&quot;hvorfor-denne-opdeling-er-nyttig&quot;&gt;Hvorfor denne opdeling er nyttig&lt;/h2&gt;
&lt;p&gt;En kodende agent, der starter fra træningspriorer plus nogle få indsatte filer, vil opfinde en plausibel sti og redigere den. Det er ‘forkert fil’-fejlen, og det er et hentningsproblem. Maguyva er et fjernt MCP-lag for kodebasekontekst: semantisk, strukturel (AST), graf-/afhængigheds- og tekstbaseret hentning smeltes sammen til rangerede resultater, plus symbolsøgning og filhentning. Underbyggede svar kommer tilbage som &lt;code&gt;path/file.ext:line&lt;/code&gt;, så du kan afvise en fejl, før en patch findes. Påstanden forbliver beskeden: færre hallucinerede ændringer. Modellen kan stadig gætte. Det er bare det første skridt, der holder op med at være et gæt.&lt;/p&gt;
&lt;p&gt;Greptile er en AI-kodegennemgangsagent. Med deres egne ord gennemgår den automatisk hver pull request med fuld forståelse af kodebasen, og stiller det op mod traditionelle lintere, der tjekker filer isoleret i stedet for hele systemet. Opsætningen består i at installere GitHub- eller GitLab-appen og vælge repositorier. Der er intet lokalt indeks, du skal drive. Hosting er Greptile Cloud (de angiver SOC 2 Type II-overholdelse, med en rapport tilgængelig på anmodning), med en selvhostet mulighed tilbudt til virksomheder.&lt;/p&gt;
&lt;p&gt;Deres eget nummererede flow er: forbind og byg en afhængighedsgraf for hver funktion, klasse og afhængighed; ved hver pull request, analyser ændringen ved hjælp af den fulde repo-graf og udgiv fund som PR-kommentarer med foreslåede rettelser på cirka tre minutter; hver kommentar kan overdrage problemet til en kodende agent, teamet allerede bruger. De angiver også, at de læser tidligere menneskelige PR-kommentarer over tid for at lære et teams kodestandarder og reducere støjende forslag. Deres læringssystem har efter deres egne udsagn brug for 2-3 uger til at tilpasse sig.&lt;/p&gt;
&lt;p&gt;Det er gennemgang, ikke udkast. Greptiles styrke er kontekst fra en fuld repo-graf på den ændring, der allerede er landet i en PR, efterfulgt af en lukket løkke, der sender fundet til Claude Code, Codex, Conductor, Cursor, eller Devin. Maguyvas styrke er det rangerede kort, agenten spurgte, før den ændring blev skrevet. Brug begge. Bed ikke nogen af dem om at gøre den andens job.&lt;/p&gt;
&lt;p&gt;En førstepartsproduktintegration mellem Maguyva og Greptile er ikke angivet. Du har heller ikke brug for den. Maguyva taler med agenten over MCP. Greptile taler med GitHub eller GitLab gennem deres egen app. De mødes ved pull requesten. Intet limscript, ingen cron, der forbinder det ene værktøj til det andet. Parret klarer sig uden bash, fordi hvert produkt allerede sidder på den flade, det ejer.&lt;/p&gt;
&lt;h2 id=&quot;hvad-det-her-ikke-er&quot;&gt;Hvad det her ikke er&lt;/h2&gt;
&lt;p&gt;Dette er ikke en nedrivning af Greptile. Det er ikke en ‘skift anmelder’-side. Greptile lancerede på Hacker News den 5. marts 2024 som et Y Combinator W24-firma, og den tråd er, hvordan mange mennesker først mødte produktet. Hvis det er sådan, du fandt dem, så bliv ved med at bruge dem. Denne side er den manglende forreste halvdel af den løkke: at forankre agenten på forhånd, så den PR, Greptile ser, allerede sigter på de rigtige filer.&lt;/p&gt;
&lt;p&gt;Greptiles markedsføringsmateriale fører med påstande om gennemgangshastighed og fejlfangst. Behandl dem som Greptiles egne påstande, ikke uafhængigt verificerede tal. Denne tekst gentager dem ikke som fakta.&lt;/p&gt;
&lt;p&gt;Sprogdækning er samme slags ærlighed. Greptile rammer support ind som dækning af alle programmeringssprog i stedet for en opremset liste; et præcist tal er ikke angivet. Maguyva offentliggør understøttelse af over 279 sprog og tekstbaserede teknologier, med en teknisk opdeling (parser-understøttet AST versus kun tekst) på sitet, når spørgsmålet er teknisk. Det er forskellige produkter, der kommer med forskellige påstande. Bland dem ikke.&lt;/p&gt;
&lt;p&gt;Greptiles priser er ikke angivet i det materiale, denne tekst må bruge. Betalte planer findes; se deres prisside. Maguyva opkræver pr. arbejdsområde, ikke pr. plads. Planer starter gratis. &lt;a href=&quot;https://maguyva.ai/da/pricing&quot;&gt;Prissiden&lt;/a&gt; viser de offentliggjorte niveauer, hvis du har brug for arbejdsområdetallene.&lt;/p&gt;
&lt;h2 id=&quot;workflow&quot;&gt;Workflow&lt;/h2&gt;
&lt;p&gt;Tre navngivne trin. Udfør dem i denne rækkefølge. Spring ikke nogen af dem over, første gang du prøver parret.&lt;/p&gt;
&lt;h3 id=&quot;1-maguyva-kontekst&quot;&gt;1. Maguyva-kontekst&lt;/h3&gt;
&lt;p&gt;Indekser ét repository, du allerede kender. Forbind MCP-klienten, du allerede skriver i — Claude Code, Cursor, Codex CLI, VS Code, Windsurf, eller en anden MCP-kompatibel klient. Maguyva har opsætningsguider til 24 dokumenterede MCP-klienter og kan forbinde til andre klienter, der understøtter standard MCP-konfiguration.&lt;/p&gt;
&lt;p&gt;Stil et spørgsmål, du kan vurdere, før nogen skriver en linje. ‘Hvor håndteres sessionsudløb, og hvad kalder det?’ er et bedre første træk end ‘fiks auth’. Kræv citater. Åbn &lt;code&gt;file.ext:line&lt;/code&gt;-resultaterne. Følg symbolet. Bekræft den afhængighed, du er ved at røre.&lt;/p&gt;
&lt;p&gt;Maguyva eksponerer 11 kundevendte MCP-værktøjer på tværs af søgning, symboler, afhængighedsanalyse, filhentning, repo-kontekst og deterministiske hjælpeværktøjs-workflows. Fire hentningstilstande smeltes sammen til rangerede resultater; &lt;code&gt;find_symbol&lt;/code&gt; er et separat værktøj, når du allerede kender navnet. &lt;a href=&quot;https://maguyva.ai/da/docs&quot;&gt;Dokumentationen&lt;/a&gt; beskriver den korteste vej: start gratis, indekser et repo, du allerede kender, forbind klienten, stil derefter ét spørgsmål, du kan verificere.&lt;/p&gt;
&lt;p&gt;Øjebliksbilleder er tidsstemplede, så agenten kan sige, hvilken version af træet den læser. Den ærlige begrænsning er usynkroniseret lokalt arbejde. Hvis ændringen kun findes i et arbejdstræ og ikke er pushet, indeholder det hostede kort den endnu ikke. Instruktionsfiler (&lt;code&gt;CLAUDE.md&lt;/code&gt;, &lt;code&gt;AGENTS.md&lt;/code&gt;) hører stadig hjemme her, til konventioner og det, der ikke skal røres. De er ikke et levende kort. Brug dem til adfærd. Brug Maguyva til fakta.&lt;/p&gt;
&lt;p&gt;Lad ikke agenten åbne en PR, før citaterne overlever kontakt med repoet. Den port er hele pointen med dette trin.&lt;/p&gt;
&lt;h3 id=&quot;2-agentens-pr&quot;&gt;2. Agentens PR&lt;/h3&gt;
&lt;p&gt;Den samme agent skriver nu ændringen i den klient, du allerede betaler for. Maguyva er hverken en editor eller en anmelder. Agenten producerer stadig diffet. Du åbner stadig pull requesten på GitHub eller GitLab, som du allerede gør.&lt;/p&gt;
&lt;p&gt;Det, der bør være anderledes, er den første fil. PR’en bør nævne den handler, der rent faktisk implementerer adfærden, den kalder, der vil gå i stykker, og den test, der vil fejle, hvis ændringen er forkert. Hvis trin 1 blev sprunget over, vil trin 3 bruge sine kommentarer på en ændring, der landede i den forkerte pakke. Greptile kan stadig finde systemiske problemer. Den burde ikke også skulle komme sig oven på en hallucineret sti.&lt;/p&gt;
&lt;p&gt;Hold PR’en afgrænset. En underbygget første fil er ikke en licens til at omskrive modulet. Dette komplementære par fungerer, når agenten udførte ét job med et kort, og derefter bad en anmelder udføre et andet job på et afgrænset diff.&lt;/p&gt;
&lt;h3 id=&quot;3-greptile-gennemgang&quot;&gt;3. Greptile-gennemgang&lt;/h3&gt;
&lt;p&gt;Greptile er allerede forbundet til repositoriet via GitHub- eller GitLab-appen. På den nye pull request analyserer den ændringen ved hjælp af den fulde repo-graf, den byggede, og udgiver fund som kommentarer med foreslåede rettelser. Deres eget materiale sætter denne gennemgang til cirka tre minutter.&lt;/p&gt;
&lt;p&gt;Læs kommentarerne, som du ville læse en omhyggelig kollega: åbn det citerede sted, afgør om fundet er ægte, og handl derefter. Hvor Greptile tilbyder ‘Fix with your Agent’, sender den problemet — filstier, linjenumre, foreslået kode — til Claude Code, Codex, Conductor, Cursor, eller Devin. ‘Fix All’ sender alle problemer i gennemgangen på én gang. De leverer også en Greptile MCP og et Claude Code-plugin til den overdragelse. Maguyva er ikke på den navngivne målliste; det fravær er ikke et problem. Maguyva har allerede gjort sit arbejde i trin 1. Den kodende agent, der skrev PR’en, er den, der bør modtage rettelsesnyttelasten.&lt;/p&gt;
&lt;p&gt;Forvent støj de første 2-3 uger, mens Greptiles læringssystem tilpasser sig de kommentarer, dit team rent faktisk efterlader. Det er deres angivne tidsplan, ikke en mangel ved parret. Menneskelig gennemgang forbliver i løkken. Greptile er den automatiserede første gennemgang, ikke sammenlægningsknappen.&lt;/p&gt;
&lt;p&gt;Hvis en Greptile-kommentar peger på en fil, agenten aldrig spurgte i trin 1, er det et nyttigt signal. Enten gik kortet glip af en kalder, eller også sprang agenten et citat over. Ret udkastet i overensstemmelse med kommentaren. Deaktiver ikke anmelderen.&lt;/p&gt;
&lt;h2 id=&quot;sådan-holder-du-dette-komplement-ærligt&quot;&gt;Sådan holder du dette komplement ærligt&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Maguyva altid først. En gennemgang af en PR med forkert fil er stadig en gennemgang af den forkerte fil.&lt;/li&gt;
&lt;li&gt;Greptile altid bagefter. Et velciteret udkast har stadig brug for en gennemlæsning af diffet på hele systemets niveau.&lt;/li&gt;
&lt;li&gt;Bed ikke Maguyva om at udgive PR-kommentarer. Det gør den ikke.&lt;/li&gt;
&lt;li&gt;Bed ikke Greptile om at være agentens første hentningslag, mens den stadig vælger en sti. Det er ikke det job, deres GitHub- eller GitLab-app er koblet til.&lt;/li&gt;
&lt;li&gt;Opfind ikke en bash-pipeline, der ‘synkroniserer’ dem. PR’en er grænsefladen.&lt;/li&gt;
&lt;li&gt;Verificer begge sider uafhængigt. Indekser et repo, du allerede kender. Stil ét spørgsmål, du kan verificere. Åbn derefter en lille PR og læs, hvad Greptile rent faktisk kommenterer.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Løkken er almindelig, så snart den får et navn. Kort først. Agentens PR. Gennemgang bagefter. Hvert produkt bliver på den side af pull requesten, det er godt til.&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>Giv en AI-agent kontekst om et stort repo uden en lokal indekser</title><link>https://maguyva.ai/da/blog/large-repo-context-without-a-local-indexer</link><guid isPermaLink="true">https://maguyva.ai/da/blog/large-repo-context-without-a-local-indexer</guid><description>Hvordan du giver en kodende agent et søgbart kort over et stort repository fra skyen, uden at køre en lokal indekser på din bærbare.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Et stort repository passer ikke i et kontekstvindue, og hvis du nogensinde har rettet en bærbar-indekser mod et rigtigt monorepo, ved du, at det heller ikke passer komfortabelt der — RAM’en skyder i vejret, den første indeksering tager en time, og din agent starter alligevel den næste session med at gætte, hvilke filer der betyder noget.&lt;/p&gt;
&lt;p&gt;Det sædvanlige svar er at køre en indekser ved siden af editoren, og for et repo, der passer komfortabelt på én maskine, er det et godt svar. Hvis dit monorepo allerede indekseres hurtigt i Cursor, og det er det eneste sted, du har brug for kortet, har denne tekst intet at tilføje — spring den over.&lt;/p&gt;
&lt;p&gt;Denne tekst handler om det andet tilfælde — når en agent har brug for et søgbart kort over et stort repository, og du ikke vil køre en lokal indekser for at få det.&lt;/p&gt;
&lt;h2 id=&quot;hvornår-en-lokal-indekser-er-det-forkerte-værktøj&quot;&gt;Hvornår en lokal indekser er det forkerte værktøj&lt;/h2&gt;
&lt;p&gt;Et lokalt indeks antager, at koden lever på den maskine, der spørger det, og i reel monorepo-skala strammes den antagelse selv inden for en enkelt editor. Repoet er simpelthen større, end du vil holde ‘varmt’ på en bærbar: du arbejder i én pakke, mens blast radius ligger tre kataloger væk, og en første kold indeksering af et træ på to millioner linjer er ikke noget, du vil gennemgå to gange — hverken på din egen maskine eller på en CI-runner, der aldrig har klonet det træ før. Eller en kollega burde kunne spørge det samme kort som dig, uden at vente på, at deres egen maskine kæmper sig gennem det samme indeks.&lt;/p&gt;
&lt;p&gt;Ingen af disse ting er en grund til at smide en god editor-indekser væk. Det er en grund til også at have et hostet kort, som enhver af dine agenter kan spørge via MCP.&lt;/p&gt;
&lt;p&gt;Og skalaproblemet går dybere end ‘for mange filer at indsætte’. På et stort træ er det interessante spørgsmål næsten aldrig ‘vis mig denne fil’ — det er hvilken fil, hvilket symbol, hvilke kaldere, hvilke tests. En agent, der starter med at liste &lt;code&gt;src/&lt;/code&gt; og læse de tre første resultater, vil muntert overse handleren i &lt;code&gt;apps/api&lt;/code&gt; og den genererede klient i &lt;code&gt;packages/sdk&lt;/code&gt;. Det, du har brug for, er hentning bygget fra hele træet, derefter rangeret, derefter citeret.&lt;/p&gt;
&lt;h2 id=&quot;hvad-kontekst-om-et-stort-repo-egentlig-betyder&quot;&gt;Hvad ‘kontekst om et stort repo’ egentlig betyder&lt;/h2&gt;
&lt;p&gt;At dumpe filer ind i prompten er ikke kontekst — det er en mindre, ringere kopi af træet. Det, din agent virkelig har brug for, er at stille spørgsmål og få citerede svar tilbage: hvor dette symbol er defineret, og hvem der kalder det, hvad der afhænger af det modul, jeg er ved at ændre, hvilken testfil der dækker denne adfærd, og hvordan træet ser ud &lt;em&gt;nu&lt;/em&gt;, ikke sidste kvartal.&lt;/p&gt;
&lt;p&gt;Disse svar skal komme fra et indeks bygget ud fra dit repo, ikke fra modellens hukommelse om andres repos, og indekset skal leve et andet sted end agentens kontekstvindue. For dette problem bør det også leve et andet sted end din bærbare.&lt;/p&gt;
&lt;p&gt;Endnu en ting instruktionsfiler ikke kan gøre for dig: &lt;code&gt;CLAUDE.md&lt;/code&gt; og &lt;code&gt;AGENTS.md&lt;/code&gt; er det rigtige sted for konventioner og adfærd, men de er ikke et levende, rangeret, søgbart kort over et træ på to millioner linjer. Brug regler til adfærd; brug repo-intelligens til fakta.&lt;/p&gt;
&lt;h2 id=&quot;vi-bygger-kortet-i-skyen-spørger-det-fra-enhver-klient&quot;&gt;Vi bygger kortet i skyen, spørger det fra enhver klient&lt;/h2&gt;
&lt;p&gt;Maguyva er et fjernt MCP-lag for kodebasekontekst. Du forbinder GitHub, vælger dine repositorier, og kan gå din vej, mens cloud-pipelines analyserer træet, bygger symboler og grafkanter, og vedligeholder et rangeret kort — aldrig en lokal indekser.&lt;/p&gt;
&lt;p&gt;Når du pusher kode, analyseres ændrede filer inkrementelt, og graf- og rangeringslagene genopbygges efter en tidsplan: dagligt på den gratis plan, hver time på betalte planer. Hvert øjebliksbillede er tidsstemplet, så din agent kan sige, hvilken version af træet den læser. Den ærlige begrænsning her er usynkroniseret lokalt arbejde — en ændring, der kun findes i dit arbejdstræ, aldrig pushet, er endnu ikke i det hostede kort.&lt;/p&gt;
&lt;p&gt;Derefter forbinder du enhver klient, du allerede bruger, ved at tilføje en API-nøgle til dens MCP-konfiguration. Der findes opsætningsguider til 24 dokumenterede MCP-klienter, og enhver anden MCP-kompatibel klient, der understøtter standardkonfiguration, kan også forbinde. Hvis Cursor er der, du bor, går &lt;a href=&quot;https://maguyva.ai/da/for-cursor&quot;&gt;Cursor-siden&lt;/a&gt; den vej; den samme server svarer Claude Code, VS Code, Windsurf, Codex CLI og resten.&lt;/p&gt;
&lt;p&gt;Du skifter ikke editor. Du giver din agent en værktøjsflade — 11 MCP-værktøjer på tværs af søgning, symboler, afhængighedsanalyse, filhentning og repo-kontekst — med dækning af over 279 sprog og tekstbaserede teknologier, hvilket betyder mere, end du tror, på et monorepo, der holdt op med at være ét sprog for mange år siden.&lt;/p&gt;
&lt;p&gt;Svar kommer tilbage underbygget, som filstier med linjenumre. Semantisk, strukturel, graf- og tekstsøgning smeltes sammen til rangerede resultater, så et spørgsmål som ‘hvad afhænger af parseConfig’ hverken giver dig et grep-dump eller et enkelt semantisk uddrag, men den håndfuld steder, der virkelig betyder noget.&lt;/p&gt;
&lt;h2 id=&quot;en-konkret-fremgangsmåde&quot;&gt;En konkret fremgangsmåde&lt;/h2&gt;
&lt;p&gt;Start ikke med at indeksere hele virksomheden. Her er vejen, der virker:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Vælg ét repository, du allerede kender godt — en pakke, du kan vurdere i hånden, er mere værd end det største træ, du har.&lt;/li&gt;
&lt;li&gt;Start gratis: 3 repos, 50k indekserede linjer, alle 11 værktøjer, ingen månedlig forespørgselskvote. Hvis dit repræsentative repo er større, viser &lt;a href=&quot;https://maguyva.ai/da/pricing&quot;&gt;prissiden&lt;/a&gt; arbejdsområdeniveauerne ($0, $19, $49, $149) efter indekseret omfang — ikke efter antal pladser.&lt;/li&gt;
&lt;li&gt;Forbind GitHub og vent på, at den første indeksering er færdig. Du kompilerer intet lokalt.&lt;/li&gt;
&lt;li&gt;Forbind MCP-klienten — nogle få linjer konfiguration. Maguyva er en fjern MCP-server, så der er ingen plugins, ingen udvidelser, og ingen anden editor at tage til sig.&lt;/li&gt;
&lt;li&gt;Stil ét spørgsmål, du kan verificere. ‘Hvad afhænger af parseConfig?’ eller ‘Hvor håndteres udløb af login-sessionen?’ Åbn derefter de citerede &lt;code&gt;file.ext:line&lt;/code&gt;-resultater og tjek dem mod træet foran dig.&lt;/li&gt;
&lt;li&gt;Først efter citaterne overlever den kontakt, lader du agenten redigere.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Hvis det første repo passer godt, og dit træ er stort, så hæv arbejdsområdet til at matche dine indekserede linjer og genopbygningstakt. Mennesker og agenter deler det samme brugerantal — Maguyva opkræver pr. arbejdsområde, ikke pr. plads — så at tilføje en tredje agent til løkken koster dig ingenting.&lt;/p&gt;
&lt;p&gt;Aktiveringstesten er den samme, som &lt;a href=&quot;https://maguyva.ai/da/docs&quot;&gt;dokumentationen&lt;/a&gt; anbefaler til enhver første kørsel: indekser et repo, du allerede kender, stil ét spørgsmål, du kan verificere. Et stort repo ændrer ikke testen; det gør bare en forkert første fil dyrere.&lt;/p&gt;
&lt;h2 id=&quot;hvad-du-skal-holde-øje-med-efter-tilslutning&quot;&gt;Hvad du skal holde øje med efter tilslutning&lt;/h2&gt;
&lt;p&gt;Hold øje med tre ting. Friskhed: betalte planer genopbygges hver time, gratis planer dagligt, og upushet lokalt arbejde vil ikke være i kortet — det er den afvejning, du accepterer. Omfang: indekser et repræsentativt sæt af repos, ikke hver arkiveret fork; det gratis niveau er bevidst dimensioneret til at finde ud af, om svarene er værd at beholde. Og verificering: et kort over et stort repo, der ikke kan citere stier og linjenumre, er bare en langsommere gættemaskine, så lad din agent vise stedet, før den leverer patchen.&lt;/p&gt;
&lt;p&gt;Kør derefter den samme test, du ville køre på et lille repo. Indekser et repo, du allerede kender. Stil ét spørgsmål, du kan verificere. Hvis kortet er ægte, holder din agent op med at starte fra et koldt træ.&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>Hvorfor din AI-kodende agent hallucinerer filstier</title><link>https://maguyva.ai/da/blog/why-ai-coding-agents-hallucinate-file-paths</link><guid isPermaLink="true">https://maguyva.ai/da/blog/why-ai-coding-agents-hallucinate-file-paths</guid><description>AI-kodende agenter opfinder filstier, når de ikke har et ægte kort over repoet. Her er hvorfor det sker, og hvordan forankring fører til færre hallucinerede ændringer.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Kendetegnet er ikke en forkert funktionskrop. Det er en selvsikker ændring i en fil, der ikke findes, eller i en fil, der findes, men ikke er den, der implementerer adfærden.&lt;/p&gt;
&lt;p&gt;Du bad om en fix til sessionsudløb. Agenten åbnede &lt;code&gt;src/auth/session.ts&lt;/code&gt;. Den sti er plausibel. Den er også forkert. Den ægte handler lever i &lt;code&gt;apps/api/src/middleware/expiry.ts&lt;/code&gt;, omdøbt to refaktoreringer siden. Agenten løj ikke for dig. Den fuldførte en stiformet streng ud fra træningspriorer plus alt det, der allerede var i kontekstvinduet.&lt;/p&gt;
&lt;p&gt;Dette er det almindelige fejlmønster på et ægte repository. Modellen kan skrive kode. Fejlen ligger i at vælge det forkerte sted at skrive den.&lt;/p&gt;
&lt;h2 id=&quot;hvorfor-agenter-opfinder-stier&quot;&gt;Hvorfor agenter opfinder stier&lt;/h2&gt;
&lt;p&gt;En kodende agent er en model til forudsigelse af det næste token med værktøjer. Når du siger ‘fiks sessionsudløb’, skal den navngive en fil, før den kan læse eller patche noget. Hvis den ikke allerede har et forankret kort, konstruerer den en sti ud fra:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Navngivningskonventioner, den har set i andre repositorier. &lt;code&gt;src/auth/session.ts&lt;/code&gt; er en hyppig form.&lt;/li&gt;
&lt;li&gt;Filer allerede i samtalen, som måske er dem, du indsatte sidste uge, ikke dem, der betyder noget nu.&lt;/li&gt;
&lt;li&gt;Mappelister, den tilfældigt kørte, ufuldstændige på et stort træ.&lt;/li&gt;
&lt;li&gt;Instruktionsfiler. &lt;code&gt;CLAUDE.md&lt;/code&gt; og &lt;code&gt;AGENTS.md&lt;/code&gt; fortæller agenten, hvordan den skal opføre sig. De er ikke et levende indeks over symboler, kaldere, eller aktuelle stier.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ingen af disse kilder er et kort over dette repository, i dag. Modellen udfylder hullet på samme måde, som den udfylder ethvert hul: med en fortsættelse med høj sandsynlighed. Den fortsættelse ligner ofte en ægte sti. Nogle gange findes filen og ligger ved siden af den rigtige. Nogle gange fandtes den på en gren, der blev merget sidste måned. Nogle gange fandtes den aldrig.&lt;/p&gt;
&lt;p&gt;Grep redder dig ikke her, hvis agenten slet ikke søger efter den rigtige streng. Agenten gættede en sti, læste derefter hvad den sti returnerede, og redigerede den så. Det første forkerte skridt var stien, ikke patchen.&lt;/p&gt;
&lt;p&gt;At læse filer er heller ikke det samme som at finde de rigtige. Claude Code, Cursor, Codex, og lignende værktøjer kan åbne, hvad end du peger dem mod. Spørgsmålet er, om de pålideligt finder de rigtige filer, de vigtige symboler, afhængighederne, testene, og blast radius, før de redigerer. Filadgang uden et kort begynder stadig med et gæt.&lt;/p&gt;
&lt;h2 id=&quot;redigering-af-den-forkerte-fil-er-et-hentningsproblem&quot;&gt;Redigering af den forkerte fil er et hentningsproblem&lt;/h2&gt;
&lt;p&gt;Behandl den opdigtede sti som en hentningsfejl, ikke som en personlighedsbrist.&lt;/p&gt;
&lt;p&gt;Hvis agenten skulle returnere &lt;code&gt;path/file.ext:line&lt;/code&gt;, før den fik lov til at redigere, ville to ting ske. For det første kunne du åbne citatet og afvise arbejdet på ti sekunder. For det andet ville agenten skulle spørge noget, der rent faktisk kender træet.&lt;/p&gt;
&lt;p&gt;Det er jobbet for et kodebasekontekstlag. Semantisk søgning alene er ikke nok. Et uddrag, der ‘lyder som sessionsudløb’, kan stadig lande i en udfaset pakke. Du har også brug for præcis tekst, når du kender strengen, symbolsøgning, når du kender navnet, strukturel søgning, når du kender formen, og en afhængighedsgraf, når du har brug for kaldere og blast radius.&lt;/p&gt;
&lt;p&gt;Maguyva er det lag til MCP-kompatible kodende agenter. Det er ikke en editor. Claude Code, Cursor, Codex CLI, VS Code, Windsurf, og andre MCP-klienter bliver, hvor de er. Agenten spørger et rangeret kort, før den rører en linje.&lt;/p&gt;
&lt;p&gt;Påstanden er bevidst beskeden: færre hallucinerede ændringer. Maguyva fjerner ikke modellens evne til at gætte. Det ændrer det første standardskridt fra ‘opfind en plausibel sti’ til ‘bed om rangerede, citerede steder’.&lt;/p&gt;
&lt;h2 id=&quot;sådan-ser-et-underbygget-svar-ud&quot;&gt;Sådan ser et underbygget svar ud&lt;/h2&gt;
&lt;p&gt;Et nyttigt svar på ‘hvor håndteres sessionsudløb’ er ikke et afsnit. Det er en kort liste over steder:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;apps/api/src/middleware/expiry.ts:48&lt;/code&gt; - handleren&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apps/web/src/lib/auth-client.ts:112&lt;/code&gt; - kalderen&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apps/api/tests/expiry.test.ts:20&lt;/code&gt; - testen, der fejler, hvis ændringen er forkert&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Du kan åbne disse linjer. Hvis de er forkerte, stopper du. Hvis de er rigtige, kan agenten redigere. Verifikationen er pointen, ikke et slogan.&lt;/p&gt;
&lt;p&gt;Maguyva eksponerer 11 kundevendte MCP-værktøjer på tværs af søgning, symboler, afhængighedsanalyse, filhentning, repo-kontekst og deterministiske hjælpeværktøjs-workflows. Fire hentningstilstande (semantisk, strukturel, graf/afhængighed, og tekst) smeltes sammen til rangerede resultater; symbolsøgning er et separat MCP-værktøj (&lt;code&gt;find_symbol&lt;/code&gt;). Underbyggede svar kommer tilbage med filstier og linjenumre, så du kan vurdere dem mod træet foran dig.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://maguyva.ai/da/docs&quot;&gt;Dokumentationen&lt;/a&gt; beskriver den korteste vej: start gratis, indekser et repo, du allerede kender, forbind klienten, stil derefter ét spørgsmål, du kan verificere.&lt;/p&gt;
&lt;h2 id=&quot;en-løkke-der-ændrer-den-første-ændring&quot;&gt;En løkke, der ændrer den første ændring&lt;/h2&gt;
&lt;p&gt;Du har ikke brug for en ny workflow-religion. Du har brug for ét ekstra skridt før den første skrivning.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Stil et spørgsmål, du allerede kan vurdere. ‘Hvilken kode håndterer login og sessionsudløb?’ er bedre end ‘fiks auth’.&lt;/li&gt;
&lt;li&gt;Kræv citater. Filsti og linjenummer, ikke et resumé af ‘auth-modulet’.&lt;/li&gt;
&lt;li&gt;Åbn de citerede filer. Følg symbolet. Bekræft den afhængighed, du er ved at røre.&lt;/li&gt;
&lt;li&gt;Først da lader du agenten patche.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Hvis trin 2 ikke returnerer noget nyttigt, har agenten ikke ret til at improvisere en sti. Den søger igen, eller du peger den. Netop denne ene port er, hvad der giver færre hallucinerede ændringer. Modellen er den samme model. Kortet er det, der har ændret sig.&lt;/p&gt;
&lt;p&gt;Instruktionsfiler betyder stadig noget. Behold dem. Brug dem til konventioner, gennemgangsregler, og det, der ikke skal røres. Bed dem ikke om at være indekset. En &lt;code&gt;CLAUDE.md&lt;/code&gt;, der lister tre vigtige kataloger, vil være forældet ugen efter en pakke-opdeling. Et søgbart kort opdateres, når repoet opdateres.&lt;/p&gt;
&lt;p&gt;En beslægtet fejl er den næsten-rigtige fil: agenten åbner &lt;code&gt;auth.ts&lt;/code&gt;, når adfærden lever i &lt;code&gt;auth-client.ts&lt;/code&gt;, eller patcher en genereret fil i stedet for kilden, eller redigerer kopien i &lt;code&gt;packages/legacy&lt;/code&gt;, fordi navnet matchede. Citater gør ikke disse fejl umulige. De gør dem synlige, før diffet lander.&lt;/p&gt;
&lt;h2 id=&quot;hvad-et-kort-ikke-løser-for-dig&quot;&gt;Hvad et kort ikke løser for dig&lt;/h2&gt;
&lt;p&gt;Vær nøgtern om, hvad du får. Et underbygget kort gør ikke enhver ændring korrekt — din agent kan stadig skrive en dårlig patch i præcis den rigtige fil. Hvis din kodebase læner sig op ad dynamisk dispatch, refleksion, eller monkey-patching, vil nogle symbolsøgninger komme tilbage tyndere, end du ville ønske, fordi det er, hvad kørselstidsindirektion gør ved ethvert statisk indeks. Og hvis du håber på en procentdel — ‘hallucinerede stier reduceret med X%’ — finder du den ikke her, fordi ingen ærligt kan måle det tal for dit repo undtagen dig selv.&lt;/p&gt;
&lt;p&gt;Det, du kan forvente, er smallere og mere nyttigt: agenten holder op med at åbne sine ændringer med en gættet sti. Det første skridt bliver forankret i et ægte kort, og det er derfra, færre hallucinerede ændringer kommer. Alt efter citatet — at læse diffet, vurdere patchen — er stadig dit job, ligesom det altid har været.&lt;/p&gt;
&lt;p&gt;Testen koster dig næsten intet: indekser et repo, du allerede kender, og stil ét spørgsmål, du kan verificere. Start med en sti, du allerede er blevet brændt af. Hvis citaterne er forkerte, ser du det med det samme. Hvis de er rigtige, har din agents næste ændring et bedre sted at lande.&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>Hvorfor vi opgraderede kodesøgning til voyage-4-large</title><link>https://maguyva.ai/da/blog/upgrading-code-search-to-voyage-4-large</link><guid isPermaLink="true">https://maguyva.ai/da/blog/upgrading-code-search-to-voyage-4-large</guid><description>Vi flyttede vores kode-embeddings til voyage-4-large — i øjeblikket øverst på den offentlige RTEB-rangliste for kode-retrieval. Den ærlige version: det kompromis, vi indgår, hvad vi rent faktisk indekserer, og hvorfor vi betaler for premium-embeddings.</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Benchmark-tallene i dette indlæg afspejler RTEB-ranglisterne på udgivelsestidspunktet (juni 2026). Ranglister flytter sig; betragt placeringerne som et øjebliksbillede, ikke en permanent kendsgerning.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Semantisk søgning er kun så god som de embeddings, der ligger under den.&lt;/p&gt;
&lt;p&gt;Når en agent spørger Maguyva “hvor håndterer vi retries,” grepper den ikke efter ordet “retry.” Den spørger efter &lt;em&gt;meningen&lt;/em&gt; — backoff-løkken, circuit breakeren, den ting, der pakker et upålideligt kald ind. Det spørgsmål besvares af en vektormodel, der gør kode til et punkt i rummet og finder naboerne. Vælg en bedre model, og enhver semantisk forespørgsel i produktet bliver stille og roligt skarpere.&lt;/p&gt;
&lt;p&gt;Så vi ændrede vores. Fra og med juni 2026 kører Maguyvas kode-embeddings på &lt;strong&gt;&lt;code&gt;voyage-4-large&lt;/code&gt;&lt;/strong&gt;, som erstatter &lt;code&gt;voyage-code-3&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;benchmarken&quot;&gt;Benchmarken&lt;/h2&gt;
&lt;p&gt;Vi traf ikke denne beslutning på mavefornemmelse. Den offentlige &lt;a href=&quot;https://embedding-benchmark-rteb.hf.space/code&quot;&gt;Retrieval Embedding Benchmark (RTEB)&lt;/a&gt; rangerer embedding-modeller på reelle retrieval-opgaver, og på dens &lt;strong&gt;Code&lt;/strong&gt;-rangliste ligger &lt;code&gt;voyage-4-large&lt;/code&gt; på &lt;strong&gt;1.-pladsen samlet (90.86)&lt;/strong&gt; — foran &lt;code&gt;gemini-embedding-2-preview&lt;/code&gt; (90.26) og, bemærkelsesværdigt, foran den model, vi allerede brugte, &lt;code&gt;voyage-code-3&lt;/code&gt; (89.73, #3).&lt;/p&gt;
&lt;p&gt;Det er en lille forskel i den absolutte score. Men det er en forskel i den rigtige retning, på en offentlig benchmark, på præcis den opgave, vi er optaget af: at hente kode ud fra mening.&lt;/p&gt;
&lt;h2 id=&quot;det-kompromis-vi-accepterer-binær-kvantisering&quot;&gt;Det kompromis, vi accepterer: binær kvantisering&lt;/h2&gt;
&lt;p&gt;Her er den del, de fleste “vi opgraderede vores model”-indlæg udelader.&lt;/p&gt;
&lt;p&gt;Maguyva gemmer ikke fuldpræcisions-vektorer. Vi gemmer &lt;strong&gt;binært kvantiserede&lt;/strong&gt; embeddings: hver 2048-dimensionel vektor kollapser til en 2048-bit signatur — &lt;strong&gt;256 bytes pr. vektor&lt;/strong&gt;. De signaturer søges med Hamming-afstand, indekseres og partitioneres pr. tenant.&lt;/p&gt;
&lt;p&gt;Det er et bevidst kompromis. Binær kvantisering opgiver noget retrieval-præcision til gengæld for dramatisk mindre lagerplads og hurtige afstandsberegninger med lave omkostninger uden en separat vektordatabase at drive. For et produkt, der indekserer hele repositorier pr. workspace, betyder den økonomi mere end at presse den sidste brøkdel ud af et benchmarkpoint.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;voyage-4-large&lt;/code&gt; passer ind i dette design uden at tvinge en migrering af lagerlaget: det producerer 2048-dimensionelt output, samme som &lt;code&gt;voyage-code-3&lt;/code&gt;, så vores &lt;code&gt;bit(2048)&lt;/code&gt;-kolonner og Hamming-søgesti ændrede sig ikke. Modellen blev bedre; skemaet stod stille.&lt;/p&gt;
&lt;h2 id=&quot;kode-var-kun-begyndelsen&quot;&gt;Kode var kun begyndelsen&lt;/h2&gt;
&lt;p&gt;Maguyva er et kodeintelligensværktøj. Men vi er også vores egen første kunde, og vi peger det på noget andet: den markdown, der lever i vores repositorier ved siden af koden. Arkitekturbeslutningsregistreringer, driftsvejledninger, kontrakter, finans- og politikdokumenter — det hele versionsstyret i Git, det hele bag den samme MCP-server, et semantisk indeks over &lt;em&gt;dokumenterne&lt;/em&gt;, ikke kun kildekoden.&lt;/p&gt;
&lt;p&gt;Det er præcis derfor, voyage-4-larges bredde betyder noget. På den samme RTEB-familie af ranglister er den &lt;strong&gt;#1 på finans, #1 på sundhed og #1 på samlet tekst-retrieval&lt;/strong&gt; — foran Googles Gemini Embedding, Coheres Embed v4 og OpenAIs text-embedding-3-large. (Voyage er medskaber af RTEB, så vi læser det som et stærkt offentligt signal snarere end en fuldstændig neutral dommer — men den er benchmarket direkte mod hver eneste større kommercielle model, på private hold-out-sæt.) Det samme indeks, der finder den rigtige funktion til en agent, finder den rigtige klausul i en kontrakt eller den rigtige linje i en politik — og på de områder er voyage-4-large ikke et kompromis, det er lederen.&lt;/p&gt;
&lt;h2 id=&quot;hvorfor-vi-betaler-for-premium-embeddings&quot;&gt;Hvorfor vi betaler for premium-embeddings&lt;/h2&gt;
&lt;p&gt;Der findes en billigere måde at søge på, og meget af det er gratis. Leksikalsk søgning — BM25 og dens slægtninge — matcher nøgleord, kører lokalt og koster ingenting. Open source-embedding-modeller som BGE, Nomic og embeddinggemma giver reelt &lt;em&gt;anstændig&lt;/em&gt; semantisk retrieval, og man kan selv hoste dem for prisen af en GPU. Maguyva bruger også den gratis side: hver forespørgsel fusionerer tekst-, AST-, graf- og semantisk søgning. Det, vi ikke sparer på, er det semantiske lag.&lt;/p&gt;
&lt;p&gt;Vi betaler pr. token for premium-embeddings — &lt;code&gt;voyage-4-large&lt;/code&gt; — i stedet for selv at hoste en gratis model, af to grunde. For det første kan nøgleordssøgning alene ikke besvare “hvor håndterer vi retries,” når koden siger &lt;code&gt;backoff&lt;/code&gt; og &lt;code&gt;circuit breaker&lt;/code&gt; og aldrig siger ordet “retry” — mening er hele pointen med embeddingen, og på de områder, vi betjener, halter de åbne modeller efter premium-modellerne: et par point bagud på generel tekst, og længere bagud i nicher som kode, kontrakter og finans. For det andet former retrieval-kvalitet efter vores erfaring det endelige svar mere end modellen i den anden ende gør — en stærk agent, der får den forkerte kontekst, svarer stadig forkert, og den ser aldrig det dokument, den aldrig fik.&lt;/p&gt;
&lt;p&gt;Så premium-embeddings er en pr.-token-regning, der skalerer med hvert repository og dokument, vi indekserer — og vi betaler den med vilje. For det resultat, vores brugere får, den rigtige funktion eller den rigtige klausul, mener vi, at det kompromis er det værd.&lt;/p&gt;
&lt;h2 id=&quot;den-ærlige-del&quot;&gt;Den ærlige del&lt;/h2&gt;
&lt;p&gt;Voyages egen dokumentation kalder stadig &lt;code&gt;voyage-code-3&lt;/code&gt; for den kode-optimerede model. Så hvorfor skifte?&lt;/p&gt;
&lt;p&gt;Fordi vi læser den offentlige benchmark, ikke bare leverandørens modeltabel, og benchmarken satte &lt;code&gt;voyage-4-large&lt;/code&gt; i toppen for kode-retrieval. Dette var en fremadskuende beslutning: tag den nyere, generelt stærkere model og validér den mod en offentlig rangliste på de opgaver, der betyder noget. Vi er trygge ved at tage det væddemål, fordi beviserne er brede — voyage-4-large vinder ikke bare på kode, den fører også på finans, sundhed og samlet retrieval.&lt;/p&gt;
&lt;h2 id=&quot;det-stille-fundament&quot;&gt;Det stille fundament&lt;/h2&gt;
&lt;p&gt;Hvert værktøj, vi eksponerer — semantisk søgning, task-context-indsamling, forankret spørgsmål-svar — bunder i retrieval. Når retrieveren forbedres, får agenten i den anden ende bedre evidens, tager færre forkerte drejninger og forankrer sine svar i den rigtige kode — eller den rigtige klausul, eller den rigtige politik. En skarpere embedding-model er ikke en prangende funktion. Det er fundamentet under alt det andet, og vi har lige styrket det. Du vil ikke bemærke det. Det er hele pointen.&lt;/p&gt;
</content:encoded><category>Embeddings</category><category>Search</category><category>Architecture</category></item><item><title>Rekursiv selvforbedring af sprogunderstøttelse: Sådan forbedrer vi kodeintelligens på tværs af ~280 sprog</title><link>https://maguyva.ai/da/blog/autonomous-quality-loops-language-grind</link><guid isPermaLink="true">https://maguyva.ai/da/blog/autonomous-quality-loops-language-grind</guid><description>Vi understøtter kodeintelligens for ~280 sprog. Intet menneske kan gennemgå det manuelt. Så vi byggede en rekursiv selvforbedringsløkke for sprog — stikprøvekontrol, LLM som dommer, ret én ting, validér igen — og kører den med en flåde af isolerede agenter, indtil udtrækket rent faktisk er korrekt, ikke bare grønt.</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Tallene i dette indlæg afspejler systemet på udgivelsestidspunktet (maj 2026). Se vores &lt;a href=&quot;https://maguyva.ai/da/team&quot;&gt;team-side&lt;/a&gt; for aktuelle tal.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Maguyva udtrækker symboler, referencer og en afhængighedsgraf fra kildekode på omkring 280 sprog. Hvert sprog er en custom tree-sitter-handler — forespørgsler, heuristikker, grænsetilfælde — og enhver handler kan være subtilt forkert på sin egen måde. Et metodekald udsendt som en læsning. En funktion tilskrevet det forkerte omsluttende scope. En relation, der simpelthen ikke findes.&lt;/p&gt;
&lt;p&gt;Det kan man ikke gennemgå manuelt. Intet team kan læse udtræksoutput på tværs af 280 grammatikker og spotte de dårlige kanter. Så det interessante spørgsmål er ikke “er vores udtræk korrekt” — det er “hvordan &lt;em&gt;finder man ud af&lt;/em&gt;, at det er forkert, i denne bredde, uden et menneske i hver eneste løkke.” Vores svar er rekursiv selvforbedring af sprogunderstøttelsen: en kvalitetsløkke drevet af sprogagenter, en LLM, der agerer dommer, og én regel, vi bliver ved med at genlære: grønt er ikke det samme som korrekt.&lt;/p&gt;
&lt;h2 id=&quot;grønt-er-ikke-korrekt&quot;&gt;Grønt er ikke korrekt&lt;/h2&gt;
&lt;p&gt;Hvert sprog har en fixture-suite, og en release-gate scorer det på fem dimensioner — nøjagtighed, strukturel integritet, fuldstændighed, kvalitet og performance. Et sprog bliver kun &lt;strong&gt;GRØNT&lt;/strong&gt;, når præcisionen på dets fixtures er ≥ 0.95, recall ≥ 0.99, og F1 ≥ 0.97, med mindst 20 forventede kanter for statistisk konfidens. Under det er det GULT eller RØDT, og det shippes ikke.&lt;/p&gt;
&lt;p&gt;Den gate er nødvendig, men ikke tilstrækkelig. Fixtures validerer mod fixtures, &lt;em&gt;vi&lt;/em&gt; har skrevet. De indkoder de tilfælde, vi allerede har tænkt på. En handler kan være fejlfri på sine fixtures og stadig ødelægge et mønster, der kun dukker op i rigtig kode — et makro-idiom, en metode med begrænsninger på generiske typer, en sprogfunktion, ingen skrev en fixture til. GRØNT betyder, at fixtures består. Det betyder ikke, at et rigtigt repository udtrækkes rent. Så løkken må lægge fixtures bag sig og undersøge kode fra rigtige projekter.&lt;/p&gt;
&lt;h2 id=&quot;den-indre-løkke-tag-stikprøver-bedøm-ret-bevis&quot;&gt;Den indre løkke: tag stikprøver, bedøm, ret, bevis&lt;/h2&gt;
&lt;p&gt;Kerneløkken kører ét sprog ad gangen:&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;Et par ting gør, at dette virker i stedet for at køre i ring.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dommeren er agenten, ikke et API-kald.&lt;/strong&gt; Når vi siger “LLM som dommer”, mener vi, at sprogagenten selv læser hver udtaget kant mod den rigtige kilde og klassificerer den med faste vurderingskriterier med fem kategorier: er denne kant korrekt, en falsk positiv, den rigtige relation med den forkerte type, tilknyttet det forkerte scope, eller bærer den forkerte metadata? De vurderingskriterier er afgørende — “23% fejlrate” er meningsløst, indtil man ved, om det er reelle defekter, eller om dommeren tæller forkert.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ret én ting, og bevis det så.&lt;/strong&gt; Hver iteration ændrer præcis ét redigerbart asset, kører derefter igen mod et fast testmiljø og beholder kun ændringen, hvis F1 forbedres, og re-klassificeringen ser bedre ud. Hvis ikke, rulles den tilbage. Ingen batch af spekulative rettelser, intet “burde være bedre.” En ændring skal fortjene sin plads, ellers forsvinder den. Og når en rettelse holder, bliver den forfremmet til fixture-suiten — så den fejl, den rettede, aldrig kan snige sig tilbage stiltiende. Det forfremmelsestrin er det, der gør løkken &lt;em&gt;rekursiv&lt;/em&gt; frem for bare gentagende: hver omgang hærder det orakel, den næste omgang validerer mod.&lt;/p&gt;
&lt;h2 id=&quot;lektien-vi-bliver-ved-med-at-genlære-metrikker-overrapporterer&quot;&gt;Lektien, vi bliver ved med at genlære: metrikker overrapporterer&lt;/h2&gt;
&lt;p&gt;Her er fælden, og vi gik lige i den. De sekundære korpusmetrikker — hvor ofte et udtrukket mål ikke kan kobles til et symbol, hvor mange symboler der ser “forældreløse” ud, og så videre — overrapporterer massivt problemer. De er for det meste &lt;em&gt;paradigme-artefakter&lt;/em&gt;, ikke fejl.&lt;/p&gt;
&lt;p&gt;Det reneste eksempel: &lt;code&gt;llvm&lt;/code&gt; viste engang en 73% “kilde-uden-symbol”-rate og blev stemplet katastrofal. Vi gravede i det. Den reelle nøjagtighed var &lt;strong&gt;98.5%&lt;/strong&gt;. De “manglende symboler” var næsten alle legitime eksterne referencer — kald ind i standardbiblioteket, ind i frameworks, ind i kode, der lever uden for repositoriet. Metrikken målte en egenskab ved sproget, ikke en defekt i handleren. Sprog som Zig, COBOL og Odin viser 65–70% “forældreløs”-rater og er fuldstændig korrekte; COBOL havde nul reelle fejl.&lt;/p&gt;
&lt;p&gt;Hvis vi havde ladet de tal styre arbejdet, ville vi have brugt uger på at “rette” handlere, der allerede var korrekte, og ignoreret de sprog med stille, reelle fejl. Konklusionen er ligetil: de aggregerede metrikker er højst et groft triage-signal. &lt;strong&gt;Det reelle kvalitetssignal er stikprøven med kantklassificering&lt;/strong&gt; — at se på faktiske kanter i faktiske repositorier og bedømme dem én for én. Data frem for intuition, men kun når man ved, hvilke data der taler sandt.&lt;/p&gt;
&lt;h2 id=&quot;den-ydre-løkke-en-flåde-ikke-et-maraton&quot;&gt;Den ydre løkke: en flåde, ikke et maraton&lt;/h2&gt;
&lt;p&gt;Ét sprog ad gangen ville tage evigheder på tværs af 280 af dem, så den indre løkke er pakket ind i en ydre, der kører mange parallelt.&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;Hver agent arbejder i et midlertidigt worktree, så de ikke kan træde hinanden over tæerne. Orkestratoren integrerer deres rettelser én ad gangen, hver bag et fuldt manifest-regressionstjek: en ændring, der hjælper sit eget sprog, men stiltiende ødelægger tre andre, lander ikke. Integration er gatet og bekræftet, før noget pushes — regressions-gaten afgør, hvad der er &lt;em&gt;sikkert&lt;/em&gt;, et menneske afgør stadig, hvad der &lt;em&gt;shippes&lt;/em&gt;. Så roterer poolen til det næste sæt sprog, og det hele kører igen.&lt;/p&gt;
&lt;h2 id=&quot;hvad-der-stadig-er-ufuldkomment&quot;&gt;Hvad der stadig er ufuldkomment&lt;/h2&gt;
&lt;p&gt;Dommeren kan tage fejl, og fejlbarheden har en retning: en agent, der kører med for lidt kontekst, &lt;em&gt;overrapporterer&lt;/em&gt;. I én batch blev otte sprog flagget med 5–20% fejl; ved nærmere eftersyn havde kun ét en reel sprogspecifik fejl — resten var dommerfejl fra at overse sprogets egen semantik (én kildelinje, der legitimt udsender flere kanter, parameterbindinger modelleret som tildelinger, reference-per-identifikator-sprog). Det er derfor, vi udtager stikprøver med to seeds og krydstjekker, og hvorfor en uenighed mellem dommeren og fixtures behandles som det &lt;em&gt;mest&lt;/em&gt; interessante signal, ikke en afgjort dom — nogle gange er det fixturet, der tager fejl.&lt;/p&gt;
&lt;p&gt;Vi er også ærlige omkring målet. Målet er nul reelle fejl, punktum — men “nul” er en retning, vi arbejder os hen imod, sprog for sprog, ikke en boks, der krydses af. Der er altid endnu et repository med endnu et idiom.&lt;/p&gt;
&lt;h2 id=&quot;fortjent-ikke-påstået&quot;&gt;Fortjent, ikke påstået&lt;/h2&gt;
&lt;p&gt;Alt, hvad Maguyva gør for en agent — at finde et symbol, spore en afhængighed, besvare et spørgsmål med citeret kode — hviler på, at udtrækket nedenunder er korrekt. På tværs af 280 sprog kan “korrekt” ikke påstås; det skal løbende &lt;em&gt;fortjenes&lt;/em&gt; mod rigtig kode. Løkken er, hvordan vi fortjener det: en autonom stikprøve-og-ret-cyklus, der behandler sine egne metrikker med mistænksomhed, beviser hver ændring og gør hver rettelse til en vagt mod den næste regression. Det er ikke glamourøst. Det er det arbejde, der lader os sige “vi understøtter dit sprog” og mene det. Grønt er nemt. Korrekt er fortjent.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Languages</category><category>Agents</category></item><item><title>Multimodal fusionssøgning: Sådan vælges den rette retriever til hver forespørgsel</title><link>https://maguyva.ai/da/blog/multi-modal-fusion-search</link><guid isPermaLink="true">https://maguyva.ai/da/blog/multi-modal-fusion-search</guid><description>En forespørgsel som &apos;hvor er parseConfig defineret&apos; vil have en anden søgning end &apos;hvordan fungerer auth&apos;. Maguyva klassificerer intentionen, vægter fire retrieval-modaliteter derefter og fusionerer resultaterne med vægtet Reciprocal Rank Fusion.</description><pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Note om det historiske design: Denne artikel fra april 2026 beskriver routingdesignet på det tidspunkt, ikke den nuværende standardadfærd. Rettelsen fra september nedenfor vedrører kun en påstand om en måling. Se &lt;a href=&quot;https://maguyva.ai/da/docs/how-it-works&quot;&gt;Sådan virker det&lt;/a&gt; for aktuel routing, forudindstillinger og eksplicit styring af søgemodaliteter.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;En søgeforespørgsel er ikke bare én ting.&lt;/p&gt;
&lt;p&gt;“hvor er &lt;code&gt;parseConfig&lt;/code&gt; defineret” ønsker et eksakt symbol — ét præcist sted, hurtigt. “hvordan fungerer autentificering” ønsker mening — spredningen af relateret kode, der forklarer et koncept. “hvad går i stykker, hvis jeg ændrer denne funktion” ønsker afhængighedsgrafen. “find strengen &lt;code&gt;ECONNREFUSED&lt;/code&gt;” ønsker et bogstaveligt match, intet klogt.&lt;/p&gt;
&lt;p&gt;Grep er fremragende til bogstavelige matches og nyttigt til nogle referencejagter, men det er ikke en afhængighedsgraf, og det forstår ikke mening. Embeddings dækker den semantiske side, men de er det forkerte værktøj til eksakte strenge og konsekvensanalyse. De fleste kodesøgningsværktøjer vælger én motor og lader enhver forespørgsel leve med det valg. Maguyva låser sig ikke til én motor. Det udreder, hvilken slags spørgsmål du stillede, og blander derefter fire retrievere i det forhold, spørgsmålet fortjener.&lt;/p&gt;
&lt;h2 id=&quot;fire-modaliteter&quot;&gt;Fire modaliteter&lt;/h2&gt;
&lt;p&gt;Under motorhjelmen er der fire uafhængige måder at finde kode på:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;semantisk&lt;/strong&gt; — vektorsøgning over Voyage binære embeddings; finder kode ud fra mening.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;tekst&lt;/strong&gt; — trigram-matching; finder literals, fejlstrenge, eksakte identifikatorer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;strukturel&lt;/strong&gt; — AST-forespørgsler; finder definitioner, signaturer og sprogkonstruktioner.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;graf&lt;/strong&gt; — afhængighedsgrafen; finder kaldere, kaldte og blast radius.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hver er stærk på en anden klasse af spørgsmål. Kunsten er at afgøre, hvor meget man skal stole på hver enkelt for den forespørgsel, der ligger foran én.&lt;/p&gt;
&lt;h2 id=&quot;intentionsklassificering&quot;&gt;Intentionsklassificering&lt;/h2&gt;
&lt;p&gt;Før nogen retrieval kører, sorterer en letvægtsklassifikator forespørgslen i en af seks intentioner med en konfidensscore. Den er bevidst billig — ordnede heuristikker, første match vinder — fordi den kører på den ofte benyttede eksekveringssti og kun tilføjer et millisekund eller to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;starter 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” → &lt;strong&gt;find_references&lt;/strong&gt; (0.90)&lt;/li&gt;
&lt;li&gt;“impact”, “blast radius”, “what depends on” → &lt;strong&gt;impact_analysis&lt;/strong&gt; (0.90)&lt;/li&gt;
&lt;li&gt;en streng i anførselstegn som &lt;code&gt;&quot;string&quot;&lt;/code&gt; eller et fejltoken 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 &lt;code&gt;CamelCase&lt;/code&gt;- eller &lt;code&gt;snake_case&lt;/code&gt;-identifikator → &lt;strong&gt;find_definition&lt;/strong&gt; (0.60–0.80)&lt;/li&gt;
&lt;li&gt;“how”, “why”, “explain”, “architecture” → &lt;strong&gt;understand_code&lt;/strong&gt; (0.75)&lt;/li&gt;
&lt;li&gt;intet matcher → &lt;strong&gt;understand_code&lt;/strong&gt;, lav konfidens (0.40)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hver intention bærer en vægtprofil på tværs af de fire modaliteter. Dette er de reelle tal:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Intention&lt;/th&gt;
&lt;th&gt;semantisk&lt;/th&gt;
&lt;th&gt;tekst&lt;/th&gt;
&lt;th&gt;strukturel (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å “hvor er &lt;code&gt;parseConfig&lt;/code&gt; defineret” læner sig kraftigt op ad AST (0.6). “hvordan fungerer auth” læner sig op ad semantiske vektorer (0.5). “hvad afhænger af dette” er næsten udelukkende graf (0.7). “find &lt;code&gt;ECONNREFUSED&lt;/code&gt;” er næsten udelukkende trigram (0.9), hvor embedding-modellen er slået helt fra — fordi semantisk lighed er præcis det forkerte værktøj til en eksakt streng.&lt;/p&gt;
&lt;h2 id=&quot;den-hurtige-sti-og-den-fusionerede-sti&quot;&gt;Den hurtige sti og den fusionerede sti&lt;/h2&gt;
&lt;p&gt;Når klassifikatoren er sikker — score ≥ 0.85 — og forespørgslen har en almindelig form, springer Maguyva fusion helt over og dirigerer direkte til den ene dominerende modalitet. “hvor er X defineret” har ikke brug for fire retrievere; det har brug for AST-indekset, nu. Den direkte sti rapporteres tilbage som &lt;code&gt;fusion_strategy: &quot;direct&quot;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Alt tvetydigt går gennem fusion. De fire (eller tre, i standardpresettet) modaliteter kører parallelt, hver returnerer sin egen rangerede liste, og vi kombinerer dem.&lt;/p&gt;
&lt;h2 id=&quot;vægtet-reciprocal-rank-fusion&quot;&gt;Vægtet Reciprocal Rank Fusion&lt;/h2&gt;
&lt;p&gt;At fusionere heterogene retrievere er sværere, end det lyder: en kosinuslighed på 0.82 og en trigram-score på 137 og en graf-centralitet på 0.004 er ikke på samme skala, så man kan ikke bare lægge dem sammen. Reciprocal Rank Fusion omgår problemet ved at smide de rå scorer væk og kun beholde den &lt;strong&gt;rang&lt;/strong&gt;, hver motor tildelte. Et resultats bidrag fra én modalitet er:&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;hvor &lt;code&gt;rank&lt;/code&gt; er dets position på den pågældende modalitets liste, og &lt;code&gt;k&lt;/code&gt; er en udjævningskonstant. Bidrag summeres på tværs af modaliteter for ethvert resultat, som mere end én motor fandt — enighed mellem retrievere flyder naturligt til tops. Vi bruger &lt;strong&gt;k = 40&lt;/strong&gt; i standardpresettet og 60 på &lt;code&gt;thorough&lt;/code&gt; (&lt;code&gt;quick&lt;/code&gt; kører kun semantisk, så fusion træder aldrig i kraft der). Det oprindelige RRF-arbejde landede på k = 60 til almenformåls-retrieval; vores standardindstilling giver lidt mere vægt til resultater, som flere modaliteter placerer højt — og vi anbefaler ikke at finjustere den manuelt.&lt;/p&gt;
&lt;p&gt;Oven i det bærer resultater et &lt;strong&gt;graf-vigtigheds-boost&lt;/strong&gt;. Et knudepunkt — en funktion, hele kodebasen læner sig op ad — bør rangere højere end en mindre kendt bladnode, selv ved samme tekstlige relevans, så vi ganger hvert 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 fra pipelinens forudberegnede PageRank/degree-metrikker, og boostet er begrænset til 1.5×, så en populær funktion ikke helt kan begrave en mere relevant, men mindre kendt funktion. Til sidst nedgraderer vi resultater fra vendor-, build- og arkivstier og fjerner dubletter til det bedste chunk pr. fil.&lt;/p&gt;
&lt;h2 id=&quot;hvad-der-stadig-er-ufuldkomment&quot;&gt;Hvad der stadig er ufuldkomment&lt;/h2&gt;
&lt;p&gt;Intent-klassifikatoren er en samling regulære udtryk, ikke en trænet model. Den håndterer almindelige forespørgselsmønstre med heuristikker, og en tvetydig forespørgsel falder tilbage på &lt;code&gt;understand_code&lt;/code&gt; og en blanding med vægt på semantik. En tidligere version af dette indlæg beskrev et fald i andelen af søgninger uden resultater fra cirka 15 % til under 5 % som opnået. Forslaget fra december 2025 angav faktisk en anslået udgangsværdi og et mål; der er ikke fremlagt et understøttende forespørgselssæt eller en målerapport. Vi trækker påstanden om en opnået forbedring tilbage; se &lt;a href=&quot;https://maguyva.ai/evidence/search-quality.md&quot;&gt;kildeevidens og rettelse&lt;/a&gt;. Vi har ikke erstattet klassifikatoren med en trænet model, fordi den billige version er hurtig og god nok til sin tiltænkte routingopgave, og fordi en klassifikator, der tager fejl med stor sikkerhed, er værre end et ærligt fallback. Selve vægtene er håndvalgte forhåndsantagelser, ikke lært fra klikdata, som vi ikke indsamler.&lt;/p&gt;
&lt;h2 id=&quot;stil-spørgsmålet-uden-at-vælge-værktøj&quot;&gt;Stil spørgsmålet uden at vælge værktøj&lt;/h2&gt;
&lt;p&gt;En agent burde ikke behøve at vide, om den skal ty til grep eller embeddings eller kaldegrafen — den bør stille sit spørgsmål i almindelige vendinger og få det rigtige svar. Multimodal fusion er det, der lader &lt;code&gt;find_symbol&lt;/code&gt;, semantisk søgning og afhængighedsanalyse sidde bag ét fælles forespørgselsinterface: systemet aflæser spørgsmålets form og samler stille og roligt den rette retriever til det. Den model, der scorer embeddings, betyder noget, men det gør det også at vide, hvornår man &lt;em&gt;ikke&lt;/em&gt; skal bruge dem. At vælge det rette værktøj til hver forespørgsel er sin egen slags kvalitet, og det er en, vi hellere selv vil eje end skubbe over på den kaldende part.&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>Agent-observability: Hooks, Alloy og Grafana</title><link>https://maguyva.ai/da/blog/agent-observability-hooks-alloy-grafana</link><guid isPermaLink="true">https://maguyva.ai/da/blog/agent-observability-hooks-alloy-grafana</guid><description>Vi koblede Claude Code og Codex sammen i én Grafana-stak med OpenTelemetry og Alloy, og brugte derefter traces og logs til at finde og rette agentadfærdsproblemer ved kilden.</description><pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Agentsystemer fejler på mærkelige måder.&lt;/p&gt;
&lt;p&gt;Nogle gange er modellen problemet. Nogle gange er værktøjet problemet. Nogle gange er din MCP-server fin, men agenten valgte den forkerte specialist, eller brugte halvdelen af sessionen på shell-arbejde, du ikke havde forventet, eller lod omkostningerne løbe ubemærket op i en løkke, der så produktiv ud udefra.&lt;/p&gt;
&lt;p&gt;Hvis du ikke kan se forskellen, driver du ikke rigtig et agentsystem. Du gætter.&lt;/p&gt;
&lt;p&gt;Så vi byggede en observability-stak til vores egen arbejdsgang: Claude Code, Codex, Claude hook-events, Codex notify-events, native OpenTelemetry, Grafana Alloy og Grafana Cloud i den anden ende.&lt;/p&gt;
&lt;p&gt;Den interessante del er ikke “vi lavede et dashboard.” Den interessante del er, at vi var nødt til at opdele telemetri i to forskellige strømme, fordi intet enkelt feed gav os hele billedet.&lt;/p&gt;
&lt;h2 id=&quot;problemet-agent-telemetri-er-fragmenteret&quot;&gt;Problemet: agent-telemetri er fragmenteret&lt;/h2&gt;
&lt;p&gt;Moderne kodeagenter udsender allerede noget telemetri. Det hjælper, men det er ikke nok.&lt;/p&gt;
&lt;p&gt;Native OTEL er god til at besvare spørgsmål som:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hvor mange requests foretog vi?&lt;/li&gt;
&lt;li&gt;Hvor meget kostede en session?&lt;/li&gt;
&lt;li&gt;Hvor er spans og traces?&lt;/li&gt;
&lt;li&gt;Steg latensen?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Den er meget dårligere til at besvare spørgsmål som:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hvilken MCP-server lænede agenten sig op ad?&lt;/li&gt;
&lt;li&gt;Var denne fejl i &lt;code&gt;Bash&lt;/code&gt;, et indbygget filværktøj eller et MCP-kald?&lt;/li&gt;
&lt;li&gt;Hvilken skill blev rent faktisk aktiveret?&lt;/li&gt;
&lt;li&gt;Hvilken subagent-type blev afsendt?&lt;/li&gt;
&lt;li&gt;Udførte sessionen nyttigt arbejde, eller kørte den bare i ring?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Den anden klasse af spørgsmål lever tættere på hooks end på traces.&lt;/p&gt;
&lt;p&gt;Men det omvendte gælder også: nogle af de vigtigste performance-spørgsmål lever tættere på traces end på hooks.&lt;/p&gt;
&lt;p&gt;Hvis du vil vide, hvor latensen faktisk akkumulerede sig, hvilke spans der var langsomme, eller om sessionen brugte tid på modelkald frem for værktøjseksekvering, har du brug for trace-data lige så vel som semantiske events.&lt;/p&gt;
&lt;h2 id=&quot;arkitekturen-vi-endte-med&quot;&gt;Arkitekturen, vi endte med&lt;/h2&gt;
&lt;p&gt;Vi kører to telemetristier side om side.&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 opdeling er bevidst.&lt;/p&gt;
&lt;p&gt;Den er også asymmetrisk. Claude Code giver os en langt rigere grænseflade til livscyklus-hooks. Codex giver os native OTEL plus en notify-grænseflade, så vi normaliserer mindre detaljerede events om afsluttede samtalerunder ind i det samme log-skema i stedet for at foregive, at begge runtimes eksponerer de samme kontroller.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Native OTEL&lt;/strong&gt; giver os basisstrømmen: logs og traces fra selve runtimet, plus metrikker der, hvor runtimet rent faktisk udsender dem.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hook- og notify-events&lt;/strong&gt; giver os det semantiske lag: ting 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; og de klassificerede metadata, vi rent faktisk bekymrer os om, når vi debugger agentadfærd. Claude Code bidrager med den rigere event-strøm her. Codex bidrager med en mindre detaljeret, men stadig nyttig normaliseret strøm.&lt;/p&gt;
&lt;h2 id=&quot;hvorfor-hooks-overhovedet-findes&quot;&gt;Hvorfor hooks overhovedet findes&lt;/h2&gt;
&lt;p&gt;Vores hook-pipeline beriger events, før de rammer Loki.&lt;/p&gt;
&lt;p&gt;I stedet for bare at sige “et værktøj kørte”, klassificerer vi eventet i felter 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;: hvilken MCP-backend håndterede kaldet&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bash_cli&lt;/code&gt;: shell-kommandofamilien&lt;/li&gt;
&lt;li&gt;&lt;code&gt;subagent_type&lt;/code&gt;: hvilken slags specialist blev afsendt&lt;/li&gt;
&lt;li&gt;&lt;code&gt;agent_tool&lt;/code&gt;: om kilden var Claude Code eller Codex&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Det betyder, at vi kan stille spørgsmål, der betyder noget driftsmæssigt:&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;De felter er ikke bare til pynt. De er forskellen mellem “agenten føltes langsom” og “agenten brugte de sidste ti minutter på shell-tunge git-operationer med en høj værktøjsfejlrate.”&lt;/p&gt;
&lt;p&gt;Én implementeringsdetalje, der ser mærkeligere ud, end den er: den delte Loki-strøm bruger stadig &lt;code&gt;service_name=&quot;claude-code-hooks&quot;&lt;/code&gt; som label, selv når eventet kom fra Codex. Den reelle opdeling mellem runtimes sker på &lt;code&gt;agent_tool&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;hvorfor-alloy-sidder-i-midten&quot;&gt;Hvorfor Alloy sidder i midten&lt;/h2&gt;
&lt;p&gt;Grafana Alloy er ikke bare en videresender i denne opsætning. Det er her, reglerne for telemetrien håndhæves.&lt;/p&gt;
&lt;p&gt;Vi peger den native OTEL-strøm fra Claude Code og Codex mod en lokal Alloy-proxy på &lt;code&gt;localhost:4318&lt;/code&gt; og lader derefter Alloy rydde op i payloaden, før den videresendes til Grafana Cloud.&lt;/p&gt;
&lt;p&gt;Det betyder noget, fordi rå agent-telemetri er fuld af høj-kardinalitetsfelter, der er nyttige til analyse, men forfærdelige som indekserede labels:&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;token-antal&lt;/li&gt;
&lt;li&gt;varigheder&lt;/li&gt;
&lt;li&gt;værktøjsparameter-blobs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hvis du indekserer alt, får du en label-eksplosion og en dårlig dag.&lt;/p&gt;
&lt;p&gt;Så Alloy gør tre ting for os:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Holder et meget lille sæt lav-kardinalitetslabels indekseret.&lt;/li&gt;
&lt;li&gt;Flytter støjende, men nyttige felter over i strukturerede metadata.&lt;/li&gt;
&lt;li&gt;Dropper ren støj helt.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Den vigtige idé er simpel: &lt;strong&gt;observér mere, indeksér mindre&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;hvorfor-hook-strømmen-springer-alloy-over&quot;&gt;Hvorfor hook-strømmen springer Alloy over&lt;/h2&gt;
&lt;p&gt;Hook-strømmen er allerede formet til Loki.&lt;/p&gt;
&lt;p&gt;I det øjeblik &lt;code&gt;send_event.py&lt;/code&gt; pusher et event, har vi allerede besluttet, hvilke felter der fortjener label-behandling, og hvilke der hører hjemme i den strukturerede JSON-krop. Den strøm går direkte til Grafana Clouds OTLP-gateway i stedet for at tage endnu en tur gennem Alloy.&lt;/p&gt;
&lt;p&gt;Så systemet har en klar arbejdsdeling:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Alloy&lt;/strong&gt; tæmmer den rå native OTEL-strøm.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hook-berigelse&lt;/strong&gt; gør semantiske events forespørgelige.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Det holder arkitekturen enklere end at forsøge at tvinge alt gennem én sti.&lt;/p&gt;
&lt;h2 id=&quot;hvad-dashboardet-rent-faktisk-viser&quot;&gt;Hvad dashboardet rent faktisk viser&lt;/h2&gt;
&lt;p&gt;Skærmbilledet nedenfor er fra et af observability-dashboardene bag vores agent-arbejdsgang. Det er ikke en benchmark, og tallene er blot et øjebliksbillede. Pointen er formen på dataene: activity feed, værktøjskald, fejl, prompts og opdelinger efter agent, indbyggede værktøjer, MCP-brug, shell-kommandoer og skills.&lt;/p&gt;
&lt;p&gt;Det nyttige er, at dette dashboard lever på den samme Grafana-stak som resten af agent-telemetrien. Vi kan filtrere efter kilde-agent og værktøjsfamilie og se på tværs af runtimes uden at opfinde en særskilt observability-løsning for hvert 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;Åbn skærmbilledet af observability-dashboardet i fuld opløsning&quot;
  &gt;
    &lt;img
      src=&quot;https://maguyva.ai/blog/agent-observability-dashboard.png&quot;
      alt=&quot;Grafana-dashboard, der viser et activity feed, antal værktøjskald, fejl, prompts og opdelinger efter agenter, indbyggede værktøjer, MCP-brug, CLI-kommandoer og skills for en agent-arbejdsgang.&quot;
    /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;
    Et af de live dashboards bag vores agent-arbejdsgang. Dette skærmbillede er blot ét udsnit af en delt Grafana-stak, der også modtager telemetri fra vores andre agent-runtimes og -systemer. Klik på billedet for versionen i fuld opløsning.
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;hvorfor-traces-betyder-mere-end-de-først-ser-ud-til&quot;&gt;Hvorfor traces betyder mere, end de først ser ud til&lt;/h2&gt;
&lt;p&gt;Logs fortæller os, hvilken kategori af arbejde der skete. Traces fortæller os, hvordan arbejdet udfoldede sig over tid.&lt;/p&gt;
&lt;p&gt;Den skelnen betyder noget i agentsystemer, fordi “langsom” er for groft til at være nyttigt.&lt;/p&gt;
&lt;p&gt;Et trace kan fortælle os, om problemet skyldtes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;modellatens&lt;/li&gt;
&lt;li&gt;værktøjseksekveringstid&lt;/li&gt;
&lt;li&gt;gentagne retries&lt;/li&gt;
&lt;li&gt;én særligt dyr MCP-interaktion&lt;/li&gt;
&lt;li&gt;en lang hale af små operationer, der isoleret set så harmløse ud&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I praksis bruger vi hook-strømmen og Tempo-traces sammen.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hook-logs&lt;/strong&gt; besvarer: hvilken slags ting skete der?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Traces&lt;/strong&gt; besvarer: hvor gik tiden hen?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Kombinationen er det, der forvandler observability fra et dashboard til en forklaring.&lt;/p&gt;
&lt;h2 id=&quot;hvor-codex-passer-ind&quot;&gt;Hvor Codex passer ind&lt;/h2&gt;
&lt;p&gt;Codex er en del af den samme stak, men den er ikke identisk med Claude Code.&lt;/p&gt;
&lt;p&gt;For Codex kobler vi to dele sammen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Native OTEL fra Codex ind i Alloy&lt;/li&gt;
&lt;li&gt;Et notify-webhook ind i &lt;code&gt;codex_notify.py&lt;/code&gt;, som mapper afsluttede samtalerunder til det samme Loki-skema, vi bruger til hook-events&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Det giver os et samlet filter som &lt;code&gt;agent_tool=&quot;codex-cli&quot;&lt;/code&gt; inden i den samme log-strøm.&lt;/p&gt;
&lt;p&gt;Det ærlige forbehold: Codex’ notify-payload er i øjeblikket mindre detaljeret end Claude Codes hook-payload, fordi det ikke er den samme slags integrationsgrænseflade. I vores nuværende opsætning kan afsluttede samtalerunder i Codex normaliseres ind i det delte skema, men detaljeret værktøj-for-værktøj-udtræk er stadig bedre i den native OTEL-strøm end i notify-broen.&lt;/p&gt;
&lt;p&gt;Det er ikke en grund til at undgå indlægget. Det er hele pointen med indlægget. Rigtige observability-systemer samles ud fra ufuldkomne signaler.&lt;/p&gt;
&lt;h2 id=&quot;grafana-over-mcp-ændrer-spillet&quot;&gt;Grafana over MCP ændrer spillet&lt;/h2&gt;
&lt;p&gt;Det større skifte er, at Grafana ikke kun er et sted, mennesker besøger i en browser.&lt;/p&gt;
&lt;p&gt;I dette repository eksponerer vi også Grafana gennem MCP. Det betyder, at en agent kan forespørge Loki, Prometheus og Tempo direkte i stedet for at vente på, at et menneske manuelt inspicerer dashboardene først.&lt;/p&gt;
&lt;p&gt;Det gør observability til et aktivt input til arbejdsgangen.&lt;/p&gt;
&lt;p&gt;En agent kan spørge:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hvilke værktøjsfamilier fejlede mest i den seneste time?&lt;/li&gt;
&lt;li&gt;Hvilken MCP-server dominerede en session?&lt;/li&gt;
&lt;li&gt;Reducerede seneste ændringer værktøjsfejl, eller flyttede de bare arbejdet over i mere shell-tunge stier med de samme fejl?&lt;/li&gt;
&lt;li&gt;Hvilke traces viser den højeste latens eller gentagne retries?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Når du har det, er du meget tæt på en selvforbedringsløkke.&lt;/p&gt;
&lt;h2 id=&quot;fra-dashboard-til-feedbackløkke&quot;&gt;Fra dashboard til feedbackløkke&lt;/h2&gt;
&lt;p&gt;Det er den del, vi finder mest interessant.&lt;/p&gt;
&lt;p&gt;Når observability-stakken er forespørgelig fra agentlaget, holder telemetri op med at være en passiv rapporteringsflade og bliver et kontrolsignal.&lt;/p&gt;
&lt;p&gt;Løkken ser sådan ud:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Agentaktivitet udsender traces, metrikker og berigede hook-logs.&lt;/li&gt;
&lt;li&gt;Grafana gemmer beviserne i Loki, Tempo og Prometheus, hvor metrikker findes.&lt;/li&gt;
&lt;li&gt;Agenter forespørger de beviser gennem Grafana MCP.&lt;/li&gt;
&lt;li&gt;Systemet identificerer en uhensigtsmæssig blanding af værktøjer, skrøbelige skills, svag routing eller shell-tunge arbejdsgange, der bliver ved med at producere undgåelige fejl.&lt;/li&gt;
&lt;li&gt;Agenter eller operatører justerer prompts, agentkonfigurationer, skill-beskrivelser, routing-regler eller værktøjsadgang.&lt;/li&gt;
&lt;li&gt;Den næste session producerer et nyt mønster i telemetrien, og cyklussen gentages.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Sådan bevæger man sig fra “interessant dashboard” til “målbart forbedringssystem.”&lt;/p&gt;
&lt;p&gt;Målet er ikke at maksimere én værktøjskategori. Det er at lande på den rette blanding af CLI, indbyggede værktøjer, MCP-kald og skills til det arbejde, der rent faktisk udføres.&lt;/p&gt;
&lt;h2 id=&quot;hvad-dette-lader-os-besvare&quot;&gt;Hvad dette lader os besvare&lt;/h2&gt;
&lt;p&gt;Når begge runtimes lander i den samme Grafana-stak, kan vi besvare driftsspørgsmål meget hurtigere:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Er fejl koncentreret i én værktøjsfamilie?&lt;/li&gt;
&lt;li&gt;Skaber shell-tunge arbejdsgange undgåelige fejl, hvor et højere-niveau-værktøj burde eksistere?&lt;/li&gt;
&lt;li&gt;Hvilke MCP-servere bærer arbejdsbyrden?&lt;/li&gt;
&lt;li&gt;Betaler vi for agentaktivitet, der ikke producerer meningsfuld fremdrift?&lt;/li&gt;
&lt;li&gt;Er en session usund på grund af modellen, værktøjerne eller orkestreringslaget?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Det er særligt nyttigt i multi-agent-arbejdsgange, hvor “agenten var travlt optaget” fortæller dig næsten ingenting.&lt;/p&gt;
&lt;p&gt;Hvis én specialist bliver ved med at blive afsendt og producerer høje fejlrater, er det et routing- eller prompt-formningsproblem.&lt;/p&gt;
&lt;p&gt;Hvis én MCP-server dominerer alle kald, kan det være god arkitektur eller et tegn på, at alt andet er dødvægt.&lt;/p&gt;
&lt;p&gt;Hvis værktøjsfejl stiger, mens omkostningerne forbliver høje, har du et driftsproblem, ikke et kvalitetsproblem.&lt;/p&gt;
&lt;p&gt;Hvis shell-arbejde bliver ved med at fejle på forudsigelige, undgåelige måder, hvor et højere-niveau-værktøj burde eksistere, er det et produktsignal.&lt;/p&gt;
&lt;p&gt;Hvis én skill aktiveres konstant, men ikke forbedrer resultaterne, er det et prompt- eller routing-signal.&lt;/p&gt;
&lt;h2 id=&quot;den-reelle-lektie&quot;&gt;Den reelle lektie&lt;/h2&gt;
&lt;p&gt;Den dybere lektie her er, at agent-observability har brug for både &lt;strong&gt;runtime-telemetri&lt;/strong&gt; og &lt;strong&gt;arbejdsgangs-telemetri&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Runtime-telemetri fortæller dig, hvad systemet gjorde.&lt;/p&gt;
&lt;p&gt;Arbejdsgangs-telemetri fortæller dig, hvad agenten troede, den var i gang med.&lt;/p&gt;
&lt;p&gt;Vi har brug for begge dele.&lt;/p&gt;
&lt;p&gt;Hvis du kun beholder traces og tællere, går du glip af det semantiske lag. Hvis du kun beholder hook-events, går du glip af latens, spans og det bredere runtime-billede.&lt;/p&gt;
&lt;p&gt;Og hvis du beholder begge dele, men aldrig fodrer dem tilbage ind i agentlaget, har du monitorering, ikke tilpasning.&lt;/p&gt;
&lt;p&gt;Kombinationen er det, der gør systemet forklarligt nok til at drive og finjusterbart nok til at forbedre.&lt;/p&gt;
&lt;h2 id=&quot;hvad-der-stadig-er-ufuldkomment&quot;&gt;Hvad der stadig er ufuldkomment&lt;/h2&gt;
&lt;p&gt;Der er stadig ting, som mangler finpudsning.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ikke ethvert hook-event inkluderer de varigheds- og token-data, vi gerne ville have.&lt;/li&gt;
&lt;li&gt;Nogle af de bedste timing-visninger kommer stadig fra Tempo-traces, ikke hook-logs.&lt;/li&gt;
&lt;li&gt;Codex er i dag mindre semantisk rig end Claude Code i den berigede event-strøm.&lt;/li&gt;
&lt;li&gt;Dashboard-skærmbilledet er en levende driftsflade, ikke et poleret marketingartefakt.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Det sidste punkt er tilsigtet. Vi vil hellere vise det rigtige instrumentbræt end lade som om, agentsystemer magisk forklarer sig selv.&lt;/p&gt;
&lt;h2 id=&quot;hvorfor-det-betyder-noget-for-maguyva&quot;&gt;Hvorfor det betyder noget for Maguyva&lt;/h2&gt;
&lt;p&gt;Maguyva handler om at give agenter bedre kodeintelligens. Men når agenter rent faktisk udfører nyttigt arbejde, dukker der straks et nyt krav op: du skal kunne se, hvordan de opfører sig.&lt;/p&gt;
&lt;p&gt;Søgekvalitet, routing-kvalitet, værktøjsvalg og effektiv udnyttelse af konteksten bliver alle sammen observerbare problemer.&lt;/p&gt;
&lt;p&gt;Det er derfor, vi mener, det er værd at skrive om. Fremtidens agent-stak er ikke bare prompts og værktøjer. Det er prompts, værktøjer og det instrumenteringslag, der fortæller dig, om det hele fungerer.&lt;/p&gt;
&lt;p&gt;Hvis du bygger seriøse agent-arbejdsgange, er observability ikke valgfri infrastruktur. Det er en del af produktet.&lt;/p&gt;
</content:encoded><category>Observability</category><category>Grafana</category><category>OpenTelemetry</category><category>Architecture</category></item><item><title>Mining-løkken: Sådan bliver ændringer til institutionel hukommelse</title><link>https://maguyva.ai/da/blog/mining-workflow-closing-the-loop</link><guid isPermaLink="true">https://maguyva.ai/da/blog/mining-workflow-closing-the-loop</guid><description>Git-commits bliver til strukturerede changelog-poster og arkitektoniske beslutningsregistreringer, som derefter fødes tilbage til AI-agenter som forespørgelig institutionel hukommelse.</description><pubDate>Tue, 03 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Tallene i dette indlæg afspejler systemet på udgivelsestidspunktet (februar 2026). Se vores &lt;a href=&quot;https://maguyva.ai/da/team&quot;&gt;team-side&lt;/a&gt; for aktuelle tal.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ethvert engineering-team står over for den samme udfordring: ændringer sker konstant, men &lt;em&gt;hvorfor’et&lt;/em&gt; bag de ændringer forsvinder. Seks måneder senere spørger nogen “hvorfor valgte vi DuckDB til pipeline-stadier?”, og svaret lever kun i hovedet på den, der traf det valg — hvis vedkommende stadig er her.&lt;/p&gt;
&lt;p&gt;Vi byggede en mining-arbejdsgang, der lukker denne løkke. Ændringer flyder gennem git-commits, bliver behandlet af vores mining-pipeline, bliver til strukturerede changelog-poster og arkitektoniske beslutningsregistreringer, og fødes derefter tilbage til vores AI-agenter gennem CLI-forespørgsler. Resultatet: institutionel hukommelse, som både mennesker og AI kan tilgå.&lt;/p&gt;
&lt;h2 id=&quot;problemet-beslutninger-fordamper&quot;&gt;Problemet: Beslutninger fordamper&lt;/h2&gt;
&lt;p&gt;Overvej et typisk scenarie. En udvikler committer:&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;Denne commit repræsenterer et betydeligt arkitektonisk valg. Teamet evaluerede muligheder, overvejede afvejninger og landede på DuckDB af specifikke årsager. Men al den kontekst lever i:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En Slack-tråd (sandsynligvis slettet)&lt;/li&gt;
&lt;li&gt;Nogens hukommelse (bestemt falmende)&lt;/li&gt;
&lt;li&gt;En kommentar i koden (måske, hvis man er heldig)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tre måneder senere spørger et nyt teammedlem: “Skal jeg bruge DuckDB eller SQLite til dette nye stadie?” Uden institutionel hukommelse genopfinder de enten den dybe tallerken eller træffer inkonsistente valg.&lt;/p&gt;
&lt;h2 id=&quot;løkken-fra-commits-til-kontekst&quot;&gt;Løkken: Fra commits til kontekst&lt;/h2&gt;
&lt;p&gt;Vores mining-arbejdsgang omdanner git-historik til forespørgelig viden:&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 centrale indsigt: både changelogs og arkitektoniske beslutninger flyder fra den samme git-historik, behandlet gennem en samlet pipeline. Det sikrer, at intet falder mellem to stole.&lt;/p&gt;
&lt;h2 id=&quot;sådan-fungerer-mining&quot;&gt;Sådan fungerer mining&lt;/h2&gt;
&lt;h3 id=&quot;trin-1-synkronisér-indekset&quot;&gt;Trin 1: Synkronisér indekset&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;Denne kommando skanner git-historik og bygger et indeks over alle commits. Den udtrækker strukturerede signaler fra hver commit:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Konventionel commit-type (&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 (hvilken pakke eller hvilket område)&lt;/li&gt;
&lt;li&gt;Breaking-change-markører&lt;/li&gt;
&lt;li&gt;Berørte filer og kompleksitetsmetrikker&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;trin-2-tjek-dækningsstatus&quot;&gt;Trin 2: Tjek dækningsstatus&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ådan ser vores nuværende status ud:&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 behandlet. 476 blev til arkitektoniske beslutninger. 6.799 blev til changelog-poster. Hver commit klassificeret.&lt;/p&gt;
&lt;h3 id=&quot;trin-3-hent-kandidater-til-gennemgang&quot;&gt;Trin 3: Hent kandidater til gennemgang&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;Dette fremviser commits, der endnu ikke er blevet behandlet, med fuld kontekst til 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;Signalerne hjælper med at guide klassificeringen: &lt;code&gt;is_releasable_type: true&lt;/code&gt; antyder, at denne bør fremgå af changelog’en. Det store antal indsættelser og infrastrukturfilerne antyder, at den også kunne være en arkitektonisk beslutning.&lt;/p&gt;
&lt;h3 id=&quot;trin-4-klassificér-commits&quot;&gt;Trin 4: Klassificér commits&lt;/h3&gt;
&lt;p&gt;To stier deler sig her: changelog-poster og arkitektoniske beslutninger.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For 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;Dette registrerer, at commit &lt;code&gt;abc123&lt;/code&gt; bør fremgå af changelog’en under kategorien “Added.”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For arkitektoniske beslutninger:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Først, hent et reelt beslutnings-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;Klassificér derefter med beslutnings-ID’et:&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;Dette knytter commit’en til en beslutningsregistrering, der vil blive oprettet eller opdateret.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For batch-behandling (det, vi rent faktisk 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 understøtter begge domæner i én omgang:&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;trin-5-render-outputs&quot;&gt;Trin 5: Render outputs&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;Dette genererer &lt;code&gt;CHANGELOG.md&lt;/code&gt;-filer pr. pakke ud fra ledgeren. Changelogs er afledte artefakter — slet dem, og de genereres perfekt igen fra kilde-ledgeren.&lt;/p&gt;
&lt;h2 id=&quot;beslutningsregistreringens-struktur&quot;&gt;Beslutningsregistreringens struktur&lt;/h2&gt;
&lt;p&gt;Udtrukne beslutninger bliver til YAML-filer med detaljerede 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;Hver beslutning linker tilbage til sine kilde-commits. Hver beslutning angiver, hvilke filer den påvirker. Relationer mellem beslutninger er eksplicitte.&lt;/p&gt;
&lt;h2 id=&quot;cli-integration-forespørgsel-på-institutionel-hukommelse&quot;&gt;CLI-integration: Forespørgsel på institutionel hukommelse&lt;/h2&gt;
&lt;p&gt;Det er her, løkken lukkes. Agenter kan forespørge beslutninger gennem CLI’en:&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;Returnerer beslutninger om retry-logik, fejlhåndtering, recovery-mønstre.&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;Returnerer den komplette beslutningsregistrering med kontekst, begrundelse og konsekvens.&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;Viser hvilke arkitektoniske valg der blev truffet for nylig.&lt;/p&gt;
&lt;h3 id=&quot;sådan-bruger-agenter-dette&quot;&gt;Sådan bruger agenter dette&lt;/h3&gt;
&lt;p&gt;Vores orkestrators grundlæggende instruktioner inkluderer:&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 bliver bedt om at implementere noget relateret til DuckDB, kan den først tjekke:&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;Og opdage DEC-PL-142, og lære:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hvorfor vi valgte DuckDB (context)&lt;/li&gt;
&lt;li&gt;Hvordan man bruger det korrekt (agent_guidance)&lt;/li&gt;
&lt;li&gt;Hvilke filer man skal kigge på (files)&lt;/li&gt;
&lt;li&gt;Hvilke relaterede beslutninger der findes (related)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Agenten genopfinder ikke den dybe tallerken. Den bygger videre på etablerede mønstre.&lt;/p&gt;
&lt;h2 id=&quot;testen-med-tre-spørgsmål&quot;&gt;Testen med tre spørgsmål&lt;/h2&gt;
&lt;p&gt;Ikke enhver commit fortjener en beslutningsregistrering. Vi bruger testen med tre spørgsmål til at filtrere:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Var beslutningen svær at træffe?&lt;/strong&gt; Krævede det betydelig analyse, afvejningsvurdering eller debat?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Er det dyrt at ændre?&lt;/strong&gt; Ville det kræve betydeligt genarbejde at omgøre denne beslutning?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Har det konsekvenser for hele systemet?&lt;/strong&gt; Påvirker det flere pakker eller etablerer det mønstre, andre vil følge?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Hvis en commit svarer “ja” på mindst ét af disse spørgsmål, er den kandidat til beslutningsudtræk. Vores typiske rate: 1-4 beslutninger pr. 100 commits (omkring 1-4%).&lt;/p&gt;
&lt;p&gt;For changelog-poster er barren lavere: enhver brugervendt ændring (features, fixes, forbedringer) registreres. Interne opgaver, dokumentationsopdateringer og refaktoreringer springes typisk over. Vores typiske rate: 30-50 changelog-poster pr. 100 commits.&lt;/p&gt;
&lt;h2 id=&quot;datalagring-append-only-ledgers&quot;&gt;Datalagring: Append-only ledgers&lt;/h2&gt;
&lt;p&gt;Mining-systemet bruger append-only JSONL-ledgers til konfliktfri multi-agent-drift:&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; betyder, at flere agenter kan klassificere commits samtidigt uden merge-konflikter. Hver linje er uafhængig.&lt;/p&gt;
&lt;h2 id=&quot;valideringsgates&quot;&gt;Valideringsgates&lt;/h2&gt;
&lt;p&gt;Før enhver mining-session kører 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;Dette tjekker:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gyldighed af SHA-format&lt;/li&gt;
&lt;li&gt;Overholdelse af beslutnings-ID-format&lt;/li&gt;
&lt;li&gt;Ingen dubletregistreringer for den samme SHA&lt;/li&gt;
&lt;li&gt;At refererede beslutninger rent faktisk findes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Efter klassificering validerer vi igen, før vi committer ændringerne.&lt;/p&gt;
&lt;h2 id=&quot;hvorfor-det-betyder-noget&quot;&gt;Hvorfor det betyder noget&lt;/h2&gt;
&lt;p&gt;Den feedbackløkke, vi har bygget, løser flere problemer:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For nye teammedlemmer:&lt;/strong&gt; I stedet for at spørge “hvorfor gjorde vi X?”, kan de søge i beslutningsregistret. Konteksten er bevaret.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For AI-agenter:&lt;/strong&gt; De opererer ikke i et vakuum. De kan forespørge institutionel viden, før de kommer med anbefalinger. Når de bliver bedt om at tilføje et nyt pipeline-stadie, kan de opdage DuckDB-mønsteret og følge det.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For arkitektonisk konsistens:&lt;/strong&gt; Beslutninger er eksplicitte og søgbare. Når nogen foreslår en tilgang, der modsiger en eksisterende beslutning, kan systemet fremhæve konflikten.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For changelog-generering:&lt;/strong&gt; Release notes er ikke noget, der skal skrives i sidste øjeblik. De er et biprodukt af løbende klassificering under udvikling.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For onboarding:&lt;/strong&gt; Nye agenter arver hele kodebasens kontekst. De ser ikke bare koden — de ser de beslutninger, der formede den.&lt;/p&gt;
&lt;h2 id=&quot;nuværende-tilstand&quot;&gt;Nuværende tilstand&lt;/h2&gt;
&lt;p&gt;Pr. i dag:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;15.637 commits&lt;/strong&gt; behandlet gennem pipelinen&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;476 arkitektoniske beslutninger&lt;/strong&gt; udtrukket og dokumenteret&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;6.799 changelog-poster&lt;/strong&gt; registreret&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;100% dækning&lt;/strong&gt; på tværs af begge domæner&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hver commit siden vi startede, er blevet klassificeret. Den institutionelle hukommelse er komplet og forespørgelig.&lt;/p&gt;
&lt;h2 id=&quot;kom-i-gang&quot;&gt;Kom i gang&lt;/h2&gt;
&lt;p&gt;Hvis du vil implementere noget lignende:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Start med konventionelle commits.&lt;/strong&gt; Mining-pipelinen fungerer bedst, når commits har strukturerede præfikser (&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;Definér dine domæner.&lt;/strong&gt; Vi bruger 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;. Disse organiserer beslutninger efter område.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Byg klassificeringsvanen op.&lt;/strong&gt; Mining fungerer, når teams regelmæssigt klassificerer commits. Batch-behandling med LLM-assistance hjælper med at skalere.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Gør beslutninger forespørgelige.&lt;/strong&gt; Værdien vokser yderligere, når agenter kan søge i beslutninger via CLI. Strukturér dit output til maskinel behandling.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Luk løkken.&lt;/strong&gt; Beslutninger bør påvirke fremtidigt arbejde. Inkludér beslutningsreferencer i agentinstruktioner og code review-tjeklister.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Målet er ikke perfekt dokumentation. Det er at gøre &lt;em&gt;hvorfor’et&lt;/em&gt; bag ændringer tilgængeligt for både mennesker og AI, i dag og seks måneder fra nu. Når ændringer bliver institutionel hukommelse, bygger teams videre på etablerede mønstre i stedet for at genopfinde dem.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Mining-arbejdsgangen er en del af vores orkestreringsmotor, specifikt context-motor-modulet i vores orchestration-pakke.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Workflows</category></item><item><title>Skill mining: Fra 3.500 kandidater til 466 kapabiliteter</title><link>https://maguyva.ai/da/blog/skill-mining-3500-and-counting</link><guid isPermaLink="true">https://maguyva.ai/da/blog/skill-mining-3500-and-counting</guid><description>Vi screenede 3.500 skill-kandidater og adopterede 466. En systematisk mining- og indarbejdelsesløkke til at opbygge et sammenhængende skill-bibliotek til 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;Tallene i dette indlæg afspejler systemet på udgivelsestidspunktet (januar 2026). Se vores &lt;a href=&quot;https://maguyva.ai/da/team&quot;&gt;team-side&lt;/a&gt; for aktuelle tal.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;3500-skill-problemet&quot;&gt;3.500-skill-problemet&lt;/h2&gt;
&lt;p&gt;Da vi begyndte at bygge et agent-orkestreringssystem, stod vi over for en interessant udfordring: der findes tusindvis af potentielle skills spredt ud over AI-økosystemet. GitHub-repositorier, leverandørdokumentation, community-projekter, interne mønstre - skills findes overalt. Men hvilke betyder noget? Hvilke virker? Og hvordan vedligeholder man et sammenhængende skill-bibliotek, som agenter rent faktisk kan bruge?&lt;/p&gt;
&lt;p&gt;Vores svar: en systematisk mining- og indarbejdelsesløkke.&lt;/p&gt;
&lt;h2 id=&quot;tallene-i-dag&quot;&gt;Tallene i dag&lt;/h2&gt;
&lt;p&gt;Lidt over tre måneder efter Anthropic lancerede Agent Skills den 16. oktober 2025, så vores status sådan ud, da dette indlæg blev udgivet den 27. januar 2026:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metrik&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;Identificerede kandidater&lt;/td&gt;
&lt;td&gt;3.500+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Adopterede skills&lt;/td&gt;
&lt;td&gt;466&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Leverandør-skills&lt;/td&gt;
&lt;td&gt;373&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interne skills&lt;/td&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Aktive leverandører&lt;/td&gt;
&lt;td&gt;25+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gennemsnitlige tokens pr. skill&lt;/td&gt;
&lt;td&gt;2.834&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Refererede værktøjer&lt;/td&gt;
&lt;td&gt;89&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unikke tags&lt;/td&gt;
&lt;td&gt;635&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Vi har gennemgået over 3.500 skill-kandidater. Vi har adopteret 466. Det er en adoptionsrate på 13% - og den selektivitet er tilsigtet.&lt;/p&gt;
&lt;h2 id=&quot;videnslagssystemet&quot;&gt;Videnslagssystemet&lt;/h2&gt;
&lt;p&gt;Ikke alle skills har samme værdi. Vi organiserer dem i fem videnslag (K0-K4), der hver repræsenterer et forskelligt anvendelsesscope:&lt;/p&gt;
&lt;h3 id=&quot;k0-foundations-universel&quot;&gt;K0: Foundations (universel)&lt;/h3&gt;
&lt;p&gt;Skills, enhver agent bør have. Disse repræsenterer “god tænker”-kapabiliteter, der virker overalt.&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 er portable til ethvert projekt, ethvert domæne, enhver stack. De indkoder universelle kognitive mønstre.&lt;/p&gt;
&lt;h3 id=&quot;k1-identities-disciplin&quot;&gt;K1: Identities (disciplin)&lt;/h3&gt;
&lt;p&gt;“God ingeniør”- eller “god forsker”-skills, der gælder på tværs af projekter inden for 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-domains-fagekspertise&quot;&gt;K2: Domains (fagekspertise)&lt;/h3&gt;
&lt;p&gt;“God databaseekspert”- eller “god sikkerhedsingeniør”-skills, der er portable inden for et felt.&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-stacks-teknologi&quot;&gt;K3: Stacks (teknologi)&lt;/h3&gt;
&lt;p&gt;“God Supabase-bruger”- eller “god Cloudflare-udvikler”-skills til specifikke teknologistakke.&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-project-organisation&quot;&gt;K4: Project (organisation)&lt;/h3&gt;
&lt;p&gt;Skills, der er specifikke for vores organisation og arbejdsgange.&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-løkken&quot;&gt;Mining-løkken&lt;/h2&gt;
&lt;h3 id=&quot;fase-1-discovery&quot;&gt;Fase 1: Discovery&lt;/h3&gt;
&lt;p&gt;Skills kommer fra alle steder:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Leverandørrepositorier&lt;/strong&gt;: AWS, Anthropic, Cloudflare, Supabase og community-bidragydere udgiver skill-samlinger. Vi følger 25+ leverandørrødder.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Community-projekter&lt;/strong&gt;: GitHub er fuldt af Claude Code-skabeloner, agentmønstre og arbejdsgangsdefinitioner.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Interne mønstre&lt;/strong&gt;: Efterhånden som vores team løser problemer, opstår mønstre. Disse formaliseres til skills.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dokumentationsmining&lt;/strong&gt;: Teknisk dokumentation indeholder ofte implicitte skills - procedurer, tjeklister, beslutningstræer.&lt;/p&gt;
&lt;p&gt;Discovery er kontinuerlig. Vi bruger en skill-backlog til at spore kandidater før formel evaluering.&lt;/p&gt;
&lt;h3 id=&quot;fase-2-evaluering&quot;&gt;Fase 2: Evaluering&lt;/h3&gt;
&lt;p&gt;Enhver kandidat vurderes efter de samme 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;Alle fem produktkriterier skal bestås. Det er derfor, 87% af kandidaterne afvises.&lt;/p&gt;
&lt;p&gt;Derefter gennemgår enhver kandidat en separat tillidsgennemgang. Vi behandler ikke et officielt leverandørrepository, en velkendt community-vedligeholder og et tilfældigt GitHub-repository som ligeværdige sandhedskilder.&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;Betroede leverandører får en lettere proveniensgennemgang, men ikke fribillet. Ikke-betroede eller ukendte kilder får et dybere manuelt tjek, og vi kører ikke medfølgende scripts, før de er blevet læst, afgrænset og klassificeret som sikre.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gap-analyse&lt;/strong&gt;: Før vi adopterer, søger vi i vores 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;Hvis vi allerede har det, har vi ikke brug for det. Hvis vi har noget tæt på, kan vi vælge at fusionere i stedet for at adoptere.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dybde- og standardscoring&lt;/strong&gt;: Vi scorer også, hvor fuldt en kandidat udnytter agent-skill-modellen. Et enligt &lt;code&gt;SKILL.md&lt;/code&gt; kan stadig være nyttigt, men dybere skills er mere værdifulde, når de adskiller instruktioner fra referencer, scripts og assets på den måde, &lt;code&gt;agentskills.io&lt;/code&gt; opfordrer til.&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-stjerner kan løfte en troværdighedsscore en smule, men de redder aldrig en overfladisk eller usikker skill. Et repository med mange stjerner og én vag &lt;code&gt;SKILL.md&lt;/code&gt; og uigennemsigtige scripts scorer lavere end et mindre repository med en præcis beskrivelse, kurateret &lt;code&gt;references/&lt;/code&gt; og atomare hjælpefunktioner, der rent faktisk udnytter den fulde skill-kapabilitet.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Strukturel analyse&lt;/strong&gt;: Vi tjekker 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;Hvis en kandidat inkluderer scripts, bliver den gennemgang mere striks. En god skill er ikke bare nyttig; den skal være læselig, afgrænset og sikker at overlade til en agent. Det sikkerhedsfilter alene diskvalificerer en betydelig andel af ellers interessante kandidater.&lt;/p&gt;
&lt;h3 id=&quot;fase-3-indarbejdelse&quot;&gt;Fase 3: Indarbejdelse&lt;/h3&gt;
&lt;p&gt;Når en skill består evalueringen, kommer den ind i registret. Men skills adopteres aldrig uændrede. De modificeres, så de passer til vores system.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Modifikationer ved adoption&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Metadata-normalisering&lt;/strong&gt;: Enhver skill får vores frontmatter-skema&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;K-lags-tildeling&lt;/strong&gt;: Skills placeres i det passende videnslag&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tag-berigelse&lt;/strong&gt;: Tags tilføjes til discovery&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Værktøjsdeklaration&lt;/strong&gt;: Tilladte værktøjer erklæres eksplicit&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sektionsjustering&lt;/strong&gt;: Indhold omstruktureres, så det matcher vores template&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;En typisk skill-YAML efter indarbejdelse:&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;fase-4-scope-tildeling&quot;&gt;Fase 4: Scope-tildeling&lt;/h3&gt;
&lt;p&gt;Skills tildeles scopes - kategorier, der afgør, hvilke agenter der indlæser hvilke 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 erklærer deres scopes, og skills tildeles automatisk:&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;fase-5-materialisering&quot;&gt;Fase 5: Materialisering&lt;/h3&gt;
&lt;p&gt;Skills lever ikke som YAML i produktion. De renderes til SKILL.md-filer, som Claude Code kan indlæse:&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;Denne kommando:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Læser alle skill-YAML-definitioner&lt;/li&gt;
&lt;li&gt;Renderer dem gennem Jinja-templates&lt;/li&gt;
&lt;li&gt;Skriver SKILL.md-filer til &lt;code&gt;.claude/skills/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Organiserer efter K-lag (foundations/, identities/, domains/, stacks/, project/)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Den endelige outputstruktur:&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-dvalende-scope-mønster&quot;&gt;Det dvalende scope-mønster&lt;/h2&gt;
&lt;p&gt;Et af vores mest kraftfulde mønstre er “adopteret-men-ikke-indlæst”-skills. Vi kalder disse dvalende scopes.&lt;/p&gt;
&lt;p&gt;Overvej scientific computing-skills fra k-dense-scientific-repositoriet. Vi har adopteret 120+ skills, der dækker bioinformatik, kemi, kvantecomputing og klinisk informatik. Men de fleste af vores agenter har ikke brug for molekylær docking eller genekspressionsanalyse.&lt;/p&gt;
&lt;p&gt;I stedet for at indlæse alle 120 skills i hver agent (hvilket oppuster kontekstvinduer), gør vi følgende:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Vi &lt;strong&gt;adopterer&lt;/strong&gt; skills med et specifikt scope (f.eks. &lt;code&gt;bioinformatics&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Vi holder dem &lt;strong&gt;dvalende&lt;/strong&gt; - registreret, men ikke indlæst&lt;/li&gt;
&lt;li&gt;Vi &lt;strong&gt;aktiverer&lt;/strong&gt; dem kun, når en agent erklærer det scope&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;Dette mønster lader os have 466 skills i registret, mens typiske agenter kun indlæser 40-60 relevante.&lt;/p&gt;
&lt;h2 id=&quot;skill-typer&quot;&gt;Skill-typer&lt;/h2&gt;
&lt;p&gt;Skills kommer i tre kognitive mønstre:&lt;/p&gt;
&lt;h3 id=&quot;workflow&quot;&gt;Workflow&lt;/h3&gt;
&lt;p&gt;Ordnede procedurelle trin: “1. Gør X, 2. Så Y, 3. Til sidst 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;discipline&quot;&gt;Discipline&lt;/h3&gt;
&lt;p&gt;Regler for adfærd: “Altid X”, “Aldrig Y”, “Foretræk 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;checklist&quot;&gt;Checklist&lt;/h3&gt;
&lt;p&gt;Verificeringskriterier: “Bekræft X”, “Verificér Y”, “Tjek 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;kvalitetsgates&quot;&gt;Kvalitetsgates&lt;/h2&gt;
&lt;p&gt;Enhver skill skal bestå validering, før den shippes:&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;Beskrivelser skal være 50-400 tegn med udløsningsfraser (“Use when…”, “When you need…”), så Claude Code ved, hvornår den skal foreslå dem.&lt;/p&gt;
&lt;p&gt;Vi validerer løbende:&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;leverandørøkosystemet&quot;&gt;Leverandørøkosystemet&lt;/h2&gt;
&lt;p&gt;Vores 373 leverandør-skills kommer fra:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Leverandør&lt;/th&gt;
&lt;th&gt;Skills&lt;/th&gt;
&lt;th&gt;Domæne&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;Cloud-tjenester&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;Database&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;Scientific computing&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;Data science&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;Browserautomatisering&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Hver leverandørrod erklæres 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ører, symlinkes leverandør-skills ind i &lt;code&gt;.claude/skills/vendor/&lt;/code&gt; med deres leverandørnavnerum.&lt;/p&gt;
&lt;h2 id=&quot;hvad-vi-har-lært&quot;&gt;Hvad vi har lært&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Selektivitet betaler sig.&lt;/strong&gt; Det er fristende at adoptere alt, der ser nyttigt ud. Men hver skill koster tokens. Med 2.834 gennemsnitlige tokens pr. skill går bloat hurtigt ud over ydeevnen. Vores adoptionsrate på 13% holder agenter slanke.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Struktur muliggør discovery.&lt;/strong&gt; K-lagsystemet er ikke bare organisering - det handler om portabilitet. K0-skills kan genbruges hvor som helst. K4-skills er bevidst projektspecifikke. Denne klarhed hjælper både mennesker og agenter med at finde det, de har brug for.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dvalende scopes skalerer.&lt;/strong&gt; Man kan adoptere hundredvis af skills uden at indlæse dem alle. Scopes lader dig bygge et omfattende register, samtidig med at individuelle agenters kontekstvinduer forbliver håndterbare.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Modifikation ved adoption er essentiel.&lt;/strong&gt; Rå leverandør-skills passer sjældent til ens system. Indarbejdelsesprocessen - tilføjelse af metadata, tildeling af lag, berigelse af tags - får eksterne skills til at fungere internt.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mining er kontinuerlig.&lt;/strong&gt; Tallet 3.500 bliver ved med at vokse. Nye leverandørrepositorier dukker op. Community-mønstre opstår. Interne arbejdsgange tager form. Løkken stopper aldrig.&lt;/p&gt;
&lt;h2 id=&quot;hvad-er-det-næste&quot;&gt;Hvad er det næste?&lt;/h2&gt;
&lt;p&gt;Vi arbejder på flere forbedringer:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Automatiseret gap-detektion&lt;/strong&gt;: Advarsel når almindelige agentfejl kunne løses af en ikke-adopteret skill&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skill-udfasningsarbejdsgange&lt;/strong&gt;: Formel proces til at pensionere skills, der er overflødiggjort eller ubrugte&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cross-skill-afhængigheder&lt;/strong&gt;: Eksplicit erklæring af skill-forudsætninger&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Brugsanalyser&lt;/strong&gt;: Spor hvilke skills agenter rent faktisk påkalder vs. bare indlæser&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Skill-mining-løkken er infrastruktur. Det er ikke glamourøst. Men det er det, der får 41 agenter til at fungere sammenhængende med 466 kapabiliteter, samtidig med at de holder sig inden for kontekstgrænserne.&lt;/p&gt;
&lt;p&gt;Det er historien om, hvordan 3.500 bliver til 466. Ikke ved at ignorere 3.000 - men ved at evaluere dem systematisk og kun adoptere det, der virker.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Vil du se skill-systemet i aktion? Tjek &lt;code&gt;uv run orkestra skills list&lt;/code&gt; ud for at udforske vores nuværende register.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Skills</category></item><item><title>Gradvis visning: CLI-vinduer ind i agentsystemer</title><link>https://maguyva.ai/da/blog/progressive-disclosure-cli-into-agents</link><guid isPermaLink="true">https://maguyva.ai/da/blog/progressive-disclosure-cli-into-agents</guid><description>Agentsystemer er uigennemsigtige som standard. Gradvis visning giver operatører lagdelte CLI-visninger fra hurtige statustjek til agenternes fulde interne struktur og beslutningsspor.</description><pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Tallene i dette indlæg afspejler systemet på udgivelsestidspunktet (januar 2026). Se vores &lt;a href=&quot;https://maguyva.ai/da/team&quot;&gt;team-side&lt;/a&gt; for aktuelle tal.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Agentsystemer er uigennemsigtige af design. De træffer beslutninger, kalder værktøjer og koordinerer arbejde på tværs af snesevis af specialister. Men når noget går galt — eller når du blot vil forstå, hvad der sker — hvor kigger du så?&lt;/p&gt;
&lt;p&gt;Svaret er gradvis visning: en lagdelt grænseflade, der afslører præcis så meget kompleksitet, som du har brug for, præcis når du har brug for det.&lt;/p&gt;
&lt;h2 id=&quot;uigennemsigtighedsproblemet&quot;&gt;Uigennemsigtighedsproblemet&lt;/h2&gt;
&lt;p&gt;Et moderne agent-orkestreringssystem kan have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;40+ specialiserede agenter, hver med distinkte kapabiliteter&lt;/li&gt;
&lt;li&gt;700+ skills, der spænder over intern automatisering og leverandørintegrationer&lt;/li&gt;
&lt;li&gt;470+ arkitektoniske beslutninger, der former adfærd&lt;/li&gt;
&lt;li&gt;Snesevis af MCP-værktøjsservere, der leverer eksterne kapabiliteter&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Denne kompleksitet er tilsigtet. Agenter har brug for adgang til rig kontekst — domæneviden, kodeintelligens, databaseskemaer — for at træffe gode beslutninger. Men den samme rigdom skaber et synlighedsproblem.&lt;/p&gt;
&lt;p&gt;Hvordan ved du, hvilken agent der håndterer databasemigreringer? Hvilke beslutninger formede søgesystemets rangeringsadfærd? Hvilke værktøjer har arkitekturrådgiveren adgang til?&lt;/p&gt;
&lt;p&gt;Uden struktureret adgang er du henvist til at læse kildekode eller håbe, at dokumentationen er ajour.&lt;/p&gt;
&lt;h2 id=&quot;gradvis-visning-som-arkitektur&quot;&gt;Gradvis visning som arkitektur&lt;/h2&gt;
&lt;p&gt;Gradvis visning er ikke bare et UI-mønster. Det er et arkitektonisk princip: organisér information i lag, hvert dybere end det sidste, så brugere kan stoppe på det niveau, der besvarer deres spørgsmål.&lt;/p&gt;
&lt;p&gt;For agentsystemer oversættes det til CLI-kommandoer i stigende dybder:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Niveau&lt;/th&gt;
&lt;th&gt;Kommando&lt;/th&gt;
&lt;th&gt;Spørgsmål, der besvares&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;Er alt sundt?&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;Hvilke agenter findes der?&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;Hvad gør denne agent?&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;Hvorfor fungerer det på denne måde?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Maguyva MCP-værktøjer&lt;/td&gt;
&lt;td&gt;Vis mig koden.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Hvert niveau besvarer et naturligt opfølgende spørgsmål. Du behøver sjældent at springe direkte til niveau 5.&lt;/p&gt;
&lt;h2 id=&quot;niveau-1-systemsundhed&quot;&gt;Niveau 1: Systemsundhed&lt;/h2&gt;
&lt;p&gt;Det første spørgsmål er altid: virker alt?&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;Én kommando. Fire tal. Nok til at vide, at systemet er konfigureret, og at registrene indeholder data.&lt;/p&gt;
&lt;p&gt;Hvis et agentantal falder uventet, eller skills ikke kan indlæses, ser du det her først. Ingen log-dykning nødvendig.&lt;/p&gt;
&lt;h2 id=&quot;niveau-2-agentoversigt&quot;&gt;Niveau 2: Agentoversigt&lt;/h2&gt;
&lt;p&gt;Når du ved, at systemet er sundt, er det næste spørgsmål: hvad er tilgængeligt?&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;Dette returnerer strukturerede data — agentnavne, beskrivelser, modelpræferencer, domænedækning. Outputtet er JSON som standard, hvilket gør det nemt at pipe ind i &lt;code&gt;jq&lt;/code&gt; til 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;Vil du have agenter, der håndterer databasearbejde? Søgekommandoen indsnævrer 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; 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;Dette skanner navne, beskrivelser og kapabiliteter. Du finder den rette specialist uden at læse 40 agentdefinitioner.&lt;/p&gt;
&lt;h2 id=&quot;niveau-3-agenten-i-detaljer&quot;&gt;Niveau 3: Agenten i detaljer&lt;/h2&gt;
&lt;p&gt;Fandt du en agent, der ser relevant ud? &lt;code&gt;info&lt;/code&gt;-kommandoen afslører alt:&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;Outputtet inkluderer:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Metadata&lt;/strong&gt;: Navn, kategori, modelpræference, beskrivelse&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Domæner&lt;/strong&gt;: Hvilke videnområder denne agent dækker&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Identitet&lt;/strong&gt;: Karaktertræk (architect, strategist, knowledge-architect)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Værktøjsguider&lt;/strong&gt;: Hvilken værktøjsdokumentation der injiceres i konteksten&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Værktøjer&lt;/strong&gt;: Den fulde liste af MCP-værktøjer, denne agent har adgang til&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Her er et udpluk af, hvad du 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;Dette fortæller dig præcis, hvad agenten kan gøre. Ingen kildekode nødvendig.&lt;/p&gt;
&lt;h2 id=&quot;niveau-4-beslutningsarkæologi&quot;&gt;Niveau 4: Beslutningsarkæologi&lt;/h2&gt;
&lt;p&gt;Agenter opfører sig i henhold til dokumenterede beslutninger. Når du har brug for at forstå &lt;em&gt;hvorfor&lt;/em&gt; noget fungerer på en bestemt måde, er beslutningsregistret den autoritative kilde.&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;Dette returnerer matchende arkitektoniske beslutninger:&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;Hver beslutning har fuld proveniens — hvornår den blev truffet, hvorfor, hvilke afvejninger der blev overvejet, hvilke commits der implementerede 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;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;Dette er arkitektonisk dokumentation, der forbliver ajour, fordi den er minet fra commits, ikke manuelt vedligeholdt.&lt;/p&gt;
&lt;h2 id=&quot;niveau-5-direkte-kodeintelligens&quot;&gt;Niveau 5: Direkte kodeintelligens&lt;/h2&gt;
&lt;p&gt;Når du har brug for at se den faktiske implementering — ikke metadata om den — giver Maguyvas MCP-værktøjer direkte adgang.&lt;/p&gt;
&lt;p&gt;Indefra 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;Dette auto-router på tværs af semantisk, tekst- og AST-søgning for at finde relevant kode. For specifikke 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;For afhængighedsanalyse:&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 her er ikke bare grep-erstatninger. De er baseret på grafen, semantisk indekserede og integrerede med den samme kodeintelligens, der driver agenterne selv.&lt;/p&gt;
&lt;h2 id=&quot;samlet-søgning-på-tværs-af-registre&quot;&gt;Samlet søgning på tværs af registre&lt;/h2&gt;
&lt;p&gt;Nogle gange ved du ikke, hvilket register der har svaret. Den samlede søgning spænder over alt:&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æffere på tværs af fem registre. Sammendraget fortæller dig, hvor du skal dykke ned. Fjern &lt;code&gt;--summary&lt;/code&gt; for detaljerede resultater, eller tilføj &lt;code&gt;--limit 5&lt;/code&gt; for at holde outputtet håndterbart.&lt;/p&gt;
&lt;h2 id=&quot;hvorfor-det-betyder-noget&quot;&gt;Hvorfor det betyder noget&lt;/h2&gt;
&lt;p&gt;Gradvis visning handler ikke kun om bekvemmelighed. Det ændrer, hvordan du interagerer med komplekse systemer.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fejlfinding bliver håndterbar.&lt;/strong&gt; Når en agent træffer en uventet beslutning, grepper du ikke gennem logs. Du tjekker, hvilke værktøjer den har adgang til (&lt;code&gt;agents info&lt;/code&gt;), hvilke beslutninger der former dens adfærd (&lt;code&gt;decisions search&lt;/code&gt;), og sporer implementeringen, hvis nødvendigt (&lt;code&gt;intelligent_search&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Onboarding accelererer.&lt;/strong&gt; Nye teammedlemmer behøver ikke at læse hele kodebasen. De starter med &lt;code&gt;system status&lt;/code&gt;, udforsker med &lt;code&gt;agents list&lt;/code&gt;, og går kun dybere, når de støder på noget, de ikke forstår.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dokumentation forbliver ajour.&lt;/strong&gt; Fordi CLI’en læser fra de samme registre, der konfigurerer agenterne, er outputtet altid præcist. Der er ingen uoverensstemmelse mellem, hvad dokumentationen siger, og hvad systemet gør.&lt;/p&gt;
&lt;h2 id=&quot;clien-som-grænseflade&quot;&gt;CLI’en som grænseflade&lt;/h2&gt;
&lt;p&gt;Vi kunne have bygget et webdashboard. Vi kunne have skrevet omfattende dokumentation. I stedet byggede vi en CLI, der læser fra den autoritative kilde.&lt;/p&gt;
&lt;p&gt;CLI’en har fordele:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sammensætbar&lt;/strong&gt;: Pipe output gennem &lt;code&gt;jq&lt;/code&gt;, integrér med scripts&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scriptbar&lt;/strong&gt;: Automatisér tjek, generér rapporter&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hurtig&lt;/strong&gt;: Ingen sideindlæsninger, ingen godkendelsesflows&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Præcis&lt;/strong&gt;: Læser den faktiske konfiguration, ikke en cachet repræsentation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For systemer, hvor korrekthed betyder mere end æstetik, vinder CLI’en.&lt;/p&gt;
&lt;h2 id=&quot;byg-din-egen-gradvise-visning&quot;&gt;Byg din egen gradvise visning&lt;/h2&gt;
&lt;p&gt;Hvis du bygger agentsystemer, så overvej, hvordan brugere vil inspicere dem:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Start med sundhedstjek.&lt;/strong&gt; Én kommando, der fortæller dig, om tingene fungerer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tilbyd oversigter.&lt;/strong&gt; List hvad der findes, før du forklarer, hvad det gør.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Muliggør målrettede forespørgsler.&lt;/strong&gt; Søgning slår gennemgang i stor skala.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Eksponér proveniens.&lt;/strong&gt; Lad brugere spore beslutninger til deres oprindelse.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Forbind til kodeintelligens.&lt;/strong&gt; I sidste ende har brugere brug for at se implementeringen.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Hvert lag besvarer et opfølgende spørgsmål. Byg dem i frekvensrækkefølge — de fleste brugere stopper ved lag 2 eller 3. Kun avancerede brugere når lag 5.&lt;/p&gt;
&lt;p&gt;Målet er ikke at eksponere alt. Det er at eksponere præcis det, der er nødvendigt, præcis når det er nødvendigt. Det er gradvis visning anvendt på agentarkitektur.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>CLI</category><category>Tooling</category></item><item><title>Ground Truths: Forankring af AI-agenter i virkeligheden</title><link>https://maguyva.ai/da/blog/ground-truths-anchoring-ai-to-reality</link><guid isPermaLink="true">https://maguyva.ai/da/blog/ground-truths-anchoring-ai-to-reality</guid><description>AI-agenter hallucinerer med selvsikkerhed. Ground Truths er versionerede, afgrænsede fakta, der forankrer agentadfærd i virkeligheden. Her er hvordan vi har bygget og håndhæver dem.</description><pubDate>Tue, 13 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Tallene i dette indlæg afspejler systemet på udgivelsestidspunktet (januar 2026). Se vores &lt;a href=&quot;https://maguyva.ai/da/team&quot;&gt;team-side&lt;/a&gt; for aktuelle tal.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;AI-agenter er bemærkelsesværdigt dygtige. De kan ræsonnere, syntetisere og generere. Men de har en fundamental svaghed: de finder på ting. Ikke ondsindet, men selvsikkert. En agent kan finde på API-parametre, der ikke findes, referere til konfigurationer, der aldrig blev defineret, eller anvende mønstre fra sine træningsdata, der modsiger din faktiske arkitektur.&lt;/p&gt;
&lt;p&gt;Den sædvanlige løsning er “giv agenten mere kontekst.” Men kontekst kan være modstridende. Dokumentationen kommer ud af trit med implementeringen. Kommentarer lyver. Selv kode kan vildlede, når den læses uden forståelse af hensigten.&lt;/p&gt;
&lt;p&gt;Vi havde brug for noget mere eksplicit. Noget, der ikke kunne ignoreres eller fejlfortolkes. Noget, der ville forankre agenter i en verificerbar virkelighed.&lt;/p&gt;
&lt;p&gt;Vi kalder dem Ground Truths.&lt;/p&gt;
&lt;h2 id=&quot;hvad-er-en-ground-truth&quot;&gt;Hvad er en Ground Truth?&lt;/h2&gt;
&lt;p&gt;En Ground Truth er en eksplicit, versioneret faktapåstand, som agenter skal respektere. Det er ikke dokumentation. Det er ikke en kommentar. Det er en førsteklasses entitet i systemet med:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;En unik identifikator&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 livscyklusstatus&lt;/strong&gt; (current, tentative eller deprecated)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Et scope&lt;/strong&gt; (platformbredt, pakkespecifikt eller domænebundet)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evidens&lt;/strong&gt; (filstier, URL’er eller referencer, der beviser påstanden)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agentvejledning&lt;/strong&gt; (eksplicitte gør/undgå-instruktioner)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Her er et eksempel fra vores Maguyva kodeintelligensplatform:&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;Dette er ikke prosa. Det er en kontrakt. Når en agent støder på denne Ground Truth, ved den:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Standarden er deterministisk (tomme resultater, ikke gæt baseret på omtrentlige match)&lt;/li&gt;
&lt;li&gt;Der findes specifikke parametre (&lt;code&gt;find_similar&lt;/code&gt;, &lt;code&gt;exact_match&lt;/code&gt;) med veldefineret adfærd&lt;/li&gt;
&lt;li&gt;Evidens findes i specifikke filer, der kan verificeres&lt;/li&gt;
&lt;li&gt;Påstanden blev verificeret på en specifik dato&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;anatomien-af-et-ground-truth-registry&quot;&gt;Anatomien af et Ground Truth Registry&lt;/h2&gt;
&lt;p&gt;Ground Truths lever i YAML-registre under &lt;code&gt;ai_assets/reference/ground_truths.yaml&lt;/code&gt;. Hver pakke eller hvert domæne kan have sit eget register. Strukturen er:&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 inkluderer metadata om selve samlingen, render-konfiguration til dokumentationsgenerering og selve påstandene. Hver påstand følger et strengt skema valideret af 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;sådan-tilgår-agenter-ground-truths&quot;&gt;Sådan tilgår agenter Ground Truths&lt;/h2&gt;
&lt;p&gt;Ground Truths eksponeres gennem flere kanaler:&lt;/p&gt;
&lt;h3 id=&quot;1-renderet-dokumentation&quot;&gt;1. Renderet dokumentation&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;orkestra sync&lt;/code&gt;-kommandoen omdanner YAML-registre til 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;Dette genererer &lt;code&gt;GROUND_TRUTHS.md&lt;/code&gt;-filer, der inkluderes i agentkonteksten. Det renderede output grupperer påstande efter status og 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øgning&quot;&gt;2. CLI-søgning&lt;/h3&gt;
&lt;p&gt;Agenter med shell-adgang kan søge i Ground Truths programmatisk:&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øgefunktionen scorer træffere på tværs af flere felter med vægtet 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-kontekstkomposition&quot;&gt;3. Kontekstkomposition&lt;/h3&gt;
&lt;p&gt;Når agenter renderes fra YAML-definitioner, kan deres kontekst referere til Ground Truth-registre:&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;Dette sikrer, at relevante Ground Truths indlæses, før agenten begynder arbejdet.&lt;/p&gt;
&lt;h2 id=&quot;kategorier-af-ground-truths&quot;&gt;Kategorier af Ground Truths&lt;/h2&gt;
&lt;p&gt;Ser man på tværs af vores registre, klynger Ground Truths sig i flere mønstre:&lt;/p&gt;
&lt;h3 id=&quot;produktprincipper&quot;&gt;Produktprincipper&lt;/h3&gt;
&lt;p&gt;Begrænsninger for, hvad produktet er, og hvad det ikke er:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Maguyva har kun læseadgang til brugernes repositorier; det eneste aktiv, der ikke kan genskabes, er cachen med betalte embeddings.” (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;Hvor ansvaret ligger, og hvorfor:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Grænserne mellem Pipeline og Maguyva er tilsigtede: pipeline kan genbruges, Maguyva indeholder kodespecifik logik, og CQRS adskiller pipeline-stadiernes skrivninger fra serverens læsninger.” (GT-MAG-006)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;anti-hallucinationsregler&quot;&gt;Anti-hallucinationsregler&lt;/h3&gt;
&lt;p&gt;Eksplicitte mandater, der holder værktøjskontrakter deterministiske i stedet for udledte:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Omtrentlig symbolmatching skal vælges eksplicit via &lt;code&gt;find_similar=true&lt;/code&gt;. Standardadfærden returnerer tomme resultater for symboler, der ikke findes; &lt;code&gt;exact_match=true&lt;/code&gt; håndhæver eksakt matching og deaktiverer alle alternativer med omtrentlige match.” (GT-MAG-015)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;kvalitetsgates&quot;&gt;Kvalitetsgates&lt;/h3&gt;
&lt;p&gt;Standarder, der skal opretholdes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Ændringer i fælles infrastruktur (post_filters.py, relationsudtrækkere, fælles handlere) SKAL valideres mod ALLE understøttede sprog ved at generere hele manifestet før commit. Validering af ét sprog er utilstrækkelig for fælles kode.” (GT-MAG-036)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;kodemønstre&quot;&gt;Kodemønstre&lt;/h3&gt;
&lt;p&gt;Implementeringskrav:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Brug &lt;code&gt;asyncio.to_thread()&lt;/code&gt; til CPU-bundet arbejde i asynkrone kontekster; det udfasede &lt;code&gt;loop.run_in_executor()&lt;/code&gt;-mønster bør ikke bruges i ny kode.” (GT-MAG-018)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;livscyklussen-for-en-ground-truth&quot;&gt;Livscyklussen for en Ground Truth&lt;/h2&gt;
&lt;p&gt;Ground Truths er ikke statiske. De udvikler sig gennem en defineret livscyklus:&lt;/p&gt;
&lt;h3 id=&quot;tentative&quot;&gt;Tentative&lt;/h3&gt;
&lt;p&gt;En foreslået sandhed under evaluering. Påstanden registreres, men kan ændre sig:&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;current&quot;&gt;Current&lt;/h3&gt;
&lt;p&gt;En verificeret sandhed, som agenter skal respektere. Evidens er blevet valideret:&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;deprecated&quot;&gt;Deprecated&lt;/h3&gt;
&lt;p&gt;En sandhed, der ikke længere gælder. Bevaret som historisk reference med en henvisning til, hvad der erstattede 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;hvorfor-ikke-bare-dokumentation&quot;&gt;Hvorfor ikke bare dokumentation?&lt;/h2&gt;
&lt;p&gt;Dokumentation tjener et andet formål. Den forklarer. Den underviser. Den kan være vag, kan bruge kvalifikatorer som “generelt” eller “typisk.”&lt;/p&gt;
&lt;p&gt;Ground Truths kan ikke være vage. De er påstande. De gælder enten, eller også gør de ikke.&lt;/p&gt;
&lt;p&gt;Overvej forskellen:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dokumentation:&lt;/strong&gt; “API’en returnerer generelt tomme resultater, når et symbol ikke findes, selvom fuzzy matching kan være aktiveret i nogle konfigurationer.”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ground Truth:&lt;/strong&gt; “Standardadfærden returnerer tomme resultater for symboler, der ikke findes; &lt;code&gt;exact_match=true&lt;/code&gt; håndhæver eksakt matching og deaktiverer alle alternativer med omtrentlige match.”&lt;/p&gt;
&lt;p&gt;Den første er nyttig for mennesker, der lærer systemet at kende. Den anden er handlingsorienteret for agenter, der træffer beslutninger.&lt;/p&gt;
&lt;h2 id=&quot;agentvejledning-gør-og-undgå&quot;&gt;Agentvejledning: Gør og undgå&lt;/h2&gt;
&lt;p&gt;Nogle Ground Truths inkluderer eksplicit agentvejledning:&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;Dette fjerner tvetydighed. En agent, der læser dette, ved ikke kun, hvad der er sandt, men også hvilke handlinger den sandhed medfører.&lt;/p&gt;
&lt;h2 id=&quot;verificering-og-vedligeholdelse&quot;&gt;Verificering og vedligeholdelse&lt;/h2&gt;
&lt;p&gt;Ground Truths kræver vedligeholdelse. Vi sporer:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;last_verified&lt;/strong&gt;: Hvornår nogen bekræftede, at påstanden stadig holder&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;evidence&lt;/strong&gt;: Filer, der beviser påstanden (kan tjekkes for eksistens)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;source&lt;/strong&gt;: Hvor sandheden stammer fra (CLI-inspektion, arkitekturgennemgang, læring efter hændelser)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En Ground Truth med forældede verificeringsdatoer eller ødelagte evidenslinks er et signal om at undersøge sagen. Enten er sandheden stadig gyldig og trænger til genverificering, eller også har virkeligheden ændret sig, og sandheden trænger til opdatering.&lt;/p&gt;
&lt;h2 id=&quot;reelle-eksempler-fra-produktion&quot;&gt;Reelle eksempler fra produktion&lt;/h2&gt;
&lt;h3 id=&quot;sikkerhedsgrænse&quot;&gt;Sikkerhedsgrænse&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;Denne Ground Truth forhindrer en klasse af misforståede “sikkerhedsforbedringer”, der ville ødelægge produktet.&lt;/p&gt;
&lt;h3 id=&quot;nøjagtighed-ved-udtrækningstidspunktet&quot;&gt;Nøjagtighed ved udtrækningstidspunktet&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;Dette kom fra en smertefuld erfaring. Agenter plejede at lappe fejlende sprogpakker ved at tilføje filtre, som kun virkede i validatoren og fik testresultaterne til at se bedre ud, mens den live Maguyva-udtrækker stadig udsendte de forkerte kanter. Reglen tvinger rettelser tilbage ind på den rigtige sti: YAML-config, forespørgsler eller handlere.&lt;/p&gt;
&lt;h3 id=&quot;multi-lags-filtrering&quot;&gt;Multi-lags filtrering&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;Dette forhindrer agenter i at tilføje filtre det forkerte sted, en almindelig fejl, der forårsagede nøjagtighedsregressioner.&lt;/p&gt;
&lt;h2 id=&quot;integration-med-orkestreringssystemet&quot;&gt;Integration med orkestreringssystemet&lt;/h2&gt;
&lt;p&gt;Ground Truths er ét lag i et bredere kontekstsystem:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Arkitektoniske beslutninger (ADR’er)&lt;/strong&gt; - Registrerer hvorfor vi valgte tilgang A frem for B&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ground Truths&lt;/strong&gt; - Angiver hvad der definitivt er sandt lige nu&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Domænemønstre&lt;/strong&gt; - Beskriver hvordan man gør tingene korrekt&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Antimønstre&lt;/strong&gt; - Beskriver hvad man skal undgå, og hvorfor&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;En agent, der arbejder i systemet, har adgang til alle fire. Ground Truths giver det faktuelle anker, mens beslutninger forklarer historien, mønstre guider implementeringen, og antimønstre advarer om faldgruber.&lt;/p&gt;
&lt;h2 id=&quot;måling-af-effekten&quot;&gt;Måling af effekten&lt;/h2&gt;
&lt;p&gt;Siden vi introducerede Ground Truths, har vi observeret:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Færre “ret den hallucinerede rettelse”-cyklusser&lt;/li&gt;
&lt;li&gt;Mere selvsikker agentbeslutningstagning, når fakta er klare&lt;/li&gt;
&lt;li&gt;Bedre PR-gennemgange, fordi forventninger er eksplicitte&lt;/li&gt;
&lt;li&gt;Kortere onboarding-tid for nye agenter (og mennesker)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Investeringen i at vedligeholde Ground Truths betaler sig i form af mindre debugging og klarere systemgrænser.&lt;/p&gt;
&lt;h2 id=&quot;kom-i-gang&quot;&gt;Kom i gang&lt;/h2&gt;
&lt;p&gt;For at tilføje en Ground Truth til dit system:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Opret en &lt;code&gt;ground_truths.yaml&lt;/code&gt; i din pakkes &lt;code&gt;ai_assets/reference/&lt;/code&gt;-mappe&lt;/li&gt;
&lt;li&gt;Definér metadata og render-konfiguration&lt;/li&gt;
&lt;li&gt;Tilføj påstande, der følger skemaet&lt;/li&gt;
&lt;li&gt;Kør &lt;code&gt;uv run orkestra sync&lt;/code&gt; for at generere dokumentation&lt;/li&gt;
&lt;li&gt;Inkludér registret i agentens kontekstkomposition&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Start med de fakta, der skaber mest forvirring, eller de begrænsninger, der overtrædes oftest. Det er dine mest værdifulde Ground Truths.&lt;/p&gt;
&lt;h2 id=&quot;konklusion&quot;&gt;Konklusion&lt;/h2&gt;
&lt;p&gt;AI-agenter vil hallucinere. Det er deres natur. Men vi kan skabe miljøer, hvor hallucination er begrænset, hvor visse fakta er ikke-forhandlelige, hvor agenter kan tjekke deres antagelser mod verificeret virkelighed.&lt;/p&gt;
&lt;p&gt;Ground Truths er ikke en komplet løsning. De kræver vedligeholdelse. De kan blive forældede. De tilføjer overhead til udviklingsprocessen.&lt;/p&gt;
&lt;p&gt;Men de giver noget værdifuldt: et delt ordforråd af fakta, som både mennesker og agenter kan stole på. I en verden, hvor agenter i stigende grad deltager i softwareudvikling, bliver det delte fundament essentielt.&lt;/p&gt;
&lt;p&gt;Alternativet er endeløse cyklusser af agenter, der begår selvsikre fejl, og mennesker, der retter dem. Ground Truths bryder den cyklus ved at gøre rettelserne eksplicitte og holdbare.&lt;/p&gt;
&lt;p&gt;Dine agenter fortjener at vide, hvad der er sandt. Fortæl dem det.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Grounding</category></item><item><title>Orkestra: Orkestrering af AI-agenter i stor skala</title><link>https://maguyva.ai/da/blog/orkestra-agent-orchestration</link><guid isPermaLink="true">https://maguyva.ai/da/blog/orkestra-agent-orchestration</guid><description>Én orkestrator dirigerer arbejde til specialiserede AI-agenter, hver med egne skills og hukommelse. Sådan koordinerer Orkestra 46 agenter og 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;Tallene i dette indlæg afspejler systemet på udgivelsestidspunktet (januar 2026). Se vores &lt;a href=&quot;https://maguyva.ai/da/team&quot;&gt;team-side&lt;/a&gt; for aktuelle tal.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Da vi begyndte at bygge med Claude Code, stødte vi på et problem, som ethvert team, der bruger AI-kodeassistenter, før eller siden møder: én enkelt agent kan ikke gøre alt godt.&lt;/p&gt;
&lt;p&gt;Man kan prompte en agent til at være databasespecialist. Eller sikkerhedsrevisor. Eller frontend-ingeniør. Men i det øjeblik man beder den om at være alle tre på én gang, lider kvaliteten. Konteksten udvandes. Instruktioner kolliderer. Agenten bliver en generalist, der er middelmådig til alt.&lt;/p&gt;
&lt;p&gt;Så vi byggede Orkestra.&lt;/p&gt;
&lt;h2 id=&quot;hvad-er-orkestra&quot;&gt;Hvad er Orkestra?&lt;/h2&gt;
&lt;p&gt;Orkestra er et agent-orkestreringssystem til Claude Code og lignende AI-kodeværktøjer. Det koordinerer flere specialiserede agenter, hver med særskilt ekspertise, under én orkestrator, der dirigerer arbejde til den rette specialist.&lt;/p&gt;
&lt;p&gt;Tænk på det som et vikarbureau for AI-agenter. Orkestratoren modtager en opgave, identificerer hvilken specialist der bør håndtere den, og delegerer med den rette kontekst. Når arbejdet er udført, flyder resultaterne tilbage til orkestratoren til syntese.&lt;/p&gt;
&lt;p&gt;Tallene fortæller 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;Genanvendelige 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;Mindsets&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kommunikationsstile&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vidensdomæner&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;karaktersystemet-dd-for-agenter&quot;&gt;Karaktersystemet: D&amp;amp;D for agenter&lt;/h2&gt;
&lt;p&gt;Den centrale indsigt bag Orkestra er, at agentadfærd opstår fra tre kombinerbare primitiver:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Identitet&lt;/strong&gt; definerer &lt;em&gt;hvad&lt;/em&gt; agenten er. En architect designer systemstrukturer. En debugger sporer fejl tilbage til rodårsager. En guardian håndhæver compliance og sikkerhedsgrænser. Vi har 27 identitetsarketyper, der kan blandes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mindset&lt;/strong&gt; definerer &lt;em&gt;hvordan&lt;/em&gt; agenten tænker. Et analytical mindset forankrer påstande i evidens og kvantificerer usikkerhed. Et skeptical mindset udfordrer antagelser og søger modbevisende evidens. Et exploratory mindset omfavner tvetydighed og prøver flere tilgange.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Style&lt;/strong&gt; definerer &lt;em&gt;hvordan&lt;/em&gt; agenten kommunikerer. En technical style inkluderer eksakte værdier og henviser til specifikke filer. En concise style skærer fyld væk og lægger ud med svaret. En diplomatic style balancerer ærlighed med takt.&lt;/p&gt;
&lt;p&gt;En agent kombinerer disse primitiver:&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;Denne komposition skaber en agent, der designer systemer (architect), forbinder viden på tværs af domæner (knowledge-architect), sætter strategisk retning (strategist), tænker i evidens og data (analytical) og kommunikerer uden fyld (concise).&lt;/p&gt;
&lt;p&gt;Styrken ligger i den kombinatoriske eksplosion. 27 identiteter gange 11 mindsets gange 10 stile giver næsten 3.000 mulige agentpersonligheder. Men man definerer kun de kombinationer, der betyder noget for ens arbejde.&lt;/p&gt;
&lt;h2 id=&quot;skills-genanvendelige-kapabilitetsmoduler&quot;&gt;Skills: Genanvendelige kapabilitetsmoduler&lt;/h2&gt;
&lt;p&gt;Skills er den viden og de arbejdsgange, agenter kan påkalde. De følger et lagdelt system baseret på scope:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Lag&lt;/th&gt;
&lt;th&gt;Navn&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Eksempel&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;Foundations&lt;/td&gt;
&lt;td&gt;Universel metodologi&lt;/td&gt;
&lt;td&gt;Test-first-disciplin, evidensbaseret færdiggørelse&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K1&lt;/td&gt;
&lt;td&gt;Identities&lt;/td&gt;
&lt;td&gt;Rollebaserede arbejdsgange&lt;/td&gt;
&lt;td&gt;CLI-grænsefladestandarder, performance playbook&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K2&lt;/td&gt;
&lt;td&gt;Domains&lt;/td&gt;
&lt;td&gt;Domænespecifik viden&lt;/td&gt;
&lt;td&gt;Databasemigreringsmønstre, autentificeringsvalidering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K3&lt;/td&gt;
&lt;td&gt;Stacks&lt;/td&gt;
&lt;td&gt;Teknologispecifik&lt;/td&gt;
&lt;td&gt;Cloudflare-deployment, Supabase-drift&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K4&lt;/td&gt;
&lt;td&gt;Project&lt;/td&gt;
&lt;td&gt;Kun denne kodebase&lt;/td&gt;
&lt;td&gt;Projektspecifikke arbejdsgange og konventioner&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Skills er lazy-loaded. En agent ser skill-navne og -beskrivelser ved opstart, men fuldt skill-indhold indlæses først, når det udløses. Det holder konteksten slank, samtidig med at det gør hundredvis af skills opdagelige.&lt;/p&gt;
&lt;p&gt;Hver skill inkluderer:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Klare udløsningsbetingelser (“Use when migrating database schemas”)&lt;/li&gt;
&lt;li&gt;Trin-for-trin-vejledning&lt;/li&gt;
&lt;li&gt;Tilladte værktøjer til arbejdsgangen&lt;/li&gt;
&lt;li&gt;Succeskriterier og fejlgenopretningsstier&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;De 466 skills i vores register dækker alt fra git worktree-isolation til web research-arbejdsgange til deployment health-validering.&lt;/p&gt;
&lt;h2 id=&quot;hvorfor-orkestrering-betyder-noget&quot;&gt;Hvorfor orkestrering betyder noget&lt;/h2&gt;
&lt;p&gt;Enkelt-agent-arkitekturer rammer hurtigt en mur:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kontekstudvanding.&lt;/strong&gt; Et 200k-token kontekstvindue lyder stort, indtil man indlæser databaseskemaer, API-dokumentation, testfixtures og domæneviden. Specialister kan arbejde med målrettet kontekst.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Instruktionskonflikter.&lt;/strong&gt; At bede en agent om at være “grundig, men hurtig” og “verificere alt, men ikke overengineere” skaber spænding. Specialister løser dette ved at have klart scope.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ekspertisedybde.&lt;/strong&gt; En generalist-agent ved lidt om alt. En specialistagent, sammensat med den rette identitet og de rette skills, kender sit domæne dybt.&lt;/p&gt;
&lt;p&gt;Orkestra implementerer flad orkestrering: én orkestrator koordinerer flere specialister. Specialister kan ikke spawne sub-specialister. Det forhindrer kompleksitetseksplosion, samtidig med at det muliggør parallelt arbejde.&lt;/p&gt;
&lt;p&gt;Orkestratoren har adgang til 2,2 millioner tokens effektiv kapacitet: sit eget 200k-vindue plus 10 samtidige subagenter med 200k hver. Arbejde, der ville udtømme én enkelt agent, kører komfortabelt på tværs af flåden.&lt;/p&gt;
&lt;h2 id=&quot;rendering-pipelinen&quot;&gt;Rendering-pipelinen&lt;/h2&gt;
&lt;p&gt;Agentdefinitioner lever i YAML. Claude Code læser Markdown. Orkestra bygger bro over dette hul med en deterministisk rendering-pipeline:&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 redigerer YAML-kilden. Kør &lt;code&gt;orkestra sync&lt;/code&gt;. Det renderede Markdown gemmes i &lt;code&gt;.claude/agents/&lt;/code&gt;. Claude Code opfanger ændringerne.&lt;/p&gt;
&lt;p&gt;Denne adskillelse betjener forskellige målgrupper:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;YAML-kilden&lt;/strong&gt; inkluderer livscyklusmetadata, tags, valideringsregler og udfasningsnoter til værktøjerne&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Renderet Markdown&lt;/strong&gt; inkluderer kun det, modellen har brug for: beskrivelse, værktøjer, skills og adfærdsvejledning&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pipelinen komponerer identiteter, mindsets, stile og skills til én sammenhængende prompt. En architect-analytical-concise-agent får en meget anderledes system prompt end en debugger-skeptical-technical-agent, selv hvis de deler nogle underliggende skills.&lt;/p&gt;
&lt;h2 id=&quot;domæneviden-fire-fil-mønsteret&quot;&gt;Domæneviden: Fire-fil-mønsteret&lt;/h2&gt;
&lt;p&gt;Ethvert vidensdomæne følger en konsistent 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;Denne struktur betjener agentens kontekstindlæsning. En agent, der arbejder med autentificering, indlæser &lt;code&gt;authentication/patterns.md&lt;/code&gt; til vejledning og &lt;code&gt;authentication/anti-patterns.md&lt;/code&gt; for at undgå kendte faldgruber. Filerne er dimensioneret til effektiv kontekstindlæsning: fokuserede nok til at være nyttige, omfattende nok til at være autoritative.&lt;/p&gt;
&lt;p&gt;Vi vedligeholder 21 domæner på øverste niveau, herunder analytics, autentificering, data science, infrastruktur, machine learning, performance, sikkerhed og mere. Hvert domæne kan have underdomæner for finere granularitet.&lt;/p&gt;
&lt;h2 id=&quot;værdier-operativsystemet&quot;&gt;Værdier: Operativsystemet&lt;/h2&gt;
&lt;p&gt;Alle agenter deler et grundlæggende lag af værdier, der definerer, hvordan de opererer:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Enkelhed først.&lt;/strong&gt; Brug den simpleste løsning, der virker. Tilføj kun kompleksitet, når det er berettiget.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ret rodårsager.&lt;/strong&gt; Nøjes aldrig med at skjule fejl. Hvis en pipeline fejler, debug pipelinen. Hvis en test fejler, ret koden eller testen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Evidensbaseret.&lt;/strong&gt; Mærk påstande som “verificeret” (med benchmarks) eller “estimeret” (med antagelser). Et opdaget mønster er ikke det samme som et bekræftet problem.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kontekstøkonomi.&lt;/strong&gt; MCP-værktøjer koster 0,1% af konteksten. Fillæsninger koster 2% hver. Anvend domæneekspertise, før koden udforskes.&lt;/p&gt;
&lt;p&gt;Disse værdier forplanter sig til enhver specialist gennem rendering-pipelinen. En agent kan ikke omgå dem gennem komposition.&lt;/p&gt;
&lt;h2 id=&quot;cli-kontrolplanet&quot;&gt;CLI: Kontrolplanet&lt;/h2&gt;
&lt;p&gt;Orkestra leveres med en CLI til at administrere agentøkosystemet:&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’en er den autoritative kilde til, hvilke agenter der findes, hvilke skills de har, og om systemet er sundt. Den kører validering før synkronisering for at fange problemer tidligt.&lt;/p&gt;
&lt;h2 id=&quot;overvejelser-om-open-source&quot;&gt;Overvejelser om open source&lt;/h2&gt;
&lt;p&gt;Vi byggede Orkestra for at løse vores eget problem: at koordinere AI-agenter i stor skala for en kompleks kodebase. De mønstre, vi opdagede, er ikke specifikke for vores domæne.&lt;/p&gt;
&lt;p&gt;Karakterkompositionssystemet (identitet + mindset + style) gælder for ethvert team, der definerer agentpersonligheder.&lt;/p&gt;
&lt;p&gt;Skill-lagsystemet (K0-K4) giver en mental model til at organisere genanvendelige kapabiliteter efter scope.&lt;/p&gt;
&lt;p&gt;Rendering-pipeline-mønsteret (YAML-kilde + templates + genererede artefakter) adskiller værktøjernes behov fra modellens brug af indholdet.&lt;/p&gt;
&lt;p&gt;Den flade orkestreringsmodel (én koordinator, mange specialister) undgår kompleksitet, samtidig med at den muliggør parallelitet.&lt;/p&gt;
&lt;p&gt;Hvorvidt Orkestra bliver open source, afhænger af, om disse mønstre har værdi for andre, der bygger med Claude Code. Hvis du rammer de mure, vi har beskrevet, kan arkitekturen måske hjælpe.&lt;/p&gt;
&lt;h2 id=&quot;hvad-vi-lærte&quot;&gt;Hvad vi lærte&lt;/h2&gt;
&lt;p&gt;At bygge Orkestra lærte os, at orkestrering ikke handler om at gøre agenter klogere. Det handler om at gøre dem mere fokuserede.&lt;/p&gt;
&lt;p&gt;En enkelt agent med perfekte instruktioner løber stadig tør for kontekst. En enkelt agent med alle skills bliver stadig forvirret over, hvilken der skal anvendes. En enkelt agent, der forsøger at være alt, producerer middelmådige resultater overalt.&lt;/p&gt;
&lt;p&gt;Fyrre specialister, hver fremragende i sit domæne, koordineret af en orkestrator, der ved, hvornår den skal delegere: sådan shipper vi.&lt;/p&gt;
&lt;p&gt;Tallene betyder mindre end arkitekturen. Man har måske brug for fem agenter eller halvtreds. Princippet forbliver: komposition frem for kapacitet, specialisering frem for generalisering, koordinering frem for individuelle heltegerninger.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Orkestra driver agentøkosystemet bag Maguyva, vores kodeintelligensplatform. Vil du vide mere? Kontakt teamet.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Open Source</category></item></channel></rss>