🎯 OBJECTIF
Comprendre comment :
--update sémantique), git hooks, merge driver🧠 MODÈLE MENTAL
Un assistant de code est excellent pour lire un fichier, et catastrophique pour comprendre comment 200 fichiers se connectent. Sans carte structurelle, il infère du générique : il ne sait pas que telle classe est le hub dont dépend tout le reste, ni que telle préoccupation transverse devrait se traiter au niveau de l'enregistrement plutôt qu'en créant un nouveau wrapper. À chaque question, il re-lit des fichiers en série, brûle du contexte et rate les liens inter-modules.
Graphify pré-calcule cette carte une seule fois : il parse le repo en graphe — nœuds = fichiers / fonctions / classes / concepts, arêtes = imports / appels / références — que l'agent interroge à la demande. L'agent cesse de grep à l'aveugle ; il navigue une structure. Résultat concret : des suggestions qui collent à l'architecture réelle, pour une fraction des tokens.
# WHY:, une docstring ou une décision de design extraite comme nœud, relié au code qu'il explique (rationale_for).EXTRACTED (vue dans le code), INFERRED (déduite par le LLM), AMBIGUOUS (incertaine).serve.py).Graphify enchaîne deux passes (AST local, puis sémantique LLM) puis clusterise le résultat.
flowchart LR
SRC[Repo<br/>code, docs, PDF, images] --> P1[Pass 1<br/>tree-sitter AST<br/>local, 0 token]
P1 --> P2[Pass 2<br/>extraction sémantique<br/>LLM, optionnelle]
P1 --> G[NetworkX graph<br/>+ clustering Leiden]
P2 --> G
G --> OUT1[graph.json<br/>requêtable]
G --> OUT2[GRAPH_REPORT.md<br/>god nodes, connexions]
G --> OUT3[graph.html<br/>visu interactive]mermaid--code-only.EXTRACTED / INFERRED / AMBIGUOUS.🔑 Conclusion clé
Le code source ne quitte jamais la machine (passe 1, tree-sitter local). Seules des descriptions sémantiques des docs partent vers le LLM — jamais le code brut — et --code-only coupe même ça.
graph.html est une visu force-directed interactive : chaque nœud est une entité, la couleur encode la communauté Leiden, la taille encode le degré (les gros = god nodes). On clique un nœud, on filtre par communauté, on cherche.

Rendu réel de graph.html : les clusters de couleurs sont les communautés Leiden, les gros nœuds les god nodes. (source : aieatingtheworld.com)
Le rapport GRAPH_REPORT.md en extrait le signal :
# NOTE: / # WHY:, décisions de design, rattachés au code via des arêtes rationale_for.Deux étapes, une seule fois. Prérequis : Python 3.10+, et de préférence uv (ou pipx).
# Étape 1 — le moteur (package PyPI : graphifyy, double y)
uv tool install graphifyy
# Étape 2 — enregistrer le skill /graphify auprès de l'assistant
graphify install # Claude Code par défaut ; --platform pour les autresbashPuis, dans le repo : /graphify .
💡 En IDE, aucune clé API nécessaire
Via le skill /graphify, la passe sémantique utilise le modèle déjà configuré dans ta session — pas de clé à poser. Les variables ANTHROPIC_API_KEY / OPENAI_API_KEY ne servent qu'en mode headless CI (graphify extract).
Extras à la demande (le cœur est code-only) : graphifyy[pdf], [office] (.docx/.xlsx), [video] (transcription), [mcp] (serveur MCP), [all].
Ce qu'il ignore. Un .graphifyignore (syntaxe .gitignore) à la racine. Le .gitignore est respecté automatiquement et les deux sont fusionnés — .graphifyignore exclut davantage, jamais ne réinclut ce que git exclut.
⚠️ Le piège du nom
Le package à un seul y (graphify) est un projet différent et sans rapport. Toujours graphifyy. Si graphify: command not found : uv tool update-shell puis nouveau terminal.
Le skill expose le slash command /graphify (build) et une couche « always-on » qui pousse l'assistant à préférer le graphe pour les questions de code (voir §6). Certaines plateformes bundlent les deux.
| Assistant | Commande |
|---|---|
| Claude Code (Mac / Linux / Win) | graphify install (auto-détecté) |
| Cursor | graphify cursor install |
| GitHub Copilot CLI | graphify copilot install |
| VS Code Copilot Chat | graphify vscode install |
| Gemini CLI | graphify gemini install |
| Codex | graphify codex install (⚠ $graphify, pas /graphify) |
| Cross-framework (Agent Skills) | graphify agents install |
Forme générique pour les ~20 plateformes : graphify install --platform <nom>.
/graphify partout. Cas normal.--project) — écrit le skill dans le repo (.claude/skills/… ou .agents/skills/…), pour le commit et le partager à l'équipe.Le graphe, lui, est toujours par repo (graphify-out/). Pas de graphe « global » multi-repos sauf dossier parent commun.
⚠️ Copilot + --project : chemin de scan incohérent
Sur Copilot CLI, --project écrit dans .copilot/skills/, mais Copilot ne scanne que .github/skills/, .claude/skills/ ou .agents/skills/. Résultat : /graphify non reconnu, copie manuelle nécessaire. Pour Copilot, rester en global.
💡 Codex — extraction parallèle
multi_agent = true sous [features] dans ~/.codex/config.toml.
/graphify . # construit le graphe du dossier courant
/graphify . --code-only # AST seul, 0 appel LLM (run rapide)
/graphify ./docs --update # re-extrait uniquement les fichiers changés
/graphify --watch # rebuild auto en tâche de fond quand le code change
graphify query "comment l'auth parle à la base ?" # BFS — contexte large (défaut)
graphify query "..." --dfs # DFS — trace un chemin précis
graphify query "..." --budget 1500 # plafonne la réponse à N tokens
graphify path "AuthModule" "Database" # plus court chemin entre 2 concepts
graphify explain "RateLimiter" # explication en clair d'un nœud
graphify export callflow-html # page d'archi Mermaid
graphify add https://arxiv.org/abs/1706.03762 # ajoute un doc au graphebashC'est l'intérêt réel. Après graphify <plateforme> install, une section est écrite dans le fichier d'instructions de l'assistant (CLAUDE.md, AGENTS.md, .cursor/rules/…) qui lui dit de consulter le graphe avant de répondre aux questions de code, et de le reconstruire après un changement. Tu ne tapes plus graphify query toi-même — tu poses ta question en langage naturel, l'agent lance la requête en arrière-plan.
Sur Claude Code et Gemini CLI, un hook PreToolUse intercepte les appels Glob / Grep (et sur Claude Code, les Read fichier par fichier) et redirige vers GRAPH_REPORT.md / graphify query avant que l'agent parte lire l'arbre brut.
Échange typique — tu ne mentionnes jamais Graphify :
Toi : « pourquoi le rate-limiter touche la base directement ? »
IA : (lance graphify query en arrière-plan, lit un sous-graphe borné)
→ « RateLimiter → DbPool via checkQuota(). La rationale attachée
(# WHY:) indique que le cache a été retiré pour la cohérence forte. »
(Re)construire reste aussi en langage naturel : « indexe ce repo » → l'agent lance /graphify . ; « réindexe les docs » → /graphify --update. Au premier build, le skill colle dans le chat les 3 sections clés du rapport (god nodes, surprises, questions suggérées) et propose d'explorer.
💡 La bascule mentale
À la main tu pilotes le graphe (query, path, explain). Via l'IA tu oublies le graphe : tu discutes normalement, la couche always-on route vers lui. Les deux modes lisent le même graph.json.
C'est le payoff de l'usage via l'IA (§6). Sans graphe, répondre à « comment l'auth parle à la base ? » force l'agent à grep puis lire des dizaines de fichiers en série — chaque lecture consomme des tokens. Avec le graphe, la même question déclenche une requête bornée qui renvoie un petit sous-graphe (quelques centaines de tokens) au lieu du contenu brut.
sequenceDiagram
participant Dev as Développeur
participant AI as Assistant
participant G as graphify-out/graph.json
Dev->>AI: "Comment l'auth parle à la base ?"
Note over AI: sans graphe → lit N fichiers en série (coûteux)
AI->>G: graphify query "..."
G-->>AI: sous-graphe borné (quelques nœuds)
AI-->>Dev: réponse ancrée sur l'archi réellemermaidChiffres annoncés par le projet : sur un corpus mixte de 52 fichiers (~92k mots), une requête coûte en moyenne ~1,7k tokens contre ~123k en lecture brute — soit 71,5× moins. À plus grande échelle (~500k mots), une requête BFS reste ~2k tokens contre ~670k. Le ratio tient parce qu'une requête renvoie un sous-graphe borné, quasi indépendamment de la taille du repo.
🔑 Conclusion clé
Le gain vient du remplacement de « lire N fichiers » par « lire un sous-graphe borné ». Il n'existe que si la couche always-on est installée (§5) — un graphe construit mais jamais consulté ne fait rien gagner.
Scénario : tu débarques sur un repo que tu ne connais pas — ici le corpus httpx fourni par Graphify (une couche transport HTTP, 6 fichiers Python). Objectif : le comprendre sans lire les 6 fichiers un par un.
1 — Installer + enregistrer (une seule fois sur la machine)
uv tool install graphifyy
graphify install # skill /graphify + couche always-on (Claude Code par défaut)bash2 — Construire le graphe
cd httpx
/graphify .bashGraphify parse le code en AST (local), passe le LLM sur les docstrings et docs, puis clusterise. Sortie dans graphify-out/ : 144 nœuds, 330 arêtes, 6 communautés. Le build de ce corpus est quasi instantané ; sur un gros repo, c'est là que le temps se passe (surtout la passe sémantique).
3 — Lire ce que l'agent te renvoie
Le skill ne te jette pas le graph.json brut : il colle dans le chat 3 sections de GRAPH_REPORT.md, celles qui donnent une prise immédiate —
Client, AsyncClient, Response, Request — les 4 classes dont tout dépend. Tu sais par où entrer dans le code.DigestAuth → Response — l'auth digest lit la réponse pour rejouer la requête signée sur un 401. Un couplage invisible à la simple lecture linéaire.…puis il te propose d'explorer.
4 — Explorer en langage naturel
Tu ne tapes pas graphify query — tu discutes, l'agent interroge le graphe pour toi (mécanique du §6) :
Toi : « comment une requête passe du Client au réseau ? »
IA → Client.send() → _transport → HTTPTransport.handle_request()
(chemin tracé sur le graphe — pas les 6 fichiers relus)
Besoin d'un lien précis entre deux points ? « trace le chemin entre DigestAuth et Response » → l'agent lance un path sous le capot et te rend les sauts intermédiaires.
5 — Modifier le code, garder le graphe frais
Tu ajoutes un RetryTransport. Au git commit, le hook rebuild l'AST : le nouveau nœud et ses arêtes apparaissent dans le graphe, 0 coût API (c'est de l'AST local).
graphify hook install # une seule fois — ensuite automatique à chaque commitbashSi tu avais touché un README ou un doc, il faudrait un /graphify . --update en fin de session pour relancer la passe LLM sur ces fichiers (voir §9 — les deux vitesses).
🔑 Bilan
~2 commandes pour obtenir une carte de l'archi + un point d'entrée (les god nodes), une exploration en langage naturel pour une fraction des tokens, et un graphe qui se maintient seul à chaque commit.
Le point le plus négligé — un graphe périmé ment. Deux vitesses de mise à jour à ne pas confondre :
graphify hook install) rebuild la structure du code (fichiers changés uniquement), instantanément, 0 coût API. callflow-html régénéré. Il ne relance pas la passe sémantique.--update). Pour ré-extraire les docs / markdown / images modifiés (passe LLM), il faut lancer /graphify . --update. Le hook te le signale quand des docs ont bougé.sequenceDiagram
participant Dev as Développeur
participant Hook as post-commit hook
participant AST as Graphify · AST local
participant Sem as Passe sémantique · LLM
participant Out as graphify-out/
Dev->>Dev: édite code + docs
Dev->>Hook: git commit
Hook->>AST: rebuild incrémental (fichiers changés)
AST->>Out: graph.json + callflow-html à jour (structure)
Note over AST,Sem: le hook ne lance PAS la passe sémantique
AST-->>Dev: signale « docs/images changés → --update »
Note over Dev: en fin de session, si des docs ont bougé
Dev->>Sem: /graphify . --update
Sem->>Out: nœuds docs / rationale ré-extraits (LLM)
Dev->>Out: git add graphify-out/ (si commité pour l'équipe)mermaidLes garde-fous qui rendent ça sûr :
--update comme le hook ne retouchent que les fichiers changés (cache SHA256). Markdown : cache frontmatter-aware — changer tags: seul n'invalide rien.graphify hook install installe aussi un git merge driver : graph.json est union-mergé quand deux devs commitent en parallèle — jamais de conflict markers.--force (ou GRAPHIFY_FORCE=1) écrase même si le nouveau graphe a moins de nœuds.--watch (optionnel) — process de fond qui rebuild l'AST à chaque sauvegarde ; utile en workflow multi-agents où plusieurs agents écrivent en parallèle.En équipe. graphify-out/ est fait pour être commité : une personne build + commit, les autres pull et leur assistant lit le graphe direct. manifest.json (chemins relatifs) → portable, pas de rebuild complet au premier checkout.
💡 Brancher le rafraîchissement sur un workflow spec-driven
Si tu travailles en spec-driven (la spec écrite avant le code, ex. OpenSpec), le moment naturel pour la passe sémantique est la fin de feature — l'étape d'archive, quand les specs markdown deviennent la vérité. Plutôt qu'un git hook (qui rappellerait le LLM à chaque commit), demande-le à l'agent : une ligne dans le fichier d'instructions (AGENTS.md / CLAUDE.md) du type « après un archive, lancer graphify . --update » suffit à réindexer les specs mergées, au bon rythme — une fois par feature. Voir outiller-developpement-ia-skills-agents-instructions pour le levier « fichier d'instructions ».
⚠️ Le graphe à jour ≠ le graphe committé aveuglément
Sur Claude Code, écrire graphify-out/ dans le workspace invalide le prompt cache à chaque extraction. Choix binaire : soit .claudeignore, soit tu le commit pour l'équipe — décide, pas les deux à moitié.
| Graphe (Graphify) | RAG vectoriel | |
|---|---|---|
| Trouve | relations structurelles (qui appelle quoi) | chunks sémantiquement proches |
| Question type | « quelles fonctions appellent cet endpoint ? » | « où parle-t-on d'authentification ? » |
| Mise à jour | incrémentale (sous-graphe touché) | ré-embedding |
| Multi-modal | code + doc + diagramme sur un même graphe | store plat |
| Coût tokens | faible (carte compacte) | variable |
Quand le choisir :
⚡ TL;DR — chaque concept en une ligne
Graphify ✓ Transforme un repo en graphe de connaissances que l'agent interroge au lieu de lire les fichiers. ⚠ C'est un skill pour assistant de code (CLI / IDE), pas pour un chat LLM classique.
Package graphifyy
✓ S'installe avec deux y sur PyPI ; la commande reste graphify.
⚠ Le package graphify (un seul y) est un autre outil sans rapport.
Init en IDE
✓ La passe sémantique utilise le modèle de ta session IDE — aucune clé API à poser.
⚠ Les clés ne servent qu'en headless graphify extract (CI).
Économie de tokens ✓ ~71,5× moins de tokens par requête annoncé (sous-graphe borné vs lecture brute). ⚠ N'existe que si la couche always-on est installée — un graphe non consulté ne gagne rien.
Usage à la main vs via l'IA
✓ À la main : query / path / explain. Via l'IA : tu discutes, le hook route vers le graphe.
⚠ Sans la couche always-on (§5), l'agent continue de grep et le bénéfice tokens disparaît.
Graphe à jour — deux vitesses
✓ Commit = rebuild AST-only auto (0 API) ; --update = passe sémantique sur les docs, à la main.
⚠ Le hook ne relance jamais le LLM — si tu ne fais pas --update, tes docs restent périmés dans le graphe.
🎓 À retenir
/graphify . --update manuel. Ne pas confondre.CLAUDE.md/AGENTS.md + hook PreToolUse) qui fait que l'agent interroge le graphe au lieu de grep.query traverse large ; --dfs trace un chemin, --budget N plafonne le coût.graphify hook install évite les conflits sur graph.json en équipe (union-merge auto).--force / GRAPHIFY_FORCE=1.serve.py).--projectgraphify query