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.
- PHP
- TypeScript
- Rust
- MCP
- Claude Code
GitHub (opent in een nieuw tabblad)README (opent in een nieuw tabblad)Changelog (opent in een nieuw tabblad)
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.

/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.
| Notitie | Wanneer |
|---|---|
| Read | na een Read van een bestand waar veel van afhangt of waarvoor een policy geldt |
| edit | na een edit van een bestand waar veel van afhangt en dat de Read-notitie miste |
| einde van de beurt | na een beurt die bestanden bewerkte, zodra die gescand is: de boundary-schendingen die erbij kwamen en de tests die de wijzigingen raken |
| commit | na 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:
knossos: src/Query/ResultEnvelope.php (core) has 47 dependent files. Policy: core may not depend on php-worker, tests.En na een commit:
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.

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.

Cycles tekent elke dependency-cycle als een rij blokken, 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:
knossos · 2 files → 37 dependents · 4 tests · as of 12s ago · reaching core, http +1In 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.

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

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

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:
git clone https://github.com/AraneaDev/knossos.git /absolute/path/to/knossos
cd /absolute/path/to/your-project
/absolute/path/to/knossos/tools/installDie 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:
ln -s /absolute/path/to/knossos/bin/knossos ~/.local/bin/knossos
knossos install-agent-plugin # preview
knossos install-agent-plugin --data-dir="$HOME/.knossos" --executeStart 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:
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/projectCI. 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:
knossos quality-gate <project-id> <baseline-snapshot> --budgets=knossos-budgets.json --sarif --jsonExitcode 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
| Taal | Extractie | Framework-verrijking |
|---|---|---|
| PHP 8.3+ | Declaraties, inheritance, calls, constructie, types, injection | Laravel, Symfony |
| TypeScript/JavaScript | Symboolresolutie via de compiler, imports, calls, types, project references, Vue/Svelte/Astro-componenten | Next.js, React, Vue, stores, endpoints |
| Python 3.11+ | AST uit de standaardbibliotheek in een geïsoleerde interpreter; manifests, packages, calls, routes | FastAPI, Django, Flask, Celery |
| Rust 1.82+ | Parsing met syn; Cargo-manifests, impls over bestanden heen, routes. Roept nooit cargo of rustc aan | axum, 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.