Naar inhoud

Knossos

Het labyrint één keer in kaart, op je scherm naast de sessie en in de notities die je agent leest terwijl hij werkt.

Knossos (Κνωσός) is het bronstijdpaleis in het hart van Minoïsch Kreta, een complex zo uitgestrekt dat de Griekse mythologie het onthield als het Labyrint, de doolhof die Daedalus voor de Minotaurus bouwde en die niemand kon doorkruisen zonder een draad om de weg terug te vinden. Ariadne gaf die draad aan Theseus.

Wat het doet ​

Vraag een agent wat er van een class afhangt en hij leest de broncode opnieuw, elke sessie, en vertelt je wat hij eruit heeft afgeleid. Knossos scant de repository één keer en bouwt er een lokale graph van: de componenten en de relaties ertussen, elk met het bestand en de regel die dat bewijzen. Wat statische analyse niet kan bewijzen, krijgt een label met de confidence en de herkomst.

In Claude Code werkt die graph op twee plekken tegelijk. /knossos opent hem als live paneel naast je sessie, en de agent krijgt een korte notitie op het moment dat hij een bestand leest, bewerkt of commit dat ertoe doet: hoeveel ervan afhangt, welke regels ervoor gelden en welke tests het raken.

Een Claude Code-sessie met het Knossos-paneel: /knossos opent het, de tabs Hubs, Cycles en Boundaries komen langs, de finder opent de blast radius van één component, daarna een edit van één regel, de band die samenvat wat die raakt, en de diff op de tab Changes
Een sessie: /knossos opent het paneel, een rondgang langs de tabs en een zoekactie, dan een edit, de band die de wijziging samenvat, en de diff in Changes.

Wat je agent te horen krijgt ​

Vier notities, elk één regel, elk één keer gezegd, op het moment dat het helpt. Geen ervan houdt een tool call tegen.

NotitieWanneer
Readna een Read van een bestand waar veel van afhangt of waarvoor een policy geldt
editna een edit van een bestand waar veel van afhangt en dat de Read-notitie miste
einde van de beurtna een beurt die bestanden bewerkte, zodra die gescand is: de boundary-schendingen die erbij kwamen en de tests die de wijzigingen raken
commitna een commit, over wat de wijzigingen van de sessie achterlaten

Een Read van een druk bestand in een boundary met regels ziet er zo uit:

text
knossos: src/Query/ResultEnvelope.php (core) has 47 dependent files. Policy: core may not depend on php-worker, tests.

En na een commit:

text
knossos: this session's changes carry 1 changed file no test reaches (src/Kernel.php); 1 dependency cycle new since the session began (Router → Kernel). Check them before you push.

De agent kan ook zelf naar één bestand vragen voordat hij het bewerkt. knossos_context geeft in één tool call de boundary van dat bestand en de regels die ervoor gelden, de dependents, de tests die het raken, de laatste commits en of deze sessie het al heeft gewijzigd.

Elke sessie begint met een korte briefing: of de graph nog klopt met de bestanden, en de regels en vastgelegde notities van het project. Een routing-skill vertelt de agent welke vragen naar de graph gaan en welke bij grep blijven.

Het paneel ​

/knossos opent de architectuur van het project op acht tabs: Overview, Hubs, Boundaries, Cycles, Issues, Changes, Branch en Churn. Het paneel opent op Overview.

De tab Overview naast Claude Code: de belangrijkste aantallen, deze sessie, de opbouw naar boundary, taal en soort, hoe de dependencies zich concentreren en de stromen tussen boundaries
Overview: wat er sinds de vorige scan veranderde, wat deze sessie aanraakte en waar de dependencies zich ophopen.

Hubs toont de componenten waar het meest van afhangt. Op een breed paneel staat de omgeving van de gemarkeerde component naast de lijst, zodat je ziet wat een hub meetrekt zonder de tab te verlaten.

De tab Hubs: de componenten waar het meest van afhangt, met ResultEnvelope gemarkeerd en de dependencies daarvan naast de lijst getekend
Hubs: de componenten waar het meest van afhangt, met de omgeving van de gemarkeerde naast de lijst.

Cycles tekent elke dependency-cycle als een rij blokken, van het eerste lid terug naar het begin.

De tab Cycles: een dependency-cycle van dertien leden, getekend als een slinger van blokken met een pijl terug naar het begin, en daaronder de lijst van alle cycles
Cycles: elke dependency-cycle als blokken getekend, van het eerste lid terug naar het begin.

Na een beurt die bestanden bewerkte, zegt één regel boven de prompt hoe ver de wijziging reikt:

text
knossos · 2 files → 37 dependents · 4 tests · as of 12s ago · reaching core, http +1

In Changes staat de rest: elk bestand dat sinds het begin van de sessie veranderde, met de dependents, de tests die het raken en de diff.

De tab Changes nadat een beurt hooks/lib/paths.ts bewerkte: één scan uit deze sessie, het bestand met zijn twee dependents en geen test die het raakt, en de detailweergave met de diff sinds het begin van de sessie
Changes: elk bestand dat sinds het begin van de sessie veranderde, met de dependents, de tests die het raken en de diff.

Branch vergelijkt de checkout met de merge base, zodat je ziet wat een branch toevoegde voordat je een pull request opent.

De tab Branch: wat deze checkout toevoegde ten opzichte van de merge base met main, als nieuwe dependencies over boundaries heen, hubs die groeiden, nieuwe dead code en churn-hotspots
Branch: wat deze branch toevoegde ten opzichte van de merge base, van nieuwe boundary-overschrijdingen tot nieuwe dead code.

Elke component en elk bestand heeft een detailweergave, met de blast radius als ringen getekend. De finder brengt je op naam bij elke component.

De finder over het paneel: ResultEnv getypt, twintig treffers met ResultEnvelope bovenaan gemarkeerd
De finder: f, een paar letters van een naam, en Enter opent die component.

Een live watcher, één per project en gedeeld door je sessies, scant opnieuw zodra er bestanden veranderen. Zo volgen het paneel en de notities ook wijzigingen van iemand anders. Het paneel houdt nooit een edit tegen, begint nooit zelf een beurt en zwijgt als er iets ontbreekt wat het nodig heeft.

Snel starten ​

Knossos staat nog niet op Packagist of in een container-registry, dus je installeert het vanuit een checkout. Je hebt PHP 8.3 of nieuwer nodig, Node 22 of nieuwer, Python 3.11 of nieuwer, Composer 2 en Git. Cargo 1.82 of nieuwer is optioneel en voegt Rust-scanning toe.

Draai de installer vanuit het project dat je als eerste wilt scannen:

bash
git clone https://github.com/AraneaDev/knossos.git /absolute/path/to/knossos
cd /absolute/path/to/your-project
/absolute/path/to/knossos/tools/install

Die maakt de datamap ~/.knossos aan met een roots-bestand dat dit project toestaat, scant het en registreert de MCP-server bij Claude Code op user-scope. Installeer daarna de plugin, die het paneel, de notities, de briefing en de skill meebrengt:

bash
ln -s /absolute/path/to/knossos/bin/knossos ~/.local/bin/knossos
knossos install-agent-plugin                                        # preview
knossos install-agent-plugin --data-dir="$HOME/.knossos" --execute

Start een nieuwe sessie en typ /knossos.

Er is bewust geen publieke marketplace-route. Een kloon uit een marketplace heeft geen vendor/, dus zijn eigen knossos zou niet draaien, en aan een installatie die elke keer zwijgend faalt heeft niemand iets.

Andere ingangen ​

MCP, voor elke agent. Dezelfde graph beantwoordt 33 MCP-tools: impactanalyse, call sites, paden tussen componenten, cycles, hubs, kandidaten voor dead code, review van een wijziging, test-impact, snapshots en trends. Codex en elke client die de gangbare stdio-entry onder mcpServers leest, kunnen ze gebruiken. Het paneel en de notities zijn Claude Code-hooks en draaien nergens anders.

De CLI. Elke tool behalve server_info is ook een command, met --json voor scripts:

bash
knossos impact-analysis <project-id> 'App\Billing\Invoice'
knossos review-diff <project-id> --base-ref=main --policies=architecture-policies.json
knossos watch /absolute/path/to/project

CI. Boundary-policies leggen vast welk deel van de codebase van welk ander deel mag afhangen, en quality budgets begrenzen achteruitgang, zoals nieuwe cycles of boundary-schendingen, ten opzichte van een goedgekeurde baseline:

bash
knossos quality-gate <project-id> <baseline-snapshot> --budgets=knossos-budgets.json --sarif --json

Exitcode 0 betekent dat elke gate is geslaagd, 1 dat er een gate faalde en 2 dat het resultaat niet te beoordelen was. Met --sarif krijgt je CI de bevindingen in een formaat dat het al leest.

Talen ​

TaalExtractieFramework-verrijking
PHP 8.3+Declaraties, inheritance, calls, constructie, types, injectionLaravel, Symfony
TypeScript/JavaScriptSymboolresolutie via de compiler, imports, calls, types, project references, Vue/Svelte/Astro-componentenNext.js, React, Vue, stores, endpoints
Python 3.11+AST uit de standaardbibliotheek in een geïsoleerde interpreter; manifests, packages, calls, routesFastAPI, Django, Flask, Celery
Rust 1.82+Parsing met syn; Cargo-manifests, impls over bestanden heen, routes. Roept nooit cargo of rustc aanaxum, actix, Rocket

Een repository met meerdere talen komt samen in één graph, zodat een impactvraag een taalgrens oversteekt zoals de code dat doet. Elke relatie heeft een confidence, certain, probable of possible, en een pad is zo zeker als zijn zwakste edge.

Wat het niet doet ​

Scannen installeert nooit dependencies, voert nooit projectcode uit en start nooit een framework op. Workers draaien onder toezicht en met een resource-limiet, en hun output geldt als onbetrouwbaar tot die de validatie doorstaat.

De server leest alleen de roots die je hebt toegestaan. Knossos breidt die lijst tijdens normaal gebruik nooit zelf uit: alleen de installer en knossos allow-root --execute schrijven erin.

Een mislukte scan wordt nooit actief. De laatste complete scan blijft de graph die je bevraagt, en de database is afgeleid van de broncode, dus je kunt hem altijd opnieuw opbouwen.