<?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-blogi</title><description>Teknisiä syväsukelluksia MCP-koodiälyyn, tekoälyagenttien arkkitehtuuriin ja opittuihin asioihin monikielisen koodinhakualustan rakentamisesta.</description><link>https://maguyva.ai/fi/blog</link><language>fi</language><atom:link href="https://maguyva.ai/fi/rss.xml" rel="self" type="application/rss+xml"/><item><title>Konteksti, joka kulkee mukanasi</title><link>https://maguyva.ai/fi/blog/context-that-travels</link><guid isPermaLink="true">https://maguyva.ai/fi/blog/context-that-travels</guid><description>Cursor indeksoija on erinomainen Cursor sisällä. Maguyva on isännöity MCP-kartta, jota sama agentti voi kysyä muista editoreista, CLI:istä ja CI:stä.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Cursor indeksoija on erinomainen Cursor sisällä. Tab-täydennys, rivinsisäinen muokkaus, chat, ja agentti siinä ikkunassa nojaavat jo projektin indeksiin, jota Cursor ylläpitää avoinna olevalle työtilalle. Jos Cursor on ainoa pinta, jossa kirjoitat, ja indeksi löytää jo oikeat tiedostot, pysy siellä. Se on rehellinen ‘pysy siellä missä olet’ -tapaus, ja se ansaitsee olla tämän sivun ensimmäinen lause.&lt;/p&gt;
&lt;p&gt;Tämä teksti kertoo tavallisen viikon toisesta puoliskosta. Sama repositorio avataan myös Claude Code, siltä kysytään Codex CLI:stä, se katselmoidaan toisella koneella, tai sitä kysyy CI:ssä ajettava agentti. Kysymys ei ole ‘kumpi indeksoija on parempi’. Kysymys on, onko kartta, johon agentti luottaa yhdessä ikkunassa, sama kartta, johon se luottaa seuraavassa.&lt;/p&gt;
&lt;p&gt;Maguyva on se kartta, joka kulkee mukanasi. Se on etäinen MCP-koodikannan kontekstikerros. Agentti kysyy sitä samalla tavalla kuin mitä tahansa muuta MCP-työkalua. Tulokset palautuvat järjestettyinä polkuina rivinumeroineen. Cursor pysyy editorina. Konteksti on se, mikä liikkuu.&lt;/p&gt;
&lt;h2 id=&quot;mihin-cursor-indeksoija-on-tarkoitettu&quot;&gt;Mihin Cursor indeksoija on tarkoitettu&lt;/h2&gt;
&lt;p&gt;Cursor sisäänrakennettu indeksointi on olemassa, jotta chat, agentti ja haku editorin sisällä voivat hakea relevanttia koodia sen sijaan, että ne luottaisivat vain siihen, mikä mahtuu mallin raakaan kontekstiikkunaan. Se on oikea suunnittelu IDE:lle. Tämä indeksi on natiivi Cursor. Se ei ole MCP-palvelin eikä ole tavoitettavissa mistään muusta asiakasohjelmasta.&lt;/p&gt;
&lt;p&gt;Näin se toimii, kuten kuvattu Cursor julkisessa dokumentaatiossa ja Cursor omassa kuvauksessa tämän kirjoitushetkellä: ensisijainen hakupolku ei ole enää pilvipohjainen embedding-indeksi. Cursor tiimi on ilmoittanut yhteisöfoorumillaan, että omistautunut semanttinen, embeddingeihin perustuva haku ajetaan alas grep-pohjaisen haun hyväksi, koska nykyiset mallit tutkivat jo elävää puuta itsekin riittävän hyvin. Sen tilalla on Instant Grep, paikallinen hakuindeksi rakennettu n-grammeista, käänteisistä listoista ja Bloom-suodattimista, säilytettynä muistiin kartoitetussa hakutaulussa, jotta kyselyt ratkaistaan kehittäjän omalla koneella palvelimen sijaan.&lt;/p&gt;
&lt;p&gt;Itse indeksi elää repositorion omassa &lt;code&gt;.git/cursor/&lt;/code&gt;-hakemistossa, ankkuroituna tiettyyn git-committiin; muutokset tuon committin jälkeen kerrostuvat sen päälle sen sijaan, että ne käynnistäisivät uuden skannauksen, ja indeksi rakennetaan uudelleen vain, kun paikallinen tila on ajautunut kauas siitä, mitä vasten se rakennettiin. Koska se sijaitsee &lt;code&gt;.git&lt;/code&gt;:n sisällä, sitä ei koskaan seurata eikä koskaan pusheta — poista kansio, ja indeksi katoaa. &lt;code&gt;.gitignore&lt;/code&gt; toteutuu rakenteen ansiosta, koska vain gitillä seurattu sisältö on kelvollista, ja &lt;code&gt;.cursorignore&lt;/code&gt; pakotetaan lukupolulla. Sillä polulla ei ole enää palvelinpuolen embedding-vaihetta eikä etäistä vektoritietokantaa. Aiempi dokumentaatio kuvasi pilviavusteisen suunnittelun — lohkojen salauksen, synkronoinnin Merkle-puun kautta, indeksin uudelleenkäytön tiimin jäsenten välillä — ja Cursor oma tiimi on sittemmin sanonut, että tuo suunnittelu ajetaan alas, joten tämä teksti ei enää kuvaa sitä ajankohtaisena.&lt;/p&gt;
&lt;p&gt;Editorin sisällä erottuva vahvuus on Cursor Explore-alaagentti. Se voi käynnistää useita rinnakkaisia hakuja omassa kontekstiikkunassaan nopeammalla mallilla ja palauttaa vain relevantit löydökset, jotta pääkeskustelu ei paisu hakutuloksista. Se on aito vahvuus editorin sisällä. Säilytä se.&lt;/p&gt;
&lt;p&gt;Monijuuriset työtilat ovat tuettuja: jokaisen avatun kansion konteksti on Agentin käytettävissä. Jotkin gitistä riippuvat ominaisuudet, kuten worktreet, on poistettu käytöstä monijuurisissa asetuksissa, eivätkä Cloud Agents tue lainkaan monijuurisia työtiloja.&lt;/p&gt;
&lt;p&gt;Mikään näistä ei ole syy jättää Cursor. Se on tarkka kuvaus kartasta, joka on erinomainen siellä, missä se elää.&lt;/p&gt;
&lt;h2 id=&quot;mitä-kulkea-mukanasi-oikeasti-tarkoittaa&quot;&gt;Mitä ‘kulkea mukanasi’ oikeasti tarkoittaa&lt;/h2&gt;
&lt;p&gt;Kartta kulkee mukanasi, kun samat kysymykset palauttavat saman tyyppisen vastauksen, lainauksineen, jotka voit avata, useammasta kuin yhdestä asiakasohjelmasta.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cursor: ‘Missä &lt;code&gt;parseConfig&lt;/code&gt; on määritelty, ja kuka sitä kutsuu?’&lt;/li&gt;
&lt;li&gt;Claude Code, samassa repossa: sama kysymys.&lt;/li&gt;
&lt;li&gt;Codex CLI:ssä, katselmointikoneella, joka ei ole koskaan avannut Cursor-ikkunaa: sama kysymys.&lt;/li&gt;
&lt;li&gt;CI-agentissa, joka puhuu MCP:tä: sama kysymys, samaa isännöityä tilannevedosta vasten.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Jos jokainen pinta rakentaa oman yksityisen indeksinsä, sinulla ei ole yhtä karttaa. Sinulla on useita välimuisteja, jotka ajautuvat erilleen. Editorin indeksi voi olla ajan tasalla levyllä olevalle puulle. CLI-istunto voi olla päivän jäljessä. CI-työ voi katsoa eri checkoutia. Ja agentti kuulostaa silti itsevarmalta.&lt;/p&gt;
&lt;p&gt;Cursor indeksoijan ei ole tarkoitus ratkaista tätä. Koska se elää editorin sisällä, konteksti, jonka se rakentaa, on sitä editoria varten. Lukija, joka tarvitsee myös CLI:n, CI-putken, tai eri editorin, tarvitsee erillisen työkalun näille pinnoille. Se on laajuuden tosiasia, ei puute. Maguyva on se erillinen työkalu.&lt;/p&gt;
&lt;p&gt;Julkaistua kielten määrää Cursor indeksoijalle ei ole ilmoitettu materiaaleissa, joita tämä teksti saa käyttää. Maguyva julkaisee tuen yli 279 kielelle ja tekstipohjaisille teknologioille. Cursor hintoja ei myöskään toisteta tässä; katso heidän hintasivunsa. Maguyva veloittaa työtilaa kohden, ei paikkaa kohden, julkaistuilla hinnoilla $0, $19, $49 ja $149 indeksoidun laajuuden ja työtilan koon mukaan.&lt;/p&gt;
&lt;h2 id=&quot;yksi-isännöity-kartta-jokainen-mcp-asiakasohjelma&quot;&gt;Yksi isännöity kartta, jokainen MCP-asiakasohjelma&lt;/h2&gt;
&lt;p&gt;Maguyva on etäinen MCP-palvelin. Yhdistät GitHub, valitset repositoriot, ja pilviputki rakentaa symbolit, graafin reunat ja järjestetyn kartan. Lisäät API-avaimen jo käyttämäsi asiakasohjelman MCP-asetuksiin. Maguyva on asennusoppaat 24 dokumentoidulle MCP-asiakasohjelmalle — Cursor mukaan lukien — ja se voi yhdistää muihin MCP-yhteensopiviin asiakasohjelmiin, jotka tukevat vakioasetuksia.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://maguyva.ai/fi/for-cursor&quot;&gt;Cursor asennussivu&lt;/a&gt; on editorikohtainen polku, jos siellä työskentelet. Sama palvelin vastaa Claude Code, VS Code, Windsurf, Codex CLI:lle ja muille. Et vaihda editoria. Annat jokaiselle agentille saman työkalupinnan: 11 asiakaskäyttöistä MCP-työkalua haulle, symboleille, riippuvuusanalyysille, tiedostojen haulle, repo-kontekstille ja deterministisille apuohjelmatyönkuluille. Semanttinen, rakenteellinen, graafi- ja tekstihaku sulautuvat järjestetyiksi tuloksiksi.&lt;/p&gt;
&lt;p&gt;Siinä on siirrettävyyden hyöty. Lainaukset, jotka tarkistit Cursor tänä aamuna, ovat samanmuotoisia kuin lainaukset, jotka Codex CLI palauttaa tänä iltana. Tiedostopolku ja rivinumero. Avaa ne. Jos ne ovat väärin, näet sen. Jos ne ovat oikein, seuraavalla muutoksella on paikka laskeutua. Hyväksytty väite on vähemmän hallusinoituja muutoksia, ei lupaus siitä, että jokainen muutos on oikein.&lt;/p&gt;
&lt;p&gt;Tuoreus on julkaistu. Tilannevedokset on aikaleimattu, joten agentti tietää, mitä versiota puusta se lukee. Uudelleenrakennustahti on päivittäinen ilmaisella suunnitelmalla ja tunneittainen maksullisilla suunnitelmilla. Rehellinen rajoitus on synkronoimaton paikallinen työ: muutos, joka on olemassa vain työpuussa, ei ole vielä isännöidyssä kartassa. Tämä rajoitus on sama riippumatta siitä, mistä asiakasohjelmasta kysyt, ja juuri se on pointti. Asiakasohjelmien välinen ajautuminen ei ole enää toinen, piilotettu rajoitus.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://maguyva.ai/fi/docs&quot;&gt;Dokumentaatio&lt;/a&gt; antaa aktivointisilmukan, joka pätee jokaiseen asiakasohjelmaan: indeksoi repo, jonka jo tunnet, yhdistä asiakasohjelma, esitä yksi kysymys, jonka voit varmistaa. Tee se kerran Cursor. Tee se uudelleen siitä CLI:stä, jota oikeasti käytät katselmointipäivinä. Jos molemmat vastaukset lainaavat samaa käsittelijää, kartta todella kulki mukanasi.&lt;/p&gt;
&lt;h2 id=&quot;kuinka-kaksi-karttaa-elävät-rinnakkain&quot;&gt;Kuinka kaksi karttaa elävät rinnakkain&lt;/h2&gt;
&lt;p&gt;Käytä molempia. Ne eivät ole vaihtoehtoja vertailusivun mielessä.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Pidä Cursor indeksoija päällä levyllä olevalle projektille. Anna Exploren, Instant Grepin ja editorin sisäisen agentin käyttää sitä. Tuo silmukka on natiivi ja nopea.&lt;/li&gt;
&lt;li&gt;Lisää Maguyva MCP-palvelimeksi Cursor, jotta sama istunto voi myös kysyä isännöityä työtilan karttaa. Cursor on dokumentoitu Maguyva-asiakasohjelma. Et valitse yhtä indeksiä poistamalla toista.&lt;/li&gt;
&lt;li&gt;Lisää sama Maguyva-palvelin Claude Code, Codex CLI:hin, tai mihin tahansa muuhun MCP-asiakasohjelmaan, joka koskettaa repoa. Yksi API-avaimen muoto. Yksi työtila.&lt;/li&gt;
&lt;li&gt;Jos CI-agentti on MCP-yhteensopiva, osoita se samaan palvelimeen. Se lukee saman aikaleimatun tilannevedoksen, jonka kannettava luki.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Editorin indeksi pysyy parhaana työkaluna kysymykselle ‘mitä levyllä on tässä ikkunassa juuri nyt’. Isännöity kartta on paras työkalu kysymykselle ‘miltä tämä työtila näyttää jokaiselle agentille, joka koskettaa sitä tänään’. Nämä lauseet eivät kilpaile.&lt;/p&gt;
&lt;p&gt;Työtilakiintiöt julkaistaan &lt;a href=&quot;https://maguyva.ai/fi/pricing&quot;&gt;hintasivulla&lt;/a&gt;: repot, indeksoidut rivit ja käyttäjät, laskutettuna työtilaa kohden. Agentit ja ihmiset jakavat saman käyttäjämäärän. Aloita ilmaiseksi repolla, jonka jo osaat arvioida. Nosta työtilaa vasta sen jälkeen, kun lainaukset ovat selvinneet kosketuksesta puun kanssa.&lt;/p&gt;
&lt;h2 id=&quot;mitä-tämä-sivu-ei-väitä&quot;&gt;Mitä tämä sivu ei väitä&lt;/h2&gt;
&lt;p&gt;Se ei väitä, että Cursor indeksoija on heikko, puutteellinen, tai syy vaihtaa editoria. Tämän tekstin ensimmäinen lause sanoo päinvastaista.&lt;/p&gt;
&lt;p&gt;Se ei väitä, että Maguyva korvaa Instant Grepin tai Explore-alaagentin. Ne ovat Cursor ominaisuuksia. Ne pysyvät Cursor.&lt;/p&gt;
&lt;p&gt;Se ei keksi kielten määrää, viivelukua, tai token-säästöä kummallekaan tuotteelle. Tuntemattomat luvut pysyvät julkaisemattomina.&lt;/p&gt;
&lt;p&gt;Se ei teeskentele, että pushaamaton paikallinen työ on isännöidyssä kartassa. Aikaleimatut tilannevedokset tekevät tuon rajoituksen näkyväksi. Ne eivät poista sitä.&lt;/p&gt;
&lt;p&gt;Testi on tavallinen. Indeksoi repo, jonka jo tunnet. Esitä yksi kysymys, jonka voit varmistaa, ensin Cursor, sitten toisessa MCP-asiakasohjelmassa. Konteksti, joka kulkee mukanasi, on sama lainaus molemmissa paikoissa.&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>Kartta ensin, katselmointi sitten</title><link>https://maguyva.ai/fi/blog/map-first-review-second</link><guid isPermaLink="true">https://maguyva.ai/fi/blog/map-first-review-second</guid><description>Ankkuroi koodausagentti repo-karttaan ennen kuin se kirjoittaa. Greptile katselmoi pull requestin jälkeenpäin. Toisiaan täydentävä pari, ei korvaaja.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Kaksi eri tehtävää istuu pull requestin molemmin puolin. Ennen kuin agentti kirjoittaa, se tarvitsee kartan puusta, jota se on muuttamassa. Sen jälkeen, kun agentti avaa PR:n, jonkin pitäisi lukea tuo muutos suhteessa muuhun järjestelmään ja jättää kommentteja, joiden perusteella ihminen voi toimia.&lt;/p&gt;
&lt;p&gt;Nämä tehtävät näyttävät samankaltaisilta etäältä katsottuna, koska molemmat sisältävät ‘koodikannan ymmärtämisen’. Ne eivät ole sama tuote. Toinen vastaa kysymykseen ‘minne tämän muutoksen pitäisi laskeutua?’. Toinen vastaa kysymykseen ‘mitä tämä diffi rikkoi, minkä rivi riviltä tarkistava linter ohittaa?’. Niiden sekoittaminen tuottaa huonomman ensimmäisen luonnoksen ja meluisamman katselmoinnin.&lt;/p&gt;
&lt;p&gt;Tämä teksti on opas yhteiselle työnkululle. Maguyva on kartta, jota agentti kysyy ensin. Greptile on katselmointiagentti, joka kommentoi PR:ää jälkeenpäin. Pari on rakenteeltaan toisiaan täydentävä: Maguyva ei katselmoi pull requesteja, eikä Greptile korvaa kontekstikerrosta, jota agentti käytti niiden kirjoittamiseen.&lt;/p&gt;
&lt;h2 id=&quot;miksi-tämä-jako-on-hyödyllinen&quot;&gt;Miksi tämä jako on hyödyllinen&lt;/h2&gt;
&lt;p&gt;Koodausagentti, joka lähtee liikkeelle koulutuksen ennakko-oletuksista ja muutamasta liitetystä tiedostosta, keksii uskottavan polun ja muokkaa sitä. Se on ‘väärän tiedoston’ epäonnistuminen, ja se on hakuongelma. Maguyva on etäinen MCP-koodikannan kontekstikerros: semanttinen, rakenteellinen (AST), graafi-/riippuvuus- ja tekstihaku sulautuvat järjestetyiksi tuloksiksi, plus symbolihaku ja tiedostojen haku. Perustellut vastaukset palaavat muodossa &lt;code&gt;path/file.ext:line&lt;/code&gt;, joten voit hylätä osuman ennen kuin korjaus on olemassa. Väite pysyy vaatimattomana: vähemmän hallusinoituja muutoksia. Malli voi silti arvata. Vain ensimmäinen askel lakkaa olemasta arvaus.&lt;/p&gt;
&lt;p&gt;Greptile on tekoälypohjainen koodikatselmointiagentti. Omin sanoin se katselmoi automaattisesti jokaisen pull requestin täydellä koodikannan ymmärryksellä, ja asettaa sen vastakkain perinteisten linttereiden kanssa, jotka tarkistavat tiedostoja eristyksissä koko järjestelmän sijaan. Asetus koostuu GitHub- tai GitLab-sovelluksen asentamisesta ja repositorioiden valitsemisesta. Ei paikallista indeksiä, jota sinun pitäisi ylläpitää. Isännöinti on Greptile Cloud (he ilmoittavat SOC 2 Type II -vaatimustenmukaisuudesta, raportti saatavilla pyynnöstä), ja itse isännöity vaihtoehto tarjotaan yrityksille.&lt;/p&gt;
&lt;p&gt;Heidän oma numeroitu kulkunsa on: yhdistä ja rakenna riippuvuusgraafi jokaisesta funktiosta, luokasta ja riippuvuudesta; jokaisella pull requestilla, analysoi muutos käyttäen tätä täyttä repo-graafia ja julkaise löydökset PR-kommentteina ehdotetuilla korjauksilla noin kolmessa minuutissa; jokainen kommentti voi luovuttaa ongelman koodausagentille, jota tiimi jo käyttää. He myös ilmoittavat lukevansa aiempia ihmisten PR-kommentteja ajan mittaan oppiakseen tiimin koodistandardit ja vähentääkseen meluisia ehdotuksia. Heidän oppimisjärjestelmänsä tarvitsee omien sanojensa mukaan 2–3 viikkoa sopeutuakseen.&lt;/p&gt;
&lt;p&gt;Se on katselmointia, ei luonnostelua. Greptilen vahvuus on täyden repo-graafin konteksti muutokseen, joka on jo laskeutunut PR:ään, seurattuna suljetulla silmukalla, joka lähettää löydöksen Claude Code, Codexiin, Conductoriin, Cursor, tai Deviniin. Maguyva vahvuus on järjestetty kartta, jota agentti kysyi ennen kuin se muutos kirjoitettiin. Käytä molempia. Älä pyydä kumpaakaan tekemään toisen työtä.&lt;/p&gt;
&lt;p&gt;Ensimmäisen osapuolen tuoteintegraatiota Maguyva ja Greptilen välillä ei ole ilmoitettu. Et myöskään tarvitse sitä. Maguyva puhuu agentille MCP:n kautta. Greptile puhuu GitHub tai GitLabille oman sovelluksensa kautta. Ne kohtaavat pull requestissa. Ei liimaskriptiä, ei cronia, joka yhdistäisi yhden työkalun toiseen. Pari pärjää ilman bashia, koska jokainen tuote istuu jo pinnalla, joka sille kuuluu.&lt;/p&gt;
&lt;h2 id=&quot;mitä-tämä-ei-ole&quot;&gt;Mitä tämä ei ole&lt;/h2&gt;
&lt;p&gt;Tämä ei ole Greptilen murskaus. Se ei ole ‘vaihda katselmoijaa’ -sivu. Greptile lanseerattiin Hacker Newsissa 5. maaliskuuta 2024 Y Combinator W24 -yrityksenä, ja se ketju on tapa, jolla moni ensin tutustui tuotteeseen. Jos näin löysit heidät, pysy heidän parissaan. Tämä sivu on sen silmukan puuttuva etupuolisko: ankkuroida agentti etukäteen, jotta Greptilen näkemä PR jo tähtää oikeisiin tiedostoihin.&lt;/p&gt;
&lt;p&gt;Greptilen markkinointimateriaali johtaa väitteillä katselmointinopeudesta ja bugien kiinnisaannista. Kohtele niitä Greptilen omina väitteinä, ei riippumattomasti todennettuina lukuina. Tämä teksti ei toista niitä faktoina.&lt;/p&gt;
&lt;p&gt;Kielikattavuus on samanlaista rehellisyyttä. Greptile kehystää tuen kaikkien ohjelmointikielten kattamisena luetellun listan sijaan; tarkkaa lukua ei ilmoiteta. Maguyva julkaisee tuen yli 279 kielelle ja tekstipohjaisille teknologioille, teknisellä jaottelulla (jäsentäjän tukema AST versus pelkkä teksti) sivustolla, kun kysymys on tekninen. Nämä ovat eri tuotteita, jotka tekevät erilaisia väitteitä. Älä sekoita niitä.&lt;/p&gt;
&lt;p&gt;Greptilen hintoja ei ole ilmoitettu materiaaleissa, joita tämä teksti saa käyttää. Maksulliset suunnitelmat ovat olemassa; katso heidän hintasivunsa. Maguyva veloittaa työtilaa kohden, ei paikkaa kohden. Suunnitelmat alkavat ilmaiseksi. &lt;a href=&quot;https://maguyva.ai/fi/pricing&quot;&gt;Hintasivu&lt;/a&gt; listaa julkaistut tasot, jos tarvitset työtilalukuja.&lt;/p&gt;
&lt;h2 id=&quot;työnkulku&quot;&gt;Työnkulku&lt;/h2&gt;
&lt;p&gt;Kolme nimettyä vaihetta. Suorita ne tässä järjestyksessä. Älä ohita yhtäkään niistä ensimmäisellä kerralla, kun kokeilet paria.&lt;/p&gt;
&lt;h3 id=&quot;1-maguyva-konteksti&quot;&gt;1. Maguyva-konteksti&lt;/h3&gt;
&lt;p&gt;Indeksoi yksi repositorio, jonka jo tunnet. Yhdistä MCP-asiakasohjelma, jossa jo kirjoitat — Claude Code, Cursor, Codex CLI, VS Code, Windsurf, tai muu MCP-yhteensopiva asiakasohjelma. Maguyva on asennusoppaat 24 dokumentoidulle MCP-asiakasohjelmalle, ja se voi yhdistää muihin asiakasohjelmiin, jotka tukevat vakio-MCP-asetuksia.&lt;/p&gt;
&lt;p&gt;Esitä kysymys, jonka voit arvioida ennen kuin kukaan kirjoittaa riviäkään. ‘Missä istunnon vanhentuminen käsitellään, ja mikä sitä kutsuu?’ on parempi ensimmäinen siirto kuin ‘korjaa autentikointi’. Vaadi lainauksia. Avaa &lt;code&gt;file.ext:line&lt;/code&gt;-tulokset. Seuraa symbolia. Vahvista riippuvuus, jota olet koskettamassa.&lt;/p&gt;
&lt;p&gt;Maguyva paljastaa 11 asiakaskäyttöistä MCP-työkalua haulle, symboleille, riippuvuusanalyysille, tiedostojen haulle, repo-kontekstille ja deterministisille apuohjelmatyönkuluille. Neljä hakutilaa sulautuvat järjestetyiksi tuloksiksi; &lt;code&gt;find_symbol&lt;/code&gt; on erillinen työkalu, kun jo tiedät nimen. &lt;a href=&quot;https://maguyva.ai/fi/docs&quot;&gt;Dokumentaatio&lt;/a&gt; kuvaa lyhimmän polun: aloita ilmaiseksi, indeksoi repo, jonka jo tunnet, yhdistä asiakasohjelma, esitä sitten yksi kysymys, jonka voit varmistaa.&lt;/p&gt;
&lt;p&gt;Tilannevedokset on aikaleimattu, joten agentti voi kertoa, mitä versiota puusta se lukee. Rehellinen rajoitus on synkronoimaton paikallinen työ. Jos muutos on olemassa vain työpuussa eikä sitä ole pushattu, isännöity kartta ei vielä sisällä sitä. Ohjetiedostot (&lt;code&gt;CLAUDE.md&lt;/code&gt;, &lt;code&gt;AGENTS.md&lt;/code&gt;) kuuluvat yhä tänne, käytännöille ja sille, mitä ei pidä koskea. Ne eivät ole elävä kartta. Käytä niitä käyttäytymiselle. Käytä Maguyva faktoille.&lt;/p&gt;
&lt;p&gt;Älä anna agentin avata PR:ää ennen kuin lainaukset selviävät kosketuksesta repon kanssa. Tuo portti on tämän vaiheen koko pointti.&lt;/p&gt;
&lt;h3 id=&quot;2-agentin-pr&quot;&gt;2. Agentin PR&lt;/h3&gt;
&lt;p&gt;Sama agentti kirjoittaa nyt muutoksen asiakasohjelmassa, josta jo maksat. Maguyva ei ole editori eikä katselmoija. Agentti tuottaa yhä diffin. Avaat yhä pull requestin GitHub tai GitLabissa niin kuin jo teet.&lt;/p&gt;
&lt;p&gt;Mikä pitäisi olla erilaista, on ensimmäinen tiedosto. PR:n pitäisi nimetä käsittelijä, joka todella toteuttaa käyttäytymisen, kutsuja, joka rikkoutuu, ja testi, joka epäonnistuu, jos muutos on väärä. Jos vaihe 1 ohitettiin, vaihe 3 käyttää kommenttinsa muutokseen, joka laskeutui väärään pakettiin. Greptile voi silti löytää systeemisiä ongelmia. Sen ei pitäisi myös joutua toipumaan hallusinoidusta polusta.&lt;/p&gt;
&lt;p&gt;Pidä PR rajattuna. Perusteltu ensimmäinen tiedosto ei ole lupa kirjoittaa moduuli uudelleen. Tämä toisiaan täydentävä pari toimii, kun agentti teki yhden työn kartan kanssa, ja pyysi sitten katselmoijaa tekemään toisen työn rajatulla diffillä.&lt;/p&gt;
&lt;h3 id=&quot;3-greptile-katselmointi&quot;&gt;3. Greptile-katselmointi&lt;/h3&gt;
&lt;p&gt;Greptile on jo yhdistetty repositorioon GitHub- tai GitLab-sovelluksen kautta. Uudella pull requestilla se analysoi muutoksen käyttäen rakentamaansa täyttä repo-graafia, ja julkaisee löydökset kommentteina ehdotetuilla korjauksilla. Heidän omat materiaalinsa asettavat tämän vaiheen noin kolmeen minuuttiin.&lt;/p&gt;
&lt;p&gt;Lue kommentit niin kuin lukisit huolellista tiimikaveria: avaa lainattu sijainti, päätä onko löydös aito, sitten toimi. Missä Greptile tarjoaa ‘Fix with your Agent’, se lähettää ongelman — tiedostopolut, rivinumerot, ehdotetun koodin — Claude Code, Codexiin, Conductoriin, Cursor, tai Deviniin. ‘Fix All’ lähettää kaikki katselmoinnin ongelmat kerralla. He toimittavat myös Greptile MCP:n ja Claude Code -laajennuksen tälle luovutukselle. Maguyva ei ole tuolla nimetyllä kohdelistalla; se poissaolo ei ole ongelma. Maguyva on jo tehnyt työnsä vaiheessa 1. Koodausagentti, joka kirjoitti PR:n, on se, jonka pitäisi vastaanottaa korjauksen hyötykuorma.&lt;/p&gt;
&lt;p&gt;Odota melua ensimmäiset 2–3 viikkoa, kun Greptilen oppimisjärjestelmä sopeutuu kommentteihin, joita tiimisi oikeasti jättää. Se on heidän ilmoittama aikataulunsa, ei parin puute. Ihmisen katselmointi pysyy silmukassa. Greptile on automatisoitu ensimmäinen kierros, ei yhdistämispainike.&lt;/p&gt;
&lt;p&gt;Jos Greptile-kommentti osoittaa tiedostoon, jota agentti ei koskaan kysynyt vaiheessa 1, se on hyödyllinen signaali. Joko kartta jätti kutsujan väliin, tai agentti ohitti lainauksen. Korjaa luonnos kommentin mukaan. Älä poista katselmoijaa käytöstä.&lt;/p&gt;
&lt;h2 id=&quot;kuinka-pitää-tämä-täydentävyys-rehellisenä&quot;&gt;Kuinka pitää tämä täydentävyys rehellisenä&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Maguyva aina ensin. Väärän tiedoston PR:n katselmointi on silti väärän tiedoston katselmointia.&lt;/li&gt;
&lt;li&gt;Greptile aina jälkeen. Hyvin lainatussa luonnoksessa on silti tarve koko järjestelmän tason diffin lukemiselle.&lt;/li&gt;
&lt;li&gt;Älä pyydä Maguyva julkaisemaan PR-kommentteja. Se ei tee sitä.&lt;/li&gt;
&lt;li&gt;Älä pyydä Greptileä olemaan agentin ensimmäinen hakukerros, kun se vielä valitsee polkua. Se ei ole työ, johon heidän GitHub- tai GitLab-sovelluksensa on kytketty.&lt;/li&gt;
&lt;li&gt;Älä keksi bash-putkea, joka ‘synkronoi’ ne. PR on rajapinta.&lt;/li&gt;
&lt;li&gt;Varmenna molemmat puolet itsenäisesti. Indeksoi repo, jonka jo tunnet. Esitä yksi kysymys, jonka voit varmistaa. Avaa sitten pieni PR ja lue, mitä Greptile todella kommentoi.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Silmukka on tavallinen heti kun sille annetaan nimi. Kartta ensin. Agentin PR. Katselmointi jälkeen. Jokainen tuote pysyy sillä pull requestin puolella, jossa se on hyvä.&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>Anna AI-agentille konteksti suuresta repositoriosta ilman paikallista indeksoijaa</title><link>https://maguyva.ai/fi/blog/large-repo-context-without-a-local-indexer</link><guid isPermaLink="true">https://maguyva.ai/fi/blog/large-repo-context-without-a-local-indexer</guid><description>Kuinka antaa koodausagentille kyseltävä kartta suuresta repositoriosta pilvestä, ilman että ajat paikallista indeksoijaa kannettavallasi.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Suuri repositorio ei mahdu kontekstiikkunaan, ja jos olet koskaan osoittanut kannettavan indeksoijan oikeaan monorepoon, tiedät, ettei se mahdu mukavasti sinnekään — RAM-muisti ampaisee ylös, ensimmäinen indeksointi kestää tunnin, ja agenttisi silti aloittaa seuraavan istunnon arvaamalla, mitkä tiedostot ovat tärkeitä.&lt;/p&gt;
&lt;p&gt;Tavallinen vastaus on ajaa indeksoija editorin vierellä, ja repolle, joka mahtuu mukavasti yhdelle koneelle, se on hyvä vastaus. Jos monorepoosi indeksoituu jo nopeasti Cursor ja se on ainoa paikka, jossa tarvitset karttaa, tällä tekstillä ei ole mitään lisättävää — ohita se.&lt;/p&gt;
&lt;p&gt;Tämä teksti käsittelee toista tapausta — kun agentti tarvitsee kyseltävän kartan suuresta repositoriosta, etkä halua ajaa paikallista indeksoijaa saadaksesi sen.&lt;/p&gt;
&lt;h2 id=&quot;milloin-paikallinen-indeksoija-on-väärä-työkalu&quot;&gt;Milloin paikallinen indeksoija on väärä työkalu&lt;/h2&gt;
&lt;p&gt;Paikallinen indeksi olettaa, että koodi elää koneella, joka sitä kysyy, ja todellisessa monorepo-mittakaavassa tämä oletus kiristyy jo yhden editorin sisälläkin. Repo on yksinkertaisesti isompi kuin haluat pitää ‘lämpimänä’ kannettavalla: työskentelet yhdessä paketissa, kun vaikutusalue on kolme hakemistoa kauempana, ja kahden miljoonan rivin puun ensimmäinen kylmä indeksointi ei ole jotain, minkä haluat kokea kahdesti — ei omalla koneellasi eikä CI-suorittimella, joka ei ole koskaan aiemmin kloonannut sitä puuta. Tai tiimikaverin pitäisi pystyä kyselemään samaa karttaa kuin sinä, odottamatta oman koneensa raivaavan tiensä läpi saman indeksin.&lt;/p&gt;
&lt;p&gt;Mikään näistä ei ole syy heittää hyvää editorin indeksoijaa pois. Se on syy myös omistaa isännöity kartta, jota kuka tahansa agenteistasi voi kysyä MCP:n kautta.&lt;/p&gt;
&lt;p&gt;Ja mittakaavaongelma menee syvemmälle kuin ‘liikaa tiedostoja liitettäväksi’. Suurella puulla mielenkiintoinen kysymys on lähes koskaan ‘näytä minulle tämä tiedosto’ — se on mikä tiedosto, mikä symboli, ketkä kutsujat, mitkä testit. Agentti, joka aloittaa listaamalla &lt;code&gt;src/&lt;/code&gt; ja lukemalla kolme ensimmäistä tulosta, ohittaa iloisesti käsittelijän kohteessa &lt;code&gt;apps/api&lt;/code&gt; ja generoidun asiakasohjelman kohteessa &lt;code&gt;packages/sdk&lt;/code&gt;. Tarvitset haun, joka on rakennettu koko puusta, sitten järjestetty, sitten lainattu.&lt;/p&gt;
&lt;h2 id=&quot;mitä-suuren-repon-konteksti-oikeasti-tarkoittaa&quot;&gt;Mitä ‘suuren repon konteksti’ oikeasti tarkoittaa&lt;/h2&gt;
&lt;p&gt;Tiedostojen tyhjentäminen promptiin ei ole kontekstia — se on pienempi, huonompi kopio puusta. Mitä agenttisi oikeasti tarvitsee, on kysymysten esittäminen ja lainattujen vastausten saaminen takaisin: missä tämä symboli on määritelty ja kuka sitä kutsuu, mikä riippuu moduulista, jota olen muuttamassa, mikä testitiedosto kattaa tämän käyttäytymisen, ja miltä puu näyttää &lt;em&gt;nyt&lt;/em&gt;, ei viime vuosineljänneksellä.&lt;/p&gt;
&lt;p&gt;Näiden vastausten pitää tulla indeksistä, joka on rakennettu repostasi eikä mallin muistista muiden repoista, ja indeksin pitää elää jossain agentin kontekstiikkunan ulkopuolella. Tälle ongelmalle sen pitäisi elää myös jossain kannettavasi ulkopuolella.&lt;/p&gt;
&lt;p&gt;Vielä yksi asia, jota ohjetiedostot eivät voi tehdä puolestasi: &lt;code&gt;CLAUDE.md&lt;/code&gt; ja &lt;code&gt;AGENTS.md&lt;/code&gt; ovat oikea paikka käytännöille ja käyttäytymiselle, mutta ne eivät ole elävä, järjestetty, kyseltävä kartta kahden miljoonan rivin puusta. Käytä sääntöjä käyttäytymiselle; käytä repo-älyä faktoille.&lt;/p&gt;
&lt;h2 id=&quot;rakennamme-kartan-pilvessä-kyselemme-sitä-miltä-tahansa-asiakasohjelmalta&quot;&gt;Rakennamme kartan pilvessä, kyselemme sitä miltä tahansa asiakasohjelmalta&lt;/h2&gt;
&lt;p&gt;Maguyva on etäinen MCP-koodikannan kontekstikerros. Yhdistät GitHub, valitset repositoriosi, ja voit lähteä, kun pilviputket jäsentävät puun, rakentavat symbolit ja graafin reunat, ja ylläpitävät järjestettyä karttaa — ei koskaan paikallista indeksoijaa.&lt;/p&gt;
&lt;p&gt;Kun pushaat koodia, muuttuneet tiedostot jäsennetään inkrementaalisesti, ja graafi- ja rankingkerrokset rakennetaan uudelleen aikataulun mukaan: päivittäin ilmaisella suunnitelmalla, tunneittain maksullisilla. Jokainen tilannevedos on aikaleimattu, joten agenttisi voi kertoa, mitä versiota puusta se lukee. Rehellinen rajoitus tässä on synkronoimaton paikallinen työ — muutos, joka on olemassa vain työpuussasi, ei koskaan pushattu, ei ole vielä isännöidyssä kartassa.&lt;/p&gt;
&lt;p&gt;Sitten yhdistät minkä tahansa asiakasohjelman, jota jo käytät, lisäämällä API-avaimen sen MCP-asetuksiin. Asennusoppaita on 24 dokumentoidulle MCP-asiakasohjelmalle, ja mikä tahansa muu MCP-yhteensopiva asiakasohjelma, joka tukee vakioasetuksia, voi myös yhdistää. Jos Cursor on kotisi, &lt;a href=&quot;https://maguyva.ai/fi/for-cursor&quot;&gt;Cursor-sivu&lt;/a&gt; kulkee sen polun; sama palvelin vastaa Claude Code, VS Code, Windsurf, Codex CLI:lle ja muille.&lt;/p&gt;
&lt;p&gt;Et vaihda editoria. Annat agentillesi työkalupinnan — 11 MCP-työkalua haulle, symboleille, riippuvuusanalyysille, tiedostojen haulle ja repo-kontekstille — kattaen yli 279 kieltä ja tekstipohjaisia teknologioita, mikä merkitsee enemmän kuin luulet monorepossa, joka lakkasi olemasta yksi kieli vuosia sitten.&lt;/p&gt;
&lt;p&gt;Vastaukset palaavat perusteltuina, tiedostopolkuina rivinumeroineen. Semanttinen, rakenteellinen, graafi- ja tekstihaku sulautuvat järjestetyiksi tuloksiksi, joten kysymys kuten ‘mikä riippuu parseConfigista’ ei anna sinulle grep-tulostetta eikä yhtä semanttista katkelmaa, vaan sen kourallisen paikkoja, jotka todella merkitsevät.&lt;/p&gt;
&lt;h2 id=&quot;konkreettinen-ohje&quot;&gt;Konkreettinen ohje&lt;/h2&gt;
&lt;p&gt;Älä aloita indeksoimalla koko yritystä. Tässä on polku, joka toimii:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Valitse yksi repositorio, jonka jo tunnet hyvin — paketti, jonka voit arvioida käsin, on arvokkaampi kuin suurin puu, joka sinulla on.&lt;/li&gt;
&lt;li&gt;Aloita ilmaiseksi: 3 repoa, 50 000 indeksoitua riviä, kaikki 11 työkalua, ei kuukausittaista kyselykiintiötä. Jos edustava repository on tätä suurempi, &lt;a href=&quot;https://maguyva.ai/fi/pricing&quot;&gt;hintasivu&lt;/a&gt; listaa työtilatasot ($0, $19, $49, $149) indeksoidun laajuuden mukaan — ei paikkojen määrän mukaan.&lt;/li&gt;
&lt;li&gt;Yhdistä GitHub ja odota, että ensimmäinen indeksointi valmistuu. Et käännä mitään paikallisesti.&lt;/li&gt;
&lt;li&gt;Yhdistä MCP-asiakasohjelma — muutama rivi asetuksia. Maguyva on etäinen MCP-palvelin, joten liitännäisiä, laajennuksia tai toista omaksuttavaa editoria ei ole.&lt;/li&gt;
&lt;li&gt;Esitä yksi kysymys, jonka voit varmistaa. ‘Mikä riippuu parseConfigista?’ tai ‘Missä kirjautumisistunnon vanhentuminen käsitellään?’ Avaa sitten lainatut &lt;code&gt;file.ext:line&lt;/code&gt;-tulokset ja tarkista ne edessäsi olevaa puuta vasten.&lt;/li&gt;
&lt;li&gt;Vasta sen jälkeen, kun lainaukset selviävät tästä kosketuksesta, annat agentin muokata.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Jos ensimmäinen repo sopii hyvin ja puusi on suuri, nosta työtilaa vastaamaan indeksoituja rivejäsi ja uudelleenrakennustahtia. Ihmiset ja agentit jakavat saman käyttäjämäärän — Maguyva veloittaa työtilaa kohden, ei paikkaa kohden — joten kolmannen agentin lisääminen silmukkaan ei maksa sinulle mitään.&lt;/p&gt;
&lt;p&gt;Aktivointitesti on sama, jota &lt;a href=&quot;https://maguyva.ai/fi/docs&quot;&gt;dokumentaatio&lt;/a&gt; suosittelee jokaiselle ensimmäiselle ajolle: indeksoi repo, jonka jo tunnet, esitä yksi kysymys, jonka voit varmistaa. Suuri repo ei muuta testiä; se vain tekee väärästä ensimmäisestä tiedostosta kalliimman.&lt;/p&gt;
&lt;h2 id=&quot;mitä-seurata-yhdistämisen-jälkeen&quot;&gt;Mitä seurata yhdistämisen jälkeen&lt;/h2&gt;
&lt;p&gt;Pidä silmällä kolmea asiaa. Tuoreus: maksulliset suunnitelmat rakentuvat uudelleen tunneittain, ilmaiset päivittäin, eikä pushaamaton paikallinen työ näy kartassa — se on kompromissi, jonka teet. Laajuus: indeksoi edustava joukko repoja, ei jokaista arkistoitua forkkia; ilmainen taso on tarkoituksella mitoitettu selvittämään, kannattaako vastauksia säilyttää. Ja varmennus: suuren repon kartta, joka ei voi lainata polkuja ja rivinumeroita, on vain hitaampi arvauskone, joten anna agenttisi näyttää paikka ennen kuin se toimittaa korjauksen.&lt;/p&gt;
&lt;p&gt;Aja sitten sama testi, jonka ajaisit pienelle repolle. Indeksoi repo, jonka jo tunnet. Esitä yksi kysymys, jonka voit varmistaa. Jos kartta on aito, agenttisi lakkaa aloittamasta kylmästä puusta.&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>Miksi AI-koodausagenttisi hallusinoi tiedostopolkuja</title><link>https://maguyva.ai/fi/blog/why-ai-coding-agents-hallucinate-file-paths</link><guid isPermaLink="true">https://maguyva.ai/fi/blog/why-ai-coding-agents-hallucinate-file-paths</guid><description>AI-koodausagentit keksivät tiedostopolkuja, kun niillä ei ole aitoa karttaa repositoriosta. Tässä miksi se tapahtuu, ja miten ankkurointi johtaa vähemmän hallusinoituihin muutoksiin.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Merkki ei ole väärä funktion runko. Se on itsevarma muutos tiedostoon, jota ei ole olemassa, tai tiedostoon, joka on olemassa mutta ei ole se, joka toteuttaa käyttäytymisen.&lt;/p&gt;
&lt;p&gt;Pyysit korjausta istunnon vanhentumiseen. Agentti avasi &lt;code&gt;src/auth/session.ts&lt;/code&gt;. Se polku on uskottava. Se on myös väärä. Aito käsittelijä elää kohteessa &lt;code&gt;apps/api/src/middleware/expiry.ts&lt;/code&gt;, uudelleennimetty kaksi refaktorointia sitten. Agentti ei valehdellut sinulle. Se täydensi polun muotoisen merkkijonon koulutuksen ennakko-oletusten ja kontekstiikkunassa jo olleen perusteella.&lt;/p&gt;
&lt;p&gt;Tämä on tavallinen epäonnistumismalli oikealla repositoriolla. Malli osaa kirjoittaa koodia. Virhe on väärän paikan valitsemisessa sen kirjoittamiseen.&lt;/p&gt;
&lt;h2 id=&quot;miksi-agentit-keksivät-polkuja&quot;&gt;Miksi agentit keksivät polkuja&lt;/h2&gt;
&lt;p&gt;Koodausagentti on seuraavan tokenin ennustemalli työkaluineen. Kun sanot ‘korjaa istunnon vanhentuminen’, sen täytyy nimetä tiedosto ennen kuin se voi lukea tai korjata mitään. Jos sillä ei jo ole ankkuroitua karttaa, se rakentaa polun:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Nimeämiskäytännöistä, joita se on nähnyt muissa repositorioissa. &lt;code&gt;src/auth/session.ts&lt;/code&gt; on yleinen muoto.&lt;/li&gt;
&lt;li&gt;Tiedostoista, jotka ovat jo keskustelussa, jotka saattavat olla niitä, jotka liitit viime viikolla, eivät niitä, jotka ovat tärkeitä nyt.&lt;/li&gt;
&lt;li&gt;Hakemistolistauksista, jotka se sattui ajamaan, epätäydellisiä suurella puulla.&lt;/li&gt;
&lt;li&gt;Ohjetiedostoista. &lt;code&gt;CLAUDE.md&lt;/code&gt; ja &lt;code&gt;AGENTS.md&lt;/code&gt; kertovat agentille, miten käyttäytyä. Ne eivät ole elävä indeksi symboleista, kutsujista, tai nykyisistä poluista.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Mikään näistä lähteistä ei ole kartta tästä repositoriosta, tänään. Malli täyttää aukon samalla tavalla kuin se täyttää minkä tahansa aukon: korkean todennäköisyyden jatkumolla. Se jatkumo näyttää usein aidolta polulta. Joskus tiedosto on olemassa ja sijaitsee oikean vieressä. Joskus se oli olemassa haarassa, joka yhdistettiin viime kuussa. Joskus sitä ei ole koskaan ollut.&lt;/p&gt;
&lt;p&gt;Grep ei pelasta sinua tässä, jos agentti ei koskaan etsi oikeaa merkkijonoa. Agentti arvasi polun, luki sitten mitä se polku palautti, muokkasi sitten sitä. Ensimmäinen väärä askel oli polku, ei korjaus.&lt;/p&gt;
&lt;p&gt;Tiedostojen lukeminen ei myöskään ole sama asia kuin oikeiden löytäminen. Claude Code, Cursor, Codex, ja vastaavat työkalut voivat avata mitä tahansa, mihin osoitat ne. Kysymys on, löytävätkö ne luotettavasti oikeat tiedostot, tärkeät symbolit, riippuvuudet, testit, ja vaikutusalueen ennen muokkaamista. Tiedostoihin pääsy ilman karttaa alkaa silti arvauksella.&lt;/p&gt;
&lt;h2 id=&quot;väärän-tiedoston-muokkaaminen-on-hakuongelma&quot;&gt;Väärän tiedoston muokkaaminen on hakuongelma&lt;/h2&gt;
&lt;p&gt;Kohtele keksittyä polkua hakuosumana, ei luonteen puutteena.&lt;/p&gt;
&lt;p&gt;Jos agentin pitäisi palauttaa &lt;code&gt;path/file.ext:line&lt;/code&gt; ennen kuin sen sallitaan muokata, kaksi asiaa tapahtuisi. Ensinnäkin voisit avata lainauksen ja hylätä työn kymmenessä sekunnissa. Toiseksi agentin pitäisi kysyä jotain, joka todella tuntee puun.&lt;/p&gt;
&lt;p&gt;Se on koodikannan kontekstikerroksen työ. Pelkkä semanttinen haku ei riitä. Katkelma, joka ‘kuulostaa istunnon vanhentumiselta’, voi silti laskeutua vanhentuneeseen pakettiin. Tarvitset myös tarkan tekstin, kun tiedät merkkijonon, symbolihaun, kun tiedät nimen, rakenteellisen haun, kun tiedät muodon, ja riippuvuusgraafin, kun tarvitset kutsujia ja vaikutusalueen.&lt;/p&gt;
&lt;p&gt;Maguyva on se kerros MCP-yhteensopiville koodausagenteille. Se ei ole editori. Claude Code, Cursor, Codex CLI, VS Code, Windsurf, ja muut MCP-asiakasohjelmat pysyvät siellä, missä ne ovat. Agentti kysyy järjestettyä karttaa ennen kuin se koskee riviä.&lt;/p&gt;
&lt;p&gt;Väite on tarkoituksella vaatimaton: vähemmän hallusinoituja muutoksia. Maguyva ei riistä mallilta kykyä arvata. Se muuttaa oletusarvoisen ensimmäisen askeleen ‘keksi uskottava polku’ -askeleesta ‘pyydä järjestettyjä, lainattuja sijainteja’ -askeleeksi.&lt;/p&gt;
&lt;h2 id=&quot;miltä-perusteltu-vastaus-näyttää&quot;&gt;Miltä perusteltu vastaus näyttää&lt;/h2&gt;
&lt;p&gt;Hyödyllinen vastaus kysymykseen ‘missä istunnon vanhentuminen käsitellään’ ei ole kappale. Se on lyhyt lista sijainneista:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;apps/api/src/middleware/expiry.ts:48&lt;/code&gt; - käsittelijä&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apps/web/src/lib/auth-client.ts:112&lt;/code&gt; - kutsuja&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apps/api/tests/expiry.test.ts:20&lt;/code&gt; - testi, joka epäonnistuu, jos muutos on väärä&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Voit avata nämä rivit. Jos ne ovat väärin, pysähdyt. Jos ne ovat oikein, agentti voi muokata. Varmennus on pointti, ei iskulause.&lt;/p&gt;
&lt;p&gt;Maguyva paljastaa 11 asiakaskäyttöistä MCP-työkalua haulle, symboleille, riippuvuusanalyysille, tiedostojen haulle, repo-kontekstille ja deterministisille apuohjelmatyönkuluille. Neljä hakutilaa (semanttinen, rakenteellinen, graafi/riippuvuus, ja teksti) sulautuvat järjestetyiksi tuloksiksi; symbolihaku on erillinen MCP-työkalu (&lt;code&gt;find_symbol&lt;/code&gt;). Perustellut vastaukset palaavat tiedostopolkuineen ja rivinumeroineen, joten voit arvioida niitä edessäsi olevaa puuta vasten.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://maguyva.ai/fi/docs&quot;&gt;Dokumentaatio&lt;/a&gt; kuvaa lyhimmän polun: aloita ilmaiseksi, indeksoi repo, jonka jo tunnet, yhdistä asiakasohjelma, esitä sitten yksi kysymys, jonka voit varmistaa.&lt;/p&gt;
&lt;h2 id=&quot;silmukka-joka-muuttaa-ensimmäisen-muutoksen&quot;&gt;Silmukka, joka muuttaa ensimmäisen muutoksen&lt;/h2&gt;
&lt;p&gt;Et tarvitse uutta työnkulun uskontoa. Tarvitset yhden ylimääräisen askeleen ennen ensimmäistä kirjoitusta.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Esitä kysymys, jonka jo voit arvioida. ‘Mikä koodi käsittelee kirjautumisen ja istunnon vanhentumisen?’ on parempi kuin ‘korjaa autentikointi’.&lt;/li&gt;
&lt;li&gt;Vaadi lainauksia. Tiedostopolku ja rivinumero, ei yhteenvetoa ‘autentikointimoduulista’.&lt;/li&gt;
&lt;li&gt;Avaa lainatut tiedostot. Seuraa symbolia. Vahvista riippuvuus, jota olet koskettamassa.&lt;/li&gt;
&lt;li&gt;Vasta silloin annat agentin korjata.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Jos vaihe 2 ei palauta mitään hyödyllistä, agentilla ei ole oikeutta improvisoida polkua. Se etsii uudelleen, tai sinä osoitat sen. Juuri tämä yksi portti on se, mikä tuottaa vähemmän hallusinoituja muutoksia. Malli on sama malli. Kartta on se, mikä on muuttunut.&lt;/p&gt;
&lt;p&gt;Ohjetiedostot ovat yhä tärkeitä. Säilytä ne. Käytä niitä käytännöille, katselmointisäännöille, ja sille, mitä ei pidä koskea. Älä pyydä niitä olemaan indeksi. &lt;code&gt;CLAUDE.md&lt;/code&gt;, joka listaa kolme tärkeää hakemistoa, vanhenee viikko paketin jakamisen jälkeen. Kyseltävä kartta päivittyy, kun repo päivittyy.&lt;/p&gt;
&lt;p&gt;Sukua oleva epäonnistuminen on lähes oikea tiedosto: agentti avaa &lt;code&gt;auth.ts&lt;/code&gt;, kun käyttäytyminen elää kohteessa &lt;code&gt;auth-client.ts&lt;/code&gt;, tai korjaa generoidun tiedoston lähteen sijaan, tai muokkaa kopiota kohteessa &lt;code&gt;packages/legacy&lt;/code&gt;, koska nimi täsmäsi. Lainaukset eivät tee näistä virheistä mahdottomia. Ne tekevät ne näkyviksi ennen kuin diffi laskeutuu.&lt;/p&gt;
&lt;h2 id=&quot;mitä-kartta-ei-ratkaise-puolestasi&quot;&gt;Mitä kartta ei ratkaise puolestasi&lt;/h2&gt;
&lt;p&gt;Ole selväpäinen siitä, mitä saat. Perusteltu kartta ei tee jokaisesta muutoksesta oikeaa — agenttisi voi silti kirjoittaa huonon korjauksen täsmälleen oikeaan tiedostoon. Jos koodikantasi nojaa dynaamiseen lähetykseen, refleksioon, tai monkey-patchingiin, jotkin symbolihaut palaavat laihempina kuin toivoisit, koska sitä ajonaikainen epäsuoruus tekee mille tahansa staattiselle indeksille. Ja jos toivot prosenttilukua — ‘hallusinoidut polut vähentyneet X%’ — et löydä sitä täältä, koska kukaan ei voi rehellisesti mitata sitä lukua repollesi paitsi sinä itse.&lt;/p&gt;
&lt;p&gt;Mitä voit odottaa, on kapeampaa ja hyödyllisempää: agentti lakkaa aloittamasta muutoksiaan arvatulla polulla. Tuo ensimmäinen askel ankkuroituu aitoon karttaan, ja siitä vähemmän hallusinoidut muutokset tulevat. Kaikki lainauksen jälkeen — diffin lukeminen, korjauksen arvioiminen — on yhä sinun työtäsi, niin kuin se aina on ollut.&lt;/p&gt;
&lt;p&gt;Testi ei maksa sinulle juuri mitään: indeksoi repo, jonka jo tunnet, ja esitä yksi kysymys, jonka voit varmistaa. Aloita polulla, jonka takia sinua on jo poltettu. Jos lainaukset ovat väärin, näet sen heti. Jos ne ovat oikein, agenttisi seuraavalla muutoksella on parempi paikka laskeutua.&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>Miksi päivitimme koodihaun malliin voyage-4-large</title><link>https://maguyva.ai/fi/blog/upgrading-code-search-to-voyage-4-large</link><guid isPermaLink="true">https://maguyva.ai/fi/blog/upgrading-code-search-to-voyage-4-large</guid><description>Siirsimme koodiupotuksemme malliin voyage-4-large — joka on tällä hetkellä julkisen RTEB-koodinoutoranking­listan kärjessä. Rehellinen versio: kompromissi, jonka teemme, mitä todella indeksoimme ja miksi maksamme premium-upotuksista.</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Tämän postauksen vertailuarvoluvut heijastavat RTEB-ranking-listoja julkaisuhetkellä (kesäkuu 2026). Ranking-listat liikkuvat; kohtele sijoituksia hetkellisenä otoksena, ei pysyvänä tosiasiana.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Semanttinen haku on vain niin hyvä kuin sen alla olevat upotukset.&lt;/p&gt;
&lt;p&gt;Kun agentti kysyy Maguyvalta “missä käsittelemme uudelleenyrityksiä”, se ei grep-hae sanaa “retry”. Se kysyy &lt;em&gt;merkitystä&lt;/em&gt; — uudelleenyritysten odotussilmukkaa, katkaisijaa, epävakaata kutsua ympäröivää käsittelylogiikkaa. Tuohon kysymykseen vastaa vektorimalli, joka muuttaa koodin pisteeksi avaruudessa ja löytää naapurit. Valitse parempi malli, ja jokainen semanttinen kysely tuotteessa terävöityy hiljaa.&lt;/p&gt;
&lt;p&gt;Joten muutimme omaamme. Kesäkuusta 2026 alkaen Maguyvan koodiupotukset ajetaan mallilla &lt;strong&gt;&lt;code&gt;voyage-4-large&lt;/code&gt;&lt;/strong&gt;, joka korvaa mallin &lt;code&gt;voyage-code-3&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;vertailutesti&quot;&gt;Vertailutesti&lt;/h2&gt;
&lt;p&gt;Emme tehneet tätä päätöstä fiiliksellä. Julkinen &lt;a href=&quot;https://embedding-benchmark-rteb.hf.space/code&quot;&gt;Retrieval Embedding Benchmark (RTEB)&lt;/a&gt; rankkaa upotusmalleja todellisilla noutotehtävillä, ja sen &lt;strong&gt;Code&lt;/strong&gt;-ranking-listalla &lt;code&gt;voyage-4-large&lt;/code&gt; istuu sijalla &lt;strong&gt;#1 kokonaisuudessaan (90,86)&lt;/strong&gt; — edellä mallia &lt;code&gt;gemini-embedding-2-preview&lt;/code&gt; (90,26) ja huomionarvoisesti edellä mallia, jota jo käytimme, &lt;code&gt;voyage-code-3&lt;/code&gt; (89,73, #3).&lt;/p&gt;
&lt;p&gt;Se on pieni absoluuttinen ero. Mutta se on ero oikeaan suuntaan, julkisessa vertailutestissä, juuri sillä tehtävällä, josta välitämme: koodin noutaminen merkityksen perusteella.&lt;/p&gt;
&lt;h2 id=&quot;kompromissi-jonka-hyväksymme-binäärikvantisointi&quot;&gt;Kompromissi, jonka hyväksymme: binäärikvantisointi&lt;/h2&gt;
&lt;p&gt;Tässä on osa, jonka useimmat “päivitimme mallimme” -postaukset jättävät pois.&lt;/p&gt;
&lt;p&gt;Maguyva ei tallenna täystarkkoja vektoreita. Tallennamme &lt;strong&gt;binäärikvantisoituja&lt;/strong&gt; upotuksia: jokainen 2048-ulotteinen vektori kutistuu 2048-bittiseksi allekirjoitukseksi — &lt;strong&gt;256 tavua per vektori&lt;/strong&gt;. Näitä allekirjoituksia haetaan Hamming-etäisyydellä, indeksoituna ja osioituna vuokralaisittain.&lt;/p&gt;
&lt;p&gt;Se on tarkoituksellinen kompromissi. Binäärikvantisointi luopuu jonkin verran noutotarkkuudesta vastineeksi dramaattisesti pienemmästä tallennustilasta ja nopeasta, halvasta etäisyyslaskennasta ilman erillistä vektoritietokantaa operoitavaksi. Tuotteelle, joka indeksoi kokonaisia repositorioita per työtila, nämä kustannushyödyt merkitsevät enemmän kuin viimeisen vertailuarvopisteen murto-osan puristaminen.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;voyage-4-large&lt;/code&gt; sopii tähän suunnitteluun pakottamatta tallennuskerroksen migraatiota: se tuottaa 2048-ulotteisen tulosteen, saman kuin &lt;code&gt;voyage-code-3&lt;/code&gt;, joten &lt;code&gt;bit(2048)&lt;/code&gt;-sarakkeemme ja Hamming-hakupolku eivät muuttuneet. Malli parani, skeema pysyi paikallaan.&lt;/p&gt;
&lt;h2 id=&quot;koodi-oli-vasta-alku&quot;&gt;Koodi oli vasta alku&lt;/h2&gt;
&lt;p&gt;Maguyva on koodiälytyökalu. Mutta olemme myös oma ensimmäinen asiakkaamme, ja osoitamme sen johonkin muuhun: markdowniin, joka elää repositorioissamme koodin vieressä. Arkkitehtoniset päätöstietueet, toimintaohjeet, sopimukset, talous- ja käytäntödokumentit — kaikki versionhallinnassa Gitissä, kaikki saman MCP-palvelimen takana, semanttinen indeksi &lt;em&gt;dokumenttien&lt;/em&gt;, ei vain lähdekoodin, yli.&lt;/p&gt;
&lt;p&gt;Juuri siksi voyage-4-largen laajuus merkitsee. Samalla RTEB-ranking-listaperheellä se on &lt;strong&gt;#1 taloudessa, #1 terveydenhuollossa ja #1 kokonaistekstinoudossa&lt;/strong&gt; — edellä Googlen Gemini Embeddingiä, Coheren Embed v4:ää ja OpenAI:n text-embedding-3-largea. (Voyage on RTEB:n yhteisluoja, joten luemme sen vahvana julkisena signaalina emmekä täysin neutraalina tuomarina — mutta se on vertailtu suoraan jokaista suurta kaupallista mallia vastaan yksityisillä hold-out-aineistoilla.) Sama indeksi, joka löytää agentille oikean funktion, löytää oikean lausekkeen sopimuksesta tai oikean rivin käytännöstä — ja näillä toimialueilla voyage-4-large ei ole kompromissi, se on johtaja.&lt;/p&gt;
&lt;h2 id=&quot;miksi-maksamme-premium-upotuksista&quot;&gt;Miksi maksamme premium-upotuksista&lt;/h2&gt;
&lt;p&gt;On halvempi tapa tehdä hakua, ja suuri osa siitä on ilmaista. Leksikaalinen haku — BM25 ja sen sukulaiset — täsmää avainsanoja, toimii paikallisesti eikä maksa mitään. Avoimen lähdekoodin upotusmallit kuten BGE, Nomic ja embeddinggemma antavat aidosti &lt;em&gt;kelvollisen&lt;/em&gt; semanttisen noudon, ja voit isännöidä niitä itse GPU:n hinnalla. Maguyva käyttää myös ilmaista puolta: jokainen kysely yhdistää teksti-, AST-, graafi- ja semanttisen haun. Se, mistä emme säästä, on semanttinen kerros.&lt;/p&gt;
&lt;p&gt;Maksamme tokenia kohti premium-upotuksista — &lt;code&gt;voyage-4-large&lt;/code&gt; — sen sijaan että isännöisimme itse ilmaista mallia, kahdesta syystä. Ensinnäkin pelkkä avainsanahaku ei osaa vastata kysymykseen “missä käsittelemme uudelleenyrityksiä”, kun koodi sanoo &lt;code&gt;backoff&lt;/code&gt; ja &lt;code&gt;circuit breaker&lt;/code&gt; eikä koskaan sanaa “retry” — merkitys on koko upotuksen pointti, ja toimialueilla, joita palvelemme, avoimet mallit jäävät jälkeen premium-malleista: pari pistettä jäljessä yleistekstissä ja vielä enemmän jäljessä kapeissa alueissa kuten koodi, sopimukset ja talous. Toiseksi kokemuksemme mukaan noudon laatu muovaa lopullista vastausta enemmän kuin toisessa päässä oleva malli — vahva agentti, jolle annetaan väärä konteksti, vastaa silti väärin, eikä se koskaan näe dokumenttia, jota sille ei koskaan annettu.&lt;/p&gt;
&lt;p&gt;Joten premium-upotukset ovat tokenikohtainen lasku, joka skaalautuu jokaisen indeksoimamme repositorion ja dokumentin mukana — ja maksamme sen tarkoituksella. Tuloksesta, jonka käyttäjämme saavat, oikeasta funktiosta tai oikeasta lausekkeesta, ajattelemme tuon kompromissin olevan sen arvoinen.&lt;/p&gt;
&lt;h2 id=&quot;rehellinen-osa&quot;&gt;Rehellinen osa&lt;/h2&gt;
&lt;p&gt;Voyagen oma dokumentaatio yhä merkitsee mallin &lt;code&gt;voyage-code-3&lt;/code&gt; koodioptimoiduksi malliksi. Miksi siis vaihtaa?&lt;/p&gt;
&lt;p&gt;Koska luimme julkisen vertailutestin, emme vain vendorin mallitaulukkoa, ja vertailutesti asetti mallin &lt;code&gt;voyage-4-large&lt;/code&gt; kärkeen koodin noudossa. Tämä oli eteenpäin katsova päätös: ottaa uudempi, yleisesti vahvempi malli ja validoida se julkista ranking-listaa vasten tehtävillä, jotka merkitsevät. Olemme tyytyväisiä tuon vedon tekemiseen, koska todistusaineisto on laaja — voyage-4-large ei voita vain koodissa, se johtaa myös taloudessa, terveydenhuollossa ja kokonaisnoudossa.&lt;/p&gt;
&lt;h2 id=&quot;huomaamaton-perusta&quot;&gt;Huomaamaton perusta&lt;/h2&gt;
&lt;p&gt;Jokainen tarjoamamme työkalu — semanttinen haku, tehtäväkontekstin kerääminen, perusteltu (grounded) kysymys-vastaus — pohjautuu lopulta noutoon. Kun noutokone paranee, toisessa päässä oleva agentti saa parempaa todistusaineistoa, tekee vähemmän vääriä käänteitä ja ankkuroi vastauksensa oikeaan koodiin — tai oikeaan lausekkeeseen, tai oikeaan käytäntöön. Terävämpi upotusmalli ei ole hohdokas ominaisuus. Se on kaiken muun perusta, ja juuri vahvistimme sitä. Et huomaa sitä. Se on pointti.&lt;/p&gt;
</content:encoded><category>Embeddings</category><category>Search</category><category>Architecture</category></item><item><title>Kielituen rekursiivinen parantaminen: koodiälyn hiominen noin 280 kielessä</title><link>https://maguyva.ai/fi/blog/autonomous-quality-loops-language-grind</link><guid isPermaLink="true">https://maguyva.ai/fi/blog/autonomous-quality-loops-language-grind</guid><description>Tuemme koodiälyä noin 280 kielelle. Kukaan ihminen ei pysty auditoimaan sitä käsin. Siksi rakensimme kielituen rekursiivisen parannussilmukan — pistokoe, LLM tuomarina, korjaa yksi asia, validoi uudelleen — ja ajamme sitä eristettyjen agenttien parvella, kunnes poiminta on todella oikein, ei vain vihreä.</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Tämän postauksen luvut heijastavat järjestelmää julkaisuhetkellä (toukokuu 2026). Katso &lt;a href=&quot;https://maguyva.ai/fi/team&quot;&gt;tiimisivumme&lt;/a&gt; ajantasaiset luvut.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Maguyva poimii symboleita, viittauksia ja riippuvuusgraafin lähdekoodista noin 280 kielessä. Jokainen kieli on räätälöity tree-sitter-käsittelijä — kyselyt, heuristiikat, reunatapaukset — ja jokainen käsittelijä voi olla hienovaraisesti väärässä omalla tavallaan. Metodikutsu, joka on merkitty lukuviittaukseksi. Funktio, joka on liitetty väärään ympäröivään näkyvyysalueeseen. Suhde, jota ei yksinkertaisesti ole olemassa.&lt;/p&gt;
&lt;p&gt;Sitä ei voi auditoida käsin. Mikään tiimi ei pysty lukemaan poimintatulosteita 280 kieliopin yli ja havaitsemaan huonoja reunoja. Joten kiinnostava kysymys ei ole “onko poimintamme oikein” — se on “miten &lt;em&gt;otat selvää&lt;/em&gt;, että se on väärin, tässä laajuudessa, ilman ihmistä jokaisessa silmukassa”. Vastauksemme on kielituen rekursiivinen parantaminen: laatusilmukka, jota ajavat kieliagentit, LLM tuomarina, ja yksi sääntö, jonka opimme yhä uudelleen: vihreä ei ole sama kuin oikein.&lt;/p&gt;
&lt;h2 id=&quot;vihreä-ei-ole-oikein&quot;&gt;Vihreä ei ole oikein&lt;/h2&gt;
&lt;p&gt;Jokaisella kielellä on fixture-sarja, ja julkaisuportti pisteyttää sen viidellä ulottuvuudella — tarkkuus, rakenteellinen eheys, kattavuus, laatu ja suorituskyky. Kieli menee &lt;strong&gt;VIHREÄKSI&lt;/strong&gt; vain, kun sen fixtureilla precision ≥ 0.95, recall ≥ 0.99 ja F1 ≥ 0.97, vähintään 20 odotetulla reunalla tilastollista luottamusta varten. Sen alapuolella se on KELTAINEN tai PUNAINEN, eikä sitä julkaista.&lt;/p&gt;
&lt;p&gt;Tuo portti on välttämätön muttei riittävä. Fixturet validoivat vasten fixtureita, jotka &lt;em&gt;me itse kirjoitimme&lt;/em&gt;. Ne koodaavat tapaukset, jotka jo keksimme. Käsittelijä voi olla virheetön fixtureillaan ja silti sotkea kuvion, joka näkyy vain oikeassa koodissa — makro-idiomi, geneerisesti rajoitettu metodi, kielipiirre, jolle kukaan ei kirjoittanut fixturea. VIHREÄ tarkoittaa, että fixturet menevät läpi. Se ei tarkoita, että oikea repositorio poimitaan siististi. Joten silmukan täytyy jättää fixturet taakseen ja tarkastella oikeiden projektien koodia.&lt;/p&gt;
&lt;h2 id=&quot;sisäsilmukka-pistokoe-tuomari-korjaa-todista&quot;&gt;Sisäsilmukka: pistokoe, tuomari, korjaa, todista&lt;/h2&gt;
&lt;p&gt;Ydinsilmukka ajaa yhtä kieltä kerrallaan:&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;Muutama asia saa tämän toimimaan sen sijaan että se rimpuilisi paikallaan.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tuomari on agentti, ei API-kutsu.&lt;/strong&gt; Kun sanomme “LLM tuomarina”, tarkoitamme, että kieliagentti itse lukee jokaisen otetun reunan todellista lähdekoodia vasten ja luokittelee sen kiinteällä viisikategorisella luokitusperusteella: onko tämä reuna oikea, väärä positiivinen, oikea suhde väärällä tyypillä, kiinnitetty väärään laajuuteen vai kantaako se väärää metadataa? Tuo luokitusperuste on ratkaiseva — “23 %:n virhesuhde” on merkityksetön, kunnes tiedät, ovatko ne todellisia vikoja vai tuomarin väärinlaskentaa.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Korjaa yksi asia, sitten todista se.&lt;/strong&gt; Jokainen iteraatio muuttaa täsmälleen yhden muokattavan resurssin, ajaa sitten uudelleen kiinteää testikehystä vasten ja pitää muutoksen vain, jos F1 paranee ja uudelleenluokittelu näyttää paremmalta. Jos ei, se peruutetaan. Ei erää spekulatiivisia muokkauksia, ei “pitäisi olla parempi”. Muutos ansaitsee paikkansa tai se poistetaan. Ja kun korjaus jää pysyväksi, se ylennetään fixture-sarjaan — jotta korjattu bugi ei koskaan voi hiljaa palata. Tuo ylennysaskel on se, mikä tekee silmukasta &lt;em&gt;rekursiivisen&lt;/em&gt; eikä vain toistuvan: jokainen kierros vahvistaa oraakkelia, jota vasten seuraava kierros validoi.&lt;/p&gt;
&lt;h2 id=&quot;opetus-jonka-opimme-yhä-uudelleen-metriikat-liioittelevat-ongelmia&quot;&gt;Opetus, jonka opimme yhä uudelleen: metriikat liioittelevat ongelmia&lt;/h2&gt;
&lt;p&gt;Tässä on ansa, johon kävelimme suoraan. Toissijaiset korpusmetriikat — kuinka usein poimitulla kohteella ei ole symbolia, johon viittaus voidaan yhdistää, kuinka moni symboli näyttää “orvolta” ja niin edelleen — liioittelevat ongelmien määrää valtavasti. Ne ovat enimmäkseen &lt;em&gt;paradigma-artefakteja&lt;/em&gt;, eivät bugeja.&lt;/p&gt;
&lt;p&gt;Selkein esimerkki: &lt;code&gt;llvm&lt;/code&gt; näytti kerran 73 %:n “lähde-ilman-symbolia”-suhteen ja leimattiin katastrofaaliseksi. Kaivauduimme asiaan. Todellinen tarkkuus oli &lt;strong&gt;98,5 %&lt;/strong&gt;. “Puuttuvat symbolit” olivat lähes kaikki kelvollisia ulkoisia viittauksia — kutsuja standardikirjastoon, frameworkeihin, koodiin, joka elää repositorion ulkopuolella. Metriikka mittasi kielen ominaisuutta, ei käsittelijän vikaa. Kielet kuten Zig, COBOL ja Odin näyttävät 65–70 %:n “orpo”-suhteita ja ovat täysin oikein; COBOLissa ei ollut yhtäkään todellista virhettä.&lt;/p&gt;
&lt;p&gt;Jos olisimme antaneet noiden lukujen ohjata työtä, olisimme käyttäneet viikkoja “korjaamassa” käsittelijöitä, jotka olivat jo oikein, ja jättäneet huomiotta kielet, joissa oli hiljaisia, todellisia bugeja. Johtopäätös on suora: aggregaattimetriikat ovat parhaimmillaankin karkea priorisointisignaali. &lt;strong&gt;Todellinen laatusignaali on pistokoe reunaluokituksella&lt;/strong&gt; — todellisten reunojen tarkastelu todellisissa repositorioissa ja niiden arvioiminen yksitellen. Dataa intuition sijaan, mutta vasta kun tiedät, mikä data kertoo totuuden.&lt;/p&gt;
&lt;h2 id=&quot;ulkosilmukka-parvi-ei-maraton&quot;&gt;Ulkosilmukka: parvi, ei maraton&lt;/h2&gt;
&lt;p&gt;Yksi kieli kerrallaan veisi ikuisuuden 280 kielen yli, joten sisäsilmukka on kääritty ulkosilmukkaan, joka ajaa monia rinnakkain.&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;Jokainen agentti työskentelee kertakäyttöisessä worktreessä, jotta ne eivät voi astua toistensa varpaille. Orkestraattori integroi niiden korjaukset yksi kerrallaan, jokainen täyden manifestin regressiotarkistuksen takana: muutos, joka auttaa omaa kieltään mutta hiljaa rikkoo kolme muuta, ei mene läpi. Integraatio on portitettu ja vahvistettu ennen kuin mitään työnnetään — regressioportti päättää, mikä on &lt;em&gt;turvallista&lt;/em&gt;, ihminen päättää yhä, mikä &lt;em&gt;julkaistaan&lt;/em&gt;. Sitten agenttijoukko siirtyy seuraaviin kieliin ja koko homma ajetaan uudelleen.&lt;/p&gt;
&lt;h2 id=&quot;mikä-on-yhä-epätäydellistä&quot;&gt;Mikä on yhä epätäydellistä&lt;/h2&gt;
&lt;p&gt;Tuomari voi olla väärässä, ja virheillä on tietty suunta: agentti, joka ajaa liian vähällä kontekstilla, &lt;em&gt;liioittelee ongelmien määrää&lt;/em&gt;. Yhdessä erässä kahdeksan kieltä merkittiin 5–20 %:n virheelle; tarkastuksessa vain yhdessä oli todellinen kielikohtainen bugi — loput olivat tuomarin virheitä, jotka johtuivat kielen omien semantiikkojen huomiotta jättämisestä (yksi lähderivi, joka voi kelvollisesti tuottaa useita reunoja, parametrien sidonnat mallinnettuina sijoituksina, viittaus-per-tunniste-kielet). Siksi otamme näytteitä kahdella siemenellä ja ristiintarkistamme, ja siksi tuomarin ja fixturejen välinen erimielisyys käsitellään &lt;em&gt;kiinnostavimpana&lt;/em&gt; signaalina, ei ratkaistuna tuomiona — joskus fixture on se, joka on väärässä.&lt;/p&gt;
&lt;p&gt;Olemme myös rehellisiä tavoitteen suhteen. Tavoite on nolla todellista virhettä, piste — mutta “nolla” on suunta, jota kohti hiomme kieli kerrallaan, ei laatikko, joka rastitetaan. Aina on toinen repositorio toisella idiomilla.&lt;/p&gt;
&lt;h2 id=&quot;ansaittua-ei-väitettyä&quot;&gt;Ansaittua, ei väitettyä&lt;/h2&gt;
&lt;p&gt;Kaikki, mitä Maguyva tekee agentin puolesta — symbolin löytäminen, riippuvuuden jäljittäminen, kysymykseen vastaaminen viitatulla koodilla — lepää sen varassa, että alla oleva poiminta on oikein. 280 kielen yli “oikein” ei voida väittää; se täytyy jatkuvasti &lt;em&gt;ansaita&lt;/em&gt; oikeaa koodia vasten. Silmukka on se, miten ansaitsemme sen: autonominen pistokoe-ja-korjaa-sykli, joka suhtautuu omiin metriikoihinsa epäluuloisesti, todistaa jokaisen muutoksen ja muuttaa jokaisen korjauksen suojaksi seuraavaa regressiota vastaan. Se ei ole hohdokasta. Se on työtä, joka antaa meille mahdollisuuden sanoa “tuemme kieltäsi” ja tarkoittaa sitä. Vihreä on helppoa. Oikein on ansaittua.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Languages</category><category>Agents</category></item><item><title>Monimodaalinen fuusiohaku: oikean hakukoneen valinta jokaiselle kyselylle</title><link>https://maguyva.ai/fi/blog/multi-modal-fusion-search</link><guid isPermaLink="true">https://maguyva.ai/fi/blog/multi-modal-fusion-search</guid><description>Kysely kuten &quot;missä parseConfig on määritelty&quot; haluaa erilaisen haun kuin &quot;miten todennus toimii&quot;. Maguyva luokittelee tarkoituksen, painottaa neljää hakumodaliteettia sen mukaisesti ja yhdistää tulokset painotetulla Reciprocal Rank Fusionilla.</description><pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Huomautus historiallisesta suunnittelusta: tämä huhtikuun 2026 artikkeli kuvaa silloista reitityssuunnitelmaa, ei nykyistä oletustoimintaa. Alla oleva syyskuun korjaus koskee vain mittausväitettä. Nykyinen reititys, esiasetukset ja hakutapojen suorat valinnat esitellään sivulla &lt;a href=&quot;https://maguyva.ai/fi/docs/how-it-works&quot;&gt;Näin se toimii&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Hakukysely ei ole yksi asia.&lt;/p&gt;
&lt;p&gt;“missä &lt;code&gt;parseConfig&lt;/code&gt; on määritelty” haluaa tarkan symbolin — yhden täsmällisen sijainnin, nopeasti. “miten todennus toimii” haluaa merkityksen — liittyvän koodin levittäytymän, joka selittää käsitteen. “mitä hajoaa, jos muutan tätä funktiota” haluaa riippuvuusgraafin. “etsi merkkijono &lt;code&gt;ECONNREFUSED&lt;/code&gt;” haluaa kirjaimellisen osuman, ei mitään nokkelaa.&lt;/p&gt;
&lt;p&gt;Grep on erinomainen kirjaimellisiin osumiin ja hyödyllinen joissakin viittausmetsästyksissä, mutta se ei ole riippuvuusgraafi eikä ymmärrä merkitystä. Upotukset kattavat semanttisen puolen, mutta ne ovat väärä työkalu tarkoille merkkijonoille ja vaikutusanalyysille. Useimmat koodihakutyökalut valitsevat yhden moottorin ja pakottavat jokaisen kyselyn elämään sen valinnan kanssa. Maguyva ei sitoudu yhteen moottoriin. Se selvittää, minkälainen kysymys esitit, ja sekoittaa sitten neljä hakukonetta suhteessa, jonka kysymys ansaitsee.&lt;/p&gt;
&lt;h2 id=&quot;neljä-modaliteettia&quot;&gt;Neljä modaliteettia&lt;/h2&gt;
&lt;p&gt;Konepellin alla on neljä riippumatonta tapaa löytää koodia:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;semanttinen&lt;/strong&gt; — vektorihaku Voyage-binääriupotusten yli; löytää koodia merkityksen perusteella.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;teksti&lt;/strong&gt; — trigrammivastaavuus; löytää literaalit, virhemerkkijonot, tarkat tunnisteet.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;rakenteellinen&lt;/strong&gt; — AST-kyselyt; löytää määrittelyt, allekirjoitukset ja kielirakenteet.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;graafi&lt;/strong&gt; — riippuvuusgraafi; löytää kutsujat, kutsuttavat ja vaikutusalueen.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Jokainen on vahva erilaisessa kysymysluokassa. Temppu on päättää, kuinka paljon kuhunkin hakutapaan luotetaan käsiteltävän kyselyn kohdalla.&lt;/p&gt;
&lt;h2 id=&quot;tarkoituksen-luokittelu&quot;&gt;Tarkoituksen luokittelu&lt;/h2&gt;
&lt;p&gt;Ennen minkään haun ajamista kevyt luokitin lajittelee kyselyn yhteen kuudesta tarkoituksesta, luottamuspisteellä. Se on tarkoituksella halpa — järjestettyjä heuristiikkoja, ensimmäinen osuma voittaa — koska se ajetaan usein käytetyllä suorituspolulla ja lisää vain millisekunnin tai pari:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;alkaa sanoilla &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; (luottamus 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;lainausmerkeissä oleva &lt;code&gt;&quot;string&quot;&lt;/code&gt; tai virhetunniste kuten &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;&lt;code&gt;CamelCase&lt;/code&gt;- tai &lt;code&gt;snake_case&lt;/code&gt;-tunniste → &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;mikään ei täsmää → &lt;strong&gt;understand_code&lt;/strong&gt;, matala luottamus (0.40)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Jokaisella tarkoituksella on painoprofiili neljän modaliteetin yli. Nämä ovat todelliset luvut:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tarkoitus&lt;/th&gt;
&lt;th&gt;semanttinen&lt;/th&gt;
&lt;th&gt;teksti&lt;/th&gt;
&lt;th&gt;rakenteellinen (AST)&lt;/th&gt;
&lt;th&gt;graafi&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;Joten “missä &lt;code&gt;parseConfig&lt;/code&gt; on määritelty” nojaa vahvasti ASTiin (0.6). “miten todennus toimii” nojaa semanttisiin vektoreihin (0.5). “mikä on riippuvainen tästä” on lähes kokonaan graafia (0.7). “etsi &lt;code&gt;ECONNREFUSED&lt;/code&gt;” on lähes kokonaan trigrammia (0.9), upotusmallin ollessa kokonaan pois päältä — koska semanttinen samankaltaisuus on juuri väärä työkalu tarkalle merkkijonolle.&lt;/p&gt;
&lt;h2 id=&quot;nopea-polku-ja-yhdistetty-polku&quot;&gt;Nopea polku ja yhdistetty polku&lt;/h2&gt;
&lt;p&gt;Kun luokitin on varma — pisteet ≥ 0.85 — ja kysely on tavallinen, Maguyva ohittaa fuusion kokonaan ja reitittää suoraan yhteen hallitsevaan modaliteettiin. “missä X on määritelty” ei tarvitse neljää hakukonetta; se tarvitsee AST-indeksin, heti. Tuo suora polku raportoidaan takaisin nimellä &lt;code&gt;fusion_strategy: &quot;direct&quot;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Kaikki epäselvä kulkee fuusion läpi. Neljä (tai kolme, oletusesiasetuksella) modaliteettia ajetaan rinnakkain, kukin palauttaen oman järjestetyn listansa, ja yhdistämme ne.&lt;/p&gt;
&lt;h2 id=&quot;painotettu-reciprocal-rank-fusion&quot;&gt;Painotettu Reciprocal Rank Fusion&lt;/h2&gt;
&lt;p&gt;Heterogeenisten hakukoneiden yhdistäminen on vaikeampaa kuin miltä kuulostaa: kosinisamankaltaisuus 0.82 ja trigrammipisteet 137 ja graafin keskeisyys 0.004 eivät ole samalla asteikolla, joten niitä ei voi vain laskea yhteen. Reciprocal Rank Fusion kiertää ongelman heittämällä pois raakapisteet ja säilyttämällä vain kunkin moottorin antaman &lt;strong&gt;sijoituksen&lt;/strong&gt;. Tuloksen panos yhdestä modaliteetista on:&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;jossa &lt;code&gt;rank&lt;/code&gt; on sen sijainti kyseisen modaliteetin listalla ja &lt;code&gt;k&lt;/code&gt; on tasoituskonstantti. Panokset summataan yli modaliteettien mille tahansa tulokselle, jonka useampi kuin yksi moottori löysi — hakukoneiden välinen yksimielisyys nousee luonnollisesti pintaan. Käytämme &lt;strong&gt;k = 40&lt;/strong&gt; oletusesiasetuksella ja 60 &lt;code&gt;thorough&lt;/code&gt;:ssä (&lt;code&gt;quick&lt;/code&gt; ajaa vain semanttisen haun, joten fuusio ei koskaan käynnisty siellä). Alkuperäinen RRF-työ päätyi arvoon k = 60 yleiskäyttöiselle haulle; oletusasetuksemme painottaa hieman enemmän tuloksia, jotka sijoittuvat korkealle useassa modaliteetissa — emmekä suosittele sen käsivaraista säätämistä.&lt;/p&gt;
&lt;p&gt;Tämän lisäksi tulokset kantavat &lt;strong&gt;graafin tärkeyden korotusta&lt;/strong&gt;. Solmupisteen — funktion, johon koko koodikanta nojaa — pitäisi sijoittua vähemmän tunnetun lehtisolmun edelle jopa samalla tekstuaalisella relevanssilla, joten kerromme jokaisen panoksen luvulla:&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;Keskeisyys tulee putken esilasketuista PageRank/aste-metriikoista, ja korotus rajataan 1.5×:ään, jotta suosittu funktio ei voi täysin peittää alleen relevantimpaa, vähemmän tunnettua funktiota. Lopuksi alennamme tuloksia vendor-, build- ja arkistopoluista ja poistamme duplikaatit siten, että kustakin tiedostosta jää paras katkelma.&lt;/p&gt;
&lt;h2 id=&quot;mikä-on-yhä-epätäydellistä&quot;&gt;Mikä on yhä epätäydellistä&lt;/h2&gt;
&lt;p&gt;Aikeen luokittelija on joukko säännöllisiä lausekkeita, ei koulutettu malli. Se käsittelee tavallisia kyselymuotoja heuristiikoilla, ja monitulkintainen kysely ohjautuu vaihtoehtoon &lt;code&gt;understand_code&lt;/code&gt; sekä semantiikkaa painottavaan yhdistelmään. Tämän kirjoituksen aiempi versio kuvasi tuloksettomien hakujen osuuden laskun noin 15 prosentista alle 5 prosenttiin saavutetuksi. Joulukuun 2025 ehdotuksessa esitettiin todellisuudessa arvioitu lähtötaso ja tavoite; tueksi ei ole toimitettu kyselyjoukkoa tai mittausraporttia. Perumme väitteen saavutetusta parannuksesta; katso &lt;a href=&quot;https://maguyva.ai/evidence/search-quality.md&quot;&gt;lähdeaineisto ja korjaus&lt;/a&gt;. Emme ole korvanneet luokittelijaa koulutetulla mallilla, koska edullinen versio on nopea ja riittävä sille tarkoitettuun reititystehtävään ja koska virheellinen mutta itsevarma luokittelija on huonompi kuin rehellinen oletusvaihtoehto. Painot ovat käsin valittuja ennakko-oletuksia, eivät opittuja klikkausdatasta, jota emme kerää.&lt;/p&gt;
&lt;h2 id=&quot;esitä-kysymys-ilman-työkalun-valintaa&quot;&gt;Esitä kysymys ilman työkalun valintaa&lt;/h2&gt;
&lt;p&gt;Agentin ei pitäisi joutua tietämään, tarttuuko grepiin, upotuksiin vai kutsugraafiin — sen pitäisi esittää kysymyksensä yksinkertaisin sanoin ja saada oikea vastaus. Monimodaalinen fuusio on se, mikä antaa &lt;code&gt;find_symbol&lt;/code&gt;:n, semanttisen haun ja riippuvuusanalyysin istua yhden kyselyrajapinnan takana: järjestelmä lukee kysymyksen muodon ja kokoaa hiljaa oikean hakukoneen sitä varten. Malli, joka pisteyttää upotukset, merkitsee, mutta niin merkitsee myös tietäminen, milloin &lt;em&gt;ei&lt;/em&gt; käyttää niitä. Oikean työkalun valitseminen jokaiselle kyselylle on omanlaistaan laatua, ja se on sellaista, jonka mieluummin omistamme kuin työnnämme kutsujalle.&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>Agenttien havainnointi: Hookit, Alloy ja Grafana</title><link>https://maguyva.ai/fi/blog/agent-observability-hooks-alloy-grafana</link><guid isPermaLink="true">https://maguyva.ai/fi/blog/agent-observability-hooks-alloy-grafana</guid><description>Kytkimme Claude Code -työkalun ja Codexin samaan Grafana-pinoon OpenTelemetryn ja Alloyn avulla ja käytimme sitten jäljityksiä ja lokeja löytääksemme ja korjataksemme agenttien käyttäytymisongelmat niiden lähteellä.</description><pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Agenttijärjestelmät epäonnistuvat oudoilla tavoilla.&lt;/p&gt;
&lt;p&gt;Joskus malli on ongelma. Joskus työkalu on ongelma. Joskus MCP-palvelimesi on kunnossa, mutta agentti valitsi väärän erikoisosaajan, tai käytti puolet istunnosta shell-työhön, jota et odottanut, tai kasvatti huomaamatta kustannuksia silmukassa, joka näytti ulospäin tuottavalta.&lt;/p&gt;
&lt;p&gt;Jos et näe eroa, et oikeasti operoi agenttijärjestelmää. Arvailet.&lt;/p&gt;
&lt;p&gt;Joten rakensimme havainnointipinon omalle työnkulullemme: Claude Code, Codex, Claude-hook-tapahtumat, Codex-notify-tapahtumat, natiivi OpenTelemetry, Grafana Alloy ja toisella puolella Grafana Cloud.&lt;/p&gt;
&lt;p&gt;Mielenkiintoinen osa ei ole “teimme kojelaudan”. Mielenkiintoinen osa on se, että meidän piti jakaa telemetria kahteen eri virtaan, koska mikään yksittäinen syöte ei antanut meille koko kuvaa.&lt;/p&gt;
&lt;h2 id=&quot;ongelma-agenttien-telemetria-on-pirstoutunutta&quot;&gt;Ongelma: agenttien telemetria on pirstoutunutta&lt;/h2&gt;
&lt;p&gt;Modernit koodausagentit lähettävät jo jonkin verran telemetriaa. Se auttaa, mutta ei riitä.&lt;/p&gt;
&lt;p&gt;Natiivi OTEL osaa vastata hyvin kysymyksiin kuten:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kuinka monta pyyntöä teimme?&lt;/li&gt;
&lt;li&gt;Kuinka paljon istunto maksoi?&lt;/li&gt;
&lt;li&gt;Missä jäljitykset (spans ja traces) ovat?&lt;/li&gt;
&lt;li&gt;Kasvoiko viive äkillisesti?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Se on paljon huonompi vastaamaan kysymyksiin kuten:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mihin MCP-palvelimeen agentti nojasi?&lt;/li&gt;
&lt;li&gt;Oliko epäonnistuminen &lt;code&gt;Bash&lt;/code&gt;:ssa, sisäänrakennetussa tiedostotyökalussa vai MCP-kutsussa?&lt;/li&gt;
&lt;li&gt;Mikä taito oikeasti aktivoitui?&lt;/li&gt;
&lt;li&gt;Minkä tyyppinen alaagentti lähetettiin?&lt;/li&gt;
&lt;li&gt;Tekikö istunto hyödyllistä työtä vai rimpuiliko se vain paikallaan?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tuo toinen kysymysluokka elää lähempänä hookeja kuin jäljityksiä.&lt;/p&gt;
&lt;p&gt;Mutta myös käänteinen pätee: jotkin tärkeimmistä suorituskykykysymyksistä elävät lähempänä jäljityksiä kuin hookeja.&lt;/p&gt;
&lt;p&gt;Jos haluat tietää, mihin viive todella kertyi, mitkä spanit olivat hitaita tai poltettiinko istunnossa aikaa mallikutsuihin vai työkalujen suoritukseen, tarvitset jäljitysdataa semanttisten tapahtumien lisäksi.&lt;/p&gt;
&lt;h2 id=&quot;arkkitehtuuri-johon-päädyimme&quot;&gt;Arkkitehtuuri, johon päädyimme&lt;/h2&gt;
&lt;p&gt;Ajamme kahta telemetriapolkua rinnakkain.&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;Tuo jako on tarkoituksellinen.&lt;/p&gt;
&lt;p&gt;Se on myös epäsymmetrinen. Claude Code antaa meille paljon rikkaamman elinkaari-hookien rajapinnan. Codex antaa meille natiivin OTEL:in plus notify-rajapinnan, joten normalisoimme vähemmän yksityiskohtaiset keskusteluvuoron päättymistapahtumat samaan lokiskeemaan sen sijaan että teeskentelisimme molempien ajoympäristöjen paljastavan samat säätimet.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Natiivi OTEL&lt;/strong&gt; antaa meille perusvirran: lokit ja jäljitykset itse ajoympäristöstä sekä metriikat siellä, missä ajoympäristö niitä todella lähettää.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hook- ja notify-tapahtumat&lt;/strong&gt; antavat meille semanttisen kerroksen: asioita kuten &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;, ja luokitellun metadatan, josta oikeasti välitämme agenttien käyttäytymistä vianetsittäessä. Claude Code antaa tässä rikkaamman tapahtumavirran. Codex antaa vähemmän yksityiskohtaisen mutta silti hyödyllisen normalisoidun virran.&lt;/p&gt;
&lt;h2 id=&quot;miksi-hookit-ylipäätään-ovat-olemassa&quot;&gt;Miksi hookit ylipäätään ovat olemassa&lt;/h2&gt;
&lt;p&gt;Hook-putkemme rikastaa tapahtumat ennen kuin ne osuvat Lokiin.&lt;/p&gt;
&lt;p&gt;Sen sijaan että vain sanoisimme “työkalu ajettiin”, luokittelemme tapahtuman kenttiin kuten:&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;: mikä MCP-taustajärjestelmä käsitteli kutsun&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bash_cli&lt;/code&gt;: shell-komennon perhe&lt;/li&gt;
&lt;li&gt;&lt;code&gt;subagent_type&lt;/code&gt;: minkälainen erikoisosaaja lähetettiin&lt;/li&gt;
&lt;li&gt;&lt;code&gt;agent_tool&lt;/code&gt;: oliko lähde Claude Code vai Codex&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Se tarkoittaa, että voimme kysyä operatiivisesti merkityksellisiä kysymyksiä:&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;Ne eivät ole turhia kenttiä. Ne ovat ero sen välillä, että “agentti tuntui hitaalta” ja sen välillä, että “agentti käytti viimeiset kymmenen minuuttia shell-painotteisiin git-operaatioihin, joissa työkalujen epäonnistumisaste oli korkea”.&lt;/p&gt;
&lt;p&gt;Yksi toteutusyksityiskohta, joka näyttää oudommalta kuin onkaan: jaettu Loki-virta käyttää yhä &lt;code&gt;service_name=&quot;claude-code-hooks&quot;&lt;/code&gt;:ta tunnisteena silloinkin, kun tapahtuma tuli Codexista. Todellinen jako ajoympäristöjen välillä tapahtuu kentässä &lt;code&gt;agent_tool&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;miksi-alloy-istuu-keskellä&quot;&gt;Miksi Alloy istuu keskellä&lt;/h2&gt;
&lt;p&gt;Grafana Alloy ei ole tässä asetelmassa vain edelleenlähettäjä. Se on kohta, jossa telemetrian käsittelysäännöt pannaan täytäntöön.&lt;/p&gt;
&lt;p&gt;Ohjaamme Claude Coden ja Codexin natiivin OTEL-virran paikalliseen Alloy-proxyyn osoitteessa &lt;code&gt;localhost:4318&lt;/code&gt; ja annamme sitten Alloyn siivota hyötykuorman ennen sen edelleenlähetystä Grafana Cloudiin.&lt;/p&gt;
&lt;p&gt;Se merkitsee, koska raaka agenttitelemetria on täynnä korkean kardinaliteetin kenttiä, jotka ovat hyödyllisiä analyysille mutta kauheita indeksoituina tunnisteina:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;session_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;prompt_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;token-määrät&lt;/li&gt;
&lt;li&gt;kestot&lt;/li&gt;
&lt;li&gt;työkalun parametriblobit&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Jos indeksoit kaiken, saat tunnisteräjähdyksen ja huonon päivän.&lt;/p&gt;
&lt;p&gt;Joten Alloy tekee meille kolme asiaa:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Pitää hyvin pienen joukon matalan kardinaliteetin tunnisteita indeksoituna.&lt;/li&gt;
&lt;li&gt;Siirtää meluisat mutta hyödylliset kentät rakenteelliseen metadataan.&lt;/li&gt;
&lt;li&gt;Pudottaa puhtaan kohinan kokonaan.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Tärkeä idea on yksinkertainen: &lt;strong&gt;havainnoi enemmän, indeksoi vähemmän&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;miksi-hook-virta-ohittaa-alloyn&quot;&gt;Miksi hook-virta ohittaa Alloyn&lt;/h2&gt;
&lt;p&gt;Hook-virta on jo muotoiltu Lokia varten.&lt;/p&gt;
&lt;p&gt;Siihen mennessä, kun &lt;code&gt;send_event.py&lt;/code&gt; työntää tapahtuman, olemme jo päättäneet, mitkä kentät ansaitsevat tunnistekohtelun ja mitkä kuuluvat rakenteelliseen JSON-runkoon. Tuo virta menee suoraan Grafana Cloudin OTLP-yhdyskäytävään ilman toista kierrosta Alloyn kautta.&lt;/p&gt;
&lt;p&gt;Järjestelmässä on siis selkeä työnjako:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Alloy&lt;/strong&gt; kesyttää raa’an natiivin OTEL-virran.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hook-rikastus&lt;/strong&gt; tekee semanttisista tapahtumista kyselykelpoisia.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Se pitää arkkitehtuurin yksinkertaisempana kuin yrittää pakottaa kaikki yhden polun läpi.&lt;/p&gt;
&lt;h2 id=&quot;mitä-kojelauta-oikeasti-näyttää&quot;&gt;Mitä kojelauta oikeasti näyttää&lt;/h2&gt;
&lt;p&gt;Alla oleva kuvakaappaus on yksi agenttityönkulkumme takana olevista havainnointikojelaudoista. Se ei ole vertailuarvo, ja luvut ovat vain hetkellinen siivu. Pointti on datan muoto: aktiviteettivirta, työkalukutsut, epäonnistumiset, kehotteet ja jaottelut agentin, sisäänrakennettujen työkalujen, MCP-käytön, shell-komentojen ja taitojen mukaan.&lt;/p&gt;
&lt;p&gt;Hyödyllinen osa on se, että tämä kojelauta elää samassa Grafana-pinossa kuin muu agenttitelemetria. Voimme suodattaa lähdeagentin ja työkaluperheen mukaan ja tarkastella eri ajoympäristöjä rakentamatta erillistä havainnointiratkaisua jokaiselle järjestelmälle.&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;Avaa observability-kojelaudan kuvakaappaus täydessä resoluutiossa&quot;
  &gt;
    &lt;img
      src=&quot;https://maguyva.ai/blog/agent-observability-dashboard.png&quot;
      alt=&quot;Grafana-kojelauta, joka näyttää agenttityönkulun toimintasyötteen, työkalukutsujen määrät, epäonnistumiset ja kehotteet sekä erittelyt agenttien, sisäänrakennettujen työkalujen, MCP-käytön, CLI-komentojen ja taitojen mukaan.&quot;
    /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;
    Yksi agenttityönkulkumme takana olevista live-kojelaudoista. Tämä kuvakaappaus on vain yksi siivu jaetusta Grafana-pinosta, joka vastaanottaa telemetriaa myös muista agenttiajoympäristöistämme ja järjestelmistämme. Napsauta kuvaa nähdäksesi täyden resoluution version.
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;miksi-jäljitykset-merkitsevät-enemmän-kuin-ne-aluksi-näyttävät&quot;&gt;Miksi jäljitykset merkitsevät enemmän kuin ne aluksi näyttävät&lt;/h2&gt;
&lt;p&gt;Lokit kertovat, minkä kategorian työtä tapahtui. Jäljitykset kertovat, miten työ eteni ajan myötä.&lt;/p&gt;
&lt;p&gt;Tuo ero merkitsee agenttijärjestelmissä, koska “hidas” on liian epätarkka kuvaus ollakseen hyödyllinen.&lt;/p&gt;
&lt;p&gt;Jäljitys voi kertoa meille, johtuiko ongelma:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;mallin viiveestä&lt;/li&gt;
&lt;li&gt;työkalun suoritusajasta&lt;/li&gt;
&lt;li&gt;toistuvista uudelleenyrityksistä&lt;/li&gt;
&lt;li&gt;yhdestä erityisen kalliista MCP-vuorovaikutuksesta&lt;/li&gt;
&lt;li&gt;pitkästä hännästä pieniä operaatioita, jotka näyttivät erikseen harmittomilta&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Käytännössä käytämme hook-virtaa ja Tempo-jäljityksiä yhdessä.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hook-lokit&lt;/strong&gt; vastaavat: minkälaista asiaa tapahtui?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Jäljitykset&lt;/strong&gt; vastaavat: mihin aika meni?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Yhdistelmä on se, mikä muuttaa havainnoinnin kojelaudasta selitykseksi.&lt;/p&gt;
&lt;h2 id=&quot;mihin-codex-sopii&quot;&gt;Mihin Codex sopii&lt;/h2&gt;
&lt;p&gt;Codex on osa samaa pinoa, mutta se ei ole identtinen Claude Coden kanssa.&lt;/p&gt;
&lt;p&gt;Codexille kytkemme kaksi osaa:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Natiivin OTEL:in Codexista Alloyyn&lt;/li&gt;
&lt;li&gt;Notify-webhookin osoitteeseen &lt;code&gt;codex_notify.py&lt;/code&gt;, joka kartoittaa keskusteluvuorojen päättymiset samaan Loki-skeemaan, jota käytämme hook-tapahtumille&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Se antaa meille yhtenäisen suodattimen kuten &lt;code&gt;agent_tool=&quot;codex-cli&quot;&lt;/code&gt; saman lokivirran sisällä.&lt;/p&gt;
&lt;p&gt;Rehellinen varaus: Codexin notify-hyötykuorma on tällä hetkellä vähemmän yksityiskohtainen kuin Claude Coden hook-hyötykuorma, koska kyseessä ei ole samanlainen integraatiorajapinta. Nykyisessä asetuksessamme Codexin keskusteluvuorojen päättymiset voidaan normalisoida jaettuun skeemaan, mutta yksityiskohtainen työkalukohtainen poiminta on yhä parempi natiivissa OTEL-virrassa kuin notify-sillassa.&lt;/p&gt;
&lt;p&gt;Se ei ole syy välttää tätä postausta. Se on postauksen pointti. Todelliset havainnointijärjestelmät rakennetaan epätäydellisistä signaaleista.&lt;/p&gt;
&lt;h2 id=&quot;grafana-mcpn-kautta-muuttaa-peliä&quot;&gt;Grafana MCP:n kautta muuttaa peliä&lt;/h2&gt;
&lt;p&gt;Suurempi muutos on se, että Grafana ei ole enää vain paikka, jossa ihmiset käyvät selaimessa.&lt;/p&gt;
&lt;p&gt;Tässä repositoriossa paljastamme Grafanan myös MCP:n kautta. Se tarkoittaa, että agentti voi kysellä Lokia, Prometheusta ja Tempoa suoraan sen sijaan, että odottaisi ihmisen tarkastavan kojelaudat käsin ensin.&lt;/p&gt;
&lt;p&gt;Se muuttaa havainnoinnin aktiiviseksi syötteeksi työnkulkuun.&lt;/p&gt;
&lt;p&gt;Agentti voi kysyä:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mitkä työkaluperheet epäonnistuivat eniten viimeisen tunnin aikana?&lt;/li&gt;
&lt;li&gt;Mikä MCP-palvelin hallitsi istuntoa?&lt;/li&gt;
&lt;li&gt;Vähensivätkö viimeaikaiset muutokset työkaluepäonnistumisia vai siirsivätkö ne vain työn shell-painotteisempiin polkuihin samoilla virheillä?&lt;/li&gt;
&lt;li&gt;Mitkä jäljitykset näyttävät suurimman viiveen tai toistuvat uudelleenyritykset?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Kun sinulla on tuo, olet hyvin lähellä itseparannussilmukkaa.&lt;/p&gt;
&lt;h2 id=&quot;kojelaudasta-palautesilmukkaan&quot;&gt;Kojelaudasta palautesilmukkaan&lt;/h2&gt;
&lt;p&gt;Tätä osaa pidämme kiinnostavimpana.&lt;/p&gt;
&lt;p&gt;Kun havainnointipino on kyseltävissä agenttikerroksesta, telemetria lakkaa olemasta passiivinen raportointipinta ja muuttuu ohjaussignaaliksi.&lt;/p&gt;
&lt;p&gt;Silmukka näyttää tältä:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Agentin toiminta lähettää jäljityksiä, metriikoita ja rikastettuja hook-lokeja.&lt;/li&gt;
&lt;li&gt;Grafana tallentaa todisteet Lokiin, Tempoon ja Prometheukseen, missä metriikoita on.&lt;/li&gt;
&lt;li&gt;Agentit kyselevät noita todisteita Grafana MCP:n kautta.&lt;/li&gt;
&lt;li&gt;Järjestelmä tunnistaa huonon työkalusekoituksen, hauraat taidot, heikon reitityksen tai shell-painotteiset työnkulut, jotka jatkavat vältettävien virheiden tuottamista.&lt;/li&gt;
&lt;li&gt;Agentit tai operaattorit säätävät kehotteita, agenttikonfiguraatioita, taitokuvauksia, reitityssääntöjä tai työkalupääsyä.&lt;/li&gt;
&lt;li&gt;Seuraava istunto tuottaa uuden toimintakuvan telemetriaan, ja kierto toistuu.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Näin siirrytään “mielenkiintoisesta kojelaudasta” “mitattavaan parannusjärjestelmään”.&lt;/p&gt;
&lt;p&gt;Tavoite ei ole maksimoida yhtä työkaluluokkaa. Se on löytää oikea sekoitus CLI:tä, sisäänrakennettuja työkaluja, MCP-kutsuja ja taitoja siihen työhön, jota oikeasti tehdään.&lt;/p&gt;
&lt;h2 id=&quot;mihin-tämä-antaa-meille-vastauksen&quot;&gt;Mihin tämä antaa meille vastauksen&lt;/h2&gt;
&lt;p&gt;Kun molemmat ajoympäristöt päätyvät samaan Grafana-pinoon, voimme vastata operatiivisiin kysymyksiin paljon nopeammin:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Keskittyvätkö epäonnistumiset yhteen työkaluperheeseen?&lt;/li&gt;
&lt;li&gt;Luovatko shell-painotteiset työnkulut vältettäviä virheitä, joissa korkeamman tason työkalun pitäisi olla olemassa?&lt;/li&gt;
&lt;li&gt;Mitkä MCP-palvelimet kantavat työtaakan?&lt;/li&gt;
&lt;li&gt;Maksammeko agenttitoiminnasta, joka ei tuota merkityksellistä edistystä?&lt;/li&gt;
&lt;li&gt;Onko istunto epäterve mallin, työkalujen vai orkestrointikerroksen vuoksi?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tämä on erityisen hyödyllistä moniagenttisissa työnkuluissa, joissa “agentti oli kiireinen” ei kerro melkein mitään.&lt;/p&gt;
&lt;p&gt;Jos sama erikoisosaaja lähetetään tehtäviin toistuvasti ja se tuottaa korkeita epäonnistumisasteita, se on reititys- tai kehotemuotoiluongelma.&lt;/p&gt;
&lt;p&gt;Jos yksi MCP-palvelin hallitsee kaikkia kutsuja, se saattaa olla hyvää arkkitehtuuria tai merkki siitä, että kaikki muu on tarpeetonta lisäpainoa.&lt;/p&gt;
&lt;p&gt;Jos työkaluepäonnistumiset piikkaavat kustannusten pysyessä korkeina, sinulla on operatiivinen ongelma, ei laatuongelma.&lt;/p&gt;
&lt;p&gt;Jos shell-työ jatkuvasti epäonnistuu ennustettavilla, vältettävillä tavoilla, joissa korkeamman tason työkalun pitäisi olla olemassa, se on tuotesignaali.&lt;/p&gt;
&lt;p&gt;Jos yksi taito aktivoituu jatkuvasti muttei paranna lopputuloksia, se on kehote- tai reitityssignaali.&lt;/p&gt;
&lt;h2 id=&quot;todellinen-opetus&quot;&gt;Todellinen opetus&lt;/h2&gt;
&lt;p&gt;Syvempi opetus tässä on se, että agenttien havainnointi tarvitsee sekä &lt;strong&gt;ajoympäristön telemetriaa&lt;/strong&gt; että &lt;strong&gt;työnkulun telemetriaa&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Ajoympäristön telemetria kertoo, mitä järjestelmä teki.&lt;/p&gt;
&lt;p&gt;Työnkulun telemetria kertoo, mitä agentti luuli tekevänsä.&lt;/p&gt;
&lt;p&gt;Tarvitsemme molempia.&lt;/p&gt;
&lt;p&gt;Jos säilytät vain jäljitykset ja laskurit, menetät semanttisen kerroksen. Jos säilytät vain hook-tapahtumat, menetät viiveen, spanit ja laajemman ajoympäristökuvan.&lt;/p&gt;
&lt;p&gt;Ja jos säilytät molemmat mutta et koskaan syötä niitä takaisin agenttikerrokseen, sinulla on valvontaa, ei sopeutumista.&lt;/p&gt;
&lt;p&gt;Yhdistelmä on se, mikä tekee järjestelmästä tarpeeksi selitettävän operoitavaksi ja tarpeeksi viritettävän parannettavaksi.&lt;/p&gt;
&lt;h2 id=&quot;mikä-on-yhä-epätäydellistä&quot;&gt;Mikä on yhä epätäydellistä&lt;/h2&gt;
&lt;p&gt;Järjestelmässä on yhä viimeisteltävää.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kaikki hook-tapahtumat eivät sisällä kesto- ja token-dataa, jota haluaisimme.&lt;/li&gt;
&lt;li&gt;Osa parhaista ajoitusnäkymistä tulee yhä Tempo-jäljityksistä, ei hook-lokeista.&lt;/li&gt;
&lt;li&gt;Codex on tänään semanttisesti köyhempi kuin Claude Code rikastetussa tapahtumavirrassa.&lt;/li&gt;
&lt;li&gt;Kojelaudan kuvakaappaus on reaaliaikainen operatiivinen näkymä, ei viimeistelty markkinointiartefakti.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tuo viimeinen kohta on tarkoituksellinen. Näytämme mieluummin todellisen mittaritaulun kuin teeskentelemme agenttijärjestelmien olevan maagisesti itseselittäviä.&lt;/p&gt;
&lt;h2 id=&quot;miksi-tämä-merkitsee-maguyvalle&quot;&gt;Miksi tämä merkitsee Maguyvalle&lt;/h2&gt;
&lt;p&gt;Maguyva antaa agenteille parempaa koodiälyä. Mutta kun agentit oikeasti tekevät hyödyllistä työtä, uusi vaatimus ilmestyy välittömästi: sinun täytyy nähdä, miten ne käyttäytyvät.&lt;/p&gt;
&lt;p&gt;Haun laatu, reitityksen laatu, työkalun valinta ja kontekstin tehokkuus muuttuvat kaikki havaittaviksi ongelmiksi.&lt;/p&gt;
&lt;p&gt;Siksi ajattelemme tämän olevan kirjoittamisen arvoinen. Tulevaisuuden agenttipino ei ole vain kehotteita ja työkaluja. Se on kehotteita, työkaluja ja instrumentointikerros, joka kertoo, toimiiko koko homma.&lt;/p&gt;
&lt;p&gt;Jos rakennat vakavia agenttityönkulkuja, havainnointi ei ole valinnainen infrastruktuuri. Se on osa tuotetta.&lt;/p&gt;
</content:encoded><category>Observability</category><category>Grafana</category><category>OpenTelemetry</category><category>Architecture</category></item><item><title>Louhinnan työnkulku: miten muutoksista tulee institutionaalista muistia</title><link>https://maguyva.ai/fi/blog/mining-workflow-closing-the-loop</link><guid isPermaLink="true">https://maguyva.ai/fi/blog/mining-workflow-closing-the-loop</guid><description>Git-commiteista tulee jäsenneltyjä muutoslokimerkintöjä ja arkkitehtonisia päätöstietueita, jotka syötetään sitten takaisin tekoälyagenteille kyseltävänä institutionaalisena muistina.</description><pubDate>Tue, 03 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Tämän postauksen luvut heijastavat järjestelmää julkaisuhetkellä (helmikuu 2026). Katso &lt;a href=&quot;https://maguyva.ai/fi/team&quot;&gt;tiimisivumme&lt;/a&gt; ajantasaiset luvut.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jokainen insinööritiimi kohtaa saman haasteen: muutoksia tapahtuu jatkuvasti, mutta niiden takana oleva &lt;em&gt;miksi&lt;/em&gt; katoaa. Kuusi kuukautta myöhemmin joku kysyy “miksi otimme DuckDB:n käyttöön putken vaiheissa?”, ja vastaus elää vain sen henkilön päässä, joka teki tuon päätöksen — jos hän on yhä paikalla.&lt;/p&gt;
&lt;p&gt;Rakensimme louhintatyönkulun, joka sulkee tämän silmukan. Muutokset virtaavat git-commitien läpi, käsitellään louhintaputkessamme, muuttuvat jäsenneltyiksi muutoslokimerkinnöiksi ja arkkitehtonisiksi päätöstietueiksi, ja syötetään sitten takaisin tekoälyagenteillemme CLI-kyselyjen kautta. Tulos: institutionaalinen muisti, johon sekä ihmiset että tekoäly pääsevät käsiksi.&lt;/p&gt;
&lt;h2 id=&quot;ongelma-päätökset-haihtuvat&quot;&gt;Ongelma: päätökset haihtuvat&lt;/h2&gt;
&lt;p&gt;Harkitse tyypillistä skenaariota. Kehittäjä committaa:&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;Tämä commit edustaa merkittävää arkkitehtonista valintaa. Tiimi arvioi vaihtoehtoja, punnitsi kompromisseja ja päätyi DuckDB:hen tietyistä syistä. Mutta kaikki tuo konteksti elää:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Slack-ketjussa (todennäköisesti poistettu)&lt;/li&gt;
&lt;li&gt;jonkun muistissa (varmasti haalistumassa)&lt;/li&gt;
&lt;li&gt;kommentissa koodissa (ehkä, jos olet onnekas)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Kolme kuukautta myöhemmin uusi tiimin jäsen kysyy: “Pitäisikö minun käyttää DuckDB:tä vai SQLitea tähän uuteen vaiheeseen?” Ilman institutionaalista muistia he joko keksivät pyörän uudelleen tai tekevät epäjohdonmukaisia valintoja.&lt;/p&gt;
&lt;h2 id=&quot;silmukka-commiteista-kontekstiin&quot;&gt;Silmukka: commiteista kontekstiin&lt;/h2&gt;
&lt;p&gt;Louhintatyönkulkumme muuntaa git-historian kyselykelpoiseksi tiedoksi:&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;Avainoivallus: sekä muutoslokit että arkkitehtoniset päätökset virtaavat samasta git-historiasta, käsiteltynä yhtenäisen putken läpi. Tämä varmistaa, ettei mitään jää huomaamatta.&lt;/p&gt;
&lt;h2 id=&quot;miten-louhinta-toimii&quot;&gt;Miten louhinta toimii&lt;/h2&gt;
&lt;h3 id=&quot;vaihe-1-indeksin-synkronointi&quot;&gt;Vaihe 1: indeksin synkronointi&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;Tämä komento skannaa git-historian ja rakentaa indeksin kaikista commiteista. Se poimii jäsenneltyjä signaaleja jokaisesta commitista:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Konventionaalinen commit-tyyppi (&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;Laajuus (mikä paketti tai alue)&lt;/li&gt;
&lt;li&gt;Rikkovan muutoksen merkit&lt;/li&gt;
&lt;li&gt;Kosketetut tiedostot ja monimutkaisuusmetriikat&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;vaihe-2-kattavuustilan-tarkistus&quot;&gt;Vaihe 2: kattavuustilan tarkistus&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;Nykyinen tilamme näyttää tältä:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;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 commitia käsitelty. 476:sta tuli arkkitehtonisia päätöksiä. 6 799:stä tuli muutoslokimerkintöjä. Jokainen commit luokiteltu.&lt;/p&gt;
&lt;h3 id=&quot;vaihe-3-ehdokkaiden-hankinta-katselmointia-varten&quot;&gt;Vaihe 3: ehdokkaiden hankinta katselmointia varten&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;Tämä nostaa esiin commiteja, joita ei vielä ole käsitelty, täydellä kontekstilla luokittelua varten:&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;Signaalit auttavat ohjaamaan luokittelua: &lt;code&gt;is_releasable_type: true&lt;/code&gt; viittaa siihen, että tämän pitäisi näkyä muutoslokissa. Suuri lisäysmäärä ja infrastruktuuritiedostot viittaavat siihen, että se saattaa myös olla arkkitehtoninen päätös.&lt;/p&gt;
&lt;h3 id=&quot;vaihe-4-commitien-luokittelu&quot;&gt;Vaihe 4: commitien luokittelu&lt;/h3&gt;
&lt;p&gt;Tässä kohtaa polut haarautuvat kahtia: muutoslokimerkinnät ja arkkitehtoniset päätökset.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Muutoslokimerkinnöille:&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;Tämä kirjaa, että commitin &lt;code&gt;abc123&lt;/code&gt; pitäisi näkyä muutoslokissa “Added”-kategoriassa.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Arkkitehtonisille päätöksille:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ensin hanki todellinen päätös-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;Sitten luokittele päätös-ID:llä:&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;Tämä linkittää commitin päätöstietueeseen, joka luodaan tai päivitetään.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Eräkäsittelylle (mitä oikeasti teemme):&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-muoto tukee molempia toimialueita yhdellä läpikäynnillä:&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;vaihe-5-tulosteiden-renderöinti&quot;&gt;Vaihe 5: tulosteiden renderöinti&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;Tämä generoi pakettikohtaiset &lt;code&gt;CHANGELOG.md&lt;/code&gt;-tiedostot pääkirjasta. Muutoslokit ovat johdettuja artefakteja — poista ne, ja ne generoituvat täydellisesti uudelleen lähdepääkirjasta.&lt;/p&gt;
&lt;h2 id=&quot;päätöstietueen-rakenne&quot;&gt;Päätöstietueen rakenne&lt;/h2&gt;
&lt;p&gt;Poimitut päätökset muuttuvat YAML-tiedostoiksi, joissa on runsaasti metadataa:&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;Jokainen päätös linkittää takaisin lähdecommiteihinsa. Jokainen päätös määrittelee, mihin tiedostoihin se vaikuttaa. Päätösten väliset suhteet ovat eksplisiittisiä.&lt;/p&gt;
&lt;h2 id=&quot;cli-integraatio-institutionaalisen-muistin-kysely&quot;&gt;CLI-integraatio: institutionaalisen muistin kysely&lt;/h2&gt;
&lt;p&gt;Tässä kohtaa silmukka sulkeutuu. Agentit voivat kysellä päätöksiä CLI:n kautta:&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;Palauttaa päätöksiä uudelleenyrityslogiikasta, virheenkäsittelystä, palautumismalleista.&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;Palauttaa täydellisen päätöstietueen kontekstilla, perusteluilla ja vaikutuksella.&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;Näyttää, mitä arkkitehtonisia valintoja tehtiin äskettäin.&lt;/p&gt;
&lt;h3 id=&quot;miten-agentit-käyttävät-tätä&quot;&gt;Miten agentit käyttävät tätä&lt;/h3&gt;
&lt;p&gt;Orkestraattorimme perusohjeisiin kuuluu:&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;Kun agenttia pyydetään toteuttamaan jotain DuckDB:hen liittyvää, se voi ensin tarkistaa:&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;Ja löytää DEC-PL-142:n, oppien:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Miksi valitsimme DuckDB:n (konteksti)&lt;/li&gt;
&lt;li&gt;Miten sitä käytetään oikein (agent_guidance)&lt;/li&gt;
&lt;li&gt;Mihin tiedostoihin katsoa (files)&lt;/li&gt;
&lt;li&gt;Mitä liittyviä päätöksiä on olemassa (related)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Agentti ei keksi pyörää uudelleen. Se rakentaa vakiintuneiden mallien päälle.&lt;/p&gt;
&lt;h2 id=&quot;kolmen-kysymyksen-testi&quot;&gt;Kolmen kysymyksen testi&lt;/h2&gt;
&lt;p&gt;Ei jokainen commit ansaitse päätöstietuetta. Käytämme Kolmen kysymyksen testiä suodattamiseen:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Oliko tämä vaikea tehdä?&lt;/strong&gt; Vaatiko se merkittävää analyysiä, kompromissien arviointia tai keskustelua?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Onko sen muuttaminen kallista?&lt;/strong&gt; Vaatisiko tämän kumoaminen merkittävää uudelleentyötä?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Onko sillä järjestelmänlaajuinen vaikutus?&lt;/strong&gt; Vaikuttaako se useisiin paketteihin tai luoko se malleja, joita muut seuraavat?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Jos commit vastaa “kyllä” ainakin yhteen näistä kysymyksistä, se on ehdokas päätöspoiminnalle. Tyypillinen suhteemme: 1–4 päätöstä sataa commitia kohti (noin 1–4 %).&lt;/p&gt;
&lt;p&gt;Muutoslokimerkinnöille kynnys on matalampi: mikä tahansa käyttäjälle näkyvä muutos (ominaisuudet, korjaukset, parannukset) kirjataan. Sisäiset ylläpitotehtävät, dokumentaatiopäivitykset ja refaktoroinnit yleensä ohitetaan. Tyypillinen suhteemme: 30–50 muutoslokimerkintää sataa commitia kohti.&lt;/p&gt;
&lt;h2 id=&quot;datan-tallennus-vain-lisäyksiä-sallivat-lokit&quot;&gt;Datan tallennus: vain lisäyksiä sallivat lokit&lt;/h2&gt;
&lt;p&gt;Louhintajärjestelmä käyttää vain lisäyksiä sallivia JSONL-lokeja konfliktitonta moniagenttista toimintaa varten:&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-muoto &lt;code&gt;merge=union&lt;/code&gt;:lla &lt;code&gt;.gitattributes&lt;/code&gt;:ssa tarkoittaa, että useat agentit voivat luokitella commiteja samanaikaisesti ilman yhdistämiskonflikteja. Jokainen rivi on riippumaton.&lt;/p&gt;
&lt;h2 id=&quot;validointiportit&quot;&gt;Validointiportit&lt;/h2&gt;
&lt;p&gt;Ennen mitä tahansa louhintaistuntoa ajamme validoinnin:&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;Tämä tarkistaa:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SHA-muodon kelvollisuuden&lt;/li&gt;
&lt;li&gt;Päätös-ID-muodon vaatimustenmukaisuuden&lt;/li&gt;
&lt;li&gt;Ei duplikaattimerkintöjä samalle SHA:lle&lt;/li&gt;
&lt;li&gt;Että viitatut päätökset todella ovat olemassa&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Luokittelun jälkeen validoimme uudelleen ennen muutosten committaamista.&lt;/p&gt;
&lt;h2 id=&quot;miksi-tämä-merkitsee&quot;&gt;Miksi tämä merkitsee&lt;/h2&gt;
&lt;p&gt;Rakentamamme palautesilmukka ratkaisee useita ongelmia:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Uusille tiimin jäsenille:&lt;/strong&gt; sen sijaan että kysyisivät “miksi teimme X:n?”, he voivat hakea päätösrekisteristä. Konteksti on säilytetty.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tekoälyagenteille:&lt;/strong&gt; ne eivät toimi tyhjiössä. Ne voivat kysellä institutionaalista tietoa ennen suositusten antamista. Kun niitä pyydetään lisäämään uusi putkivaihe, ne voivat löytää DuckDB-mallin ja seurata sitä.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Arkkitehtoniselle johdonmukaisuudelle:&lt;/strong&gt; päätökset ovat eksplisiittisiä ja haettavissa. Kun joku ehdottaa lähestymistapaa, joka on ristiriidassa olemassa olevan päätöksen kanssa, järjestelmä voi nostaa ristiriidan esiin.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Muutoslokien generoinnille:&lt;/strong&gt; julkaisumuistiinpanot eivät synny viime hetken kiireessä. Ne ovat sivutuote jatkuvasta luokittelusta kehityksen aikana.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Perehdytykselle:&lt;/strong&gt; uudet agentit perivät koodikannan täyden kontekstin. Ne eivät vain näe koodia — ne näkevät päätökset, jotka muokkasivat sitä.&lt;/p&gt;
&lt;h2 id=&quot;nykytila&quot;&gt;Nykytila&lt;/h2&gt;
&lt;p&gt;Tänään:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;15 637 commitia&lt;/strong&gt; käsitelty putken läpi&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;476 arkkitehtonista päätöstä&lt;/strong&gt; poimittu ja dokumentoitu&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;6 799 muutoslokimerkintää&lt;/strong&gt; kirjattu&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;100 %:n kattavuus&lt;/strong&gt; molemmilla toimialueilla&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Jokainen commit siitä lähtien, kun aloitimme, on luokiteltu. Institutionaalinen muisti on täydellinen ja kyselykelpoinen.&lt;/p&gt;
&lt;h2 id=&quot;aloittaminen&quot;&gt;Aloittaminen&lt;/h2&gt;
&lt;p&gt;Jos haluat toteuttaa jotain vastaavaa:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Aloita konventionaalisilla commiteilla.&lt;/strong&gt; Louhintaputki toimii parhaiten, kun commiteilla on jäsennellyt etuliitteet (&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;Määrittele toimialueesi.&lt;/strong&gt; Käytämme toimialueita kuten &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;. Nämä järjestävät päätökset alueen mukaan.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Rakenna luokittelutottumus.&lt;/strong&gt; Louhinta toimii, kun tiimit luokittelevat commiteja säännöllisesti. Eräkäsittely LLM-avustuksella auttaa skaalautumaan.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Tee päätöksistä kyselykelpoisia.&lt;/strong&gt; Arvo kasvaa, kun agentit voivat hakea päätöksiä CLI:n kautta. Rakenna tulosteesi koneluettavaksi.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Sulje silmukka.&lt;/strong&gt; Päätösten pitäisi vaikuttaa tulevaan työhön. Sisällytä päätösviittauksia agenttiohjeisiin ja koodikatselmuslistoihin.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Tavoite ei ole täydellinen dokumentaatio. Se on tehdä muutosten takana oleva &lt;em&gt;miksi&lt;/em&gt; saavutettavaksi sekä ihmisille että tekoälylle, tänään ja kuuden kuukauden kuluttua. Kun muutoksista tulee institutionaalista muistia, tiimit rakentavat vakiintuneiden mallien päälle sen sijaan että keksisivät ne uudelleen.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Louhintatyönkulku on osa orkestrointimoottoriamme, erityisesti orkestrointipakettimme kontekstimoottorimoduulia.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Workflows</category></item><item><title>Taitojen louhinta: 3 500 ehdokkaasta 466 kyvyksi</title><link>https://maguyva.ai/fi/blog/skill-mining-3500-and-counting</link><guid isPermaLink="true">https://maguyva.ai/fi/blog/skill-mining-3500-and-counting</guid><description>Seuloimme 3 500 taitoehdokasta ja hyväksyimme 466. Systemaattinen louhinta- ja käyttöönottosilmukka johdonmukaisen tekoälyagenttien taitokirjaston rakentamiseen laajassa mittakaavassa.</description><pubDate>Tue, 27 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Tämän postauksen luvut heijastavat järjestelmää julkaisuhetkellä (tammikuu 2026). Katso &lt;a href=&quot;https://maguyva.ai/fi/team&quot;&gt;tiimisivumme&lt;/a&gt; ajantasaiset luvut.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;3-500-taidon-ongelma&quot;&gt;3 500 taidon ongelma&lt;/h2&gt;
&lt;p&gt;Kun aloimme rakentaa agenttien orkestrointijärjestelmää, kohtasimme kiinnostavan haasteen: tekoälyekosysteemin yli on hajallaan tuhansia mahdollisia taitoja. GitHub-repositoriot, vendor-dokumentaatio, yhteisöprojektit, sisäiset mallit — taitoja on kaikkialla. Mutta mitkä niistä merkitsevät? Mitkä toimivat? Ja miten ylläpidät johdonmukaista taitokirjastoa, jota agentit voivat oikeasti käyttää?&lt;/p&gt;
&lt;p&gt;Vastauksemme: systemaattinen louhinta- ja käyttöönottosilmukka.&lt;/p&gt;
&lt;h2 id=&quot;luvut-tänään&quot;&gt;Luvut tänään&lt;/h2&gt;
&lt;p&gt;Hieman yli kolme kuukautta sen jälkeen, kun Anthropic julkaisi Agent Skillsin 16. lokakuuta 2025, tilanteemme näytti tältä, kun tämä postaus julkaistiin 27. tammikuuta 2026:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mittari&lt;/th&gt;
&lt;th&gt;Määrä&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tunnistetut ehdokkaat&lt;/td&gt;
&lt;td&gt;3 500+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hyväksytyt taidot&lt;/td&gt;
&lt;td&gt;466&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vendor-taidot&lt;/td&gt;
&lt;td&gt;373&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sisäiset taidot&lt;/td&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Aktiiviset vendorit&lt;/td&gt;
&lt;td&gt;25+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Keskimääräinen tokenmäärä per taito&lt;/td&gt;
&lt;td&gt;2 834&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Viitatut työkalut&lt;/td&gt;
&lt;td&gt;89&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yksilölliset tagit&lt;/td&gt;
&lt;td&gt;635&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Olemme katselmoineet yli 3 500 taitoehdokasta. Olemme hyväksyneet 466. Se on 13 %:n hyväksymisaste — ja se valikoivuus on tarkoituksellista.&lt;/p&gt;
&lt;h2 id=&quot;tietämystasojärjestelmä&quot;&gt;Tietämystasojärjestelmä&lt;/h2&gt;
&lt;p&gt;Kaikki taidot eivät ole samanarvoisia. Järjestämme ne viiteen tietämyskerrokseen (K0–K4), joista jokainen edustaa erilaista sovellettavuuden laajuutta:&lt;/p&gt;
&lt;h3 id=&quot;k0-perusta-universaali&quot;&gt;K0: perusta (universaali)&lt;/h3&gt;
&lt;p&gt;Taitoja, jotka jokaisella agentilla pitäisi olla. Nämä edustavat “hyvän ajattelijan” kyvykkyyksiä, jotka toimivat missä tahansa.&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-taidot ovat siirrettävissä mihin tahansa projektiin, toimialueeseen tai pinoon. Ne koodaavat universaaleja kognitiivisia malleja.&lt;/p&gt;
&lt;h3 id=&quot;k1-identiteetit-ammattiala&quot;&gt;K1: identiteetit (ammattiala)&lt;/h3&gt;
&lt;p&gt;“Hyvän insinöörin” tai “hyvän tutkijan” taitoja, jotka soveltuvat projektien yli tietyllä ammattialalla.&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-toimialueet-aihealueen-asiantuntemus&quot;&gt;K2: toimialueet (aihealueen asiantuntemus)&lt;/h3&gt;
&lt;p&gt;“Hyvän tietokanta-asiantuntijan” tai “hyvän turvallisuusinsinöörin” taitoja, jotka ovat siirrettävissä kentän sisällä.&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-pinot-teknologia&quot;&gt;K3: pinot (teknologia)&lt;/h3&gt;
&lt;p&gt;“Hyvän Supabase-käyttäjän” tai “hyvän Cloudflare-kehittäjän” taitoja tietyille teknologiapinoille.&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-projekti-organisaatio&quot;&gt;K4: projekti (organisaatio)&lt;/h3&gt;
&lt;p&gt;Organisaatiollemme ja työnkuluillemme ominaisia taitoja.&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;louhintasilmukka&quot;&gt;Louhintasilmukka&lt;/h2&gt;
&lt;h3 id=&quot;vaihe-1-löytäminen&quot;&gt;Vaihe 1: löytäminen&lt;/h3&gt;
&lt;p&gt;Taitoja tulee kaikkialta:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vendor-repositoriot&lt;/strong&gt;: AWS, Anthropic, Cloudflare, Supabase ja yhteisön avustajat julkaisevat taitokokoelmia. Seuraamme 25+ vendor-juurta.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Yhteisöprojektit&lt;/strong&gt;: GitHub on täynnä Claude Code -templateja, agenttimalleja ja työnkulkumäärittelyjä.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sisäiset mallit&lt;/strong&gt;: kun tiimimme ratkoo ongelmia, malleja syntyy. Nämä muotoillaan taidoiksi.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dokumentaation louhinta&lt;/strong&gt;: teknisessä dokumentaatiossa on usein implisiittisiä taitoja — menettelyjä, tarkistuslistoja, päätöspuita.&lt;/p&gt;
&lt;p&gt;Löytäminen on jatkuvaa. Käytämme taitojen työjonoa ehdokkaiden seurantaan ennen muodollista arviointia.&lt;/p&gt;
&lt;h3 id=&quot;vaihe-2-arviointi&quot;&gt;Vaihe 2: arviointi&lt;/h3&gt;
&lt;p&gt;Jokainen ehdokas käy läpi saman arviointikehyksen:&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;Ehdokkaan täytyy täyttää kaikki viisi tuotekriteeriä. Siksi 87 % ehdokkaista hylätään.&lt;/p&gt;
&lt;p&gt;Sitten jokainen ehdokas käy läpi erillisen luottamuskatselmuksen. Emme käsittele virallista vendor-repositoriota, tunnettua yhteisön ylläpitäjää ja satunnaista GitHub-repositoriota yhtä luotettavina tiedonlähteinä.&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;Luotetut vendorit saavat kevyemmän alkuperäkatselmuksen, mutteivät vapaakorttia. Luottamattomat tai tuntemattomat lähteet saavat syvemmän manuaalisen auditoinnin, emmekä suorita paketoituja skriptejä ennen kuin ne on luettu, rajattu ja luokiteltu turvallisiksi.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Puutteiden analyysi&lt;/strong&gt;: ennen käyttöönottoa haemme rekisteristämme:&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;Jos meillä jo on se, emme tarvitse sitä. Jos meillä on jotain lähellä olevaa, saatamme yhdistää sen sijaan että hyväksyisimme uuden.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Syvyys- ja standardipisteytys&lt;/strong&gt;: pisteytämme myös, kuinka täysimääräisesti ehdokas käyttää agentti-taito-mallia. Yksittäinen &lt;code&gt;SKILL.md&lt;/code&gt; voi silti olla hyödyllinen, mutta syvemmät taidot ovat arvokkaampia, kun ne erottavat ohjeet viitteistä, skripteistä ja resursseista tavalla, jota &lt;code&gt;agentskills.io&lt;/code&gt; kannustaa.&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-tähdet voivat nostaa uskottavuuspistettä hieman, mutta ne eivät koskaan pelasta pinnallista tai epäturvallista taitoa. Korkean tähtimäärän repositorio, jossa on yksi epämääräinen &lt;code&gt;SKILL.md&lt;/code&gt; ja läpinäkymättömiä skriptejä, pisteytyy alemmas kuin pienempi repositorio, jossa on tarkka kuvaus, kuratoidut &lt;code&gt;references/&lt;/code&gt; ja atomiset apuohjelmat, jotka todella hyödyntävät täyttä taitokyvykkyyttä.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rakenteellinen analyysi&lt;/strong&gt;: tarkistamme taidon laadun:&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;Jos ehdokas sisältää skriptejä, katselmuksesta tulee tiukempi. Hyvä taito ei ole vain hyödyllinen; sen täytyy olla luettavissa, rajattu ja turvallinen antaa agentille. Tuo turvallisuussuodatin yksinään diskvalifioi merkittävän osan muuten kiinnostavista ehdokkaista.&lt;/p&gt;
&lt;h3 id=&quot;vaihe-3-käyttöönotto&quot;&gt;Vaihe 3: käyttöönotto&lt;/h3&gt;
&lt;p&gt;Kun taito läpäisee arvioinnin, se pääsee rekisteriin. Mutta taitoja ei koskaan hyväksytä muuttumattomina. Ne muokataan sopimaan järjestelmäämme.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Käyttöönoton muokkaukset&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Metadatan normalisointi&lt;/strong&gt;: jokainen taito saa frontmatter-skeemamme&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;K-tason osoitus&lt;/strong&gt;: taidot sijoitetaan sopivaan tietämyskerrokseen&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tagien rikastus&lt;/strong&gt;: tageja lisätään löydettävyyttä varten&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Työkalujulistus&lt;/strong&gt;: sallitut työkalut julistetaan eksplisiittisesti&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Osioiden kohdistus&lt;/strong&gt;: sisältö rakennetaan uudelleen vastaamaan templateamme&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Tyypillinen taito-YAML käyttöönoton jälkeen:&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;vaihe-4-laajuuden-osoitus&quot;&gt;Vaihe 4: laajuuden osoitus&lt;/h3&gt;
&lt;p&gt;Taidot osoitetaan laajuuksiin — kategorioihin, jotka määrittävät, mitkä agentit lataavat mitkä taidot:&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;Agentit julistavat laajuutensa, ja taidot osoitetaan automaattisesti:&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;vaihe-5-materialisointi&quot;&gt;Vaihe 5: materialisointi&lt;/h3&gt;
&lt;p&gt;Taidot eivät elä YAML:na tuotannossa. Ne renderöidään SKILL.md-tiedostoiksi, joita Claude Code voi ladata:&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;Tämä komento:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Lukee kaikki taitojen YAML-määrittelyt&lt;/li&gt;
&lt;li&gt;Renderöi ne Jinja-templatejen läpi&lt;/li&gt;
&lt;li&gt;Kirjoittaa SKILL.md-tiedostot kohteeseen &lt;code&gt;.claude/skills/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Järjestää K-tason mukaan (foundations/, identities/, domains/, stacks/, project/)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Lopullinen tulosterakenne:&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;lepotilan-laajuusmalli&quot;&gt;Lepotilan laajuusmalli&lt;/h2&gt;
&lt;p&gt;Yksi voimakkaimmista malleistamme on “hyväksytty muttei ladattu” -taito. Kutsumme näitä lepotilan laajuuksiksi.&lt;/p&gt;
&lt;p&gt;Harkitse tieteellisen laskennan taitoja k-dense-scientific-repositoriosta. Olemme hyväksyneet 120+ taitoa, jotka kattavat bioinformatiikkaa, kemiaa, kvanttilaskentaa ja kliinistä informatiikkaa. Mutta useimmat agenttimme eivät tarvitse molekyylidokkausta tai geeni-ilmentymisanalyysiä.&lt;/p&gt;
&lt;p&gt;Sen sijaan että lataisimme kaikki 120 taitoa jokaiseen agenttiin (paisuttaen kontekstiikkunoita), me:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Hyväksymme&lt;/strong&gt; taidot tietyllä laajuudella (esim. &lt;code&gt;bioinformatics&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Pidämme ne &lt;strong&gt;lepotilassa&lt;/strong&gt; — rekisteröityinä, mutta ei ladattuina&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Otamme ne käyttöön&lt;/strong&gt; vain, kun agentti julistaa tuon laajuuden&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;Tämä malli antaa meille 466 taitoa rekisterissä, kun taas tyypilliset agentit lataavat vain 40–60 relevanttia.&lt;/p&gt;
&lt;h2 id=&quot;taitotyypit&quot;&gt;Taitotyypit&lt;/h2&gt;
&lt;p&gt;Taidot esiintyvät kolmena kognitiivisena mallina:&lt;/p&gt;
&lt;h3 id=&quot;työnkulku&quot;&gt;Työnkulku&lt;/h3&gt;
&lt;p&gt;Järjestetyt menettelylliset askeleet: “1. Tee X, 2. Sitten Y, 3. Lopuksi 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;kuri&quot;&gt;Kuri&lt;/h3&gt;
&lt;p&gt;Käyttäytymistä ohjaavat säännöt: “Tee aina X”, “Älä koskaan tee Y”, “Suosi Z:aa”&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;tarkistuslista&quot;&gt;Tarkistuslista&lt;/h3&gt;
&lt;p&gt;Varmennuskriteerit: “Vahvista X”, “Varmenna Y”, “Tarkista 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;laatuportit&quot;&gt;Laatuportit&lt;/h2&gt;
&lt;p&gt;Jokaisen taidon täytyy läpäistä validointi ennen julkaisua:&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;Kuvausten täytyy olla 50–400 merkkiä laukaisulausekkeilla (“Käytä kun…”, “Kun tarvitset…”), jotta Claude Code tietää, milloin ehdottaa niitä.&lt;/p&gt;
&lt;p&gt;Validoimme jatkuvasti:&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;vendor-ekosysteemi&quot;&gt;Vendor-ekosysteemi&lt;/h2&gt;
&lt;p&gt;373 vendor-taitomme tulevat:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Toimittaja&lt;/th&gt;
&lt;th&gt;Taidot&lt;/th&gt;
&lt;th&gt;Toimialue&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;Pilvipalvelut&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;Dokumenttien generointi&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;Reunalaskenta&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;Tietokanta&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;Tieteellinen laskenta&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;Selainautomaatio&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Jokainen vendor-juuri julistetaan metadata.yaml:ssa:&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;Kun &lt;code&gt;orkestra sync&lt;/code&gt; ajetaan, vendor-taidot symlinkataan kohteeseen &lt;code&gt;.claude/skills/vendor/&lt;/code&gt; niiden toimittajan nimiavaruudella.&lt;/p&gt;
&lt;h2 id=&quot;mitä-olemme-oppineet&quot;&gt;Mitä olemme oppineet&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Valikoivuus kannattaa.&lt;/strong&gt; On houkuttelevaa hyväksyä kaikki, mikä näyttää hyödylliseltä. Mutta jokainen taito maksaa tokeneita. 2 834 keskimääräisellä tokenimäärällä per taito sisällön paisuminen kuormittaa kontekstia nopeasti. 13 %:n hyväksymisasteemme pitää agentit ketterinä.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rakenne mahdollistaa löydettävyyden.&lt;/strong&gt; K-tasojärjestelmä ei ole vain organisointia — se koskee siirrettävyyttä. K0-taitoja voi käyttää uudelleen missä tahansa. K4-taidot ovat tarkoituksella projektikohtaisia. Tämä selkeys auttaa sekä ihmisiä että agentteja löytämään tarvitsemansa.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lepotilan laajuudet skaalautuvat.&lt;/strong&gt; Voit hyväksyä satoja taitoja lataamatta niitä kaikkia. Laajuuksien avulla voit rakentaa kattavan rekisterin pitäen samalla yksittäisten agenttien kontekstiikkunat hallittavina.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Muokkaus käyttöönotossa on välttämätöntä.&lt;/strong&gt; Raa’at vendor-taidot harvoin sopivat järjestelmääsi. Käyttöönottoprosessi — metadatan lisääminen, tasojen osoitus, tagien rikastus — saa ulkoiset taidot toimimaan sisäisesti.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Louhinta on jatkuvaa.&lt;/strong&gt; 3 500:n luku kasvaa jatkuvasti. Uusia vendor-repositorioita ilmestyy. Yhteisömalleja syntyy. Sisäiset työnkulut vakiintuvat. Silmukka ei koskaan pysähdy.&lt;/p&gt;
&lt;h2 id=&quot;mitä-seuraavaksi&quot;&gt;Mitä seuraavaksi&lt;/h2&gt;
&lt;p&gt;Työskentelemme useiden parannusten parissa:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Puutteiden automaattinen tunnistus&lt;/strong&gt;: hälytä, kun yleiset agenttiepäonnistumiset voitaisiin ratkaista taidolla, jota ei ole vielä otettu käyttöön&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Taitojen vanhentumistyönkulut&lt;/strong&gt;: muodollinen prosessi eläkkeelle jäävien taitojen poistamiseksi, kun ne korvataan tai jäävät käyttämättä&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Taitojen väliset riippuvuudet&lt;/strong&gt;: taidon esivaatimusten eksplisiittinen julistaminen&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Käyttöanalytiikka&lt;/strong&gt;: seuraa, mitä taitoja agentit oikeasti kutsuvat verrattuna vain lataamiseen&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Taitojen louhintasilmukka on infrastruktuuria. Se ei ole hohdokasta. Mutta se on se, mikä saa 41 agenttia toimimaan johdonmukaisesti 466 kyvykkyydellä pysyen samalla kontekstirajojen sisällä.&lt;/p&gt;
&lt;p&gt;Se on tarina siitä, miten 3 500:sta tulee 466. Ei jättämällä 3 000 huomiotta — vaan arvioimalla ne systemaattisesti ja hyväksymällä vain sen, mikä toimii.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Haluatko nähdä taitojärjestelmän toiminnassa? Käy tutustumassa kohteeseen &lt;code&gt;uv run orkestra skills list&lt;/code&gt; tutkiaksesi nykyistä rekisteriämme.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Skills</category></item><item><title>Tietojen asteittainen näyttäminen: CLI-ikkunat agenttijärjestelmiin</title><link>https://maguyva.ai/fi/blog/progressive-disclosure-cli-into-agents</link><guid isPermaLink="true">https://maguyva.ai/fi/blog/progressive-disclosure-cli-into-agents</guid><description>Agenttijärjestelmät ovat oletuksena läpinäkymättömiä. Tietojen asteittainen näyttäminen antaa operaattoreille kerroksellisia CLI-näkymiä pikaisista tilatarkistuksista aina agentin sisäisiin toimintoihin ja päätösjälkiin asti.</description><pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Tämän postauksen luvut heijastavat järjestelmää julkaisuhetkellä (tammikuu 2026). Katso &lt;a href=&quot;https://maguyva.ai/fi/team&quot;&gt;tiimisivumme&lt;/a&gt; ajantasaiset luvut.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Agenttijärjestelmät ovat suunnittelultaan läpinäkymättömiä. Ne tekevät päätöksiä, kutsuvat työkaluja ja koordinoivat työtä kymmenien erikoisosaajien yli. Mutta kun jokin menee pieleen — tai kun haluat yksinkertaisesti ymmärtää, mitä tapahtuu — mistä katsot?&lt;/p&gt;
&lt;p&gt;Vastaus on tietojen asteittainen näyttäminen: kerroksellinen rajapinta, joka paljastaa juuri sen verran monimutkaisuutta kuin tarvitset, juuri silloin kun tarvitset sitä.&lt;/p&gt;
&lt;h2 id=&quot;läpinäkymättömyysongelma&quot;&gt;Läpinäkymättömyysongelma&lt;/h2&gt;
&lt;p&gt;Modernissa agenttien orkestrointijärjestelmässä saattaa olla:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;40+ erikoisosaaja-agenttia, kullakin omat kyvykkyytensä&lt;/li&gt;
&lt;li&gt;700+ taitoa, jotka kattavat sisäistä automaatiota ja vendori-integraatioita&lt;/li&gt;
&lt;li&gt;470+ arkkitehtonista päätöstä, jotka muokkaavat käyttäytymistä&lt;/li&gt;
&lt;li&gt;kymmeniä MCP-työkalupalvelimia, jotka tarjoavat ulkoisia kyvykkyyksiä&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tämä monimutkaisuus on tarkoituksellista. Agentit tarvitsevat pääsyn runsaaseen kontekstiin — toimialuetietämykseen, koodiälyyn, tietokantaskeemoihin — tehdäkseen hyviä päätöksiä. Mutta sama runsaus luo näkyvyysongelman.&lt;/p&gt;
&lt;p&gt;Mistä tiedät, mikä agentti käsittelee tietokantamigraatioita? Mitkä päätökset muokkasivat hakujärjestelmän järjestyskäyttäytymistä? Mihin työkaluihin arkkitehtuurineuvonantajalla on pääsy?&lt;/p&gt;
&lt;p&gt;Ilman jäsenneltyä pääsyä jäät lukemaan lähdekoodia tai toivomaan, että dokumentaatio on ajan tasalla.&lt;/p&gt;
&lt;h2 id=&quot;tietojen-asteittainen-näyttäminen-arkkitehtuurina&quot;&gt;Tietojen asteittainen näyttäminen arkkitehtuurina&lt;/h2&gt;
&lt;p&gt;Tietojen asteittainen näyttäminen ei ole pelkkä käyttöliittymämalli. Se on arkkitehtoninen periaate: järjestä tieto kerroksiin, joista jokainen on syvempi kuin edellinen, jotta käyttäjät voivat pysähtyä tasolle, joka vastaa heidän kysymykseensä.&lt;/p&gt;
&lt;p&gt;Agenttijärjestelmille tämä tarkoittaa CLI-komentoja kasvavilla syvyystasoilla:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Taso&lt;/th&gt;
&lt;th&gt;Komento&lt;/th&gt;
&lt;th&gt;Kysymys, johon vastataan&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;Onko kaikki kunnossa?&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;Mitä agentteja on olemassa?&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;Mitä tämä agentti tekee?&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;Miksi se toimii näin?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Maguyva MCP -työkalut&lt;/td&gt;
&lt;td&gt;Näytä minulle koodi.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Jokainen taso vastaa luonnolliseen jatkokysymykseen. Harvoin tarvitsee hypätä suoraan tasolle 5.&lt;/p&gt;
&lt;h2 id=&quot;taso-1-järjestelmän-terveys&quot;&gt;Taso 1: järjestelmän terveys&lt;/h2&gt;
&lt;p&gt;Ensimmäinen kysymys on aina: toimiiko kaikki?&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;Yksi komento. Neljä lukua. Tarpeeksi tietääkseen, että järjestelmä on konfiguroitu ja rekisterit täytettyjä.&lt;/p&gt;
&lt;p&gt;Jos agenttimäärä putoaa odottamatta tai taidot eivät lataudu, näet sen täällä ensin. Ei tarvetta sukeltaa lokeihin.&lt;/p&gt;
&lt;h2 id=&quot;taso-2-agenttien-inventaario&quot;&gt;Taso 2: agenttien inventaario&lt;/h2&gt;
&lt;p&gt;Kun tiedät, että järjestelmä on terve, seuraava kysymys on: mitä on saatavilla?&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;Tämä palauttaa jäsenneltyä dataa — agenttien nimet, kuvaukset, mallimieltymykset, toimialuekattavuuden. Tuloste on oletuksena JSON, mikä helpottaa sen putkittamista &lt;code&gt;jq&lt;/code&gt;:ään suodatusta varten:&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;Haluatko agentteja, jotka käsittelevät tietokantatyötä? Hakukomento kaventaa sitä:&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;Tämä skannaa nimet, kuvaukset ja kyvykkyydet. Löydät oikean erikoisosaajan lukematta 40 agenttimäärittelyä.&lt;/p&gt;
&lt;h2 id=&quot;taso-3-agentin-syväsukellus&quot;&gt;Taso 3: agentin syväsukellus&lt;/h2&gt;
&lt;p&gt;Löysitkö agentin, joka näyttää relevantilta? Komento &lt;code&gt;info&lt;/code&gt; paljastaa kaiken:&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;Tuloste sisältää:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Metadata&lt;/strong&gt;: nimi, kategoria, mallimieltymys, kuvaus&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Toimialueet&lt;/strong&gt;: mitkä tietämysalueet tämä agentti kattaa&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Identiteetti&lt;/strong&gt;: hahmopiirteet (arkkitehti, strategisti, tietämysarkkitehti)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Työkaluoppaat&lt;/strong&gt;: mikä työkaludokumentaatio lisätään kontekstiin&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Työkalut&lt;/strong&gt;: täydellinen luettelo tälle agentille saatavilla olevista MCP-työkaluista&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tässä on näyte siitä, mitä nä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;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;Tämä kertoo tarkalleen, mitä agentti pystyy tekemään. Ei lähdekoodia tarvita.&lt;/p&gt;
&lt;h2 id=&quot;taso-4-päätösten-arkeologia&quot;&gt;Taso 4: päätösten arkeologia&lt;/h2&gt;
&lt;p&gt;Agentit käyttäytyvät dokumentoitujen päätösten mukaisesti. Kun sinun täytyy ymmärtää, &lt;em&gt;miksi&lt;/em&gt; jokin toimii tietyllä tavalla, päätösrekisteri on totuuden lähde.&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;Tämä palauttaa täsmääviä arkkitehtonisia päätöksiä:&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;Jokaisella päätöksellä on täysi alkuperä — milloin se tehtiin, miksi, mitä kompromisseja harkittiin, mitkä commitit toteuttivat sen:&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;Tämä on arkkitehtonista dokumentaatiota, joka pysyy ajan tasalla, koska se on louhittu commiteista, ei käsin ylläpidetty.&lt;/p&gt;
&lt;h2 id=&quot;taso-5-suora-koodiäly&quot;&gt;Taso 5: suora koodiäly&lt;/h2&gt;
&lt;p&gt;Kun sinun täytyy nähdä varsinainen toteutus — ei metadataa siitä — Maguyvan MCP-työkalut tarjoavat suoran pääsyn.&lt;/p&gt;
&lt;p&gt;Agentti-istunnon sisältä:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;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;Tämä reitittää automaattisesti semanttisen, teksti- ja AST-haun yli löytääkseen relevantin koodin. Tietyille symboleille:&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;Riippuvuusanalyysille:&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;Nämä eivät ole vain grep-korvikkeita. Ne ovat graafia hyödyntäviä, semanttisesti indeksoituja ja integroituja samaan koodiälyyn, joka tehostaa itse agentteja.&lt;/p&gt;
&lt;h2 id=&quot;yhtenäinen-haku-rekisterien-yli&quot;&gt;Yhtenäinen haku rekisterien yli&lt;/h2&gt;
&lt;p&gt;Joskus et tiedä, missä rekisterissä vastaus on. Yhtenäinen haku kattaa kaiken:&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 osumaa viidestä rekisteristä. Yhteenveto kertoo, mihin porautua. Poista &lt;code&gt;--summary&lt;/code&gt; yksityiskohtaisia tuloksia varten, tai lisää &lt;code&gt;--limit 5&lt;/code&gt; pitääksesi tulosteen hallittavana.&lt;/p&gt;
&lt;h2 id=&quot;miksi-tämä-merkitsee&quot;&gt;Miksi tämä merkitsee&lt;/h2&gt;
&lt;p&gt;Tietojen asteittaisessa näyttämisessä ei ole kyse vain käyttömukavuudesta. Se muuttaa tapaa, jolla vuorovaikutat monimutkaisten järjestelmien kanssa.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vianetsinnästä tulee hallittavaa.&lt;/strong&gt; Kun agentti tekee odottamattoman päätöksen, et grep-hae lokeja. Tarkistat, mihin työkaluihin sillä on pääsy (&lt;code&gt;agents info&lt;/code&gt;), mitkä päätökset muokkaavat sen käyttäytymistä (&lt;code&gt;decisions search&lt;/code&gt;), ja jäljität toteutuksen tarvittaessa (&lt;code&gt;intelligent_search&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Perehdytys nopeutuu.&lt;/strong&gt; Uusien tiimin jäsenten ei tarvitse lukea koko koodikantaa. He aloittavat komennosta &lt;code&gt;system status&lt;/code&gt;, tutkivat komennolla &lt;code&gt;agents list&lt;/code&gt; ja menevät syvemmälle vasta, kun kohtaavat jotain, mitä eivät ymmärrä.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dokumentaatio pysyy ajan tasalla.&lt;/strong&gt; Koska CLI lukee samoista rekistereistä, jotka konfiguroivat agentit, tuloste on aina tarkka. Dokumentaatio vastaa järjestelmän todellista toimintaa.&lt;/p&gt;
&lt;h2 id=&quot;cli-rajapintana&quot;&gt;CLI rajapintana&lt;/h2&gt;
&lt;p&gt;Olisimme voineet rakentaa web-kojelaudan. Olisimme voineet kirjoittaa laajan dokumentaation. Sen sijaan rakensimme CLI:n, joka lukee totuuden lähteestä.&lt;/p&gt;
&lt;p&gt;CLI:llä on etuja:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Koosteltava&lt;/strong&gt;: putkita tulostetta &lt;code&gt;jq&lt;/code&gt;:n läpi, integroi skripteihin&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skriptattava&lt;/strong&gt;: automatisoi tarkistuksia, generoi raportteja&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nopea&lt;/strong&gt;: ei sivulatauksia, ei todennuskulkuja&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tarkka&lt;/strong&gt;: lukee todellisen konfiguraation, ei välimuistiin tallennettua esitystä&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Järjestelmille, joissa oikeellisuus merkitsee enemmän kuin estetiikka, CLI voittaa.&lt;/p&gt;
&lt;h2 id=&quot;oman-asteittain-tarkentuvan-käyttöliittymän-rakentaminen&quot;&gt;Oman asteittain tarkentuvan käyttöliittymän rakentaminen&lt;/h2&gt;
&lt;p&gt;Jos rakennat agenttijärjestelmiä, harkitse, miten käyttäjät tarkastelevat niitä:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Aloita terveystarkistuksista.&lt;/strong&gt; Yksi komento, joka kertoo, toimivatko asiat.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tarjoa inventaarionäkymät.&lt;/strong&gt; Listaa, mitä on olemassa, ennen kuin selität, mitä se tekee.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mahdollista kohdennetut kyselyt.&lt;/strong&gt; Haku voittaa selailun laajassa mittakaavassa.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Paljasta alkuperä.&lt;/strong&gt; Anna käyttäjien jäljittää päätökset alkuperäänsä.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Yhdistä koodiälyyn.&lt;/strong&gt; Lopulta käyttäjien täytyy nähdä toteutus.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Jokainen kerros vastaa jatkokysymykseen. Rakenna ne yleisyysjärjestyksessä — useimmat käyttäjät pysähtyvät tasolle 2 tai 3. Vain tehokäyttäjät saavuttavat tason 5.&lt;/p&gt;
&lt;p&gt;Tavoite ei ole paljastaa kaikkea. Se on paljastaa juuri se, mitä tarvitaan, juuri silloin kun sitä tarvitaan. Se on tietojen asteittainen näyttäminen sovellettuna agenttiarkkitehtuuriin.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>CLI</category><category>Tooling</category></item><item><title>Ground Truths: tekoälyagenttien ankkurointi todellisuuteen</title><link>https://maguyva.ai/fi/blog/ground-truths-anchoring-ai-to-reality</link><guid isPermaLink="true">https://maguyva.ai/fi/blog/ground-truths-anchoring-ai-to-reality</guid><description>Tekoälyagentit hallusinoivat itsevarmasti. Ground truthit ovat versioituja, rajattuja tosiasioita, jotka ankkuroivat agenttien käyttäytymisen todellisuuteen. Näin rakensimme ja valvomme niitä.</description><pubDate>Tue, 13 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Tämän postauksen luvut heijastavat järjestelmää julkaisuhetkellä (tammikuu 2026). Katso &lt;a href=&quot;https://maguyva.ai/fi/team&quot;&gt;tiimisivumme&lt;/a&gt; ajantasaiset luvut.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Tekoälyagentit ovat huomattavan kyvykkäitä. Ne osaavat päätellä, syntetisoida ja generoida. Mutta niillä on perustavanlaatuinen heikkous: ne keksivät asioita. Ei pahantahtoisesti, vaan itsevarmasti. Agentti saattaa keksiä API-parametreja, joita ei ole olemassa, viitata konfiguraatioihin, joita ei koskaan määritelty, tai soveltaa malleja koulutusdatastaan, jotka ovat ristiriidassa todellisen arkkitehtuurisi kanssa.&lt;/p&gt;
&lt;p&gt;Vakiokorjaus on “anna agentille lisää kontekstia”. Mutta konteksti voi olla ristiriitainen. Dokumentaatio ajautuu erilleen toteutuksesta. Kommentit valehtelevat. Jopa koodi voi harhauttaa, jos sitä luetaan ymmärtämättä tarkoitusta.&lt;/p&gt;
&lt;p&gt;Tarvitsimme jotain eksplisiittisempää. Jotain, mitä ei voisi jättää huomiotta tai tulkita väärin. Jotain, joka ankkuroisi agentit todennettavaan todellisuuteen.&lt;/p&gt;
&lt;p&gt;Kutsumme niitä Ground Truthiksi.&lt;/p&gt;
&lt;h2 id=&quot;mikä-on-ground-truth&quot;&gt;Mikä on Ground Truth?&lt;/h2&gt;
&lt;p&gt;Ground truth on eksplisiittinen, versioitu tosiasiaväite, jota agenttien täytyy kunnioittaa. Se ei ole dokumentaatiota. Se ei ole kommentti. Se on itsenäinen, keskeinen entiteetti järjestelmässä, jolla on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Yksilöllinen tunniste&lt;/strong&gt; (kuten &lt;code&gt;GT-MAG-015&lt;/code&gt; tai &lt;code&gt;GT-MAG-036&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Elinkaaren tila&lt;/strong&gt; (nykyinen, alustava tai vanhentunut)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Laajuus&lt;/strong&gt; (koko alustan kattava, pakettikohtainen tai toimialuesidonnainen)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Todisteet&lt;/strong&gt; (tiedostopolut, URL-osoitteet tai viittaukset, jotka todistavat väitteen)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agenttiohjeistus&lt;/strong&gt; (eksplisiittiset tee/vältä-ohjeet)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tässä on esimerkki Maguyva-koodiälyalustaltamme:&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;Tämä ei ole proosaa. Se on sopimus. Kun agentti kohtaa tämän ground truthin, se tietää:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Oletusarvo on deterministinen (tyhjät tulokset, ei likimääräisiin osumiin perustuvia arvauksia)&lt;/li&gt;
&lt;li&gt;On tiettyjä parametreja (&lt;code&gt;find_similar&lt;/code&gt;, &lt;code&gt;exact_match&lt;/code&gt;) määritellyllä käyttäytymisellä&lt;/li&gt;
&lt;li&gt;Todisteita on olemassa tietyissä tiedostoissa, jotka voidaan varmentaa&lt;/li&gt;
&lt;li&gt;Väite varmennettiin tiettynä päivänä&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;ground-truth--rekisterin-anatomia&quot;&gt;Ground Truth -rekisterin anatomia&lt;/h2&gt;
&lt;p&gt;Ground truthit elävät YAML-rekistereissä kohdassa &lt;code&gt;ai_assets/reference/ground_truths.yaml&lt;/code&gt;. Jokaisella paketilla tai toimialueella voi olla oma rekisterinsä. Rakenne on:&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;Rekisteri sisältää metadataa itse kokoelmasta, renderöintikonfiguraation dokumentaation generointia varten sekä itse väitteet. Jokainen väite noudattaa tiukkaa skeemaa, jonka Pydantic-mallit validoivat:&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;miten-agentit-pääsevät-käsiksi-ground-truthiin&quot;&gt;Miten agentit pääsevät käsiksi ground truthiin&lt;/h2&gt;
&lt;p&gt;Ground truthit paljastetaan useiden kanavien kautta:&lt;/p&gt;
&lt;h3 id=&quot;1-renderöity-dokumentaatio&quot;&gt;1. Renderöity dokumentaatio&lt;/h3&gt;
&lt;p&gt;Komento &lt;code&gt;orkestra sync&lt;/code&gt; muuntaa YAML-rekisterit luettavaksi markdowniksi:&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;Tämä generoi &lt;code&gt;GROUND_TRUTHS.md&lt;/code&gt;-tiedostoja, jotka sisällytetään agentin kontekstiin. Renderöity tuloste ryhmittelee väitteet tilan ja kategorian mukaan:&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-haku&quot;&gt;2. CLI-haku&lt;/h3&gt;
&lt;p&gt;Agentit, joilla on shell-pääsy, voivat hakea ground truthia ohjelmallisesti:&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;Hakufunktio pisteyttää osumat useissa kentissä painotetulla relevanssilla:&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-kontekstin-kokoonpano&quot;&gt;3. Kontekstin kokoonpano&lt;/h3&gt;
&lt;p&gt;Kun agentit renderöidään YAML-määrittelyistä, niiden konteksti voi viitata ground truth -rekistereihin:&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;Tämä varmistaa, että relevantit ground truthit ladataan ennen kuin agentti aloittaa työn.&lt;/p&gt;
&lt;h2 id=&quot;ground-truthien-kategoriat&quot;&gt;Ground truthien kategoriat&lt;/h2&gt;
&lt;p&gt;Kun tarkastelemme rekisterejämme, ground truthit ryhmittyvät useisiin malleihin:&lt;/p&gt;
&lt;h3 id=&quot;tuoteperiaatteet&quot;&gt;Tuoteperiaatteet&lt;/h3&gt;
&lt;p&gt;Rajoitteet sille, mitä tuote on ja mitä se ei ole:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Maguyvalla on vain lukuoikeus käyttäjän repositorioihin; ainoa resurssi, jota ei voi rakentaa uudelleen, on maksullinen upotuscache.” (GT-MAG-001)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;arkkitehtuurin-rajat&quot;&gt;Arkkitehtuurin rajat&lt;/h3&gt;
&lt;p&gt;Missä vastuut sijaitsevat ja miksi:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Putken ja Maguyvan rajat ovat tarkoituksellisia: putki on uudelleenkäytettävä, Maguyva pitää sisällään koodikohtaisen logiikan, ja CQRS erottaa vaiheen kirjoitukset palvelimen lukuoperaatioista.” (GT-MAG-006)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;anti-hallusinaatiosäännöt&quot;&gt;Anti-hallusinaatiosäännöt&lt;/h3&gt;
&lt;p&gt;Eksplisiittiset toimeksiannot, jotka pitävät työkalusopimukset deterministisinä pääteltyjen sijaan:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Sumea symbolivastaavuus otetaan käyttöön erikseen &lt;code&gt;find_similar=true&lt;/code&gt;:n kautta. Oletuskäyttäytyminen palauttaa tyhjiä tuloksia olemattomille symboleille; &lt;code&gt;exact_match=true&lt;/code&gt; pakottaa tarkan vastaavuuden ja poistaa käytöstä kaikki sumeat varajärjestelyt.” (GT-MAG-015)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;laatuportit&quot;&gt;Laatuportit&lt;/h3&gt;
&lt;p&gt;Standardit, joita täytyy ylläpitää:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Muutokset jaettuun infrastruktuuriin (post_filters.py, suhdepoimijat, jaetut käsittelijät) TÄYTYY validoida KAIKKIA tuettuja kieliä vasten täyden manifestin generoinnilla ennen committia. Yhden kielen validointi ei riitä jaetulle koodille.” (GT-MAG-036)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;koodimallit&quot;&gt;Koodimallit&lt;/h3&gt;
&lt;p&gt;Toteutusvaatimukset:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Käytä &lt;code&gt;asyncio.to_thread()&lt;/code&gt; CPU-sidonnaiselle työlle asynkronisissa konteksteissa; vanhentunutta &lt;code&gt;loop.run_in_executor()&lt;/code&gt;-mallia ei tule käyttää uudessa koodissa.” (GT-MAG-018)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;ground-truthin-elinkaari&quot;&gt;Ground truthin elinkaari&lt;/h2&gt;
&lt;p&gt;Ground truthit eivät ole staattisia. Ne kehittyvät määritellyn elinkaaren kautta:&lt;/p&gt;
&lt;h3 id=&quot;alustava&quot;&gt;Alustava&lt;/h3&gt;
&lt;p&gt;Ehdotettu totuus arvioinnin alla. Väite on kirjattu, mutta se saattaa muuttua:&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;nykyinen&quot;&gt;Nykyinen&lt;/h3&gt;
&lt;p&gt;Varmennettu totuus, jota agenttien täytyy kunnioittaa. Todisteet on validoitu:&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;vanhentunut&quot;&gt;Vanhentunut&lt;/h3&gt;
&lt;p&gt;Totuus, joka ei enää päde. Säilytetty historiallisena viitteenä viittauksella siihen, mikä sen korvasi:&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;miksi-ei-vain-dokumentaatiota&quot;&gt;Miksi ei vain dokumentaatiota?&lt;/h2&gt;
&lt;p&gt;Dokumentaatio palvelee eri tarkoitusta. Se selittää. Se opettaa. Se voi olla epämääräistä, se voi käyttää täsmentäjiä kuten “yleensä” tai “tyypillisesti”.&lt;/p&gt;
&lt;p&gt;Ground truthit eivät voi olla epämääräisiä. Ne ovat väitteitä. Ne joko pätevät tai eivät.&lt;/p&gt;
&lt;p&gt;Tarkastele eroa:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dokumentaatio:&lt;/strong&gt; “API palauttaa yleensä tyhjiä tuloksia, kun symbolia ei löydy, vaikka sumea vastaavuus saattaa olla käytössä joissakin konfiguraatioissa.”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ground Truth:&lt;/strong&gt; “Oletuskäyttäytyminen palauttaa tyhjiä tuloksia olemattomille symboleille; &lt;code&gt;exact_match=true&lt;/code&gt; pakottaa tarkan vastaavuuden ja poistaa käytöstä kaikki sumeat varajärjestelyt.”&lt;/p&gt;
&lt;p&gt;Ensimmäinen on hyödyllinen ihmisille, jotka opettelevat järjestelmää. Toinen on toimintakelpoinen agenteille, jotka tekevät päätöksiä.&lt;/p&gt;
&lt;h2 id=&quot;agenttiohjeistus-tee-ja-vältä&quot;&gt;Agenttiohjeistus: tee ja vältä&lt;/h2&gt;
&lt;p&gt;Jotkin ground truthit sisältävät eksplisiittistä agenttiohjeistusta:&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;Tämä poistaa epäselvyyden. Tämän lukeva agentti tietää, ei vain mikä on totta, vaan mitä toimia se totuus edellyttää.&lt;/p&gt;
&lt;h2 id=&quot;varmennus-ja-ylläpito&quot;&gt;Varmennus ja ylläpito&lt;/h2&gt;
&lt;p&gt;Ground truthit vaativat ylläpitoa. Seuraamme:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;last_verified&lt;/strong&gt;: milloin joku vahvisti väitteen yhä pätevän&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;evidence&lt;/strong&gt;: tiedostot, jotka todistavat väitteen (voidaan tarkistaa olemassaolon suhteen)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;source&lt;/strong&gt;: mistä totuus on peräisin (CLI-tarkastus, arkkitehtuurikatselmus, insidentin jälkeinen oppiminen)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ground truth, jonka varmennuspäivämäärät ovat vanhentuneet tai todistelinkit rikki, on signaali tutkia asiaa. Joko totuus on yhä voimassa ja tarvitsee uudelleenvarmennuksen, tai todellisuus on muuttunut ja totuus tarvitsee päivityksen.&lt;/p&gt;
&lt;h2 id=&quot;todellisia-esimerkkejä-tuotannosta&quot;&gt;Todellisia esimerkkejä tuotannosta&lt;/h2&gt;
&lt;h3 id=&quot;turvallisuusraja&quot;&gt;Turvallisuusraja&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;Tämä ground truth estää luokan harhaanjohtavia “turvallisuusparannuksia”, jotka rikkoisivat tuotteen.&lt;/p&gt;
&lt;h3 id=&quot;poiminta-ajan-tarkkuus&quot;&gt;Poiminta-ajan tarkkuus&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;Tämä syntyi tuskallisesta kokemuksesta. Agentit paikkasivat epäonnistuvia kielipaketteja lisäämällä vain validaattorille suunnattuja suodattimia, jotka saivat testitulokset näyttämään paremmilta, kun taas tuotannossa toimiva Maguyva-poimija yhä lähetti vääriä reunoja. Sääntö pakottaa korjaukset takaisin todelliselle polulle: YAML-konfiguraatioon, kyselyihin tai käsittelijöihin.&lt;/p&gt;
&lt;h3 id=&quot;monitasoinen-suodatus&quot;&gt;Monitasoinen suodatus&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;Tämä estää agentteja lisäämästä suodattimia väärään paikkaan, mikä on yleinen virhe, joka aiheutti tarkkuusregressioita.&lt;/p&gt;
&lt;h2 id=&quot;integrointi-orkestrointijärjestelmään&quot;&gt;Integrointi orkestrointijärjestelmään&lt;/h2&gt;
&lt;p&gt;Ground truthit ovat yksi kerros laajemmassa kontekstijärjestelmässä:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Arkkitehtoniset päätökset (ADR:t)&lt;/strong&gt; - kirjaavat, miksi valitsimme lähestymistavan A tavan B sijaan&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ground Truthit&lt;/strong&gt; - toteavat, mikä on ehdottomasti totta juuri nyt&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Toimialuemallit&lt;/strong&gt; - kuvaavat, miten asiat tehdään oikein&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Anti-mallit&lt;/strong&gt; - kuvaavat, mitä välttää ja miksi&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Järjestelmässä työskentelevällä agentilla on pääsy kaikkiin neljään. Ground truthit tarjoavat tosiasiallisen ankkurin, kun taas päätökset selittävät historiaa, mallit ohjaavat toteutusta ja anti-mallit varoittavat sudenkuopista.&lt;/p&gt;
&lt;h2 id=&quot;vaikutuksen-mittaaminen&quot;&gt;Vaikutuksen mittaaminen&lt;/h2&gt;
&lt;p&gt;Ground truthien käyttöönoton jälkeen olemme havainneet:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vähemmän “korjaa hallusinoitu korjaus” -kiertoja&lt;/li&gt;
&lt;li&gt;Itsevarmempaa agentin päätöksentekoa, kun tosiasiat ovat selkeitä&lt;/li&gt;
&lt;li&gt;Parempia PR-katselmuksia, koska odotukset ovat eksplisiittisiä&lt;/li&gt;
&lt;li&gt;Lyhentynyt perehdytysaika uusille agenteille (ja ihmisille)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ground truthien ylläpitoon investoiminen maksaa itsensä takaisin vähentyneenä vianetsintänä ja selkeämpinä järjestelmärajoina.&lt;/p&gt;
&lt;h2 id=&quot;aloittaminen&quot;&gt;Aloittaminen&lt;/h2&gt;
&lt;p&gt;Ground truthin lisäämiseksi järjestelmääsi:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Luo &lt;code&gt;ground_truths.yaml&lt;/code&gt; pakettisi &lt;code&gt;ai_assets/reference/&lt;/code&gt;-hakemistoon&lt;/li&gt;
&lt;li&gt;Määrittele metadata ja renderöintikonfiguraatio&lt;/li&gt;
&lt;li&gt;Lisää väitteet skeeman mukaisesti&lt;/li&gt;
&lt;li&gt;Aja &lt;code&gt;uv run orkestra sync&lt;/code&gt; dokumentaation generoimiseksi&lt;/li&gt;
&lt;li&gt;Sisällytä rekisteri agentin kontekstin kokoonpanoon&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Aloita tosiasioista, jotka aiheuttavat eniten sekaannusta, tai rajoitteista, joita rikotaan useimmin. Ne ovat arvokkaimmat ground truthisi.&lt;/p&gt;
&lt;h2 id=&quot;yhteenveto&quot;&gt;Yhteenveto&lt;/h2&gt;
&lt;p&gt;Tekoälyagentit tulevat hallusinoimaan. Se on niiden luonto. Mutta voimme luoda ympäristöjä, joissa hallusinaatio on rajoitettua, joissa tietyistä tosiasioista ei tingitä, joissa agentit voivat tarkistaa oletuksensa varmennettua todellisuutta vasten.&lt;/p&gt;
&lt;p&gt;Ground truthit eivät ole täydellinen ratkaisu. Ne vaativat ylläpitoa. Ne voivat vanhentua. Ne lisäävät yleiskustannuksia kehitysprosessiin.&lt;/p&gt;
&lt;p&gt;Mutta ne tarjoavat jotain arvokasta: jaetun tosiasioiden sanaston, johon sekä ihmiset että agentit voivat luottaa. Maailmassa, jossa agentit osallistuvat yhä enemmän ohjelmistokehitykseen, tuosta jaetusta perustasta tulee välttämätön.&lt;/p&gt;
&lt;p&gt;Vaihtoehto on loputon kierto agenteista, jotka tekevät itsevarmoja virheitä, ja ihmisistä, jotka korjaavat ne. Ground truthit katkaisevat tuon kierron tekemällä korjauksista eksplisiittisiä ja pysyviä.&lt;/p&gt;
&lt;p&gt;Agenttisi ansaitsevat tietää, mikä on totta. Kerro heille.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Grounding</category></item><item><title>Orkestra: tekoälyagenttien orkestrointi laajassa mittakaavassa</title><link>https://maguyva.ai/fi/blog/orkestra-agent-orchestration</link><guid isPermaLink="true">https://maguyva.ai/fi/blog/orkestra-agent-orchestration</guid><description>Yksi orkestraattori reitittää työtä erikoistuneille tekoälyagenteille, joilla kullakin on omat taitonsa ja muistinsa. Näin Orkestra koordinoi 46 agenttia ja 466 taitoa tuotannossa.</description><pubDate>Tue, 06 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Tämän postauksen luvut heijastavat järjestelmää julkaisuhetkellä (tammikuu 2026). Katso &lt;a href=&quot;https://maguyva.ai/fi/team&quot;&gt;tiimisivumme&lt;/a&gt; ajantasaiset luvut.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Kun aloimme rakentaa Claude Coden kanssa, törmäsimme ongelmaan, jonka jokainen tekoälykoodausavustimia käyttävä tiimi lopulta kohtaa: yksi agentti ei osaa tehdä kaikkea hyvin.&lt;/p&gt;
&lt;p&gt;Voit ohjeistaa agentin olemaan tietokanta-asiantuntija. Tai turvallisuusauditoija. Tai frontend-insinööri. Mutta hetkellä, jolloin pyydät sitä olemaan kaikki kolme samanaikaisesti, laatu kärsii. Konteksti laimenee. Ohjeet ovat ristiriidassa. Agentista tulee yleisosaaja, joka on keskinkertainen kaikessa.&lt;/p&gt;
&lt;p&gt;Joten rakensimme Orkestran.&lt;/p&gt;
&lt;h2 id=&quot;mikä-on-orkestra&quot;&gt;Mikä on Orkestra?&lt;/h2&gt;
&lt;p&gt;Orkestra on agenttien orkestrointijärjestelmä Claude Codelle ja vastaaville tekoälykoodaustyökaluille. Se koordinoi useita erikoistuneita agentteja, joilla kullakin on omat asiantuntemusalueensa, yhden orkestraattorin alaisuudessa, joka reitittää työn oikealle erikoisosaajalle.&lt;/p&gt;
&lt;p&gt;Ajattele sitä henkilöstövuokrausyrityksenä tekoälyagenteille. Orkestraattori vastaanottaa tehtävän, tunnistaa, minkä erikoisosaajan pitäisi käsitellä se, ja delegoi sen oikealla kontekstilla. Kun työ on valmis, tulokset virtaavat takaisin orkestraattorille synteesiä varten.&lt;/p&gt;
&lt;p&gt;Luvut kertovat tarinan:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Komponentti&lt;/th&gt;
&lt;th&gt;Määrä&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Erikoisosaaja-agentit&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Uudelleenkäytettävät taidot&lt;/td&gt;
&lt;td&gt;466&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identiteettiarkkityypit&lt;/td&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ajattelutavat&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kommunikaatiotyylit&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tietämysalueet&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;hahmojärjestelmä-dd-agenteille&quot;&gt;Hahmojärjestelmä: D&amp;amp;D agenteille&lt;/h2&gt;
&lt;p&gt;Orkestran ydinoivallus on se, että agentin käyttäytyminen syntyy kolmesta yhdisteltävästä primitiivistä:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Identiteetti&lt;/strong&gt; määrittelee, &lt;em&gt;mitä&lt;/em&gt; agentti on. Arkkitehti suunnittelee järjestelmärakenteita. Debuggaaja jäljittää epäonnistumiset juurisyihin. Vartija valvoo vaatimustenmukaisuutta ja turvallisuusrajoja. Meillä on 27 identiteettiarkkityyppiä, joita voi sekoittaa.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ajattelutapa&lt;/strong&gt; määrittelee, &lt;em&gt;miten&lt;/em&gt; agentti ajattelee. Analyyttinen ajattelutapa perustaa väitteet todisteisiin ja kvantifioi epävarmuutta. Skeptinen ajattelutapa kyseenalaistaa oletukset ja etsii kumoavaa todistusaineistoa. Tutkiva ajattelutapa omaksuu epäselvyyden ja kokeilee useita lähestymistapoja.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tyyli&lt;/strong&gt; määrittelee, &lt;em&gt;miten&lt;/em&gt; agentti kommunikoi. Tekninen tyyli sisältää tarkat arvot ja viittaa tiettyihin tiedostoihin. Ytimekäs tyyli karsii täytteen ja aloittaa vastauksesta. Diplomaattinen tyyli tasapainottaa rehellisyyden tahdikkuuden kanssa.&lt;/p&gt;
&lt;p&gt;Agentti yhdistää nämä primitiivit:&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;Tämä kokoonpano luo agentin, joka suunnittelee järjestelmiä (arkkitehti), yhdistää tietämystä toimialueiden yli (tietämysarkkitehti), asettaa strategisen suunnan (strategisti), ajattelee todisteina ja datana (analyyttinen) ja kommunikoi ilman täytettä (ytimekäs).&lt;/p&gt;
&lt;p&gt;Voima on yhdistelmien räjähdysmäisessä määrässä. 27 identiteettiä kertaa 11 ajattelutapaa kertaa 10 tyyliä tuottaa lähes 3 000 mahdollista agenttipersoonallisuutta. Mutta määrittelet vain ne yhdistelmät, jotka merkitsevät työllesi.&lt;/p&gt;
&lt;h2 id=&quot;taidot-uudelleenkäytettävät-kyvykkyysmoduulit&quot;&gt;Taidot: uudelleenkäytettävät kyvykkyysmoduulit&lt;/h2&gt;
&lt;p&gt;Taidot ovat tietämystä ja työnkulkuja, joita agentit voivat kutsua. Ne noudattavat porrastettua järjestelmää laajuuden perusteella:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Taso&lt;/th&gt;
&lt;th&gt;Nimi&lt;/th&gt;
&lt;th&gt;Laajuus&lt;/th&gt;
&lt;th&gt;Esimerkki&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;Perusta&lt;/td&gt;
&lt;td&gt;Universaali metodologia&lt;/td&gt;
&lt;td&gt;Testivetoinen kuri, näyttöön perustuva valmistuminen&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K1&lt;/td&gt;
&lt;td&gt;Identiteetit&lt;/td&gt;
&lt;td&gt;Roolipohjaiset työnkulut&lt;/td&gt;
&lt;td&gt;CLI-rajapintastandardit, suorituskykykäsikirja&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K2&lt;/td&gt;
&lt;td&gt;Toimialueet&lt;/td&gt;
&lt;td&gt;Toimialuekohtainen tietämys&lt;/td&gt;
&lt;td&gt;Tietokannan migraatiomallit, todennuksen validointi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K3&lt;/td&gt;
&lt;td&gt;Pinot&lt;/td&gt;
&lt;td&gt;Teknologiakohtainen&lt;/td&gt;
&lt;td&gt;Cloudflare-käyttöönotto, Supabase-operaatiot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K4&lt;/td&gt;
&lt;td&gt;Projekti&lt;/td&gt;
&lt;td&gt;Vain tämä koodikanta&lt;/td&gt;
&lt;td&gt;Projektikohtaiset työnkulut ja käytännöt&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Taidot ladataan laiskasti. Agentti näkee taitojen nimet ja kuvaukset käynnistyksessä, mutta täysi taitosisältö latautuu vasta laukaisuhetkellä. Tämä pitää kontekstin kevyenä ja tekee samalla sadoista taidoista löydettäviä.&lt;/p&gt;
&lt;p&gt;Jokainen taito sisältää:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Selkeät laukaisuehdot (“Käytä tietokantaskeemoja migroitaessa”)&lt;/li&gt;
&lt;li&gt;Askel askeleelta -ohjeistuksen&lt;/li&gt;
&lt;li&gt;Työnkululle sallitut työkalut&lt;/li&gt;
&lt;li&gt;Onnistumiskriteerit ja epäonnistumisen palautumispolut&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Rekisterimme 466 taitoa kattavat kaiken git-worktree-eristyksestä web-tutkimustyönkulkuihin ja käyttöönoton terveystarkistuksiin.&lt;/p&gt;
&lt;h2 id=&quot;miksi-orkestrointi-merkitsee&quot;&gt;Miksi orkestrointi merkitsee&lt;/h2&gt;
&lt;p&gt;Yhden agentin arkkitehtuurit törmäävät seiniin nopeasti:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kontekstin laimeneminen.&lt;/strong&gt; 200k tokenin kontekstiikkuna kuulostaa suurelta, kunnes lataat tietokantaskeemoja, API-dokumentaatiota, testifixtureita ja toimialuetietämystä. Erikoisosaajat voivat työskennellä kohdennetulla kontekstilla.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ohjeiden ristiriidat.&lt;/strong&gt; Agentin ohjeistaminen olemaan “perusteellinen mutta nopea” ja “tarkista kaikki, mutta älä yliteknisoi” luo jännitteen. Erikoisosaajat ratkaisevat tämän selkeällä laajuudella.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Asiantuntemuksen syvyys.&lt;/strong&gt; Yleisosaaja-agentti tietää vähän kaikesta. Erikoisosaaja-agentti, oikean identiteetin ja taitojen kanssa koottuna, tuntee toimialueensa syvällisesti.&lt;/p&gt;
&lt;p&gt;Orkestra toteuttaa litteän orkestroinnin: yksi orkestraattori koordinoi useita erikoisosaajia. Erikoisosaajat eivät voi synnyttää alaerikoisosaajia. Tämä estää monimutkaisuuden räjähdyksen samalla kun se mahdollistaa rinnakkaisen työn.&lt;/p&gt;
&lt;p&gt;Orkestraattorilla on pääsy 2,2 miljoonaan tokeniin tehokasta kapasiteettia: sen oma 200k ikkuna plus 10 samanaikaista alaagenttia, joilla kullakin on 200k. Työ, joka kuluttaisi yhden agentin loppuun, kulkee mukavasti koko laivueen yli.&lt;/p&gt;
&lt;h2 id=&quot;renderöintiputki&quot;&gt;Renderöintiputki&lt;/h2&gt;
&lt;p&gt;Agenttimäärittelyt elävät YAML:ssä. Claude Code lukee Markdownia. Orkestra siltaa tämän kuilun deterministisellä renderöintiputkella:&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;Operaattorit muokkaavat YAML-lähdettä. Ajavat &lt;code&gt;orkestra sync&lt;/code&gt;:n. Renderöity Markdown ilmestyy kohtaan &lt;code&gt;.claude/agents/&lt;/code&gt;. Claude Code ottaa muutokset käyttöön.&lt;/p&gt;
&lt;p&gt;Tämä erottelu palvelee eri yleisöjä:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;YAML-lähde&lt;/strong&gt; sisältää elinkaarimetadataa, tageja, validointisääntöjä ja vanhentumishuomautuksia työkaluille&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Renderöity Markdown&lt;/strong&gt; sisältää vain sen, mitä malli tarvitsee: kuvauksen, työkalut, taidot ja käyttäytymisohjeistuksen&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Putki kokoaa identiteetit, ajattelutavat, tyylit ja taidot yhdeksi yhtenäiseksi kehotteeksi. Arkkitehti-analyyttinen-ytimekäs-agentti saa hyvin erilaisen järjestelmäkehotteen kuin debuggaaja-skeptinen-tekninen-agentti, vaikka ne jakaisivat joitakin taustalla olevia taitoja.&lt;/p&gt;
&lt;h2 id=&quot;toimialuetietämys-neljän-tiedoston-malli&quot;&gt;Toimialuetietämys: neljän tiedoston malli&lt;/h2&gt;
&lt;p&gt;Jokainen tietämysalue noudattaa yhtenäistä rakennetta:&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;Tämä rakenne palvelee agentin kontekstin lataamista. Todennuksen parissa työskentelevä agentti lataa &lt;code&gt;authentication/patterns.md&lt;/code&gt;:n ohjeistusta varten ja &lt;code&gt;authentication/anti-patterns.md&lt;/code&gt;:n tunnettujen sudenkuoppien välttämiseksi. Tiedostot on mitoitettu tehokasta kontekstin lataamista varten: tarpeeksi kohdennettuja ollakseen hyödyllisiä, tarpeeksi kattavia ollakseen auktoritatiivisia.&lt;/p&gt;
&lt;p&gt;Ylläpidämme 21 ylätason toimialuetta, mukaan lukien analytiikka, todennus, data science, infrastruktuuri, koneoppiminen, suorituskyky, turvallisuus ja muut. Jokaisella toimialueella voi olla alitoimialueita hienojakoisempaa tarkkuutta varten.&lt;/p&gt;
&lt;h2 id=&quot;arvot-käyttöjärjestelmä&quot;&gt;Arvot: käyttöjärjestelmä&lt;/h2&gt;
&lt;p&gt;Kaikki agentit jakavat perusarvokerroksen, joka määrittelee, miten ne toimivat:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Yksinkertaisuus edellä.&lt;/strong&gt; Käytä yksinkertaisinta ratkaisua, joka toimii. Lisää monimutkaisuutta vain perustellusti.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Korjaa juurisyyt.&lt;/strong&gt; Älä koskaan tyydy peittämään virheitä. Jos putki epäonnistuu, debuggaa putki. Jos testi epäonnistuu, korjaa koodi tai testi.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Näyttöön perustuva.&lt;/strong&gt; Merkitse väitteet “varmennetuksi” (vertailuarvoilla) tai “arvioiduksi” (oletuksilla). Havaittu kuvio ei tarkoita vahvistettua ongelmaa.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kontekstitalous.&lt;/strong&gt; MCP-työkalut maksavat 0,1 % kontekstista. Tiedostojen lukeminen maksaa 2 % kukin. Sovella toimialueasiantuntemusta ennen koodin tutkimista.&lt;/p&gt;
&lt;p&gt;Nämä arvot leviävät jokaiseen erikoisosaajaan renderöintiputken kautta. Agentti ei voi ohittaa niitä kokoonpanon kautta.&lt;/p&gt;
&lt;h2 id=&quot;cli-ohjaustaso&quot;&gt;CLI: ohjaustaso&lt;/h2&gt;
&lt;p&gt;Orkestra toimitetaan CLI:llä agenttiekosysteemin hallintaan:&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 on totuuden lähde sille, mitä agentteja on olemassa, mitä taitoja niillä on ja onko järjestelmä terve. Se ajaa validoinnin ennen synkronointia ongelmien varhaiseksi kiinni saamiseksi.&lt;/p&gt;
&lt;h2 id=&quot;avoimen-lähdekoodin-näkökohdat&quot;&gt;Avoimen lähdekoodin näkökohdat&lt;/h2&gt;
&lt;p&gt;Rakensimme Orkestran ratkaisemaan oman ongelmamme: tekoälyagenttien koordinoinnin laajassa mittakaavassa monimutkaiselle koodikannalle. Löytämämme mallit eivät ole erityisiä toimialueellemme.&lt;/p&gt;
&lt;p&gt;Hahmojen kokoonpanojärjestelmä (identiteetti + ajattelutapa + tyyli) soveltuu mille tahansa tiimille, joka määrittelee agenttipersoonallisuuksia.&lt;/p&gt;
&lt;p&gt;Taitojen tasojärjestelmä (K0–K4) tarjoaa mentaalisen mallin uudelleenkäytettävien kyvykkyyksien järjestämiseen laajuuden mukaan.&lt;/p&gt;
&lt;p&gt;Renderöintiputken malli (YAML-lähde + templatet + generoidut artefaktit) erottaa työkalujen tarvitsemat tiedot mallin käyttämästä sisällöstä.&lt;/p&gt;
&lt;p&gt;Litteä orkestrointimalli (yksi koordinaattori, monta erikoisosaajaa) välttää monimutkaisuuden mahdollistaen samalla rinnakkaisuuden.&lt;/p&gt;
&lt;p&gt;Tuleeko Orkestrasta avoimen lähdekoodin projekti, riippuu siitä, onko näillä malleilla arvoa muille, jotka rakentavat Claude Coden kanssa. Jos törmäät kuvaamiimme seiniin, arkkitehtuuri saattaa auttaa.&lt;/p&gt;
&lt;h2 id=&quot;mitä-opimme&quot;&gt;Mitä opimme&lt;/h2&gt;
&lt;p&gt;Orkestran rakentaminen opetti meille, ettei orkestrointi tarkoita agenttien tekemistä älykkäämmiksi. Se tarkoittaa niiden tekemistä keskittyneemmiksi.&lt;/p&gt;
&lt;p&gt;Täydellisilläkin ohjeilla toimivan yksittäisen agentin konteksti loppuu silti kesken. Yksi agentti kaikilla taidoilla silti hämmentyy siitä, mitä soveltaa. Yksi agentti, joka yrittää olla kaikkea, tuottaa keskinkertaisia tuloksia kaikkialla.&lt;/p&gt;
&lt;p&gt;Neljäkymmentä erikoisosaajaa, kukin erinomainen toimialueellaan, koordinoituna orkestraattorilla, joka tietää milloin delegoida: näin me toimitamme.&lt;/p&gt;
&lt;p&gt;Luvut merkitsevät vähemmän kuin arkkitehtuuri. Saatat tarvita viisi agenttia tai viisikymmentä. Periaate pysyy: kokoonpano kyvykkyyden sijaan, erikoistuminen yleisosaamisen sijaan, koordinointi yksilöllisen sankaruuden sijaan.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Orkestra tehostaa Maguyva-palvelun, koodiälyalustamme, takana olevaa agenttiekosysteemiä. Haluatko tietää lisää? Ota yhteyttä tiimiin.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Open Source</category></item></channel></rss>