<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Maguyva-bloggen</title><description>Tekniske dypdykk i MCP-kodeintelligens, AI-agentarkitektur og erfaringer fra å bygge en flerspråklig kodesøkplattform.</description><link>https://maguyva.ai/nb/blog</link><language>nb</language><atom:link href="https://maguyva.ai/nb/rss.xml" rel="self" type="application/rss+xml"/><item><title>Kontekst som blir med deg</title><link>https://maguyva.ai/nb/blog/context-that-travels</link><guid isPermaLink="true">https://maguyva.ai/nb/blog/context-that-travels</guid><description>Cursors indekser er utmerket inne i Cursor. Maguyva er det hostede MCP-kartet den samme agenten kan spørre fra andre editorer, CLI-er og CI.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Cursors indekser er utmerket inne i Cursor. Tab-fullføring, inline-redigering, chat, og agenten i det vinduet står allerede på en prosjektindeks Cursor drifter for det åpne arbeidsområdet. Hvis Cursor er den eneste flaten du skriver i, og den indeksen allerede finner de riktige filene, bli der. Det er det ærlige «bli der du er»-tilfellet, og det fortjener å være den første setningen på denne siden.&lt;/p&gt;
&lt;p&gt;Denne teksten handler om den andre halvdelen av en vanlig uke. Det samme repoet åpnes også i Claude Code, blir spurt fra Codex CLI, gjennomgått på en annen maskin, eller spurt av en agent som kjører i CI. Spørsmålet er ikke «hvilken indekser er best». Spørsmålet er om kartet agenten stoler på i ett vindu er det samme kartet den stoler på i det neste.&lt;/p&gt;
&lt;p&gt;Maguyva er det kartet som blir med deg. Det er et eksternt MCP-lag for kodebase-kontekst. Agenten spør det på samme måte som den spør ethvert annet MCP-verktøy. Resultatene kommer tilbake som rangerte stier med linjenumre. Cursor forblir editoren. Det er konteksten som beveger seg.&lt;/p&gt;
&lt;h2 id=&quot;hva-cursors-indekser-er-til-for&quot;&gt;Hva Cursors indekser er til for&lt;/h2&gt;
&lt;p&gt;Cursors innebygde indeksering finnes slik at chat, agent og søk inne i editoren kan hente relevant kode i stedet for å stole bare på det som får plass i modellens rå kontekstvindu. Det er riktig design for en IDE. Denne indeksen er nativ til Cursor. Den er ikke en MCP-server og er ikke tilgjengelig fra noen annen klient.&lt;/p&gt;
&lt;p&gt;Slik fungerer det, som beskrevet i Cursors offentlige dokumentasjon og Cursors egen framstilling da dette ble skrevet: hovedsøkeveien er ikke lenger en sky-embeddingindeks. Cursors team har uttalt på fellesskapsforumet sitt at dedikert semantisk/embedding-basert søk trappes ned til fordel for grep-basert henting, fordi dagens modeller allerede utforsker et levende tre godt nok på egen hånd. I stedet kommer Instant Grep, en lokal søkeindeks bygget av n-grammer, inverterte lister og bloomfiltre, holdt i en minnekartlagt oppslagstabell, slik at spørringer løses på utviklerens egen maskin i stedet for på en server.&lt;/p&gt;
&lt;p&gt;Selve indeksen bor inne i repoets eget &lt;code&gt;.git/cursor/&lt;/code&gt;-katalog, forankret til en bestemt git-commit; endringer siden den commiten legger seg oppå den i stedet for å utløse en ny skanning, og indeksen bygges bare på nytt når den lokale tilstanden har driftet langt fra det den ble bygget mot. Fordi den ligger inne i &lt;code&gt;.git&lt;/code&gt;, blir den aldri sporet og aldri pushet — slett mappen, og indeksen er borte. &lt;code&gt;.gitignore&lt;/code&gt; respekteres av konstruksjon, siden bare git-sporet innhold er kvalifisert, og &lt;code&gt;.cursorignore&lt;/code&gt; håndheves på lesestien. Det finnes ikke lenger noe embedding-steg på serversiden eller ekstern vektordatabase i den stien. Tidligere dokumentasjon beskrev et sky-assistert design — kryptering av chunker, synkronisering via Merkle-tre, gjenbruk av indeks mellom lagmedlemmer — og Cursors eget team har siden sagt at det designet trappes ned, så denne teksten beskriver det ikke lenger som gjeldende.&lt;/p&gt;
&lt;p&gt;Et fremtredende trekk inne i editoren er Cursors Explore-subagent. Den kan starte flere parallelle søk i sitt eget kontekstvindu på en raskere modell og bare returnere de relevante funnene, slik at hovedsamtalen ikke svulmer opp av søketreff. Det er en ekte styrke inne i editoren. Behold den.&lt;/p&gt;
&lt;p&gt;Arbeidsområder med flere rotmapper støttes: konteksten til hver åpnede mappe er tilgjengelig for Agent. Enkelte git-avhengige funksjoner, som worktrees, er deaktivert i multi-rot-oppsett, og Cloud Agents støtter ikke arbeidsområder med flere rotmapper i det hele tatt.&lt;/p&gt;
&lt;p&gt;Ingenting av dette er en grunn til å forlate Cursor. Det er en presis beskrivelse av et kart som er utmerket der det lever.&lt;/p&gt;
&lt;h2 id=&quot;hva-bli-med-deg-faktisk-betyr&quot;&gt;Hva «bli med deg» faktisk betyr&lt;/h2&gt;
&lt;p&gt;Et kart blir med deg når de samme spørsmålene returnerer samme type svar, med sitater du kan åpne, fra mer enn én klient.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I Cursor: «Hvor er &lt;code&gt;parseConfig&lt;/code&gt; definert, og hvem kaller den?»&lt;/li&gt;
&lt;li&gt;I Claude Code, på samme repo: samme spørsmål.&lt;/li&gt;
&lt;li&gt;I Codex CLI, på en gjennomgangsmaskin som aldri har åpnet Cursor-vinduet: samme spørsmål.&lt;/li&gt;
&lt;li&gt;I en CI-agent som snakker MCP: samme spørsmål, mot det samme hostede øyeblikksbildet.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hvis hver flate bygger sin egen private indeks, har du ikke ett kart. Du har flere hurtigbuffere som driver fra hverandre. Editorindeksen kan være oppdatert for treet på disk. CLI-sesjonen kan ligge en dag bak. CI-jobben kan se på en annen checkout. Og agenten vil likevel høres selvsikker ut.&lt;/p&gt;
&lt;p&gt;Cursors indekser er ikke ment å løse det. Fordi den lever inne i editoren, er konteksten den bygger for den editoren. En leser som også trenger en CLI, en CI-pipeline, eller en annen editor, trenger et eget verktøy for de flatene. Det er et faktum om omfang, ikke en mangel. Maguyva er det egne verktøyet.&lt;/p&gt;
&lt;p&gt;Et publisert språkantall for Cursors indekser er ikke oppgitt i materialet denne teksten kan bruke. Maguyva publiserer støtte for over 279 språk og tekstbaserte teknologier. Cursors priser gjengis heller ikke her; se prissiden deres. Maguyva tar betalt per arbeidsområde, ikke per plass, med publiserte planer på $0, $19, $49 og $149 avhengig av indeksert omfang og arbeidsområdets størrelse.&lt;/p&gt;
&lt;h2 id=&quot;ett-hostet-kart-hver-mcp-klient&quot;&gt;Ett hostet kart, hver MCP-klient&lt;/h2&gt;
&lt;p&gt;Maguyva er en ekstern MCP-server. Du kobler til GitHub, velger repoene, og sky-pipelinen bygger symboler, grafkanter og et rangert kart. Du legger til en API-nøkkel i MCP-konfigurasjonen til klienten du allerede bruker. Maguyva har oppsettguider for 24 dokumenterte MCP-klienter — inkludert Cursor — og kan koble til andre MCP-kompatible klienter som støtter standardkonfigurasjon.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://maguyva.ai/nb/for-cursor&quot;&gt;Cursor-oppsettsiden&lt;/a&gt; er den editorspesifikke veien hvis det er der du jobber. Den samme serveren svarer Claude Code, VS Code, Windsurf, Codex CLI og resten. Du bytter ikke editor. Du gir hver agent samme verktøyflate: 11 kundevendte MCP-verktøy på tvers av søk, symboler, avhengighetsanalyse, filhenting, repo-kontekst og deterministiske hjelpeverktøy-arbeidsflyter. Semantisk, strukturell, graf- og tekstsøk smeltes sammen til rangerte resultater.&lt;/p&gt;
&lt;p&gt;Det er portabilitetsfordelen. Sitatene du vurderte i Cursor i morges har samme form som sitatene Codex CLI returnerer i kveld. Filsti og linjenummer. Åpne dem. Hvis de er feil, ser du det. Hvis de er riktige, har neste endring et sted å lande. Den godkjente påstanden er færre hallusinerte endringer, ikke et løfte om at hver endring er riktig.&lt;/p&gt;
&lt;p&gt;Friskhet er publisert. Øyeblikksbilder er tidsstemplet, slik at agenten vet hvilken versjon av treet den leser. Ombyggingstakten er daglig på gratisplanen og hver time på betalte planer. Den ærlige begrensningen er usynkronisert lokalt arbeid: en endring som bare finnes i et arbeidstre, er ennå ikke i det hostede kartet. Denne begrensningen er den samme uansett hvilken klient du spør fra, og det er nettopp poenget. Drift mellom klienter er ikke lenger en andre, skjult begrensning.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://maguyva.ai/nb/docs&quot;&gt;Dokumentasjonen&lt;/a&gt; gir aktiveringsløkken som gjelder for hver klient: indekser et repo du allerede kjenner, koble til klienten, still ett spørsmål du kan verifisere. Gjør det én gang i Cursor. Gjør det igjen fra CLI-en du faktisk bruker på gjennomgangsdager. Hvis begge svarene siterer den samme handleren, har kartet faktisk blitt med deg.&lt;/p&gt;
&lt;h2 id=&quot;hvordan-de-to-kartene-lever-side-om-side&quot;&gt;Hvordan de to kartene lever side om side&lt;/h2&gt;
&lt;p&gt;Bruk begge. De er ikke alternativer i sammenligningssideforstand.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Hold Cursors indekser på for prosjektet på disk. La Explore, Instant Grep og agenten inne i editoren bruke den. Den løkken er nativ og rask.&lt;/li&gt;
&lt;li&gt;Legg til Maguyva som en MCP-server i Cursor, slik at samme økt også kan spørre det hostede arbeidsområdekartet. Cursor er en dokumentert Maguyva-klient. Du velger ikke én indeks og sletter den andre.&lt;/li&gt;
&lt;li&gt;Legg til den samme Maguyva-serveren til Claude Code, Codex CLI, eller en hvilken som helst annen MCP-klient som berører repoet. Én API-nøkkelform. Ett arbeidsområde.&lt;/li&gt;
&lt;li&gt;Hvis en CI-agent er MCP-kompatibel, pek den mot den samme serveren. Den vil lese det samme tidsstemplede øyeblikksbildet som laptopen gjorde.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Editorindeksen forblir det beste verktøyet for «hva er på disk i dette vinduet, akkurat nå». Det hostede kartet er det beste verktøyet for «hvordan ser dette arbeidsområdet ut for hver agent som berører det i dag». De setningene konkurrerer ikke.&lt;/p&gt;
&lt;p&gt;Arbeidsområdekvoter publiseres på &lt;a href=&quot;https://maguyva.ai/nb/pricing&quot;&gt;prissiden&lt;/a&gt;: repoer, indekserte linjer og brukere, fakturert per arbeidsområde. Agenter og mennesker deler samme brukertall. Start gratis med et repo du allerede kan vurdere. Øk arbeidsområdet først etter at sitatene har overlevd kontakt med treet.&lt;/p&gt;
&lt;h2 id=&quot;hva-denne-siden-ikke-hevder&quot;&gt;Hva denne siden ikke hevder&lt;/h2&gt;
&lt;p&gt;Den hevder ikke at Cursors indekser er svak, ufullstendig, eller en grunn til å bytte editor. Den første setningen i denne teksten sier det motsatte.&lt;/p&gt;
&lt;p&gt;Den hevder ikke at Maguyva erstatter Instant Grep eller Explore-subagenten. Det er Cursor-funksjoner. De blir værende i Cursor.&lt;/p&gt;
&lt;p&gt;Den finner ikke opp et språkantall, et latenstall, eller en token-besparelse for noen av produktene. Ukjente tall forblir upublisert.&lt;/p&gt;
&lt;p&gt;Den later ikke som om upushet lokalt arbeid er i det hostede kartet. Tidsstemplede øyeblikksbilder gjør den begrensningen synlig. De fjerner den ikke.&lt;/p&gt;
&lt;p&gt;Testen er vanlig. Indekser et repo du allerede kjenner. Still ett spørsmål du kan verifisere, først i Cursor, så i en andre MCP-klient. Kontekst som blir med deg er det samme sitatet på 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>Kart først, gjennomgang etterpå</title><link>https://maguyva.ai/nb/blog/map-first-review-second</link><guid isPermaLink="true">https://maguyva.ai/nb/blog/map-first-review-second</guid><description>Forankre den kodende agenten i et repo-kart før den skriver. La Greptile gjennomgå pull requesten etterpå. Et komplementært par, ikke en erstatning.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;To ulike jobber sitter på hver sin side av en pull request. Før agenten skriver, trenger den et kart over treet den er i ferd med å endre. Etter at agenten har åpnet en PR, bør noe lese den endringen mot resten av systemet og legge igjen kommentarer et menneske kan handle på.&lt;/p&gt;
&lt;p&gt;Disse jobbene ser like ut på avstand fordi begge involverer «å forstå kodebasen». De er ikke det samme produktet. Den ene svarer på «hvor bør denne endringen lande?». Den andre svarer på «hva ødela dette diffet som en linje-for-linje-linter vil overse?». Å blande dem gir et dårligere førsteutkast og en mer bråkete gjennomgang.&lt;/p&gt;
&lt;p&gt;Denne teksten er en guide til en felles arbeidsflyt. Maguyva er kartet agenten spør først. Greptile er gjennomgangsagenten som kommenterer PR-en etterpå. Paret er komplementært av konstruksjon: Maguyva gjennomgår ikke pull requests, og Greptile erstatter ikke kontekstlaget agenten brukte for å skrive dem.&lt;/p&gt;
&lt;h2 id=&quot;hvorfor-denne-oppdelingen-er-nyttig&quot;&gt;Hvorfor denne oppdelingen er nyttig&lt;/h2&gt;
&lt;p&gt;En kodende agent som starter fra treningspriorer pluss noen få innlimte filer, vil finne opp en plausibel sti og redigere den. Det er «feil fil»-svikten, og det er et hentingsproblem. Maguyva er et eksternt MCP-lag for kodebase-kontekst: semantisk, strukturell (AST), graf-/avhengighets- og tekstbasert henting smeltes sammen til rangerte resultater, pluss symbolsøk og filhenting. Underbygde svar kommer tilbake som &lt;code&gt;path/file.ext:line&lt;/code&gt;, slik at du kan avvise en bom før en patch finnes. Påstanden forblir beskjeden: færre hallusinerte endringer. Modellen kan fortsatt gjette. Det er bare det første steget som slutter å være en gjetning.&lt;/p&gt;
&lt;p&gt;Greptile er en AI-kodegjennomgangsagent. I deres egne ord gjennomgår den automatisk hver pull request med full forståelse av kodebasen, og setter det opp mot tradisjonelle lintere som sjekker filer isolert i stedet for hele systemet. Oppsettet består i å installere GitHub- eller GitLab-appen og velge repoer. Det finnes ingen lokal indeks du må drifte. Hosting er Greptile Cloud (de oppgir SOC 2 Type II-samsvar, med en rapport tilgjengelig på forespørsel), med et selvhostet alternativ tilbudt til bedrifter.&lt;/p&gt;
&lt;p&gt;Deres egen nummererte flyt er: koble til og bygg en avhengighetsgraf av hver funksjon, klasse og avhengighet; ved hver pull request, analyser endringen ved hjelp av denne fullstendige repo-grafen og publiser funn som PR-kommentarer med foreslåtte rettelser, på omtrent tre minutter; hver kommentar kan overlevere problemet til en kodende agent teamet allerede bruker. De oppgir også at de leser tidligere menneskelige PR-kommentarer over tid for å lære et teams kodestandarder og redusere bråkete forslag. Læringssystemet deres trenger, ifølge dem selv, 2–3 uker for å tilpasse seg.&lt;/p&gt;
&lt;p&gt;Det er gjennomgang, ikke utkast. Greptiles fremste styrke er kontekst fra en fullstendig repo-graf på endringen som allerede har landet i en PR, etterfulgt av en lukket løkke som sender funnet til Claude Code, Codex, Conductor, Cursor, eller Devin. Maguyvas fremste styrke er det rangerte kartet agenten spurte før den endringen ble skrevet. Bruk begge. Ikke be noen av dem gjøre den andres jobb.&lt;/p&gt;
&lt;p&gt;En førstepartsproduktintegrasjon mellom Maguyva og Greptile er ikke oppgitt. Du trenger heller ikke én. Maguyva snakker med agenten over MCP. Greptile snakker med GitHub eller GitLab gjennom appen sin. De møtes ved pull requesten. Ingen limescript, ingen cron som kobler ett verktøy til det andre. Paret klarer seg uten bash fordi hvert produkt allerede står på flaten det eier.&lt;/p&gt;
&lt;h2 id=&quot;hva-dette-ikke-er&quot;&gt;Hva dette ikke er&lt;/h2&gt;
&lt;p&gt;Dette er ikke en nedrivning av Greptile. Det er ikke en «bytt anmelder»-side. Greptile lanserte på Hacker News 5. mars 2024 som et Y Combinator W24-selskap, og den tråden er hvordan mange først møtte produktet. Hvis det er slik du fant dem, behold dem. Denne siden er den manglende første halvdelen av den løkken: å forankre agenten på forhånd, slik at PR-en Greptile ser allerede sikter mot de riktige filene.&lt;/p&gt;
&lt;p&gt;Greptiles markedsføringsmateriell leder med påstander om gjennomgangshastighet og feilfangst. Behandle dem som Greptiles egne påstander, ikke uavhengig verifiserte tall. Denne teksten gjentar dem ikke som fakta.&lt;/p&gt;
&lt;p&gt;Språkdekning er samme type ærlighet. Greptile rammer støtte som dekning av alle programmeringsspråk i stedet for en opplistet liste; et presist tall er ikke oppgitt. Maguyva publiserer støtte for over 279 språk og tekstbaserte teknologier, med en teknisk oppdeling (parserstøttet AST versus bare tekst) på nettsiden når spørsmålet er teknisk. Dette er ulike produkter som kommer med ulike påstander. Ikke bland dem.&lt;/p&gt;
&lt;p&gt;Greptiles priser er ikke oppgitt i materialet denne teksten kan bruke. Betalte planer finnes; se prissiden deres. Maguyva tar betalt per arbeidsområde, ikke per plass. Planer starter gratis. &lt;a href=&quot;https://maguyva.ai/nb/pricing&quot;&gt;Prissiden&lt;/a&gt; lister opp de publiserte nivåene hvis du trenger arbeidsområdetallene.&lt;/p&gt;
&lt;h2 id=&quot;arbeidsflyt&quot;&gt;Arbeidsflyt&lt;/h2&gt;
&lt;p&gt;Tre navngitte trinn. Utfør dem i denne rekkefølgen. Ikke hopp over noen av dem første gang du prøver paret.&lt;/p&gt;
&lt;h3 id=&quot;1-maguyva-kontekst&quot;&gt;1. Maguyva-kontekst&lt;/h3&gt;
&lt;p&gt;Indekser ett repo du allerede kjenner. Koble til MCP-klienten du allerede skriver i — Claude Code, Cursor, Codex CLI, VS Code, Windsurf, eller en annen MCP-kompatibel klient. Maguyva har oppsettguider for 24 dokumenterte MCP-klienter og kan koble til andre klienter som støtter standard MCP-konfigurasjon.&lt;/p&gt;
&lt;p&gt;Still et spørsmål du kan vurdere før noen skriver en linje. «Hvor håndteres øktutløp, og hva kaller det?» er et bedre første trekk enn «fiks auth». Krev sitater. Åpne &lt;code&gt;file.ext:line&lt;/code&gt;-resultatene. Følg symbolet. Bekreft avhengigheten du er i ferd med å røre.&lt;/p&gt;
&lt;p&gt;Maguyva eksponerer 11 kundevendte MCP-verktøy på tvers av søk, symboler, avhengighetsanalyse, filhenting, repo-kontekst og deterministiske hjelpeverktøy-arbeidsflyter. Fire hentemodi smeltes sammen til rangerte resultater; &lt;code&gt;find_symbol&lt;/code&gt; er et eget verktøy når du allerede kjenner navnet. &lt;a href=&quot;https://maguyva.ai/nb/docs&quot;&gt;Dokumentasjonen&lt;/a&gt; beskriver den korteste veien: start gratis, indekser et repo du allerede kjenner, koble til klienten, still deretter ett spørsmål du kan verifisere.&lt;/p&gt;
&lt;p&gt;Øyeblikksbilder er tidsstemplet, slik at agenten kan si hvilken versjon av treet den leser. Den ærlige begrensningen er usynkronisert lokalt arbeid. Hvis endringen bare finnes i et arbeidstre og ikke er pushet, inneholder det hostede kartet den ennå ikke. Instruksjonsfiler (&lt;code&gt;CLAUDE.md&lt;/code&gt;, &lt;code&gt;AGENTS.md&lt;/code&gt;) hører fortsatt hjemme her, for konvensjoner og hva som ikke skal røres. De er ikke et levende kart. Bruk dem til oppførsel. Bruk Maguyva til fakta.&lt;/p&gt;
&lt;p&gt;Ikke la agenten åpne en PR før sitatene overlever kontakt med repoet. Den porten er hele poenget med dette trinnet.&lt;/p&gt;
&lt;h3 id=&quot;2-agentens-pr&quot;&gt;2. Agentens PR&lt;/h3&gt;
&lt;p&gt;Den samme agenten skriver nå endringen i klienten du allerede betaler for. Maguyva er verken en editor eller en anmelder. Agenten produserer fortsatt diffet. Du åpner fortsatt pull requesten på GitHub eller GitLab slik du allerede gjør.&lt;/p&gt;
&lt;p&gt;Det som bør være annerledes, er den første filen. PR-en bør navngi handleren som faktisk implementerer oppførselen, kalleren som vil bryte, og testen som vil feile hvis endringen er feil. Hvis trinn 1 ble hoppet over, vil trinn 3 bruke kommentarene sine på en endring som landet i feil pakke. Greptile kan fortsatt finne systemiske problemer. Den burde ikke i tillegg måtte hente seg inn etter en hallusinert sti.&lt;/p&gt;
&lt;p&gt;Hold PR-en avgrenset. En underbygd første fil er ingen lisens til å skrive om modulen. Dette komplementære paret fungerer når agenten gjorde én jobb med et kart, og deretter ba en anmelder gjøre en annen jobb på et avgrenset diff.&lt;/p&gt;
&lt;h3 id=&quot;3-greptile-gjennomgang&quot;&gt;3. Greptile-gjennomgang&lt;/h3&gt;
&lt;p&gt;Greptile er allerede koblet til repoet via GitHub- eller GitLab-appen. På den nye pull requesten analyserer den endringen ved hjelp av den fullstendige repo-grafen den bygde, og publiserer funn som kommentarer med foreslåtte rettelser. Deres eget materiale setter dette passet til omtrent tre minutter.&lt;/p&gt;
&lt;p&gt;Les kommentarene slik du ville lest en grundig lagkamerat: åpne det siterte stedet, avgjør om funnet er reelt, og handle deretter. Der Greptile tilbyr «Fix with your Agent», sender den problemet — filstier, linjenumre, foreslått kode — til Claude Code, Codex, Conductor, Cursor, eller Devin. «Fix All» sender alle problemene i gjennomgangen på én gang. De leverer også en Greptile MCP og en Claude Code-plugin for den overleveringen. Maguyva er ikke på den navngitte målisten; det fraværet er ikke et problem. Maguyva har allerede gjort jobben sin i trinn 1. Den kodende agenten som skrev PR-en, er den som bør motta rettelsesnyttelasten.&lt;/p&gt;
&lt;p&gt;Forvent støy de første 2–3 ukene mens Greptiles læringssystem tilpasser seg kommentarene teamet ditt faktisk legger igjen. Det er tidslinjen de oppgir, ikke en mangel ved paret. Menneskelig gjennomgang forblir i løkken. Greptile er det automatiserte første passet, ikke sammenslåingsknappen.&lt;/p&gt;
&lt;p&gt;Hvis en Greptile-kommentar peker på en fil agenten aldri spurte i trinn 1, er det et nyttig signal. Enten gikk kartet glipp av en kaller, eller agenten hoppet over et sitat. Fiks utkastet i tråd med kommentaren. Ikke deaktiver anmelderen.&lt;/p&gt;
&lt;h2 id=&quot;hvordan-holde-dette-komplementet-ærlig&quot;&gt;Hvordan holde dette komplementet ærlig&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Maguyva alltid først. En gjennomgang av en PR med feil fil er fortsatt en gjennomgang av feil fil.&lt;/li&gt;
&lt;li&gt;Greptile alltid etterpå. Et godt sitert utkast trenger fortsatt en lesning av diffet på hele systemets nivå.&lt;/li&gt;
&lt;li&gt;Ikke be Maguyva publisere PR-kommentarer. Det gjør den ikke.&lt;/li&gt;
&lt;li&gt;Ikke be Greptile være agentens første hentelag mens den fortsatt velger sti. Det er ikke jobben GitHub- eller GitLab-appen deres er kablet for.&lt;/li&gt;
&lt;li&gt;Ikke finn opp en bash-pipeline som «synkroniserer» dem. PR-en er grensesnittet.&lt;/li&gt;
&lt;li&gt;Verifiser begge sider uavhengig. Indekser et repo du allerede kjenner. Still ett spørsmål du kan verifisere. Åpne deretter en liten PR og les hva Greptile faktisk kommenterer.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Løkken er vanlig så snart den får et navn. Kart først. Agentens PR. Gjennomgang etterpå. Hvert produkt blir på den siden av pull requesten det er god på.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// map first. review second. in that order.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Ecosystem</category><category>Workflow</category><category>Code Review</category></item><item><title>Gi en AI-agent kontekst om et stort repo uten en lokal indekser</title><link>https://maguyva.ai/nb/blog/large-repo-context-without-a-local-indexer</link><guid isPermaLink="true">https://maguyva.ai/nb/blog/large-repo-context-without-a-local-indexer</guid><description>Hvordan gi en kodende agent et søkbart kart over et stort repo fra skyen, uten å kjøre en lokal indekser på laptopen din.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Et stort repo får ikke plass i et kontekstvindu, og hvis du noen gang har pekt en laptop-indekser mot et ekte monorepo, vet du at det heller ikke får komfortabel plass der — RAM-en skyter i været, den første indekseringen tar en time, og agenten din begynner fortsatt neste økt med å gjette hvilke filer som betyr noe.&lt;/p&gt;
&lt;p&gt;Det vanlige svaret er å kjøre en indekser ved siden av editoren, og for et repo som får komfortabel plass på én maskin, er det et godt svar. Hvis monorepoet ditt allerede indekseres raskt i Cursor, og det er det eneste stedet du trenger kartet, har denne teksten ikke noe å tilføye — hopp over den.&lt;/p&gt;
&lt;p&gt;Denne teksten handler om det andre tilfellet — når en agent trenger et søkbart kart over et stort repo, og du ikke vil kjøre en lokal indekser for å få det.&lt;/p&gt;
&lt;h2 id=&quot;når-en-lokal-indekser-er-feil-verktøy&quot;&gt;Når en lokal indekser er feil verktøy&lt;/h2&gt;
&lt;p&gt;En lokal indeks forutsetter at koden lever på maskinen som spør den, og i reell monorepo-skala strekker denne antagelsen seg selv innenfor én editor. Repoet er rett og slett større enn du vil holde «varmt» på en laptop: du jobber i én pakke mens påvirkningsradiusen ligger tre kataloger unna, og en første kald indeksering av et to-millioners-linjers tre er ikke noe du vil gjennomgå to ganger — verken på din egen maskin, eller på en CI-runner som aldri har klonet treet før. Eller en kollega burde kunne spørre det samme kartet som deg, uten å vente på at deres egen maskin skal kjempe seg gjennom den samme indekseringen.&lt;/p&gt;
&lt;p&gt;Ingenting av dette er en grunn til å kaste en god editor-indekser. Det er en grunn til også å ha et hostet kart som hvilken som helst av agentene dine kan spørre over MCP.&lt;/p&gt;
&lt;p&gt;Og skalaproblemet går dypere enn «for mange filer å lime inn». På et stort tre er det interessante spørsmålet nesten aldri «vis meg denne filen» — det er hvilken fil, hvilket symbol, hvilke kallere, hvilke tester. En agent som starter med å liste &lt;code&gt;src/&lt;/code&gt; og lese de tre første treffene, vil muntert overse handleren i &lt;code&gt;apps/api&lt;/code&gt; og den genererte klienten i &lt;code&gt;packages/sdk&lt;/code&gt;. Det du trenger, er henting bygget fra hele treet, deretter rangert, deretter sitert.&lt;/p&gt;
&lt;h2 id=&quot;hva-kontekst-om-et-stort-repo-faktisk-betyr&quot;&gt;Hva «kontekst om et stort repo» faktisk betyr&lt;/h2&gt;
&lt;p&gt;Å dumpe filer inn i prompten er ikke kontekst — det er en mindre, dårligere kopi av treet. Det agenten din faktisk trenger, er å stille spørsmål og få siterte svar tilbake: hvor dette symbolet er definert og hvem som kaller det, hva som avhenger av modulen jeg er i ferd med å endre, hvilken testfil som dekker denne oppførselen, og hvordan treet ser ut &lt;em&gt;nå&lt;/em&gt;, ikke forrige kvartal.&lt;/p&gt;
&lt;p&gt;Disse svarene må komme fra en indeks bygget av ditt repo, ikke fra modellens hukommelse om andres repoer, og indeksen må leve et annet sted enn agentens kontekstvindu. For dette problemet bør den også leve et annet sted enn laptopen din.&lt;/p&gt;
&lt;p&gt;Enda én ting instruksjonsfiler ikke kan gjøre for deg: &lt;code&gt;CLAUDE.md&lt;/code&gt; og &lt;code&gt;AGENTS.md&lt;/code&gt; er riktig sted for konvensjoner og oppførsel, men de er ikke et levende, rangert, søkbart kart over et to-millioners-linjers tre. Bruk regler for oppførsel; bruk repo-intelligens for fakta.&lt;/p&gt;
&lt;h2 id=&quot;vi-bygger-kartet-i-skyen-spør-det-fra-hvilken-som-helst-klient&quot;&gt;Vi bygger kartet i skyen, spør det fra hvilken som helst klient&lt;/h2&gt;
&lt;p&gt;Maguyva er et eksternt MCP-lag for kodebase-kontekst. Du kobler til GitHub, velger repoene dine, og kan gå din vei mens sky-pipeliner analyserer treet, bygger symboler og grafkanter, og vedlikeholder et rangert kart — aldri en lokal indekser.&lt;/p&gt;
&lt;p&gt;Når du pusher kode, analyseres endrede filer inkrementelt, og graf- og rangeringslagene bygges på nytt etter en tidsplan: daglig på gratisplanen, hver time på betalte planer. Hvert øyeblikksbilde er tidsstemplet, slik at agenten din kan si hvilken versjon av treet den leser. Den ærlige begrensningen her er usynkronisert lokalt arbeid — en endring som bare finnes i arbeidstreet ditt, aldri pushet, er ennå ikke i det hostede kartet.&lt;/p&gt;
&lt;p&gt;Deretter kobler du til hvilken som helst klient du allerede bruker, ved å legge en API-nøkkel til MCP-konfigurasjonen. Det finnes oppsettguider for 24 dokumenterte MCP-klienter, og enhver annen MCP-kompatibel klient som støtter standardkonfigurasjon kan også koble til. Hvis Cursor er der du bor, følger &lt;a href=&quot;https://maguyva.ai/nb/for-cursor&quot;&gt;Cursor-siden&lt;/a&gt; den veien; den samme serveren svarer Claude Code, VS Code, Windsurf, Codex CLI og resten.&lt;/p&gt;
&lt;p&gt;Du bytter ikke editor. Du gir agenten din en verktøyflate — 11 MCP-verktøy på tvers av søk, symboler, avhengighetsanalyse, filhenting og repo-kontekst — med dekning på tvers av over 279 språk og tekstbaserte teknologier, noe som betyr mer enn du skulle tro på et monorepo som sluttet å være ett språk for mange år siden.&lt;/p&gt;
&lt;p&gt;Svar kommer tilbake underbygget, som filstier med linjenumre. Semantisk, strukturell, graf- og tekstsøk smeltes sammen til rangerte resultater, slik at et spørsmål som «hva avhenger av parseConfig» gir deg verken en grep-dump eller ett enkelt semantisk utdrag, men den håndfullen steder som faktisk betyr noe.&lt;/p&gt;
&lt;h2 id=&quot;en-konkret-fremgangsmåte&quot;&gt;En konkret fremgangsmåte&lt;/h2&gt;
&lt;p&gt;Ikke start med å indeksere hele selskapet. Her er veien som fungerer:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Velg ett repo du allerede kjenner godt — en pakke du kan vurdere for hånd, er verdt mer enn det største treet du har.&lt;/li&gt;
&lt;li&gt;Start gratis: 3 repoer, 50k indekserte linjer, alle 11 verktøy, ingen månedlig spørrekvote. Hvis det representative repoet ditt er større, lister &lt;a href=&quot;https://maguyva.ai/nb/pricing&quot;&gt;prissiden&lt;/a&gt; opp arbeidsområdenivåene ($0, $19, $49, $149) etter indeksert omfang — ikke etter antall plasser.&lt;/li&gt;
&lt;li&gt;Koble til GitHub og vent til den første indekseringen er ferdig. Du kompilerer ingenting lokalt.&lt;/li&gt;
&lt;li&gt;Koble til MCP-klienten — noen få linjer konfigurasjon. Maguyva er en ekstern MCP-server, så det finnes ingen plugins, ingen utvidelser, og ingen andre editor å ta i bruk.&lt;/li&gt;
&lt;li&gt;Still ett spørsmål du kan verifisere. «Hva avhenger av parseConfig?» eller «Hvor håndteres utløp av innloggingsøkt?» Åpne deretter de siterte &lt;code&gt;file.ext:line&lt;/code&gt;-resultatene og sjekk dem mot treet foran deg.&lt;/li&gt;
&lt;li&gt;Først etter at sitatene overlever den kontakten, lar du agenten redigere.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Hvis det første repoet passer bra og treet ditt er stort, øk arbeidsområdet slik at det matcher indekserte linjer og ombyggingstakt. Mennesker og agenter deler samme brukertall — Maguyva tar betalt per arbeidsområde, ikke per plass — så å legge en tredje agent til løkken koster deg ingenting.&lt;/p&gt;
&lt;p&gt;Aktiveringstesten er den samme som &lt;a href=&quot;https://maguyva.ai/nb/docs&quot;&gt;dokumentasjonen&lt;/a&gt; anbefaler for enhver første kjøring: indekser et repo du allerede kjenner, still ett spørsmål du kan verifisere. Et stort repo endrer ikke testen; det gjør bare en feil første fil dyrere.&lt;/p&gt;
&lt;h2 id=&quot;hva-du-bør-følge-med-på-etter-tilkobling&quot;&gt;Hva du bør følge med på etter tilkobling&lt;/h2&gt;
&lt;p&gt;Hold øye med tre ting. Friskhet: betalte planer bygger på nytt hver time, gratisplaner daglig, og upushet lokalt arbeid vil ikke være i kartet — det er avveiningen du gjør. Omfang: indekser et representativt sett med repoer, ikke hver arkiverte fork; gratisnivået er bevisst dimensjonert for å finne ut om svarene er verdt å beholde. Og verifisering: et kart over et stort repo som ikke kan sitere stier og linjenumre, er bare en tregere gjettemaskin, så la agenten din vise stedet før den leverer patchen.&lt;/p&gt;
&lt;p&gt;Kjør deretter den samme testen du ville kjørt på et lite repo. Indekser et repo du allerede kjenner. Still ett spørsmål du kan verifisere. Hvis kartet er ekte, slutter agenten din å starte fra et kaldt tre.&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 den AI-kodende agenten din hallusinerer filstier</title><link>https://maguyva.ai/nb/blog/why-ai-coding-agents-hallucinate-file-paths</link><guid isPermaLink="true">https://maguyva.ai/nb/blog/why-ai-coding-agents-hallucinate-file-paths</guid><description>AI-kodende agenter finner opp filstier når de ikke har et ekte kart over repoet. Her er hvorfor det skjer, og hvordan forankring fører til færre hallusinerte endringer.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Tegnet er ikke en feil funksjonskropp. Det er en selvsikker endring i en fil som ikke finnes, eller i en fil som finnes, men som ikke er den som implementerer oppførselen.&lt;/p&gt;
&lt;p&gt;Du ba om en fiks for øktutløp. Agenten åpnet &lt;code&gt;src/auth/session.ts&lt;/code&gt;. Den stien er plausibel. Den er også feil. Den ekte handleren lever i &lt;code&gt;apps/api/src/middleware/expiry.ts&lt;/code&gt;, omdøpt to refaktoreringer tilbake. Agenten løy ikke for deg. Den fullførte en sti-formet streng fra treningspriorer pluss det som allerede var i kontekstvinduet.&lt;/p&gt;
&lt;p&gt;Dette er det vanlige feilmønsteret på et ekte repo. Modellen kan skrive kode. Feilen ligger i å velge feil sted å skrive den.&lt;/p&gt;
&lt;h2 id=&quot;hvorfor-agenter-finner-opp-stier&quot;&gt;Hvorfor agenter finner opp stier&lt;/h2&gt;
&lt;p&gt;En kodende agent er en neste-token-modell med verktøy. Når du sier «fiks øktutløp», må den navngi en fil før den kan lese eller patche noe. Hvis den ikke allerede har et forankret kart, konstruerer den en sti fra:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Navnekonvensjoner den har sett i andre repoer. &lt;code&gt;src/auth/session.ts&lt;/code&gt; er en vanlig form.&lt;/li&gt;
&lt;li&gt;Filer allerede i samtalen, som kanskje er de du limte inn forrige uke, ikke de som betyr noe nå.&lt;/li&gt;
&lt;li&gt;Katalogoppføringer den tilfeldigvis kjørte, ufullstendige på et stort tre.&lt;/li&gt;
&lt;li&gt;Instruksjonsfiler. &lt;code&gt;CLAUDE.md&lt;/code&gt; og &lt;code&gt;AGENTS.md&lt;/code&gt; forteller agenten hvordan den skal oppføre seg. De er ikke en levende indeks over symboler, kallere, eller gjeldende stier.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ingen av disse kildene er et kart over dette repoet, i dag. Modellen fyller hullet på samme måte som den fyller ethvert hull: med en fortsettelse med høy sannsynlighet. Den fortsettelsen ser ofte ut som en ekte sti. Noen ganger finnes filen og ligger ved siden av den riktige. Noen ganger fantes den på en gren som ble slått sammen forrige måned. Noen ganger fantes den aldri.&lt;/p&gt;
&lt;p&gt;Grep redder deg ikke her hvis agenten aldri søker etter riktig streng. Agenten gjettet en sti, leste deretter hva den stien returnerte, og redigerte den. Det første feilsteget var stien, ikke patchen.&lt;/p&gt;
&lt;p&gt;Å lese filer er heller ikke det samme som å finne de riktige. Claude Code, Cursor, Codex, og lignende verktøy kan åpne hva som helst du peker dem mot. Spørsmålet er om de pålitelig finner de riktige filene, de viktige symbolene, avhengighetene, testene, og påvirkningsradiusen før de redigerer. Filtilgang uten et kart begynner fortsatt med en gjetning.&lt;/p&gt;
&lt;h2 id=&quot;redigering-av-feil-fil-er-et-hentingsproblem&quot;&gt;Redigering av feil fil er et hentingsproblem&lt;/h2&gt;
&lt;p&gt;Behandle den oppdiktede stien som en henting som bommet, ikke som en personlighetsfeil.&lt;/p&gt;
&lt;p&gt;Hvis agenten måtte returnere &lt;code&gt;path/file.ext:line&lt;/code&gt; før den fikk lov til å redigere, ville to ting skje. Først kunne du åpne sitatet og avvise arbeidet på ti sekunder. Deretter måtte agenten spørre noe som faktisk kjenner treet.&lt;/p&gt;
&lt;p&gt;Det er jobben til et kodebase-kontekstlag. Semantisk søk alene er ikke nok. Et utdrag som «høres ut som øktutløp» kan fortsatt lande i en avviklet pakke. Du trenger også eksakt tekst når du kjenner strengen, symbolsøk når du kjenner navnet, strukturelt søk når du kjenner formen, og en avhengighetsgraf når du trenger kallere og påvirkningsradius.&lt;/p&gt;
&lt;p&gt;Maguyva er det laget for MCP-kompatible kodende agenter. Det er ikke en editor. Claude Code, Cursor, Codex CLI, VS Code, Windsurf, og andre MCP-klienter blir der de er. Agenten spør et rangert kart før den rører en linje.&lt;/p&gt;
&lt;p&gt;Påstanden er bevisst beskjeden: færre hallusinerte endringer. Maguyva fjerner ikke modellens evne til å gjette. Den endrer standard første steg fra «finn opp en plausibel sti» til «be om rangerte, siterte steder».&lt;/p&gt;
&lt;h2 id=&quot;hvordan-et-underbygd-svar-ser-ut&quot;&gt;Hvordan et underbygd svar ser ut&lt;/h2&gt;
&lt;p&gt;Et nyttig svar på «hvor håndteres øktutløp» er ikke et avsnitt. 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; - kalleren&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apps/api/tests/expiry.test.ts:20&lt;/code&gt; - testen som vil feile hvis endringen er feil&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Du kan åpne disse linjene. Hvis de er feil, stopper du. Hvis de er riktige, kan agenten redigere. Verifiseringen er poenget, ikke et slagord.&lt;/p&gt;
&lt;p&gt;Maguyva eksponerer 11 kundevendte MCP-verktøy på tvers av søk, symboler, avhengighetsanalyse, filhenting, repo-kontekst og deterministiske hjelpeverktøy-arbeidsflyter. Fire hentemodi (semantisk, strukturell, graf/avhengighet, og tekst) smeltes sammen til rangerte resultater; symbolsøk er et eget MCP-verktøy (&lt;code&gt;find_symbol&lt;/code&gt;). Underbygde svar kommer tilbake med filstier og linjenumre, slik at du kan vurdere dem mot treet foran deg.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://maguyva.ai/nb/docs&quot;&gt;Dokumentasjonen&lt;/a&gt; beskriver den korteste veien: start gratis, indekser et repo du allerede kjenner, koble til klienten, still deretter ett spørsmål du kan verifisere.&lt;/p&gt;
&lt;h2 id=&quot;en-løkke-som-endrer-den-første-endringen&quot;&gt;En løkke som endrer den første endringen&lt;/h2&gt;
&lt;p&gt;Du trenger ikke en ny arbeidsflytreligion. Du trenger ett ekstra steg før den første skrivingen.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Still et spørsmål du allerede kan vurdere. «Hvilken kode håndterer innlogging og øktutløp?» er bedre enn «fiks auth».&lt;/li&gt;
&lt;li&gt;Krev sitater. Filsti og linjenummer, ikke et sammendrag av «auth-modulen».&lt;/li&gt;
&lt;li&gt;Åpne de siterte filene. Følg symbolet. Bekreft avhengigheten du er i ferd med å røre.&lt;/li&gt;
&lt;li&gt;Først da lar du agenten patche.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Hvis steg 2 ikke returnerer noe nyttig, har ikke agenten lov til å improvisere en sti. Den søker igjen, eller du peker den. Nettopp denne ene porten er det som gir færre hallusinerte endringer. Modellen er den samme modellen. Kartet er det som har endret seg.&lt;/p&gt;
&lt;p&gt;Instruksjonsfiler betyr fortsatt noe. Behold dem. Bruk dem til konvensjoner, gjennomgangsregler, og hva som ikke skal røres. Ikke be dem være indeksen. En &lt;code&gt;CLAUDE.md&lt;/code&gt; som lister tre viktige kataloger, vil være utdatert uken etter en pakke-splitting. Et søkbart kart oppdateres når repoet oppdateres.&lt;/p&gt;
&lt;p&gt;En beslektet svikt er nesten-riktig-filen: agenten åpner &lt;code&gt;auth.ts&lt;/code&gt; når oppførselen lever i &lt;code&gt;auth-client.ts&lt;/code&gt;, eller patcher en generert fil i stedet for kilden, eller redigerer kopien i &lt;code&gt;packages/legacy&lt;/code&gt; fordi navnet stemte. Sitater gjør ikke disse feilene umulige. De gjør dem synlige før diffet lander.&lt;/p&gt;
&lt;h2 id=&quot;hva-et-kart-ikke-vil-fikse-for-deg&quot;&gt;Hva et kart ikke vil fikse for deg&lt;/h2&gt;
&lt;p&gt;Vær nøktern om hva du får. Et underbygd kart vil ikke gjøre hver endring riktig — agenten din kan fortsatt skrive en dårlig patch i akkurat riktig fil. Hvis kodebasen din lener seg på dynamisk dispatch, refleksjon, eller monkey-patching, vil noen symbolsøk komme tilbake tynnere enn du skulle ønske, fordi det er det kjøretidsindireksjon gjør med enhver statisk indeks. Og hvis du håper på en prosentandel — «hallusinerte stier ned X%» — finner du den ikke her, fordi ingen ærlig kan måle det tallet for repoet ditt bortsett fra deg selv.&lt;/p&gt;
&lt;p&gt;Det du kan forvente er smalere og mer nyttig: agenten slutter å åpne endringene sine med en gjettet sti. Det første steget blir forankret i et ekte kart, og det er derfra færre hallusinerte endringer kommer. Alt etter sitatet — å lese diffet, vurdere patchen — er fortsatt jobben din, akkurat som det alltid har vært.&lt;/p&gt;
&lt;p&gt;Testen koster deg nesten ingenting: indekser et repo du allerede kjenner og still ett spørsmål du kan verifisere. Start med en sti du har blitt brent av. Hvis sitatene er feil, ser du det umiddelbart. Hvis de er riktige, har agentens neste endring et bedre sted å 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 oppgraderte kodesøk til voyage-4-large</title><link>https://maguyva.ai/nb/blog/upgrading-code-search-to-voyage-4-large</link><guid isPermaLink="true">https://maguyva.ai/nb/blog/upgrading-code-search-to-voyage-4-large</guid><description>Vi flyttet kode-embeddingene våre til voyage-4-large — for tiden på topp på den offentlige RTEB-rangeringen for kode-retrieval. Den ærlige versjonen: kompromisset vi tar, hva vi 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 innlegget gjenspeiler RTEB-rangeringene ved publisering (juni 2026). Rangeringer endrer seg; behandle dem som et øyeblikksbilde, ikke et permanent faktum.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Semantisk søk er bare så godt som embeddingene under det.&lt;/p&gt;
&lt;p&gt;Når en agent spør Maguyva «hvor håndterer vi retries», grepper den ikke etter ordet «retry». Den spør etter &lt;em&gt;meningen&lt;/em&gt; — backoff-løkken, circuit breakeren, det som pakker inn et ustabilt kall. Det spørsmålet besvares av en vektormodell som gjør kode om til et punkt i rommet og finner naboene. Velg en bedre modell, og hvert semantiske søk i produktet blir mer presist uten at brukeren merker selve endringen.&lt;/p&gt;
&lt;p&gt;Så vi byttet vår. Fra og med juni 2026 kjører Maguyvas kode-embeddinger 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 tok ikke denne avgjørelsen på magefølelse. 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-oppgaver, og på &lt;strong&gt;Code&lt;/strong&gt;-rangeringen ligger &lt;code&gt;voyage-4-large&lt;/code&gt; på &lt;strong&gt;1. plass totalt (90,86)&lt;/strong&gt; — foran &lt;code&gt;gemini-embedding-2-preview&lt;/code&gt; (90,26) og, bemerkelsesverdig nok, foran modellen vi allerede brukte, &lt;code&gt;voyage-code-3&lt;/code&gt; (89,73, 3. plass).&lt;/p&gt;
&lt;p&gt;Det er et lite absolutt gap. Men det er et gap i riktig retning, på en offentlig benchmark, på nøyaktig den oppgaven vi bryr oss om: å hente kode etter mening.&lt;/p&gt;
&lt;h2 id=&quot;kompromisset-vi-aksepterer-binær-kvantisering&quot;&gt;Kompromisset vi aksepterer: Binær kvantisering&lt;/h2&gt;
&lt;p&gt;Her er delen de fleste «vi oppgraderte modellen vår»-innlegg utelater.&lt;/p&gt;
&lt;p&gt;Maguyva lagrer ikke fullpresisjonsvektorer. Vi lagrer &lt;strong&gt;binært kvantiserte&lt;/strong&gt; embeddinger: hver 2048-dimensjonale vektor kollapses til en 2048-bits signatur — &lt;strong&gt;256 byte per vektor&lt;/strong&gt;. Disse signaturene søkes med Hamming-avstand, indeksert og partisjonert per tenant.&lt;/p&gt;
&lt;p&gt;Det er et bevisst kompromiss. Binær kvantisering gir opp noe retrieval-presisjon til fordel for dramatisk mindre lagring og raske avstandsberegninger med lav kostnad uten en separat vektordatabase å drifte. For et produkt som indekserer hele repositorier per arbeidsområde, betyr den økonomien mer enn å presse ut den siste brøkdelen av et benchmark-poeng.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;voyage-4-large&lt;/code&gt; passer inn i dette designet uten å tvinge frem en migrering av lagringslaget: den produserer 2048-dimensjonalt output, akkurat som &lt;code&gt;voyage-code-3&lt;/code&gt;, så &lt;code&gt;bit(2048)&lt;/code&gt;-kolonnene våre og Hamming-søkestien endret seg ikke. Modellen ble bedre; skjemaet ble stående.&lt;/p&gt;
&lt;h2 id=&quot;kode-var-bare-starten&quot;&gt;Kode var bare starten&lt;/h2&gt;
&lt;p&gt;Maguyva er et kodeintelligens-verktøy. Men vi er også vår egen første kunde, og vi peker det mot noe annet: markdown-en som lever i repositoriene våre ved siden av koden. Arkitekturbeslutningsjournaler, runbooks, kontrakter, finans- og policydokumenter — alt versjonskontrollert i Git, alt bak den samme MCP-serveren, en semantisk indeks over &lt;em&gt;dokumentene&lt;/em&gt;, ikke bare kildekoden.&lt;/p&gt;
&lt;p&gt;Det er nettopp derfor bredden til voyage-4-large betyr noe. På den samme RTEB-familien av rangeringer er den &lt;strong&gt;nummer 1 på finans, nummer 1 på helsevesen, og nummer 1 på generell tekstretrieval&lt;/strong&gt; — foran Googles Gemini Embedding, Coheres Embed v4, og OpenAIs text-embedding-3-large. (Voyage er medskaper av RTEB, så vi leser det som et sterkt offentlig signal snarere enn en perfekt nøytral dommer — men den er sammenlignet direkte med alle de store kommersielle modellene, på private holdout-sett.) Den samme indeksen som finner riktig funksjon for en agent, finner riktig klausul i en kontrakt eller riktig linje i en policy — og på de domenene er ikke voyage-4-large et kompromiss, det er lederen.&lt;/p&gt;
&lt;h2 id=&quot;hvorfor-vi-betaler-for-premium-embeddinger&quot;&gt;Hvorfor vi betaler for premium embeddinger&lt;/h2&gt;
&lt;p&gt;Det finnes en billigere måte å gjøre søk på, og mye av det er gratis. Leksikalsk søk — BM25 og dets slektninger — matcher nøkkelord, kjører lokalt, og koster ingenting. Embeddingmodeller med åpen kildekode som BGE, Nomic, og embeddinggemma gir faktisk &lt;em&gt;god&lt;/em&gt; semantisk retrieval, og du kan selv-hoste dem for prisen av en GPU. Maguyva bruker også den gratis siden: hvert søk fusjonerer tekst-, AST-, graf- og semantisk søk. Det vi ikke sparer på, er det semantiske laget.&lt;/p&gt;
&lt;p&gt;Vi betaler per token for premium embeddinger — &lt;code&gt;voyage-4-large&lt;/code&gt; — i stedet for å selv-hoste en gratis modell, av to grunner. For det første kan nøkkelordsøk alene ikke svare på «hvor håndterer vi retries» når koden sier &lt;code&gt;backoff&lt;/code&gt; og &lt;code&gt;circuit breaker&lt;/code&gt; og aldri sier ordet «retry» — mening er hele poenget med embeddingen, og på domenene vi betjener, ligger de åpne modellene bak premiummodellene: et par poeng bak på generell tekst, og enda lenger bak i nisjer som kode, kontrakter, og finans. For det andre former retrieval-kvalitet, etter vår erfaring, det endelige svaret mer enn modellen i den andre enden gjør — en sterk agent som får feil kontekst, svarer fortsatt feil, og den ser aldri dokumentet den aldri ble gitt.&lt;/p&gt;
&lt;p&gt;Så premium embeddinger er en per-token-regning som skalerer med hvert repo og dokument vi indekserer — og vi betaler den med vilje. For resultatet brukerne våre får, riktig funksjon eller riktig klausul, mener vi det kompromisset er verdt det.&lt;/p&gt;
&lt;h2 id=&quot;den-ærlige-delen&quot;&gt;Den ærlige delen&lt;/h2&gt;
&lt;p&gt;Voyages egen dokumentasjon merker fortsatt &lt;code&gt;voyage-code-3&lt;/code&gt; som den kodeoptimaliserte modellen. Så hvorfor bytte?&lt;/p&gt;
&lt;p&gt;Fordi vi leste den offentlige benchmarken, ikke bare leverandørens modelltabell, og benchmarken satte &lt;code&gt;voyage-4-large&lt;/code&gt; på topp for koderetrieval. Dette var en fremtidsrettet avgjørelse: ta den nyere, generelt sterkere modellen og valider den mot en offentlig rangering på oppgavene som betyr noe. Vi er komfortable med å ta det veddemålet fordi bevisene er brede — voyage-4-large vinner ikke bare på kode, den leder også på finans, helsevesen, og generell retrieval.&lt;/p&gt;
&lt;h2 id=&quot;det-stille-fundamentet&quot;&gt;Det stille fundamentet&lt;/h2&gt;
&lt;p&gt;Hvert verktøy vi eksponerer — semantisk søk, innsamling av oppgavekontekst, faktabasert Q&amp;amp;A — bunner i retrieval. Når retrieveren forbedres, får agenten i den andre enden bedre bevis, tar færre feilsteg, og forankrer svarene sine i riktig kode — eller riktig klausul, eller riktig policy. En skarpere embeddingmodell er ikke en prangende funksjon. Det er fundamentet under alt annet, og vi har nettopp styrket det. Du vil ikke merke det. Det er poenget.&lt;/p&gt;
</content:encoded><category>Embeddings</category><category>Search</category><category>Architecture</category></item><item><title>Rekursiv språkforbedring: Systematisk forbedring av kodeintelligens på tvers av ~280 språk</title><link>https://maguyva.ai/nb/blog/autonomous-quality-loops-language-grind</link><guid isPermaLink="true">https://maguyva.ai/nb/blog/autonomous-quality-loops-language-grind</guid><description>Vi støtter kodeintelligens for ~280 språk. Ingen mennesker kan manuelt revidere det. Så vi bygde en rekursiv selvforbedringsløkke for språk — stikkprøver, LLM som dommer, fiks én ting, valider på nytt — og kjører den med en flåte av isolerte agenter helt til ekstraheringen faktisk er riktig, ikke bare grønn.</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 innlegget gjenspeiler systemet ved publisering (mai 2026). Se &lt;a href=&quot;https://maguyva.ai/nb/team&quot;&gt;teamsiden&lt;/a&gt; for gjeldende tall.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Maguyva ekstraherer symboler, referanser og en avhengighetsgraf fra kildekode på rundt 280 språk. Hvert språk er en tilpasset tree-sitter-håndterer — spørringer, heuristikker, edge cases — og hver håndterer kan være subtilt feil på sin egen måte. Et metodekall utstedt som en lesing. En funksjon tilskrevet feil omsluttende scope. En relasjon som rett og slett ikke finnes.&lt;/p&gt;
&lt;p&gt;Det kan du ikke manuelt revidere. Ingen team kan lese ekstraksjonsresultater på tvers av 280 grammatikker og fange opp de dårlige kantene (edges). Så det interessante spørsmålet er ikke «er ekstraksjonen vår korrekt» — det er «hvordan &lt;em&gt;finner du ut&lt;/em&gt; at den er feil, i denne bredden, uten et menneske i hver løkke». Svaret vårt er rekursiv selvforbedring for språk: en kvalitetsløkke drevet av språkagenter, en LLM som fungerer som dommer, og én regel vi stadig lærer på nytt: grønn er ikke det samme som korrekt.&lt;/p&gt;
&lt;h2 id=&quot;grønn-er-ikke-korrekt&quot;&gt;Grønn er ikke korrekt&lt;/h2&gt;
&lt;p&gt;Hvert språk har en fixture-suite, og en utgivelsesport (release gate) scorer den langs fem dimensjoner — nøyaktighet, strukturell integritet, fullstendighet, kvalitet og ytelse. Et språk blir &lt;strong&gt;GRØNT&lt;/strong&gt; bare når, på sine fixtures, presisjon ≥ 0,95, recall ≥ 0,99, og F1 ≥ 0,97, med minst 20 forventede edges for statistisk pålitelighet. Under det er det GULT eller RØDT, og det shippes ikke.&lt;/p&gt;
&lt;p&gt;Den porten er nødvendig, men ikke tilstrekkelig. Fixtures valideres mot fixtures &lt;em&gt;vi selv skrev&lt;/em&gt;. De koder for tilfellene vi allerede har tenkt på. En håndterer kan være feilfri på sine fixtures og likevel ødelegge et mønster som bare dukker opp i ekte kode — et makro-idiom, en metode med begrensninger på generiske typer, en språkfunksjon ingen skrev en fixture for. GRØNT betyr at fixturene passerer. Det betyr ikke at et ekte repository ekstraheres rent. Så løkken må forlate fixturene og undersøke virkelige kodebaser.&lt;/p&gt;
&lt;h2 id=&quot;den-indre-løkken-stikkprøve-dømme-fikse-bevise&quot;&gt;Den indre løkken: stikkprøve, dømme, fikse, bevise&lt;/h2&gt;
&lt;p&gt;Kjerneløkken kjører ett språk om 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;Noen ting gjør at dette fungerer i stedet for å tråkke vann.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dommeren er agenten, ikke et API-kall.&lt;/strong&gt; Når vi sier «LLM som dommer», mener vi at selve språkagenten leser hver samplede edge mot den ekte kildekoden og klassifiserer den med et fast vurderingsskjema med fem kategorier: er denne edgen korrekt, et falskt positivt funn, riktig relasjon med feil type, festet til feil scope, eller bærer den feil metadata? Det vurderingsskjemaet er avgjørende — «23 % feilrate» er meningsløst inntil du vet om det er ekte defekter eller dommeren som teller feil.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fiks én ting, bevis den så.&lt;/strong&gt; Hver iterasjon endrer nøyaktig én redigerbar ressurs, kjører deretter på nytt mot en fast test-rigg, og beholder endringen bare hvis F1 forbedres og den nye klassifiseringen ser bedre ut. Hvis ikke, rulles den tilbake. Ingen bunke med spekulative endringer, ingen «burde bli bedre». En endring må fortjene plassen sin, ellers fjernes den. Og når en fiks holder, blir den forfremmet inn i fixture-suiten — slik at feilen den fikset aldri kan komme snikende tilbake. Det forfremmelsestrinnet er det som gjør løkken &lt;em&gt;rekursiv&lt;/em&gt; snarere enn bare repeterende: hver runde styrker referansegrunnlaget som neste runde valideres mot.&lt;/p&gt;
&lt;h2 id=&quot;lærdommen-vi-stadig-lærer-på-nytt-metrikker-overrapporterer&quot;&gt;Lærdommen vi stadig lærer på nytt: metrikker overrapporterer&lt;/h2&gt;
&lt;p&gt;Her er fellen, og vi gikk rett i den. De sekundære korpusmetrikkene — hvor ofte et ekstrahert mål mangler et løsbart symbol, hvor mange symboler som ser «foreldreløse» ut, og så videre — overrapporterer problemer massivt. De er for det meste &lt;em&gt;utslag av språkets programmeringsmodell&lt;/em&gt;, ikke feil.&lt;/p&gt;
&lt;p&gt;Det klareste eksempelet: &lt;code&gt;llvm&lt;/code&gt; viste en gang en 73 % «kilde-uten-symbol»-rate og ble stemplet som katastrofalt. Vi gravde i det. Reell nøyaktighet var &lt;strong&gt;98,5 %&lt;/strong&gt;. De «manglende symbolene» var nesten alle legitime eksterne referanser — kall inn i standardbiblioteket, inn i rammeverk, inn i kode som lever utenfor repoet. Metrikken målte en egenskap ved språket, ikke en defekt i håndtereren. Språk som Zig, COBOL og Odin viser 65–70 % «foreldreløs»-rate og er helt korrekte; COBOL hadde null reelle feil.&lt;/p&gt;
&lt;p&gt;Hvis vi hadde latt de tallene styre arbeidet, ville vi ha brukt uker på å «fikse» håndterere som allerede var riktige og ignorert språkene med stille, ekte feil. Konklusjonen er brutal: de aggregerte metrikkene er i beste fall et grovt triage-signal. &lt;strong&gt;Det ekte kvalitetssignalet er stikkprøven med edge-klassifisering&lt;/strong&gt; — å se på faktiske edges i faktiske repositorier og dømme dem én for én. Data foran intuisjon, men bare når du vet hvilke data som forteller sannheten.&lt;/p&gt;
&lt;h2 id=&quot;den-ytre-løkken-en-flåte-ikke-et-maraton&quot;&gt;Den ytre løkken: en flåte, ikke et maraton&lt;/h2&gt;
&lt;p&gt;Ett språk om gangen ville tatt evigheter på tvers av 280 av dem, så den indre løkken er pakket inn i en ytre løkke som kjø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 jobber i et engangs-worktree slik at de ikke kan tråkke i hverandres bed. Orkestratoren integrerer fiksene deres én om gangen, hver bak en full-manifest regresjonssjekk: en endring som hjelper sitt eget språk, men stille ødelegger tre andre, lander ikke. Integrasjonen kontrolleres og bekreftes før noe pushes — regresjonsporten avgjør hva som er &lt;em&gt;trygt&lt;/em&gt;, et menneske avgjør fortsatt hva som &lt;em&gt;shippes&lt;/em&gt;. Deretter roterer poolen til neste sett med språk, og hele greia kjører igjen.&lt;/p&gt;
&lt;h2 id=&quot;hva-som-fortsatt-er-ufullkomment&quot;&gt;Hva som fortsatt er ufullkomment&lt;/h2&gt;
&lt;p&gt;Dommeren kan ta feil, og feilen har en retning: en agent som kjører med for lite kontekst, &lt;em&gt;overrapporterer&lt;/em&gt;. I én batch ble åtte språk flagget med 5–20 % feil; ved nærmere ettersyn hadde bare ett språk en reell språkspesifikk feil — resten var dommerfeil fra å gå glipp av språkets egen semantikk (én kildekodelinje som legitimt sender ut flere edges, parameterbindinger modellert som tilordninger, referanse-per-identifikator-språk). Det er derfor vi sampler med to seeds og krysssjekker, og hvorfor en uenighet mellom dommeren og fixturene behandles som det &lt;em&gt;mest&lt;/em&gt; interessante signalet, ikke en avgjort dom — noen ganger er det fixturen som er feil.&lt;/p&gt;
&lt;p&gt;Vi er også ærlige om målet. Målet er null reelle feil, punktum — men «null» er en retning vi arbeider oss mot, språk for språk, ikke en boks som krysses av. Det finnes alltid et nytt repo med et nytt idiom.&lt;/p&gt;
&lt;h2 id=&quot;fortjent-ikke-påstått&quot;&gt;Fortjent, ikke påstått&lt;/h2&gt;
&lt;p&gt;Alt Maguyva gjør for en agent — å finne et symbol, spore en avhengighet, svare på et spørsmål med sitert kode — hviler på at ekstraksjonen under er riktig. På tvers av 280 språk kan «riktig» ikke påstås; det må kontinuerlig &lt;em&gt;fortjenes&lt;/em&gt; mot ekte kode. Løkken er hvordan vi fortjener det: en autonom stikkprøve-og-fiks-syklus som behandler sine egne metrikker med mistenksomhet, beviser hver endring, og gjør hver fiks til en vakt mot neste regresjon. Det er ikke glamorøst. Det er arbeidet som lar oss si «vi støtter språket ditt» og mene det. Grønt er lett. Korrekt er fortjent.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Languages</category><category>Agents</category></item><item><title>Multimodalt fusjonssøk: Velge riktig retriever for hvert søk</title><link>https://maguyva.ai/nb/blog/multi-modal-fusion-search</link><guid isPermaLink="true">https://maguyva.ai/nb/blog/multi-modal-fusion-search</guid><description>Et søk som «hvor er parseConfig definert» krever et annet søk enn «hvordan fungerer autentisering». Maguyva klassifiserer intensjonen, vekter fire retrieval-modaliteter deretter, og fusjonerer resultatene med vektet Reciprocal Rank Fusion.</description><pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Merknad om historisk design: Denne artikkelen fra april 2026 beskriver rutingsdesignet på den tiden, ikke dagens standardatferd. Rettelsen fra september nedenfor gjelder bare en målepåstand. Se &lt;a href=&quot;https://maguyva.ai/nb/docs/how-it-works&quot;&gt;Slik fungerer det&lt;/a&gt; for gjeldende ruting, forhåndsinnstillinger og eksplisitte modalitetsvalg.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Et søk er ikke bare én ting.&lt;/p&gt;
&lt;p&gt;«hvor er &lt;code&gt;parseConfig&lt;/code&gt; definert» vil ha et eksakt symbol — ett presist sted, raskt. «hvordan fungerer autentisering» vil ha mening — spredningen av relatert kode som forklarer et konsept. «hva ryker hvis jeg endrer denne funksjonen» vil ha avhengighetsgrafen. «finn strengen &lt;code&gt;ECONNREFUSED&lt;/code&gt;» vil ha et bokstavelig treff, ikke noe smart.&lt;/p&gt;
&lt;p&gt;Grep er utmerket for bokstavelige treff og nyttig for enkelte referansejakter, men det er ikke en avhengighetsgraf, og det forstår ikke mening. Embeddinger dekker den semantiske siden, men de er feil verktøy for eksakte strenger og konsekvensanalyse. De fleste kodesøkverktøy velger én motor og lar hvert søk leve med det valget. Maguyva låser seg ikke til én motor. Det finner ut hva slags spørsmål du stilte, og blander deretter fire retrievere i den andelen spørsmålet fortjener.&lt;/p&gt;
&lt;h2 id=&quot;fire-modaliteter&quot;&gt;Fire modaliteter&lt;/h2&gt;
&lt;p&gt;Under panseret finnes det fire uavhengige måter å finne kode på:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;semantisk&lt;/strong&gt; — vektorsøk over Voyage binære embeddinger; finner kode etter mening.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;tekst&lt;/strong&gt; — trigram-matching; finner literaler, feilstrenger, eksakte identifikatorer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;strukturelt&lt;/strong&gt; — AST-spørringer; finner definisjoner, signaturer og språkkonstruksjoner.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;graf&lt;/strong&gt; — avhengighetsgrafen; finner kallere, kalte, og påvirkningsradiusen.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hver er sterk på en annen klasse spørsmål. Trikset er å avgjøre hvor mye man skal stole på hver enkelt for søket foran deg.&lt;/p&gt;
&lt;h2 id=&quot;intensjonsklassifisering&quot;&gt;Intensjonsklassifisering&lt;/h2&gt;
&lt;p&gt;Før noen retrieval kjører, sorterer en lettvekts-klassifiserer søket inn i én av seks intensjoner, med en konfidensscore. Den er bevisst billig — ordnede heuristikker, første treff vinner — fordi den kjører på den kritiske stien og bare legger til ett eller to millisekunder:&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 feiltoken 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;ingenting matcher → &lt;strong&gt;understand_code&lt;/strong&gt;, lav konfidens (0,40)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hver intensjon har en vektprofil på tvers av de fire modalitetene. Dette er de reelle tallene:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Intensjon&lt;/th&gt;
&lt;th&gt;semantisk&lt;/th&gt;
&lt;th&gt;tekst&lt;/th&gt;
&lt;th&gt;strukturelt (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; definert» lener seg tungt på AST (0,6). «hvordan fungerer autentisering» lener seg på semantiske vektorer (0,5). «hva avhenger av dette» er nesten bare graf (0,7). «finn &lt;code&gt;ECONNREFUSED&lt;/code&gt;» er nesten bare trigram (0,9), med embedding-modellen helt slått av — fordi semantisk likhet er akkurat feil verktøy for en eksakt streng.&lt;/p&gt;
&lt;h2 id=&quot;hurtigstien-og-den-fusjonerte-stien&quot;&gt;Hurtigstien, og den fusjonerte stien&lt;/h2&gt;
&lt;p&gt;Når klassifiseringen er sikker — score ≥ 0,85 — og søket har en vanlig form, hopper Maguyva over fusjon helt og ruter rett til den ene dominerende modaliteten. «hvor er X definert» trenger ikke fire retrievere; det trenger AST-indeksen, nå. Den direkte stien rapporteres tilbake som &lt;code&gt;fusion_strategy: &quot;direct&quot;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Alt som er tvetydig går gjennom fusjon. De fire (eller tre, på standardoppsettet) modalitetene kjører parallelt, hver returnerer sin egen rangerte liste, og vi kombinerer dem.&lt;/p&gt;
&lt;h2 id=&quot;vektet-reciprocal-rank-fusion&quot;&gt;Vektet Reciprocal Rank Fusion&lt;/h2&gt;
&lt;p&gt;Å fusjonere heterogene retrievere er vanskeligere enn det høres ut som: en kosinuslikhet på 0,82 og en trigram-score på 137 og en graf-sentralitet på 0,004 er ikke på samme skala, så du kan ikke bare legge dem sammen. Reciprocal Rank Fusion omgår problemet ved å kaste bort de rå scorene og bare beholde &lt;strong&gt;rangeringen&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 posisjon i den modalitetens liste, og &lt;code&gt;k&lt;/code&gt; er en utjevningskonstant. Bidrag summeres på tvers av modaliteter for ethvert resultat som mer enn én motor fant — enighet mellom retrievere flyter naturlig til toppen. Vi bruker &lt;strong&gt;k = 40&lt;/strong&gt; på standardoppsettet og 60 på &lt;code&gt;thorough&lt;/code&gt; (&lt;code&gt;quick&lt;/code&gt; kjører kun semantisk, så fusjon utløses aldri der). Det originale RRF-arbeidet landet på k = 60 for generell retrieval; standardverdien vår gir litt mer vekt til resultater som flere modaliteter plasserer høyt — og vi anbefaler ikke å håndjustere den.&lt;/p&gt;
&lt;p&gt;I tillegg får resultater en &lt;strong&gt;graf-viktighetsboost&lt;/strong&gt;. Et knutepunkt — en funksjon hele kodebasen lener seg på — bør rangere høyere enn en lite kjent bladnode selv ved samme tekstlige relevans, så vi multipliserer 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;Sentraliteten kommer fra pipelinens forhåndsberegnede PageRank/grad-metrikker, og boosten er begrenset til 1,5× slik at en populær funksjon ikke helt kan begrave en mer relevant, men lite kjent funksjon. Til slutt nedgraderer vi resultater fra vendor-, build- og arkivstier, og fjerner duplikater slik at kun det beste utdraget per fil beholdes.&lt;/p&gt;
&lt;h2 id=&quot;hva-som-fortsatt-er-ufullkomment&quot;&gt;Hva som fortsatt er ufullkomment&lt;/h2&gt;
&lt;p&gt;Intensjonsklassifikatoren er en samling regex-er, ikke en trent modell. Den håndterer vanlige spørringsformer med heuristikker, og en tvetydig spørring faller tilbake til &lt;code&gt;understand_code&lt;/code&gt; og en semantisk orientert blanding. En tidligere versjon av dette innlegget beskrev en reduksjon i andelen søk uten resultater fra omtrent 15 % til under 5 % som oppnådd. Forslaget fra desember 2025 oppga i virkeligheten et estimert utgangspunkt og et mål; det er ikke lagt frem noe støttende spørresett eller noen målerapport. Vi trekker tilbake påstanden om at denne forbedringen var oppnådd; se &lt;a href=&quot;https://maguyva.ai/evidence/search-quality.md&quot;&gt;kildedokumentasjonen og rettelsen&lt;/a&gt;. Vi har ikke erstattet klassifikatoren med en trent modell fordi den billige versjonen er rask og god nok for den tiltenkte rutingsrollen, og fordi en selvsikker klassifikator som tar feil, er verre enn en ærlig fallback. Vektene er i seg selv manuelt valgte priorer, ikke lært fra klikkdata vi ikke samler inn.&lt;/p&gt;
&lt;h2 id=&quot;still-spørsmålet-uten-å-velge-verktøy&quot;&gt;Still spørsmålet uten å velge verktøy&lt;/h2&gt;
&lt;p&gt;En agent burde ikke måtte vite om den skal gripe til grep eller embeddinger eller kallgrafen — den burde stille spørsmålet sitt med enkle ord og få riktig svar. Multimodal fusjon er det som lar &lt;code&gt;find_symbol&lt;/code&gt;, semantisk søk og avhengighetsanalyse sitte bak ett søkegrensesnitt: systemet leser formen på spørsmålet og setter stille sammen riktig retriever for det. Modellen som scorer embeddingene betyr noe, men det gjør også det å vite når man &lt;em&gt;ikke&lt;/em&gt; skal bruke dem. Å velge riktig verktøy for hvert søk er sin egen type kvalitet, og det er en vi heller vil eie selv enn å skyve over på den som kaller.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// you bring the question. it brings the tools.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Search</category><category>Architecture</category></item><item><title>Agentobservabilitet: Hooks, Alloy og Grafana</title><link>https://maguyva.ai/nb/blog/agent-observability-hooks-alloy-grafana</link><guid isPermaLink="true">https://maguyva.ai/nb/blog/agent-observability-hooks-alloy-grafana</guid><description>Vi koblet Claude Code og Codex til én Grafana-stack med OpenTelemetry og Alloy, og brukte deretter spor (traces) og logger til å finne og fikse agentatferdsproblemer ved kilden.</description><pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Agentsystemer feiler på merkelige måter.&lt;/p&gt;
&lt;p&gt;Noen ganger er modellen problemet. Noen ganger er verktøyet problemet. Noen ganger er MCP-serveren din helt fin, men agenten valgte feil spesialist, eller brukte halve økten på shell-arbeid du ikke forventet, eller brukte opp budsjett i det stille i en løkke som så produktiv ut utenfra.&lt;/p&gt;
&lt;p&gt;Hvis du ikke kan se forskjellen, driver du ikke egentlig et agentsystem. Du gjetter.&lt;/p&gt;
&lt;p&gt;Så vi bygde en observability-stack for vår egen arbeidsflyt: Claude Code, Codex, Claude hook-hendelser, Codex notify-hendelser, native OpenTelemetry, Grafana Alloy, og Grafana Cloud i den andre enden.&lt;/p&gt;
&lt;p&gt;Det interessante er ikke «vi laget et dashbord». Det interessante er at vi måtte dele telemetrien i to forskjellige strømmer fordi ingen enkelt kilde ga oss hele bildet.&lt;/p&gt;
&lt;h2 id=&quot;problemet-agenttelemetri-er-fragmentert&quot;&gt;Problemet: Agenttelemetri er fragmentert&lt;/h2&gt;
&lt;p&gt;Moderne kodeagenter sender allerede noe telemetri. Det hjelper, men det er ikke nok.&lt;/p&gt;
&lt;p&gt;Native OTEL er god til å svare på spørsmål som:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hvor mange forespørsler gjorde vi?&lt;/li&gt;
&lt;li&gt;Hvor mye kostet en økt?&lt;/li&gt;
&lt;li&gt;Hvor er spanene og sporene (traces)?&lt;/li&gt;
&lt;li&gt;Var det en latenstopp?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Den er mye dårligere til å svare på spørsmål som:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hvilken MCP-server lente agenten seg på?&lt;/li&gt;
&lt;li&gt;Skjedde denne feilen i &lt;code&gt;Bash&lt;/code&gt;, et innebygd filverktøy, eller et MCP-kall?&lt;/li&gt;
&lt;li&gt;Hvilken skill ble faktisk aktivert?&lt;/li&gt;
&lt;li&gt;Hvilken subagent-type ble dispatchet?&lt;/li&gt;
&lt;li&gt;Gjorde økten nyttig arbeid, eller bare tråkket den på stedet?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Den andre klassen spørsmål hører hjemme nærmere hooks enn spor.&lt;/p&gt;
&lt;p&gt;Men det motsatte er også sant: noen av de viktigste ytelsesspørsmålene hører hjemme nærmere spor enn hooks.&lt;/p&gt;
&lt;p&gt;Hvis du vil vite hvor latensen faktisk hopet seg opp, hvilke spans som var trege, eller om økten brukte tid på modellkall versus verktøyutførelse, trenger du sporingsdata i tillegg til semantiske hendelser.&lt;/p&gt;
&lt;h2 id=&quot;arkitekturen-vi-endte-opp-med&quot;&gt;Arkitekturen vi endte opp med&lt;/h2&gt;
&lt;p&gt;Vi kjører to telemetriløyper 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 delingen er bevisst.&lt;/p&gt;
&lt;p&gt;Den er også asymmetrisk. Claude Code gir oss et mye rikere hook-grensesnitt gjennom livssyklusen. Codex gir oss native OTEL pluss et notify-grensesnitt, så vi normaliserer hendelser med færre detaljer om avsluttede samtalerunder inn i det samme loggskjemaet i stedet for å late som om begge runtimene eksponerer de samme kontrollene.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Native OTEL&lt;/strong&gt; gir oss basisstrømmen: logger og spor fra selve runtimen, pluss metrikker der runtimen faktisk sender dem.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hook- og notify-hendelser&lt;/strong&gt; gir oss det semantiske laget: 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 klassifiserte metadataene vi faktisk bryr oss om når vi feilsøker agentatferd. Claude Code bidrar med den rikere hendelsesstrømmen her. Codex bidrar med en normalisert strøm med færre detaljer, men som fortsatt er nyttig.&lt;/p&gt;
&lt;h2 id=&quot;hvorfor-hooks-i-det-hele-tatt-finnes&quot;&gt;Hvorfor hooks i det hele tatt finnes&lt;/h2&gt;
&lt;p&gt;Hook-pipelinen vår beriker hendelser før de treffer Loki.&lt;/p&gt;
&lt;p&gt;I stedet for bare å si «et verktøy kjørte», klassifiserer vi hendelsen i felt 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 som håndterte kallet&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;: hva slags spesialist som ble dispatchet&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 betyr at vi kan stille spørsmål som betyr noe operasjonelt:&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;Dette er ikke pyntefelt. De er forskjellen mellom «agenten føltes treg» og «agenten brukte de siste ti minuttene på shell-tunge git-operasjoner med høy feilrate på verktøy».&lt;/p&gt;
&lt;p&gt;En implementasjonsdetalj som ser merkeligere ut enn den er: den delte Loki-strømmen bruker fortsatt &lt;code&gt;service_name=&quot;claude-code-hooks&quot;&lt;/code&gt; som etikett selv når hendelsen kom fra Codex. Den reelle skillelinjen mellom runtimene skjer på &lt;code&gt;agent_tool&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;hvorfor-alloy-sitter-i-midten&quot;&gt;Hvorfor Alloy sitter i midten&lt;/h2&gt;
&lt;p&gt;Grafana Alloy er ikke bare en videresender i dette oppsettet. Det er policygrensen.&lt;/p&gt;
&lt;p&gt;Vi peker den native OTEL-strømmen fra Claude Code og Codex mot en lokal Alloy-proxy på &lt;code&gt;localhost:4318&lt;/code&gt;, og lar deretter Alloy rydde opp i nyttelasten før den videresendes til Grafana Cloud.&lt;/p&gt;
&lt;p&gt;Det betyr noe fordi rå agenttelemetri er full av felt med høy kardinalitet som er nyttige for analyse, men forferdelige som indekserte etiketter:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;session_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;prompt_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;antall tokens&lt;/li&gt;
&lt;li&gt;varigheter&lt;/li&gt;
&lt;li&gt;verktøyparameter-blobber&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hvis du indekserer alt, får du en eksplosjon i antall etiketter og driftsproblemer.&lt;/p&gt;
&lt;p&gt;Så Alloy gjør tre ting for oss:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Holder et svært lite sett med lav-kardinalitets-etiketter indeksert.&lt;/li&gt;
&lt;li&gt;Flytter støyende, men nyttige felt inn i strukturerte metadata.&lt;/li&gt;
&lt;li&gt;Dropper ren støy helt.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Den viktige ideen er enkel: &lt;strong&gt;observer mer, indekser mindre&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;hvorfor-hook-strømmen-går-utenom-alloy&quot;&gt;Hvorfor hook-strømmen går utenom Alloy&lt;/h2&gt;
&lt;p&gt;Hook-strømmen er allerede formet for Loki.&lt;/p&gt;
&lt;p&gt;Når &lt;code&gt;send_event.py&lt;/code&gt; pusher en hendelse, har vi allerede bestemt hvilke felt som fortjener etikettbehandling og hvilke som hører hjemme i den strukturerte JSON-kroppen. Den strømmen går rett til Grafana Clouds OTLP-gateway i stedet for å gå gjennom Alloy en gang til.&lt;/p&gt;
&lt;p&gt;Så systemet har en klar arbeidsdeling:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Alloy&lt;/strong&gt; temmer den rå native OTEL-strømmen.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hook-berikelse&lt;/strong&gt; gjør semantiske hendelser søkbare.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Det holder arkitekturen enklere enn å prøve å tvinge alt gjennom én sti.&lt;/p&gt;
&lt;h2 id=&quot;hva-dashbordet-faktisk-viser&quot;&gt;Hva dashbordet faktisk viser&lt;/h2&gt;
&lt;p&gt;Skjermbildet under er fra ett av observability-dashbordene bak agentarbeidsflyten vår. Det er ikke en benchmark, og tallene er bare et øyeblikksbilde. Poenget er formen på dataene: aktivitetsstrøm, verktøykall, feil, prompter, og oppdelinger etter agent, innebygde verktøy, MCP-bruk, shell-kommandoer og skills.&lt;/p&gt;
&lt;p&gt;Det nyttige er at dette dashbordet lever på samme Grafana-stack som resten av agenttelemetrien. Vi kan filtrere etter kildeagent og verktøyfamilie og se på tvers av runtimer uten å finne opp en egen observability-historie 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;Åpne skjermbildet av observability-dashbordet i full oppløsning&quot;
  &gt;
    &lt;img
      src=&quot;https://maguyva.ai/blog/agent-observability-dashboard.png&quot;
      alt=&quot;Grafana-dashbord som viser en aktivitetsstrøm, antall verktøykall, feil, prompter og oppdelinger etter agenter, innebygde verktøy, MCP-bruk, CLI-kommandoer og skills for en agentarbeidsflyt.&quot;
    /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;
    Ett av de aktive dashbordene bak agentarbeidsflyten vår. Dette skjermbildet er bare ett øyeblikksbilde av en delt Grafana-stack som også mottar telemetri fra våre andre agent-runtimer og systemer. Klikk på bildet for versjonen i full oppløsning.
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;hvorfor-spor-betyr-mer-enn-man-først-skulle-tro&quot;&gt;Hvorfor spor betyr mer enn man først skulle tro&lt;/h2&gt;
&lt;p&gt;Logger forteller oss hvilken kategori arbeid som skjedde. Spor forteller oss hvordan arbeidet utfoldet seg over tid.&lt;/p&gt;
&lt;p&gt;Det skillet betyr noe i agentsystemer fordi «treg» er for grovt til å være nyttig.&lt;/p&gt;
&lt;p&gt;Et spor kan fortelle oss om problemet kom fra:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;modell-latens&lt;/li&gt;
&lt;li&gt;verktøyutførelsestid&lt;/li&gt;
&lt;li&gt;gjentatte forsøk (retries)&lt;/li&gt;
&lt;li&gt;én spesielt kostbar MCP-interaksjon&lt;/li&gt;
&lt;li&gt;en lang hale av små operasjoner som virket ufarlige hver for seg&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I praksis bruker vi hook-strømmen og Tempo-spor sammen.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hook-logger&lt;/strong&gt; svarer på: hva slags ting skjedde?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Spor&lt;/strong&gt; svarer på: hvor gikk tiden?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Kombinasjonen er det som gjør observability om fra et dashbord til en forklaring.&lt;/p&gt;
&lt;h2 id=&quot;hvor-codex-passer-inn&quot;&gt;Hvor Codex passer inn&lt;/h2&gt;
&lt;p&gt;Codex er en del av samme stack, men er ikke identisk med Claude Code.&lt;/p&gt;
&lt;p&gt;For Codex kobler vi to deler:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Native OTEL fra Codex inn i Alloy&lt;/li&gt;
&lt;li&gt;En notify-webhook inn i &lt;code&gt;codex_notify.py&lt;/code&gt;, som mapper fullførte samtalerunder til det samme Loki-skjemaet vi bruker for hook-hendelser&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Det gir oss et samlet filter som &lt;code&gt;agent_tool=&quot;codex-cli&quot;&lt;/code&gt; i den samme loggstrømmen.&lt;/p&gt;
&lt;p&gt;Det ærlige forbeholdet: Codex sin notify-nyttelast inneholder for øyeblikket færre detaljer enn Claude Codes hook-nyttelast, fordi det ikke er samme type integrasjonsgrensesnitt. I oppsettet vårt i dag kan fullførte samtalerunder i Codex normaliseres inn i det delte skjemaet, men rik uttrekking verktøy for verktøy er fortsatt bedre i den native OTEL-strømmen enn i notify-broen.&lt;/p&gt;
&lt;p&gt;Vi bruker ikke denne begrensningen som en unnskyldning. Det er poenget med innlegget. Ekte observability-systemer er satt sammen av ufullkomne signaler.&lt;/p&gt;
&lt;h2 id=&quot;grafana-over-mcp-endrer-spillet&quot;&gt;Grafana over MCP endrer spillet&lt;/h2&gt;
&lt;p&gt;Det større skiftet er at Grafana ikke bare er et sted mennesker besøker i en nettleser.&lt;/p&gt;
&lt;p&gt;I dette repoet eksponerer vi også Grafana gjennom MCP. Det betyr at en agent kan spørre Loki, Prometheus og Tempo direkte, i stedet for å vente på at et menneske manuelt skal inspisere dashbordene først.&lt;/p&gt;
&lt;p&gt;Det gjør observability til et aktivt input til arbeidsflyten.&lt;/p&gt;
&lt;p&gt;En agent kan spørre:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hvilke verktøyfamilier feilet mest den siste timen?&lt;/li&gt;
&lt;li&gt;Hvilken MCP-server dominerte en økt?&lt;/li&gt;
&lt;li&gt;Reduserte nylige endringer verktøyfeil, eller flyttet de bare arbeidet inn i mer shell-tunge stier med de samme feilene?&lt;/li&gt;
&lt;li&gt;Hvilke spor viser høyest latens eller gjentatte forsøk?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Når du har det, er du veldig nær en selvforbedringsløkke.&lt;/p&gt;
&lt;h2 id=&quot;fra-dashbord-til-tilbakemeldingsløkke&quot;&gt;Fra dashbord til tilbakemeldingsløkke&lt;/h2&gt;
&lt;p&gt;Dette er delen vi synes er mest interessant.&lt;/p&gt;
&lt;p&gt;Når observability-stacken er søkbar fra agentlaget, slutter telemetri å være et passivt rapporteringsverktøy og blir et kontrollsignal.&lt;/p&gt;
&lt;p&gt;Løkken ser slik ut:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Agentaktivitet sender ut spor, metrikker og berikede hook-logger.&lt;/li&gt;
&lt;li&gt;Grafana lagrer bevisene i Loki, Tempo og Prometheus der metrikker finnes.&lt;/li&gt;
&lt;li&gt;Agenter søker i denne dokumentasjonen gjennom Grafana MCP.&lt;/li&gt;
&lt;li&gt;Systemet identifiserer dårlig verktøymiks, skjøre skills, svak ruting, eller shell-tunge arbeidsflyter som fortsetter å produsere unngåelige feil.&lt;/li&gt;
&lt;li&gt;Agenter eller operatører justerer prompter, agentkonfigurasjoner, skill-beskrivelser, rutingregler, eller verktøytilgang.&lt;/li&gt;
&lt;li&gt;Neste økt produserer en ny telemetriform, og syklusen gjentar seg.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Det er slik du beveger deg fra «interessant dashbord» til «målbart forbedringssystem».&lt;/p&gt;
&lt;p&gt;Målet er ikke å maksimere én verktøykategori. Det er å lande på riktig miks av CLI, innebygde verktøy, MCP-kall og skills for arbeidet som faktisk gjøres.&lt;/p&gt;
&lt;h2 id=&quot;hva-dette-lar-oss-svare-på&quot;&gt;Hva dette lar oss svare på&lt;/h2&gt;
&lt;p&gt;Når begge runtimene lander i samme Grafana-stack, kan vi svare på operasjonelle spørsmål mye raskere:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Er feilene konsentrert i én verktøyfamilie?&lt;/li&gt;
&lt;li&gt;Skaper shell-tunge arbeidsflyter unngåelige feil der et verktøy på høyere nivå burde finnes?&lt;/li&gt;
&lt;li&gt;Hvilke MCP-servere bærer arbeidsmengden?&lt;/li&gt;
&lt;li&gt;Betaler vi for agentaktivitet som ikke gir meningsfull fremgang?&lt;/li&gt;
&lt;li&gt;Er en økt usunn på grunn av modellen, verktøyene, eller orkestreringslaget?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dette er spesielt nyttig i multi-agent-arbeidsflyter, der «agenten var opptatt» nesten ikke forteller deg noe.&lt;/p&gt;
&lt;p&gt;Hvis én spesialist stadig blir dispatchet og produserer høye feilrater, er det et rutings- eller promptformingsproblem.&lt;/p&gt;
&lt;p&gt;Hvis én MCP-server dominerer alle kall, kan det være god arkitektur eller et tegn på at alt annet er dødvekt.&lt;/p&gt;
&lt;p&gt;Hvis antallet verktøyfeil skyter i været mens kostnaden holder seg høy, har du et operasjonelt problem, ikke et kvalitetsproblem.&lt;/p&gt;
&lt;p&gt;Hvis shell-arbeid fortsetter å feile på forutsigbare, unngåelige måter der et verktøy på høyere nivå burde finnes, er det et produktsignal.&lt;/p&gt;
&lt;p&gt;Hvis én skill aktiveres konstant, men ikke forbedrer resultatene, er det et prompt- eller rutingsignal.&lt;/p&gt;
&lt;h2 id=&quot;den-egentlige-lærdommen&quot;&gt;Den egentlige lærdommen&lt;/h2&gt;
&lt;p&gt;Den dypere lærdommen her er at agentobservability trenger både &lt;strong&gt;runtime-telemetri&lt;/strong&gt; og &lt;strong&gt;arbeidsflyt-telemetri&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Runtime-telemetri forteller deg hva systemet gjorde.&lt;/p&gt;
&lt;p&gt;Arbeidsflyt-telemetri forteller deg hva agenten trodde den holdt på med.&lt;/p&gt;
&lt;p&gt;Vi trenger begge deler.&lt;/p&gt;
&lt;p&gt;Hvis du bare beholder spor og tellere, går du glipp av det semantiske laget. Hvis du bare beholder hook-hendelser, går du glipp av latens, spans, og det bredere runtime-bildet.&lt;/p&gt;
&lt;p&gt;Og hvis du beholder begge, men aldri mater dem tilbake til agentlaget, har du overvåking, ikke tilpasning.&lt;/p&gt;
&lt;p&gt;Kombinasjonen er det som gjør systemet forklarlig nok til å drifte og justerbart nok til å forbedre.&lt;/p&gt;
&lt;h2 id=&quot;hva-som-fortsatt-er-ufullkomment&quot;&gt;Hva som fortsatt er ufullkomment&lt;/h2&gt;
&lt;p&gt;Det finnes fortsatt forbedringspunkter.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ikke alle hook-hendelser inneholder varighets- og token-dataene vi skulle ønske.&lt;/li&gt;
&lt;li&gt;Noen av de beste tidsvisningene kommer fortsatt fra Tempo-spor, ikke hook-loggene.&lt;/li&gt;
&lt;li&gt;Codex er i dag mindre semantisk rikt enn Claude Code i den berikede hendelsesstrømmen.&lt;/li&gt;
&lt;li&gt;Dashbord-skjermbildet er en skjerm som brukes i den faktiske driften, ikke et polert markedsføringsprodukt.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Det siste punktet er bevisst. Vi vil heller vise det virkelige instrumentpanelet enn å late som om agentsystemer er magisk selvforklarende.&lt;/p&gt;
&lt;h2 id=&quot;hvorfor-dette-betyr-noe-for-maguyva&quot;&gt;Hvorfor dette betyr noe for Maguyva&lt;/h2&gt;
&lt;p&gt;Maguyva handler om å gi agenter bedre kodeintelligens. Men når agenter faktisk gjør nyttig arbeid, dukker det umiddelbart opp et nytt krav: du må se hvordan de oppfører seg.&lt;/p&gt;
&lt;p&gt;Søkekvalitet, rutingkvalitet, verktøyvalg og konteksteffektivitet blir alle observerbare problemer.&lt;/p&gt;
&lt;p&gt;Det er derfor vi mener dette er verdt å skrive om. Den fremtidige agent-stacken er ikke bare prompter og verktøy. Det er prompter, verktøy, og instrumenteringslaget som forteller deg om det hele fungerer.&lt;/p&gt;
&lt;p&gt;Hvis du bygger seriøse agentarbeidsflyter, er observability ikke valgfri infrastruktur. Det er en del av produktet.&lt;/p&gt;
</content:encoded><category>Observability</category><category>Grafana</category><category>OpenTelemetry</category><category>Architecture</category></item><item><title>Mining som lukker løkken: Hvordan endringer blir institusjonell hukommelse</title><link>https://maguyva.ai/nb/blog/mining-workflow-closing-the-loop</link><guid isPermaLink="true">https://maguyva.ai/nb/blog/mining-workflow-closing-the-loop</guid><description>Git-commits blir strukturerte endringslogg-oppføringer og arkitekturbeslutningsjournaler, som deretter mates tilbake til AI-agenter som søkbar institusjonell 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 innlegget gjenspeiler systemet ved publisering (februar 2026). Se &lt;a href=&quot;https://maguyva.ai/nb/team&quot;&gt;teamsiden&lt;/a&gt; for gjeldende tall.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Hvert ingeniørteam møter den samme utfordringen: endringer skjer hele tiden, men &lt;em&gt;hvorfor&lt;/em&gt;-et bak de endringene forsvinner. Seks måneder senere spør noen «hvorfor tok vi i bruk DuckDB for pipeline-stadier?», og svaret finnes bare i hodet til den som tok den avgjørelsen — hvis de fortsatt er der.&lt;/p&gt;
&lt;p&gt;Vi bygde en mining-arbeidsflyt som lukker denne løkken. Endringer flyter gjennom git-commits, prosesseres av mining-pipelinen vår, blir strukturerte endringslogg-oppføringer og arkitekturbeslutningsjournaler, og mates deretter tilbake til AI-agentene våre gjennom CLI-spørringer. Resultatet: institusjonell hukommelse som både mennesker og AI kan få tilgang til.&lt;/p&gt;
&lt;h2 id=&quot;problemet-beslutninger-fordamper&quot;&gt;Problemet: Beslutninger fordamper&lt;/h2&gt;
&lt;p&gt;Se for deg et typisk scenario. En utvikler 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 commiten representerer et betydelig arkitekturvalg. Teamet vurderte alternativer, vurderte avveininger, og landet på DuckDB av spesifikke grunner. Men all den konteksten lever i:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En Slack-tråd (sannsynligvis slettet)&lt;/li&gt;
&lt;li&gt;Noens hukommelse (definitivt falmende)&lt;/li&gt;
&lt;li&gt;En kommentar i koden (kanskje, hvis du er heldig)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tre måneder senere spør et nytt teammedlem: «Bør jeg bruke DuckDB eller SQLite for dette nye stadiet?» Uten institusjonell hukommelse finner de enten opp hjulet på nytt eller tar 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;Mining-arbeidsflyten vår omdanner git-historikk til søkbar kunnskap:&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;Kjerneinnsikten: både endringslogger og arkitekturbeslutninger flyter fra den samme git-historikken, prosessert gjennom en samlet pipeline. Dette sikrer at ingenting faller mellom to stoler.&lt;/p&gt;
&lt;h2 id=&quot;hvordan-mining-fungerer&quot;&gt;Hvordan mining fungerer&lt;/h2&gt;
&lt;h3 id=&quot;steg-1-synkroniser-indeksen&quot;&gt;Steg 1: Synkroniser indeksen&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 kommandoen skanner git-historikken og bygger en indeks over alle commits. Den ekstraherer strukturerte signaler fra hver commit:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Konvensjonell 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;Markører for brytende endringer&lt;/li&gt;
&lt;li&gt;Berørte filer og kompleksitetsmetrikker&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;steg-2-sjekk-dekningsstatus&quot;&gt;Steg 2: Sjekk dekningsstatus&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;Slik ser vår nåværende status ut:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Mining Status&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;=============&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Decisions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;---------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  Coverage:        100.0%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Processed:     15637  (of 15637)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Extracted:       476&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Skipped:       15161&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Changelog&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;---------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  Coverage:        100.0%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Processed:     15637  (of 15637)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Released:       6799&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Skipped:        8838&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;15 637 commits prosessert. 476 ble arkitekturbeslutninger. 6 799 ble endringslogg-oppføringer. Hver eneste commit klassifisert.&lt;/p&gt;
&lt;h3 id=&quot;steg-3-hent-kandidater-for-gjennomgang&quot;&gt;Steg 3: Hent kandidater for gjennomgang&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 henter frem commits som ennå ikke er behandlet, med full kontekst for klassifisering:&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;Signalene hjelper til å veilede klassifiseringen: &lt;code&gt;is_releasable_type: true&lt;/code&gt; antyder at denne bør vises i endringsloggen. Det store antallet innsettinger og infrastrukturfilene antyder at den også kan være en arkitekturbeslutning.&lt;/p&gt;
&lt;h3 id=&quot;steg-4-klassifiser-commits&quot;&gt;Steg 4: Klassifiser commits&lt;/h3&gt;
&lt;p&gt;To stier deler seg her: endringslogg-oppføringer og arkitekturbeslutninger.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For endringslogg-oppføringer:&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 vises i endringsloggen under kategorien «Added».&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For arkitekturbeslutninger:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Først, hent en reell 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;Klassifiser deretter med beslutnings-ID-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:#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 commiten til en beslutningsjournal som vil bli opprettet eller oppdatert.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For batch-prosessering (det vi faktisk gjør):&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Generate classifications file with LLM assistance&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; commit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --input&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classifications.jsonl&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;JSONL-formatet støtter begge domenene 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;steg-5-rendre-resultater&quot;&gt;Steg 5: Rendre resultater&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 for hver pakke fra journalen (ledger). Endringsloggene er avledede artefakter — slett dem, og de genereres perfekt på nytt fra kildejournalen.&lt;/p&gt;
&lt;h2 id=&quot;strukturen-på-en-beslutningsjournal&quot;&gt;Strukturen på en beslutningsjournal&lt;/h2&gt;
&lt;p&gt;Ekstraherte beslutninger blir YAML-filer med innholdsrike 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 lenker tilbake til kildecommitene sine. Hver beslutning spesifiserer hvilke filer den påvirker. Sammenhenger mellom beslutninger er eksplisitte.&lt;/p&gt;
&lt;h2 id=&quot;cli-integrasjon-spørring-mot-institusjonell-hukommelse&quot;&gt;CLI-integrasjon: Spørring mot institusjonell hukommelse&lt;/h2&gt;
&lt;p&gt;Dette er der løkken lukkes. Agenter kan spørre mot beslutninger gjennom CLI-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:#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-logikk, feilhåndtering, gjenopprettingsmø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 hele beslutningsjournalen med kontekst, begrunnelse 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 arkitekturvalg som ble tatt nylig.&lt;/p&gt;
&lt;h3 id=&quot;hvordan-agenter-bruker-dette&quot;&gt;Hvordan agenter bruker dette&lt;/h3&gt;
&lt;p&gt;Orkestratorens grunnleggende instruksjoner 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 blir bedt om å implementere noe relatert til DuckDB, kan den først sjekke:&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 oppdage 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 bruke det riktig (agent_guidance)&lt;/li&gt;
&lt;li&gt;Hvilke filer man skal se på (files)&lt;/li&gt;
&lt;li&gt;Hvilke relaterte beslutninger som finnes (related)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Agenten finner ikke opp hjulet på nytt. Den bygger på etablerte mønstre.&lt;/p&gt;
&lt;h2 id=&quot;tre-spørsmåls-testen&quot;&gt;Tre-spørsmåls-testen&lt;/h2&gt;
&lt;p&gt;Ikke hver commit fortjener en beslutningsjournal. Vi bruker Tre-spørsmåls-testen for å filtrere:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Var dette vanskelig å ta stilling til?&lt;/strong&gt; Krevde det betydelig analyse, avveining, eller diskusjon?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Er det kostbart å endre?&lt;/strong&gt; Ville det å reversere denne beslutningen krevd betydelig omarbeiding?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Har det systemomfattende konsekvenser?&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å minst ett av disse spørsmålene, er den en kandidat for beslutningsekstraksjon. Vår typiske rate: 1–4 beslutninger per 100 commits (rundt 1–4 %).&lt;/p&gt;
&lt;p&gt;For endringslogg-oppføringer er terskelen lavere: enhver brukerrettet endring (funksjoner, feilrettinger, forbedringer) blir registrert. Interne gjøremål, dokumentasjonsoppdateringer og refaktoreringer hoppes typisk over. Vår typiske rate: 30–50 endringslogg-oppføringer per 100 commits.&lt;/p&gt;
&lt;h2 id=&quot;datalagring-append-only-journaler&quot;&gt;Datalagring: Append-only journaler&lt;/h2&gt;
&lt;p&gt;Mining-systemet bruker append-only JSONL-journaler for 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; betyr at flere agenter kan klassifisere commits samtidig uten sammenslåingskonflikter. Hver linje er uavhengig.&lt;/p&gt;
&lt;h2 id=&quot;valideringsporter&quot;&gt;Valideringsporter&lt;/h2&gt;
&lt;p&gt;Før hver mining-økt kjø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 sjekker:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gyldighet av SHA-format&lt;/li&gt;
&lt;li&gt;Samsvar med beslutnings-ID-format&lt;/li&gt;
&lt;li&gt;Ingen duplikate oppføringer for samme SHA&lt;/li&gt;
&lt;li&gt;At refererte beslutninger faktisk finnes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Etter klassifisering validerer vi på nytt før vi committer endringene.&lt;/p&gt;
&lt;h2 id=&quot;hvorfor-dette-betyr-noe&quot;&gt;Hvorfor dette betyr noe&lt;/h2&gt;
&lt;p&gt;Tilbakemeldingsløkken 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 å spørre «hvorfor gjorde vi X?», kan de søke i beslutningsregisteret. Konteksten er bevart.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For AI-agenter:&lt;/strong&gt; De opererer ikke i et vakuum. De kan spørre mot institusjonell kunnskap før de kommer med anbefalinger. Når de blir bedt om å legge til et nytt pipeline-stadium, kan de oppdage DuckDB-mønsteret og følge det.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For arkitektonisk konsistens:&lt;/strong&gt; Beslutninger er eksplisitte og søkbare. Når noen foreslår en tilnærming som motsier en eksisterende beslutning, kan systemet synliggjøre konflikten.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For endringsloggenerering:&lt;/strong&gt; Release notes er ikke et hastverksarbeid i siste liten. De er et biprodukt av kontinuerlig klassifisering underveis i utviklingen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For onboarding:&lt;/strong&gt; Nye agenter arver hele konteksten til kodebasen. De ser ikke bare koden — de ser beslutningene som formet den.&lt;/p&gt;
&lt;h2 id=&quot;nåværende-status&quot;&gt;Nåværende status&lt;/h2&gt;
&lt;p&gt;Per i dag:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;15 637 commits&lt;/strong&gt; prosessert gjennom pipelinen&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;476 arkitekturbeslutninger&lt;/strong&gt; ekstrahert og dokumentert&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;6 799 endringslogg-oppføringer&lt;/strong&gt; registrert&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;100 % dekning&lt;/strong&gt; på tvers av begge domener&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hver commit siden vi startet, er klassifisert. Den institusjonelle hukommelsen er komplett og søkbar.&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 noe lignende:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Start med konvensjonelle commits.&lt;/strong&gt; Mining-pipelinen fungerer best når commits har strukturerte prefikser (&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;Definer domenene dine.&lt;/strong&gt; Vi bruker domener 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 etter område.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Bygg klassifiseringsvanen.&lt;/strong&gt; Mining fungerer når team klassifiserer commits regelmessig. Batch-prosessering med LLM-assistanse hjelper med å skalere.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Gjør beslutninger søkbare.&lt;/strong&gt; Verdien øker når agenter kan søke i beslutninger via CLI. Strukturer resultatet for maskinkonsum.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Lukk løkken.&lt;/strong&gt; Beslutninger bør påvirke fremtidig arbeid. Inkluder beslutningsreferanser i agentinstruksjoner og sjekklister for kodegjennomgang.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Målet er ikke perfekt dokumentasjon. Det er å gjøre &lt;em&gt;hvorfor&lt;/em&gt;-et bak endringene tilgjengelig for både mennesker og AI, i dag og seks måneder frem i tid. Når endringer blir institusjonell hukommelse, bygger team videre på etablerte mønstre i stedet for å finne dem opp på nytt.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Mining-arbeidsflyten er en del av orkestreringsmotoren vår, nærmere bestemt context engine-modulen i orkestreringspakken vår.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Workflows</category></item><item><title>Skill mining: Fra 3500 kandidater til 466 evner</title><link>https://maguyva.ai/nb/blog/skill-mining-3500-and-counting</link><guid isPermaLink="true">https://maguyva.ai/nb/blog/skill-mining-3500-and-counting</guid><description>Vi vurderte 3500 skill-kandidater og tok i bruk 466. En systematisk mining- og innlemmingsløkke for å bygge et sammenhengende skill-bibliotek for 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 innlegget gjenspeiler systemet ved publisering (januar 2026). Se &lt;a href=&quot;https://maguyva.ai/nb/team&quot;&gt;teamsiden&lt;/a&gt; for gjeldende tall.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;3500-skill-problemet&quot;&gt;3500-skill-problemet&lt;/h2&gt;
&lt;p&gt;Da vi begynte å bygge et orkestreringssystem for agenter, sto vi overfor en interessant utfordring: det finnes tusenvis av potensielle skills spredt utover AI-økosystemet. GitHub-repositorier, leverandørdokumentasjon, community-prosjekter, interne mønstre — skills finnes overalt. Men hvilke betyr noe? Hvilke fungerer? Og hvordan vedlikeholder man et sammenhengende skill-bibliotek som agenter faktisk kan bruke?&lt;/p&gt;
&lt;p&gt;Svaret vårt: en systematisk mining- og innlemmingsløkke.&lt;/p&gt;
&lt;h2 id=&quot;tallene-i-dag&quot;&gt;Tallene i dag&lt;/h2&gt;
&lt;p&gt;Bare litt over tre måneder etter at Anthropic lanserte Agent Skills 16. oktober 2025, var dette stillingen da dette innlegget ble publisert 27. januar 2026:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metrikk&lt;/th&gt;
&lt;th&gt;Antall&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Identifiserte kandidater&lt;/td&gt;
&lt;td&gt;3500+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Adopterte skills&lt;/td&gt;
&lt;td&gt;466&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Leverandørskills (vendor)&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;Gjennomsnittlige tokens per skill&lt;/td&gt;
&lt;td&gt;2834&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Refererte verktøy&lt;/td&gt;
&lt;td&gt;89&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unike tagger&lt;/td&gt;
&lt;td&gt;635&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Vi har gjennomgått over 3500 skill-kandidater. Vi har adoptert 466. Det er en adopsjonsrate på 13 % — og den selektiviteten er bevisst.&lt;/p&gt;
&lt;h2 id=&quot;kunnskapsnivåsystemet&quot;&gt;Kunnskapsnivåsystemet&lt;/h2&gt;
&lt;p&gt;Skills har ulik kvalitet og ulikt bruksområde. Vi organiserer dem i fem kunnskapslag (K0–K4), hvert med et forskjellig anvendelsesomfang:&lt;/p&gt;
&lt;h3 id=&quot;k0-foundations-universelt&quot;&gt;K0: Foundations (universelt)&lt;/h3&gt;
&lt;p&gt;Skills alle agenter bør ha. Disse representerer «god tenker»-kapabiliteter som fungerer 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 prosjekt, ethvert domene, enhver stack. De koder for universelle kognitive mønstre.&lt;/p&gt;
&lt;h3 id=&quot;k1-identities-disiplin&quot;&gt;K1: Identities (disiplin)&lt;/h3&gt;
&lt;p&gt;«God ingeniør»- eller «god forsker»-skills som gjelder på tvers av prosjekter innenfor en disiplin.&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 sikkerhetsingeniør»-skills, portable innenfor 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-bruker»- eller «god Cloudflare-utvikler»-skills for spesifikke teknologistacker.&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-organisasjon&quot;&gt;K4: Project (organisasjon)&lt;/h3&gt;
&lt;p&gt;Skills spesifikke for vår organisasjon og våre arbeidsflyter.&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-oppdagelse&quot;&gt;Fase 1: Oppdagelse&lt;/h3&gt;
&lt;p&gt;Skills kommer fra overalt:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Leverandørrepositorier&lt;/strong&gt;: AWS, Anthropic, Cloudflare, Supabase, og community-bidragsytere publiserer skill-samlinger. Vi følger 25+ leverandørrøtter.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Community-prosjekter&lt;/strong&gt;: GitHub er fullt av Claude Code-maler, agentmønstre og arbeidsflytdefinisjoner.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Interne mønstre&lt;/strong&gt;: Etter hvert som teamet vårt løser problemer, oppstår mønstre. Disse formaliseres til skills.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dokumentasjonsmining&lt;/strong&gt;: Teknisk dokumentasjon inneholder ofte implisitte skills — prosedyrer, sjekklister, beslutningstrær.&lt;/p&gt;
&lt;p&gt;Oppdagelse er kontinuerlig. Vi bruker en skill-backlog for å spore kandidater før formell evaluering.&lt;/p&gt;
&lt;h3 id=&quot;fase-2-evaluering&quot;&gt;Fase 2: Evaluering&lt;/h3&gt;
&lt;p&gt;Hver kandidat vurderes etter de samme kriteriene:&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 må være oppfylt. Det er derfor 87 % av kandidatene avvises.&lt;/p&gt;
&lt;p&gt;Deretter går hver kandidat gjennom en separat tillitsgjennomgang. Vi behandler ikke et offisielt leverandørrepositorium, en velkjent community-vedlikeholder, og et tilfeldig GitHub-repo som likeverdige sannhetskilder.&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;Betrodde leverandører får en lettere herkomstgjennomgang, men ikke fribillett. Ikke-betrodde eller ukjente kilder får en dypere manuell revisjon, og vi kjører ikke medfølgende skript før de er lest, avgrenset, og klassifisert som trygge.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gap-analyse&lt;/strong&gt;: Før vi adopterer, søker vi i registeret vårt:&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, trenger vi det ikke. Hvis vi har noe likt, kan vi heller slå sammen enn å adoptere.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dybde- og standardscoring&lt;/strong&gt;: Vi scorer også hvor fullt ut en kandidat bruker agent-skill-modellen. Et ensomt &lt;code&gt;SKILL.md&lt;/code&gt; kan fortsatt være nyttig, men dypere skills er mer verdifulle når de skiller instruksjoner fra referanser, skript og ressurser på den måten &lt;code&gt;agentskills.io&lt;/code&gt; oppmuntrer 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 troverdighetsscore litt, men de redder aldri en overfladisk eller utrygg skill. Et repo med mange stjerner og én vag &lt;code&gt;SKILL.md&lt;/code&gt; og uklare skript scorer under et mindre repo med en presis beskrivelse, kuraterte &lt;code&gt;references/&lt;/code&gt;, og små hjelpeprogrammer med én avgrenset oppgave som faktisk utnytter hele skill-kapabiliteten.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Strukturell analyse&lt;/strong&gt;: Vi sjekker 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 skript, blir den gjennomgangen strengere. En god skill er ikke bare nyttig; den må være lesbar, avgrenset, og trygg å overlate til en agent. Det sikkerhetsfilteret alene diskvalifiserer en betydelig andel av ellers interessante kandidater.&lt;/p&gt;
&lt;h3 id=&quot;fase-3-innlemming&quot;&gt;Fase 3: Innlemming&lt;/h3&gt;
&lt;p&gt;Når en skill består evalueringen, går den inn i registeret. Men skills adopteres aldri uendret. De modifiseres for å passe systemet vårt.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Modifikasjoner ved adopsjon&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Metadatanormalisering&lt;/strong&gt;: Hver skill får frontmatter-skjemaet vårt&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;K-nivå-tildeling&lt;/strong&gt;: Skills plasseres i riktig kunnskapslag&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tag-berikelse&lt;/strong&gt;: Tagger legges til for oppdagbarhet&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verktøydeklarasjon&lt;/strong&gt;: Tillatte verktøy deklareres eksplisitt&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Seksjonstilpasning&lt;/strong&gt;: Innhold restruktureres til å matche malen vår&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;En typisk skill-YAML etter innlemming:&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-omfangstildeling&quot;&gt;Fase 4: Omfangstildeling&lt;/h3&gt;
&lt;p&gt;Skills tildeles omfang (scopes) — kategorier som avgjør hvilke agenter som laster 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 deklarerer sine omfang, 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 produksjon. De rendres til SKILL.md-filer som Claude Code kan laste:&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 kommandoen:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Leser alle skill-YAML-definisjoner&lt;/li&gt;
&lt;li&gt;Rendrer dem gjennom Jinja-maler&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 etter K-nivå (foundations/, identities/, domains/, stacks/, project/)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Den endelige resultatstrukturen:&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-sovende-omfangs-mønsteret&quot;&gt;Det sovende omfangs-mønsteret&lt;/h2&gt;
&lt;p&gt;Ett av våre kraftigste mønstre er «adoptert-men-ikke-lastet»-skills. Vi kaller disse sovende omfang (dormant scopes).&lt;/p&gt;
&lt;p&gt;Ta for eksempel vitenskapelige databehandlings-skills fra k-dense-scientific-repositoriet. Vi har adoptert 120+ skills som dekker bioinformatikk, kjemi, kvantedatabehandling, og klinisk informatikk. Men de fleste av agentene våre trenger ikke molekylær docking eller genuttrykksanalyse.&lt;/p&gt;
&lt;p&gt;I stedet for å laste alle 120 skillsene inn i hver agent (som blåser opp kontekstvinduene), gjør vi:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Adopterer&lt;/strong&gt; skillsene med et spesifikt omfang (f.eks. &lt;code&gt;bioinformatics&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Holder dem &lt;strong&gt;sovende&lt;/strong&gt; — registrert, men ikke lastet&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Aktiverer&lt;/strong&gt; dem bare når en agent deklarerer det omfanget&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ønsteret lar oss ha 466 skills i registeret mens typiske agenter bare laster 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 prosedyrale steg: «1. Gjør X, 2. Deretter Y, 3. Til slutt 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;Atferdsvern: «Alltid X», «Aldri Y», «Foretrekk 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;Verifiseringskriterier: «Bekreft X», «Verifiser Y», «Sjekk 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;kvalitetsporter&quot;&gt;Kvalitetsporter&lt;/h2&gt;
&lt;p&gt;Hver skill må 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 må være 50–400 tegn med utløserfraser («Use when…», «When you need…») slik at Claude Code vet når den skal foreslå dem.&lt;/p&gt;
&lt;p&gt;Vi validerer kontinuerlig:&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;Våre 373 leverandørskills 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;Domene&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;Skytjenester&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;Vitenskapelig databehandling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;silvainfm&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;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;Nettleserautomatisering&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Hver leverandørrot deklareres 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; kjører, symlinkes leverandørskills inn i &lt;code&gt;.claude/skills/vendor/&lt;/code&gt; med sitt leverandørnavnerom.&lt;/p&gt;
&lt;h2 id=&quot;hva-vi-har-lært&quot;&gt;Hva vi har lært&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Selektivitet lønner seg.&lt;/strong&gt; Det er fristende å adoptere alt som ser nyttig ut. Men hver skill koster tokens. Med 2834 tokens i gjennomsnitt per skill, fyller unødvendig innhold raskt kontekstvinduet. Vår adopsjonsrate på 13 % holder agenter slanke.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Struktur muliggjør oppdagelse.&lt;/strong&gt; K-nivåsystemet handler ikke bare om organisering — det handler om portabilitet. K0-skills kan gjenbrukes hvor som helst. K4-skills er bevisst prosjektspesifikke. Denne klarheten hjelper både mennesker og agenter å finne det de trenger.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sovende omfang skalerer.&lt;/strong&gt; Du kan adoptere hundrevis av skills uten å laste dem alle. Omfang lar deg bygge et omfattende register samtidig som du holder den enkelte agents kontekstvindu håndterlig.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tilpasning ved innføring er avgjørende.&lt;/strong&gt; Rå leverandørskills passer sjelden systemet ditt. Innlemmingsprosessen — å legge til metadata, tildele nivåer, berike tagger — gjør at eksterne skills fungerer internt.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mining er kontinuerlig.&lt;/strong&gt; Antallet kandidater fortsetter å vokse fra 3500. Nye leverandørrepositorier dukker opp. Community-mønstre oppstår. Interne arbeidsflyter befestes. Løkken stopper aldri.&lt;/p&gt;
&lt;h2 id=&quot;hva-som-kommer&quot;&gt;Hva som kommer&lt;/h2&gt;
&lt;p&gt;Vi jobber med flere forbedringer:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Automatisert gap-deteksjon&lt;/strong&gt;: Varsle når vanlige agentfeil kunne vært løst av en ikke-adoptert skill&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Arbeidsflyter for utfasing av skills&lt;/strong&gt;: Formell prosess for å pensjonere skills som er erstattet eller ubrukt&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Avhengigheter på tvers av skills&lt;/strong&gt;: Eksplisitt deklarering av skill-forutsetninger&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bruksanalyse&lt;/strong&gt;: Spor hvilke skills agenter faktisk påkaller versus bare laster&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Mining-løkken for skills er infrastruktur. Den er ikke glamorøs. Men det er den som gjør at 41 agenter fungerer sammenhengende med 466 kapabiliteter, samtidig som de holder seg innenfor kontekstgrensene.&lt;/p&gt;
&lt;p&gt;Det er historien om hvordan 3500 blir 466. Ikke ved å ignorere 3000 — men ved å evaluere dem systematisk og bare adoptere det som fungerer.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Vil du se skill-systemet i aksjon? Sjekk ut &lt;code&gt;uv run orkestra skills list&lt;/code&gt; for å utforske det gjeldende registeret vårt.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Skills</category></item><item><title>Progressiv avdekking: CLI-vinduer inn i agentsystemer</title><link>https://maguyva.ai/nb/blog/progressive-disclosure-cli-into-agents</link><guid isPermaLink="true">https://maguyva.ai/nb/blog/progressive-disclosure-cli-into-agents</guid><description>Agentsystemer er ugjennomsiktige som standard. Progressiv avdekking gir operatører lagdelte CLI-visninger, fra raske statussjekker til fullstendig agentinternt innhold 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 innlegget gjenspeiler systemet ved publisering (januar 2026). Se &lt;a href=&quot;https://maguyva.ai/nb/team&quot;&gt;teamsiden&lt;/a&gt; for gjeldende tall.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Agentsystemer er ugjennomsiktige av design. De tar beslutninger, påkaller verktøy, og koordinerer arbeid på tvers av dusinvis av spesialister. Men når noe går galt — eller når du bare vil forstå hva som skjer — hvor ser du da?&lt;/p&gt;
&lt;p&gt;Svaret er progressiv avdekking: et lagdelt grensesnitt som avslører nøyaktig så mye kompleksitet som du trenger, nøyaktig når du trenger det.&lt;/p&gt;
&lt;h2 id=&quot;ugjennomsiktighetsproblemet&quot;&gt;Ugjennomsiktighetsproblemet&lt;/h2&gt;
&lt;p&gt;Et moderne orkestreringssystem for agenter kan ha:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;40+ spesialistagenter, hver med distinkte kapabiliteter&lt;/li&gt;
&lt;li&gt;700+ skills som spenner over intern automatisering og leverandørintegrasjoner&lt;/li&gt;
&lt;li&gt;470+ arkitekturbeslutninger som former atferd&lt;/li&gt;
&lt;li&gt;Dusinvis av MCP-verktøyservere som tilbyr eksterne kapabiliteter&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Denne kompleksiteten er tilsiktet. Agenter trenger tilgang til rik kontekst — domenekunnskap, kodeintelligens, databaseskjemaer — for å ta gode beslutninger. Men den samme rikdommen skaper et synlighetsproblem.&lt;/p&gt;
&lt;p&gt;Hvordan vet du hvilken agent som håndterer databasemigrasjoner? Hvilke beslutninger formet søkesystemets rangeringsatferd? Hvilke verktøy har arkitekturrådgiveren tilgang til?&lt;/p&gt;
&lt;p&gt;Uten strukturert tilgang blir du sittende igjen med å lese kildekode eller håpe at dokumentasjonen er oppdatert.&lt;/p&gt;
&lt;h2 id=&quot;progressiv-avdekking-som-arkitektur&quot;&gt;Progressiv avdekking som arkitektur&lt;/h2&gt;
&lt;p&gt;Progressiv avdekking er ikke bare et UI-mønster. Det er et arkitektonisk prinsipp: organiser informasjon i lag, hvert dypere enn det forrige, slik at brukere kan stoppe på nivået som svarer på spørsmålet deres.&lt;/p&gt;
&lt;p&gt;For agentsystemer oversettes dette til CLI-kommandoer med økende dybde:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Nivå&lt;/th&gt;
&lt;th&gt;Kommando&lt;/th&gt;
&lt;th&gt;Spørsmål som 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 sunt?&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 finnes?&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;Hva gjør denne agenten?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra decisions search&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Hvorfor fungerer det slik?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Maguyva MCP-verktøy&lt;/td&gt;
&lt;td&gt;Vis meg koden.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Hvert nivå svarer på et naturlig oppfølgingsspørsmål. Du trenger sjelden å hoppe rett til nivå 5.&lt;/p&gt;
&lt;h2 id=&quot;nivå-1-systemhelse&quot;&gt;Nivå 1: Systemhelse&lt;/h2&gt;
&lt;p&gt;Det første spørsmålet er alltid: fungerer 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 tall. Nok til å vite at systemet er konfigurert og registrene er fylt.&lt;/p&gt;
&lt;p&gt;Hvis et agentantall faller uventet, eller skills ikke laster, ser du det her først. Ingen loggdykking nødvendig.&lt;/p&gt;
&lt;h2 id=&quot;nivå-2-agentinventar&quot;&gt;Nivå 2: Agentinventar&lt;/h2&gt;
&lt;p&gt;Når du vet at systemet er sunt, er det neste spørsmålet: hva er tilgjengelig?&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 strukturerte data — agentnavn, beskrivelser, modellpreferanser, domenedekning. Resultatet er JSON som standard, noe som gjør det enkelt å pipe inn i &lt;code&gt;jq&lt;/code&gt; for 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 ha agenter som håndterer databasearbeid? Søkekommandoen snevrer det inn:&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 navn, beskrivelser og kapabiliteter. Du finner riktig spesialist uten å lese 40 agentdefinisjoner.&lt;/p&gt;
&lt;h2 id=&quot;nivå-3-dypdykk-i-agent&quot;&gt;Nivå 3: Dypdykk i agent&lt;/h2&gt;
&lt;p&gt;Fant du en agent som ser relevant ut? Kommandoen &lt;code&gt;info&lt;/code&gt; avslø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;Resultatet inkluderer:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Metadata&lt;/strong&gt;: Navn, kategori, modellpreferanse, beskrivelse&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Domener&lt;/strong&gt;: Hvilke kunnskapsområder denne agenten dekker&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Identity&lt;/strong&gt;: Karaktertrekk (architect, strategist, knowledge-architect)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verktøyguider&lt;/strong&gt;: Hvilken verktøydokumentasjon som injiseres i konteksten&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verktøy&lt;/strong&gt;: Den fullstendige listen over MCP-verktøy tilgjengelig for denne agenten&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Her er et utdrag av hva 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 forteller deg nøyaktig hva agenten kan gjøre. Ingen kildekode nødvendig.&lt;/p&gt;
&lt;h2 id=&quot;nivå-4-beslutningsarkeologi&quot;&gt;Nivå 4: Beslutningsarkeologi&lt;/h2&gt;
&lt;p&gt;Agenter oppfører seg i henhold til dokumenterte beslutninger. Når du trenger å forstå &lt;em&gt;hvorfor&lt;/em&gt; noe fungerer på en bestemt måte, er beslutningsregisteret sannhetskilden.&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 arkitekturbeslutninger:&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 full herkomst — når den ble tatt, hvorfor, hvilke avveininger som ble vurdert, hvilke commits som implementerte 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 arkitekturdokumentasjon som forblir oppdatert fordi den er utvunnet fra commits, ikke manuelt vedlikeholdt.&lt;/p&gt;
&lt;h2 id=&quot;nivå-5-direkte-kodeintelligens&quot;&gt;Nivå 5: Direkte kodeintelligens&lt;/h2&gt;
&lt;p&gt;Når du trenger å se selve implementasjonen — ikke metadata om den — gir Maguyvas MCP-verktøy direkte tilgang.&lt;/p&gt;
&lt;p&gt;Fra innsiden av en agentøkt:&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 ruter automatisk på tvers av semantisk, tekst- og AST-søk for å finne relevant kode. For spesifikke 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 avhengighetsanalyse:&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;Dette er ikke bare grep-erstatninger. De er grafbevisste, semantisk indekserte og integrerte med den samme kodeintelligensen som driver agentene selv.&lt;/p&gt;
&lt;h2 id=&quot;samlet-søk-på-tvers-av-registre&quot;&gt;Samlet søk på tvers av registre&lt;/h2&gt;
&lt;p&gt;Noen ganger vet du ikke hvilket register som har svaret. Det samlede søket dekker 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 treff på tvers av fem registre. Sammendraget forteller deg hvor du bør grave dypere. Fjern &lt;code&gt;--summary&lt;/code&gt; for detaljerte resultater, eller legg til &lt;code&gt;--limit 5&lt;/code&gt; for å holde resultatet håndterlig.&lt;/p&gt;
&lt;h2 id=&quot;hvorfor-dette-betyr-noe&quot;&gt;Hvorfor dette betyr noe&lt;/h2&gt;
&lt;p&gt;Progressiv avdekking handler ikke bare om bekvemmelighet. Det endrer hvordan du samhandler med komplekse systemer.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Feilsøking blir håndterlig.&lt;/strong&gt; Når en agent tar en uventet beslutning, grepper du ikke gjennom logger. Du sjekker hvilke verktøy den har tilgang til (&lt;code&gt;agents info&lt;/code&gt;), hvilke beslutninger som former atferden (&lt;code&gt;decisions search&lt;/code&gt;), og sporer implementasjonen om nødvendig (&lt;code&gt;intelligent_search&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Onboarding går raskere.&lt;/strong&gt; Nye teammedlemmer trenger ikke å lese hele kodebasen. De starter med &lt;code&gt;system status&lt;/code&gt;, utforsker med &lt;code&gt;agents list&lt;/code&gt;, og går dypere bare når de støter på noe de ikke forstår.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dokumentasjonen forblir oppdatert.&lt;/strong&gt; Fordi CLI-et leser fra de samme registrene som konfigurerer agentene, er resultatet alltid nøyaktig. Det er ingen avvik mellom det dokumentasjonen sier, og det systemet faktisk gjør.&lt;/p&gt;
&lt;h2 id=&quot;cli-et-som-grensesnitt&quot;&gt;CLI-et som grensesnitt&lt;/h2&gt;
&lt;p&gt;Vi kunne ha bygget et webdashbord. Vi kunne ha skrevet omfattende dokumentasjon. I stedet bygde vi en CLI som leser fra sannhetskilden.&lt;/p&gt;
&lt;p&gt;CLI-et har fordeler:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Komponerbart&lt;/strong&gt;: Pipe resultatet gjennom &lt;code&gt;jq&lt;/code&gt;, integrer med skript&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skriptbart&lt;/strong&gt;: Automatiser sjekker, generer rapporter&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Raskt&lt;/strong&gt;: Ingen sideinnlastinger, ingen autentiseringsflyt&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nøyaktig&lt;/strong&gt;: Leser den faktiske konfigurasjonen, ikke en mellomlagret representasjon&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For systemer der korrekthet betyr mer enn estetikk, vinner CLI.&lt;/p&gt;
&lt;h2 id=&quot;bygg-din-egen-progressive-avdekking&quot;&gt;Bygg din egen progressive avdekking&lt;/h2&gt;
&lt;p&gt;Hvis du bygger agentsystemer, bør du vurdere hvordan brukere vil inspisere dem:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Start med helsesjekker.&lt;/strong&gt; Én kommando som forteller deg om ting fungerer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tilby inventaroversikter.&lt;/strong&gt; List opp hva som finnes før du forklarer hva det gjør.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Muliggjør målrettede spørringer.&lt;/strong&gt; Søk slår manuell blaing i store samlinger.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Eksponer herkomst.&lt;/strong&gt; La brukere spore beslutninger til deres opprinnelse.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Koble til kodeintelligens.&lt;/strong&gt; Til slutt trenger brukere å se implementasjonen.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Hvert lag svarer på et oppfølgingsspørsmål. Bygg dem i frekvensrekkefølge — de fleste brukere stopper på nivå 2 eller 3. Bare avanserte brukere når nivå 5.&lt;/p&gt;
&lt;p&gt;Målet er ikke å eksponere alt. Det er å eksponere nøyaktig det som trengs, nøyaktig når det trengs. Det er progressiv avdekking anvendt på agentarkitektur.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>CLI</category><category>Tooling</category></item><item><title>Ground Truths: Forankring av AI-agenter i virkeligheten</title><link>https://maguyva.ai/nb/blog/ground-truths-anchoring-ai-to-reality</link><guid isPermaLink="true">https://maguyva.ai/nb/blog/ground-truths-anchoring-ai-to-reality</guid><description>AI-agenter hallusinerer med stor selvtillit. Ground truths er versjonerte fakta med et avgrenset omfang som forankrer agentatferd i virkeligheten. Her er hvordan vi bygde og håndhever 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 innlegget gjenspeiler systemet ved publisering (januar 2026). Se &lt;a href=&quot;https://maguyva.ai/nb/team&quot;&gt;teamsiden&lt;/a&gt; for gjeldende tall.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;AI-agenter er bemerkelsesverdig dyktige. De kan resonnere, syntetisere og generere. Men de har en grunnleggende svakhet: de finner på ting. Ikke ondsinnet, men med stor selvtillit. En agent kan finne opp API-parametere som ikke finnes, referere til konfigurasjoner som aldri ble definert, eller anvende mønstre fra treningsdataene sine som motsier din faktiske arkitektur.&lt;/p&gt;
&lt;p&gt;Standardtiltaket er «gi agenten mer kontekst». Men kontekst kan være motstridende. Dokumentasjonen kommer ut av takt med implementasjonen. Kommentarer lyver. Selv kode kan villede når den leses uten å forstå intensjonen.&lt;/p&gt;
&lt;p&gt;Vi trengte noe mer eksplisitt. Noe som ikke kunne ignoreres eller mistolkes. Noe som ville forankre agenter i verifiserbar virkelighet.&lt;/p&gt;
&lt;p&gt;Vi kaller dem Ground Truths.&lt;/p&gt;
&lt;h2 id=&quot;hva-er-en-ground-truth&quot;&gt;Hva er en Ground Truth?&lt;/h2&gt;
&lt;p&gt;En Ground Truth er en eksplisitt, versjonert faktapåstand som agenter må respektere. Det er ikke dokumentasjon. 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 livssyklusstatus&lt;/strong&gt; (current, tentative, eller deprecated)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Et omfang&lt;/strong&gt; (plattformomfattende, pakkespesifikt, eller domenebundet)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bevis&lt;/strong&gt; (filstier, URL-er, eller referanser som beviser påstanden)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agentveiledning&lt;/strong&gt; (eksplisitte gjør/unngå-instruksjoner)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Her er et eksempel fra vår Maguyva kodeintelligens-plattform:&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øter på denne Ground Truth-en, vet den:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Standardverdien er deterministisk (tomme resultater, ikke gjetninger basert på omtrentlig matching)&lt;/li&gt;
&lt;li&gt;Det finnes spesifikke parametere (&lt;code&gt;find_similar&lt;/code&gt;, &lt;code&gt;exact_match&lt;/code&gt;) med definert atferd&lt;/li&gt;
&lt;li&gt;Bevis finnes i spesifikke filer som kan verifiseres&lt;/li&gt;
&lt;li&gt;Påstanden ble verifisert på en bestemt dato&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;anatomien-til-et-ground-truth-register&quot;&gt;Anatomien til et Ground Truth-register&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 domene kan ha sitt 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;Registeret inneholder metadata om selve samlingen, renderingskonfigurasjon for dokumentasjonsgenerering, og selve påstandene. Hver påstand følger et strengt skjema validert av Pydantic-modeller:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; GroundTruthStatement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;BaseModel&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    status: GTStatus  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# current, tentative, deprecated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    source: GTSource &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # claude-code, orkestra, discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    scope: GTScope  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# platform, package, domain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    statement: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    rationale: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    evidence: list[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    last_verified: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    tags: list[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    agent_guidance: AgentGuidance &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;hvordan-agenter-får-tilgang-til-ground-truths&quot;&gt;Hvordan agenter får tilgang til Ground Truths&lt;/h2&gt;
&lt;p&gt;Ground truths eksponeres gjennom flere kanaler:&lt;/p&gt;
&lt;h3 id=&quot;1-rendret-dokumentasjon&quot;&gt;1. Rendret dokumentasjon&lt;/h3&gt;
&lt;p&gt;Kommandoen &lt;code&gt;orkestra sync&lt;/code&gt; transformerer YAML-registre til lesbar 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 som inkluderes i agentkonteksten. Det rendrede resultatet grupperer påstander etter 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øk&quot;&gt;2. CLI-søk&lt;/h3&gt;
&lt;p&gt;Agenter med shell-tilgang kan søke 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økefunksjonen scorer treff på tvers av flere felt med vektet 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-kontekstkomposisjon&quot;&gt;3. Kontekstkomposisjon&lt;/h3&gt;
&lt;p&gt;Når agenter rendres fra YAML-definisjoner, kan konteksten deres 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 lastes inn før agenten begynner arbeidet.&lt;/p&gt;
&lt;h2 id=&quot;kategorier-av-ground-truths&quot;&gt;Kategorier av Ground Truths&lt;/h2&gt;
&lt;p&gt;Når vi ser på tvers av registrene våre, klynger ground truths seg i flere mønstre:&lt;/p&gt;
&lt;h3 id=&quot;produktprinsipper&quot;&gt;Produktprinsipper&lt;/h3&gt;
&lt;p&gt;Begrensninger på hva produktet er og ikke er:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;«Maguyva er read-only med hensyn til brukerrepositorier; den eneste ressursen som ikke kan gjenoppbygges, er den betalte embeddings-cachen.» (GT-MAG-001)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;arkitekturgrenser&quot;&gt;Arkitekturgrenser&lt;/h3&gt;
&lt;p&gt;Hvor ansvar hører hjemme, og hvorfor:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;«Grensene mellom pipeline og Maguyva er tilsiktede: pipeline er gjenbrukbar, Maguyva holder kodespesifikk logikk, og CQRS skiller stage-skriving fra server-lesing.» (GT-MAG-006)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;anti-hallusinasjonsregler&quot;&gt;Anti-hallusinasjonsregler&lt;/h3&gt;
&lt;p&gt;Eksplisitte påbud som holder verktøykontrakter deterministiske i stedet for utledet:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;«Omtrentlig symbolmatching (fuzzy matching) er opt-in via &lt;code&gt;find_similar=true&lt;/code&gt;. Standardatferd returnerer tomme resultater for symboler som ikke finnes; &lt;code&gt;exact_match=true&lt;/code&gt; håndhever streng matching og deaktiverer alle fallbacker med omtrentlig matching.» (GT-MAG-015)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;kvalitetsporter&quot;&gt;Kvalitetsporter&lt;/h3&gt;
&lt;p&gt;Standarder som må opprettholdes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;«Endringer i delt infrastruktur (post_filters.py, relasjonsekstraktorer, delte håndterere) MÅ valideres mot ALLE støttede språk gjennom full manifestgenerering før commit. Enkeltspråksvalidering er ikke tilstrekkelig for delt 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;Implementasjonskrav:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;«Bruk &lt;code&gt;asyncio.to_thread()&lt;/code&gt; for CPU-tungt arbeid i asynkrone kontekster; det utfasede &lt;code&gt;loop.run_in_executor()&lt;/code&gt;-mønsteret skal ikke brukes i ny kode.» (GT-MAG-018)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;livssyklusen-til-en-ground-truth&quot;&gt;Livssyklusen til en Ground Truth&lt;/h2&gt;
&lt;p&gt;Ground truths er ikke statiske. De utvikler seg gjennom en definert livssyklus:&lt;/p&gt;
&lt;h3 id=&quot;tentative&quot;&gt;Tentative&lt;/h3&gt;
&lt;p&gt;En foreslått sannhet under vurdering. Påstanden er registrert, men kan endres:&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 verifisert sannhet som agenter må respektere. Bevisene er validert:&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 sannhet som ikke lenger gjelder. Beholdt for historisk referanse med en henvisning til det som erstattet 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-dokumentasjon&quot;&gt;Hvorfor ikke bare dokumentasjon?&lt;/h2&gt;
&lt;p&gt;Dokumentasjon tjener et annet formål. Den forklarer. Den lærer bort. Den kan være vag, kan bruke kvalifikatorer som «generelt» eller «vanligvis».&lt;/p&gt;
&lt;p&gt;Ground truths kan ikke være vage. De er påstander. De gjelder enten, eller så gjør de ikke det.&lt;/p&gt;
&lt;p&gt;Se på forskjellen:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dokumentasjon:&lt;/strong&gt; «API-et returnerer generelt tomme resultater når et symbol ikke finnes, selv om omtrentlig matching kan være aktivert i enkelte konfigurasjoner.»&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ground Truth:&lt;/strong&gt; «Standardatferd returnerer tomme resultater for symboler som ikke finnes; &lt;code&gt;exact_match=true&lt;/code&gt; håndhever streng matching og deaktiverer alle fallbacker med omtrentlig matching.»&lt;/p&gt;
&lt;p&gt;Den første er nyttig for mennesker som lærer systemet. Den andre er handlingsrettet for agenter som skal ta beslutninger.&lt;/p&gt;
&lt;h2 id=&quot;agentveiledning-gjør-og-unngå&quot;&gt;Agentveiledning: Gjør og unngå&lt;/h2&gt;
&lt;p&gt;Noen ground truths inkluderer eksplisitt agentveiledning:&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 tvetydighet. En agent som leser dette, vet ikke bare hva som er sant, men hvilke handlinger den sannheten innebærer.&lt;/p&gt;
&lt;h2 id=&quot;verifisering-og-vedlikehold&quot;&gt;Verifisering og vedlikehold&lt;/h2&gt;
&lt;p&gt;Ground truths krever vedlikehold. Vi sporer:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;last_verified&lt;/strong&gt;: Når noen bekreftet at påstanden fortsatt gjelder&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;evidence&lt;/strong&gt;: Filer som beviser påstanden (kan sjekkes for eksistens)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;source&lt;/strong&gt;: Hvor sannheten stammer fra (CLI-inspeksjon, arkitekturgjennomgang, læring etter hendelser)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En Ground Truth med utdaterte verifiseringsdatoer eller ødelagte bevislenker er et signal om å undersøke. Enten er sannheten fortsatt gyldig og trenger re-verifisering, eller virkeligheten har endret seg og sannheten trenger oppdatering.&lt;/p&gt;
&lt;h2 id=&quot;ekte-eksempler-fra-produksjon&quot;&gt;Ekte eksempler fra produksjon&lt;/h2&gt;
&lt;h3 id=&quot;sikkerhetsgrense&quot;&gt;Sikkerhetsgrense&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-en forhindrer en klasse av feilslåtte «sikkerhetsforbedringer» som ville ødelagt produktet.&lt;/p&gt;
&lt;h3 id=&quot;nøyaktighet-ved-ekstraksjonstidspunktet&quot;&gt;Nøyaktighet ved ekstraksjonstidspunktet&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 smertefull erfaring. Agenter pleide å lappe feilende språkpakker ved å legge til filtre som bare påvirket validatoren, som fikk testriggen til å se grønnere ut, mens Maguyva-ekstraktoren i produksjon fortsatt sendte ut de feilaktige edgene. Regelen tvinger fikser tilbake til den reelle stien: YAML-konfigurasjon, spørringer, eller håndterere.&lt;/p&gt;
&lt;h3 id=&quot;filtrering-i-flere-nivåer&quot;&gt;Filtrering i flere nivåer&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-023&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Language engine uses three-tier filtering: external_method_patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (builtins/stdlib), allowlists (legitimate idioms), and expected_call_targets&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (validation-time deduplication). Each tier serves a distinct purpose.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Conflating filter purposes leads to either over-filtering (missing real&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    relationships) or under-filtering (noise).&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dette forhindrer agenter fra å legge til filtre på feil sted, en vanlig feil som forårsaket nøyaktighetsregresjoner.&lt;/p&gt;
&lt;h2 id=&quot;integrasjon-med-orkestreringssystemet&quot;&gt;Integrasjon med orkestreringssystemet&lt;/h2&gt;
&lt;p&gt;Ground truths er ett lag i et bredere kontekstsystem:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Arkitekturbeslutninger (ADR-er)&lt;/strong&gt; - Registrerer hvorfor vi valgte tilnærming A fremfor B&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ground Truths&lt;/strong&gt; - Sier hva som definitivt er sant akkurat nå&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Domenemønstre&lt;/strong&gt; - Beskriver hvordan man gjør ting riktig&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Antimønstre&lt;/strong&gt; - Beskriver hva man skal unngå, og hvorfor&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;En agent som jobber i systemet, har tilgang til alle fire. Ground truths gir det faktabaserte ankeret, mens beslutninger forklarer historien, mønstre veileder implementasjonen, og antimønstre advarer mot fallgruver.&lt;/p&gt;
&lt;h2 id=&quot;måling-av-effekt&quot;&gt;Måling av effekt&lt;/h2&gt;
&lt;p&gt;Siden vi introduserte ground truths, har vi observert:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Færre «fiks den hallusinerte fiksen»-sykluser&lt;/li&gt;
&lt;li&gt;Mer selvsikker agentbeslutningstaking når faktaene er klare&lt;/li&gt;
&lt;li&gt;Bedre PR-gjennomganger fordi forventningene er eksplisitte&lt;/li&gt;
&lt;li&gt;Redusert onboarding-tid for nye agenter (og mennesker)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Investeringen i å vedlikeholde ground truths betaler seg i redusert feilsøking og klarere systemgrenser.&lt;/p&gt;
&lt;h2 id=&quot;kom-i-gang&quot;&gt;Kom i gang&lt;/h2&gt;
&lt;p&gt;For å legge til en Ground Truth i systemet ditt:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Opprett en &lt;code&gt;ground_truths.yaml&lt;/code&gt; i pakkens &lt;code&gt;ai_assets/reference/&lt;/code&gt;-katalog&lt;/li&gt;
&lt;li&gt;Definer metadata og renderingskonfigurasjon&lt;/li&gt;
&lt;li&gt;Legg til påstander som følger skjemaet&lt;/li&gt;
&lt;li&gt;Kjør &lt;code&gt;uv run orkestra sync&lt;/code&gt; for å generere dokumentasjon&lt;/li&gt;
&lt;li&gt;Inkluder registeret i agentens kontekstkomposisjon&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Start med faktaene som skaper mest forvirring, eller begrensningene som brytes oftest. Det er dine mest verdifulle ground truths.&lt;/p&gt;
&lt;h2 id=&quot;konklusjon&quot;&gt;Konklusjon&lt;/h2&gt;
&lt;p&gt;AI-agenter vil hallusinere. Det ligger i deres natur. Men vi kan skape miljøer der hallusinasjon er begrenset, der visse fakta ikke er til forhandling, der agenter kan sjekke antakelsene sine mot verifisert virkelighet.&lt;/p&gt;
&lt;p&gt;Ground truths er ikke en komplett løsning. De krever vedlikehold. De kan bli utdaterte. De legger til overhead i utviklingsprosessen.&lt;/p&gt;
&lt;p&gt;Men de gir noe verdifullt: et delt vokabular av fakta som både mennesker og agenter kan stole på. I en verden der agenter i økende grad deltar i programvareutvikling, blir det delte fundamentet essensielt.&lt;/p&gt;
&lt;p&gt;Alternativet er endeløse sykluser med agenter som gjør selvsikre feil og mennesker som retter dem opp. Ground truths bryter den syklusen ved å gjøre rettelsene eksplisitte og varige.&lt;/p&gt;
&lt;p&gt;Agentene dine fortjener å vite hva som er sant. Fortell dem det.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Grounding</category></item><item><title>Orkestra: Orkestrering av AI-agenter i stor skala</title><link>https://maguyva.ai/nb/blog/orkestra-agent-orchestration</link><guid isPermaLink="true">https://maguyva.ai/nb/blog/orkestra-agent-orchestration</guid><description>Én orkestrator ruter arbeid til spesialiserte AI-agenter, hver med egne ferdigheter og hukommelse. Slik koordinerer Orkestra 46 agenter og 466 ferdigheter i produksjon.</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 innlegget gjenspeiler systemet ved publisering (januar 2026). Se &lt;a href=&quot;https://maguyva.ai/nb/team&quot;&gt;teamsiden&lt;/a&gt; for gjeldende tall.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Da vi begynte å bygge med Claude Code, støtte vi på et problem som alle team som bruker AI-kodeassistenter til slutt møter: én enkelt agent kan ikke gjøre alt bra.&lt;/p&gt;
&lt;p&gt;Du kan prompte en agent til å være en databasespesialist. Eller en sikkerhetsrevisor. Eller en frontend-utvikler. Men i det øyeblikket du ber den være alle tre samtidig, lider kvaliteten. Konteksten blir utvannet. Instruksjoner kolliderer. Agenten blir en generalist som er middelmådig på alt.&lt;/p&gt;
&lt;p&gt;Så vi bygde Orkestra.&lt;/p&gt;
&lt;h2 id=&quot;hva-er-orkestra&quot;&gt;Hva er Orkestra?&lt;/h2&gt;
&lt;p&gt;Orkestra er et orkestreringssystem for agenter for Claude Code og lignende AI-kodeverktøy. Det koordinerer flere spesialiserte agenter, hver med distinkt ekspertise, under én orkestrator som ruter arbeid til riktig spesialist.&lt;/p&gt;
&lt;p&gt;Tenk på det som et bemanningsbyrå for AI-agenter. Orkestratoren mottar en oppgave, identifiserer hvilken spesialist som bør håndtere den, og delegerer med riktig kontekst. Når arbeidet er gjort, flyter resultatene tilbake til orkestratoren for syntese.&lt;/p&gt;
&lt;p&gt;Tallene forteller historien:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Komponent&lt;/th&gt;
&lt;th&gt;Antall&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Spesialistagenter&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gjenbrukbare 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;Kommunikasjonsstiler&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kunnskapsdomener&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;Kjerneinnsikten bak Orkestra er at agentatferd oppstår fra tre kombinerbare byggeklosser:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Identity&lt;/strong&gt; definerer &lt;em&gt;hva&lt;/em&gt; agenten er. En arkitekt designer systemstrukturer. En feilsøker sporer feil til rotårsaker. En vokter håndhever etterlevelse og sikkerhetsgrenser. Vi har 27 identitetsarketyper som kan blandes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mindset&lt;/strong&gt; definerer &lt;em&gt;hvordan&lt;/em&gt; agenten tenker. En analytisk tenkemåte forankrer påstander i bevis og kvantifiserer usikkerhet. En skeptisk tenkemåte stiller spørsmål ved antakelser og søker motbevis. En utforskende tenkemåte omfavner tvetydighet og prøver flere tilnærminger.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Style&lt;/strong&gt; definerer &lt;em&gt;hvordan&lt;/em&gt; agenten kommuniserer. En teknisk stil inkluderer eksakte verdier og refererer til spesifikke filer. En kortfattet stil kutter fyllstoff og starter med svaret. En diplomatisk stil balanserer ærlighet med takt.&lt;/p&gt;
&lt;p&gt;En agent kombinerer disse byggeklossene:&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 komposisjonen skaper en agent som designer systemer (architect), knytter kunnskap på tvers av domener (knowledge-architect), setter strategisk retning (strategist), tenker i bevis og data (analytical), og kommuniserer uten fyllstoff (concise).&lt;/p&gt;
&lt;p&gt;Kraften ligger i den kombinatoriske eksplosjonen. 27 identiteter ganger 11 mindsets ganger 10 stiler gir nesten 3000 mulige agentpersonligheter. Men du definerer bare kombinasjonene som betyr noe for arbeidet ditt.&lt;/p&gt;
&lt;h2 id=&quot;skills-gjenbrukbare-kapabilitetsmoduler&quot;&gt;Skills: Gjenbrukbare kapabilitetsmoduler&lt;/h2&gt;
&lt;p&gt;Skills er kunnskapen og arbeidsflytene agenter kan påkalle. De følger et lagdelt system basert på omfang:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Nivå&lt;/th&gt;
&lt;th&gt;Navn&lt;/th&gt;
&lt;th&gt;Omfang&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;Universell metodikk&lt;/td&gt;
&lt;td&gt;Testdrevet disiplin, evidensbasert fullføring&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;Rollebaserte arbeidsflyter&lt;/td&gt;
&lt;td&gt;CLI-grensesnittstandarder, ytelseshåndbok&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;Domenespesifikk kunnskap&lt;/td&gt;
&lt;td&gt;Databasemigreringsmønstre, autentiseringsvalidering&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;Teknologispesifikt&lt;/td&gt;
&lt;td&gt;Cloudflare-driftsetting, 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 kodebasen&lt;/td&gt;
&lt;td&gt;Prosjektspesifikke arbeidsflyter og konvensjoner&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Skills lastes ved behov (lazy-loaded). En agent ser skill-navn og -beskrivelser ved oppstart, men det fulle skill-innholdet lastes bare inn når det utløses. Dette holder konteksten slank samtidig som hundrevis av skills gjøres oppdagbare.&lt;/p&gt;
&lt;p&gt;Hver skill inkluderer:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Klare utløserbetingelser («Bruk ved migrering av databaseskjemaer»)&lt;/li&gt;
&lt;li&gt;Steg-for-steg-veiledning&lt;/li&gt;
&lt;li&gt;Tillatte verktøy for arbeidsflyten&lt;/li&gt;
&lt;li&gt;Suksesskriterier og gjenopprettingsstier ved feil&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;De 466 skillsene i registeret vårt dekker alt fra git worktree-isolasjon til arbeidsflyter for nettresearch til validering av driftshelse.&lt;/p&gt;
&lt;h2 id=&quot;hvorfor-orkestrering-betyr-noe&quot;&gt;Hvorfor orkestrering betyr noe&lt;/h2&gt;
&lt;p&gt;Enkeltagent-arkitekturer treffer veggen raskt:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kontekstutvanning.&lt;/strong&gt; Et kontekstvindu på 200 000 tokens høres stort ut helt til du laster inn databaseskjemaer, API-dokumentasjon, testfixturer og domenekunnskap. Spesialister kan jobbe med målrettet kontekst.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Instruksjonskonflikter.&lt;/strong&gt; Å be en agent være «grundig, men rask» og «verifiser alt, men ikke gjør løsningen unødvendig komplisert» skaper spenning. Spesialister løser dette ved å ha et klart omfang.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ekspertisedybde.&lt;/strong&gt; En generalistagent kan litt om alt. En spesialistagent, satt sammen med riktig identitet og skills, kjenner domenet sitt dypt.&lt;/p&gt;
&lt;p&gt;Orkestra implementerer flat orkestrering: én orkestrator koordinerer flere spesialister. Spesialister kan ikke spawne underspesialister. Dette forhindrer en kompleksitetseksplosjon samtidig som det muliggjør parallelt arbeid.&lt;/p&gt;
&lt;p&gt;Orkestratoren har tilgang til 2,2 millioner tokens effektiv kapasitet: sitt eget vindu på 200 000, pluss 10 samtidige subagenter med 200 000 hver. Arbeid som ville tømt en enkeltagent, kjører komfortabelt på tvers av flåten.&lt;/p&gt;
&lt;h2 id=&quot;renderingspipelinen&quot;&gt;Renderingspipelinen&lt;/h2&gt;
&lt;p&gt;Agentdefinisjoner lever i YAML. Claude Code leser Markdown. Orkestra bygger bro over dette gapet med en deterministisk renderingspipeline:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;YAML Registries → Jinja Templates → .claude/agents/*.md&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Operatører redigerer YAML-kilden. Kjør &lt;code&gt;orkestra sync&lt;/code&gt;. Rendret Markdown vises i &lt;code&gt;.claude/agents/&lt;/code&gt;. Claude Code plukker opp endringene.&lt;/p&gt;
&lt;p&gt;Denne separasjonen betjener forskjellige målgrupper:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;YAML-kilden&lt;/strong&gt; inkluderer livssyklusmetadata, tagger, valideringsregler, og utfasingsnotater for verktøy&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rendret Markdown&lt;/strong&gt; inkluderer bare det modellen trenger: beskrivelse, verktøy, skills, og atferdsveiledning&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pipelinen setter sammen identiteter, mindsets, stiler og skills til én sammenhengende prompt. En architect-analytical-concise-agent får en svært annerledes systemprompt enn en debugger-skeptical-technical-agent, selv om de deler noen underliggende skills.&lt;/p&gt;
&lt;h2 id=&quot;domenekunnskap-fire-filers-mønsteret&quot;&gt;Domenekunnskap: Fire-filers-mønsteret&lt;/h2&gt;
&lt;p&gt;Hvert kunnskapsdomene 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 strukturen betjener agentens kontekstlasting. En agent som jobber med autentisering, laster &lt;code&gt;authentication/patterns.md&lt;/code&gt; for veiledning og &lt;code&gt;authentication/anti-patterns.md&lt;/code&gt; for å unngå kjente fallgruver. Filene er dimensjonert for effektiv kontekstlasting: fokuserte nok til å være nyttige, omfattende nok til å være autoritative.&lt;/p&gt;
&lt;p&gt;Vi vedlikeholder 21 toppnivådomener, inkludert analytics, authentication, data science, infrastruktur, maskinlæring, ytelse, sikkerhet, og mer. Hvert domene kan ha underdomener for finere granularitet.&lt;/p&gt;
&lt;h2 id=&quot;values-operativsystemet&quot;&gt;Values: Operativsystemet&lt;/h2&gt;
&lt;p&gt;Alle agenter deler et grunnleggende verdilag som definerer hvordan de opererer:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Enkelhet først.&lt;/strong&gt; Bruk den enkleste løsningen som fungerer. Legg til kompleksitet bare når det er begrunnet.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fiks rotårsaker.&lt;/strong&gt; Aldri lapp rundt feil. Hvis en pipeline feiler, feilsøk pipelinen. Hvis en test feiler, fiks koden eller testen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Evidensbasert.&lt;/strong&gt; Merk påstander som «verified» (med benchmarks) eller «estimated» (med antakelser). Et oppdaget mønster er ikke det samme som et bekreftet problem.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kontekstøkonomi.&lt;/strong&gt; MCP-verktøy koster 0,1 % av konteksten. Fillesing koster 2 % hver. Anvend domeneekspertise før du utforsker kode.&lt;/p&gt;
&lt;p&gt;Disse verdiene forplanter seg til hver spesialist gjennom renderingspipelinen. Måten agenten settes sammen på, hindrer den i å omgå dem.&lt;/p&gt;
&lt;h2 id=&quot;cli-kontrollplanet&quot;&gt;CLI: Kontrollplanet&lt;/h2&gt;
&lt;p&gt;Orkestra leveres med en CLI for å 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-et er sannhetskilden for hvilke agenter som finnes, hvilke skills de har, og om systemet er sunt. Det kjører validering før synkronisering for å fange problemer tidlig.&lt;/p&gt;
&lt;h2 id=&quot;betraktninger-om-åpen-kildekode&quot;&gt;Betraktninger om åpen kildekode&lt;/h2&gt;
&lt;p&gt;Vi bygde Orkestra for å løse vårt eget problem: å koordinere AI-agenter i stor skala for en kompleks kodebase. Mønstrene vi oppdaget er ikke spesifikke for vårt domene.&lt;/p&gt;
&lt;p&gt;Karakterkomposisjonssystemet (identity + mindset + style) gjelder for ethvert team som definerer agentpersonligheter.&lt;/p&gt;
&lt;p&gt;Skill-nivåsystemet (K0–K4) gir en mental modell for å organisere gjenbrukbare kapabiliteter etter omfang.&lt;/p&gt;
&lt;p&gt;Renderingspipeline-mønsteret (YAML-kilde + maler + genererte artefakter) skiller ansvar mellom verktøy og modellens bruk av innholdet.&lt;/p&gt;
&lt;p&gt;Den flate orkestreringsmodellen (én koordinator, mange spesialister) unngår kompleksitet samtidig som den muliggjør parallellitet.&lt;/p&gt;
&lt;p&gt;Om Orkestra blir åpen kildekode, avhenger av om disse mønstrene har verdi for andre som bygger med Claude Code. Hvis du treffer veggene vi beskrev, kan arkitekturen kanskje hjelpe.&lt;/p&gt;
&lt;h2 id=&quot;hva-vi-lærte&quot;&gt;Hva vi lærte&lt;/h2&gt;
&lt;p&gt;Å bygge Orkestra lærte oss at orkestrering ikke handler om å gjøre agenter smartere. Det handler om å gjøre dem mer fokuserte.&lt;/p&gt;
&lt;p&gt;En enkeltagent med perfekte instruksjoner går fortsatt tom for kontekst. En enkeltagent med alle skills blir fortsatt forvirret om hvilken som skal brukes. En enkeltagent som prøver å være alt, produserer middelmådige resultater overalt.&lt;/p&gt;
&lt;p&gt;Førti spesialister, hver utmerket i sitt domene, koordinert av en orkestrator som vet når den skal delegere: det er slik vi shipper.&lt;/p&gt;
&lt;p&gt;Tallene betyr mindre enn arkitekturen. Du trenger kanskje fem agenter eller femti. Prinsippet består: komposisjon fremfor kapasitet, spesialisering fremfor generalisering, koordinering fremfor individuell heltemodighet.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Orkestra driver agentøkosystemet bak Maguyva, vår kodeintelligens-plattform. Vil du vite mer? Ta kontakt med teamet.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Open Source</category></item></channel></rss>