Un outil de cartographie promet de faire économiser des tokens à ton agent. Sur mon dépôt, il m'en a fait consommer 71 % de plus, pour une seule bonne réponse sur dix.
Ce n'est pas un argument contre l'outil : c'est un argument pour mesurer avant d'adopter. Voici le protocole exact, avec les questions, les scripts et les chiffres. Reproduis-le sur ton projet — tu obtiendras peut-être l'inverse, et c'est tout l'intérêt.
Les questions se figent avant l'installation. Sinon on écrit, sans le vouloir, les questions auxquelles l'outil sait répondre.
Huit portent sur des relations entre fichiers, le terrain annoncé de ce type d'outil. Deux sont de simples questions de localisation, gardées volontairement : la documentation admet qu'une recherche directe peut y coûter moins cher. Les retirer aurait truqué le résultat.
| # | Type | Question |
|---|---|---|
| Q1 | relation | Quel workflow n8n publie sur Blotato, et par quel chemin (déclencheur → publication) ? |
| Q2 | relation | Quels skills dépendent de HyperFrames ? |
| Q3 | relation | Où est défini le mot-clé du CTA du Journal IA, et qui le consomme ? |
| Q4 | relation | Quels fichiers écrivent dans un Google Sheet (suivi vidéos / leads) ? |
| Q5 | relation | Quels fichiers référencent la banque d'avatars `_shared/avatar-bank` ? |
| Q6 | relation | Quelle chaîne relie l'agent `social-analytics` à la production d'une vidéo ? |
| Q7 | relation | Qui utilise le webhook `tts-gen` (voix clonée) ? |
| Q8 | relation | Qu'est-ce qui déploie sur Coolify, et qu'est-ce qui touche `previsualisation` ? |
| Q9 | **simple** | Où est le script `render-publish` du Journal IA ? |
| Q10 | **simple** | Où est le `Dockerfile` de `previsualisation` ? |
Les compteurs d'avant et d'après viennent souvent d'outils différents. Le sens de l'écart est fiable, la décimale ne l'est pas. Dis-le au lieu de publier trois chiffres après la virgule.
| # | Appels avant | Appels après | Tokens avant | Tokens après |
|---|---|---|---|---|
| Q1 | 3 | 1 | 869 | 6088 |
| Q2 | 3 | 1 | 465 | 2406 |
| Q3 | 3 | 1 | 640 | 1652 |
| Q4 | 3 | 1 | 1048 | 1632 |
| Q5 | 3 | 1 | 128 | 294 |
| Q6 | 3 | 1 | 5598 | 1654 |
| Q7 | 3 | 1 | 897 | 919 |
| Q8 | 3 | 1 | 79 | 1070 |
| Q9 | 4 | 1 | 554 | 1653 |
| Q10 | 1 | 1 | 3 | 231 |
| Total | 29 | 10 | 10 281 | 17 599 |
En résumé : -66 % d'appels d'outils, -82 % de temps — et +71 % de tokens. Huit réponses justes sur dix avant, une seule après.
La question qui perd : « où est le Dockerfile ». Trois tokens en recherche directe, 231 avec le graphe — pour une réponse fausse. Un Dockerfile n'a pas d'arbre syntaxique : il n'est nulle part dans la carte.
La question qui gagne : reconstituer une chaîne d'appels entre agents. −70 %. C'est exactement le cas d'usage annoncé, et il le tient.
Un outil qui gagne sur une question sur dix n'est pas un mauvais outil. C'est un outil dont le terrain ne correspond pas au tien.
À adapter à ton projet : ce sont ceux qui ont produit les chiffres ci-dessus.
#!/bin/bash
# Benchmark "AVANT" — répond aux 10 questions sans graphe, en mesurant le coût réel.
# Les tokens sont comptés par rtk (compteur réel, pas une estimation).
export PATH=/home/claude/.local/bin:/home/claude/tools/node/bin:$PATH
cd /work
OUT=/work/graphify-benchmark/_raw
mkdir -p "$OUT"
RES=/work/graphify-benchmark/avant.tsv
echo -e "q\tcalls\tbytes\tms\ttok_in\ttok_out" > "$RES"
snap(){ rtk gain -f json 2>/dev/null | node -e 'let s="";process.stdin.on("data",d=>s+=d).on("end",()=>{const j=JSON.parse(s).summary;console.log(j.total_commands,j.total_input,j.total_output)})'; }
run_q(){
local q="$1"; shift
local log="$OUT/$q.txt"; : > "$log"
read c0 i0 o0 <<< "$(snap)"
local t0=$(date +%s%3N)
local n=0
while IFS= read -r cmd; do
[ -z "$cmd" ] && continue
n=$((n+1))
{ echo "### \$ $cmd"; eval "$cmd" 2>&1; echo; } >> "$log"
done
local t1=$(date +%s%3N)
read c1 i1 o1 <<< "$(snap)"
local bytes=$(wc -c < "$log")
echo -e "$q\t$n\t$bytes\t$((t1-t0))\t$((i1-i0))\t$((o1-o0))" >> "$RES"
echo "$q: calls=$n bytes=$bytes ms=$((t1-t0)) tok_in=$((i1-i0)) tok_out=$((o1-o0))"
}
# ---------- Q1 : quel workflow publie sur Blotato, par quel chemin ----------
run_q Q1 <<'EOF'
rtk grep -ril "blotato" --include=*.md --include=*.json --include=*.sh .
rtk grep -rn "blotato" .claude/skills/veille-to-video/SKILL.md
rtk grep -rn "Validation Sheet\|programme TikTok\|soNcMKsz" -r . --include=*.md
EOF
# ---------- Q2 : quels skills dépendent de HyperFrames ----------
run_q Q2 <<'EOF'
rtk grep -rl "hyperframes" .claude/skills/
rtk grep -rl "hyperframes" .agents/skills/
rtk grep -rn "hyperframes" .claude/skills/veille-to-video/SKILL.md
EOF
# ---------- Q3 : mot-clé CTA du Journal IA, défini où, consommé par qui ----------
run_q Q3 <<'EOF'
rtk grep -rn "VEILLE" .claude/skills/veille-journal-ia/
rtk grep -rl "journal-ia\|Journal IA" . --include=*.md --include=*.sh
rtk grep -rn "CTA" .claude/skills/veille-journal-ia/SKILL.md
EOF
# ---------- Q4 : qui écrit dans un Google Sheet ----------
run_q Q4 <<'EOF'
rtk grep -rl "docs.google.com/spreadsheets\|googleSheets\|Google Sheet" . --include=*.md --include=*.json --include=*.sh --include=*.mjs
rtk grep -rn "Sheet" .claude/agents/script-writer.md
rtk grep -rn "Sheet" .claude/agents/social-analytics.md
EOF
# ---------- Q5 : qui référence la banque d'avatars ----------
run_q Q5 <<'EOF'
rtk grep -rl "avatar-bank" .
rtk grep -rn "avatar-bank" .claude/skills/veille-to-video-v3/SKILL.md
rtk find autoboost-neon-videos/_shared/avatar-bank -maxdepth 1
EOF
# ---------- Q6 : chaîne social-analytics -> vidéo ----------
run_q Q6 <<'EOF'
rtk read .claude/agents/social-analytics.md
rtk read .claude/agents/script-writer.md
rtk grep -rn "STRATEGIE.md" . --include=*.md
EOF
# ---------- Q7 : qui utilise le webhook tts-gen ----------
run_q Q7 <<'EOF'
rtk grep -rl "tts-gen" .
rtk grep -rn "tts-gen" CLAUDE.md
rtk grep -rn "voixUrl" . --include=*.md
EOF
# ---------- Q8 : qui déploie sur Coolify / qui touche previsualisation ----------
run_q Q8 <<'EOF'
rtk grep -rl "coolify" . --include=*.md --include=*.sh --include=*.json
rtk grep -rl "previsualisation" . --include=*.md --include=*.sh
rtk read .claude/hooks/publish-previsualisation.sh
EOF
# ---------- Q9 (SIMPLE) : où est render-publish ----------
run_q Q9 <<'EOF'
rtk find . -name "render-publish*"
EOF
# ---------- Q10 (SIMPLE) : où est le Dockerfile de previsualisation ----------
run_q Q10 <<'EOF'
rtk find previsualisation -maxdepth 1 -name Dockerfile
EOF
echo "--- TOTAL ---"
node -e '
const fs=require("fs");
const L=fs.readFileSync("'"$RES"'","utf8").trim().split("\n").slice(1).map(l=>l.split("\t"));
const s=(i)=>L.reduce((a,r)=>a+ +r[i],0);
console.log("calls",s(1),"bytes",s(2),"ms",s(3),"tok_in",s(4),"tok_out",s(5));
'
#!/bin/bash
# Benchmark "APRES" — mêmes 10 questions, via le graphe Graphify.
export PATH=/home/claude/.local/bin:/home/claude/tools/node/bin:$PATH
cd /work
OUT=/work/graphify-benchmark/_raw_apres
mkdir -p "$OUT"
RES=/work/graphify-benchmark/apres.tsv
echo -e "q\tcalls\tbytes\tms\ttok_graphify" > "$RES"
run_q(){
local q="$1"; shift
local log="$OUT/$q.txt"; : > "$log"
local t0=$(date +%s%3N); local n=0
while IFS= read -r cmd; do
[ -z "$cmd" ] && continue
n=$((n+1))
{ echo "### \$ $cmd"; eval "$cmd" 2>&1; echo; } >> "$log"
done
local t1=$(date +%s%3N)
local bytes=$(wc -c < "$log")
# graphify annonce lui-meme le cout en tokens de sa reponse ; on le recupere
local tok=$(grep -o '~[0-9]\+ tokens' "$log" | head -1 | tr -dc '0-9')
[ -z "$tok" ] && tok=$((bytes/4))
echo -e "$q\t$n\t$bytes\t$((t1-t0))\t$tok" >> "$RES"
echo "$q: calls=$n bytes=$bytes ms=$((t1-t0)) tok=$tok"
}
run_q Q1 <<'EOF'
graphify query "quel workflow publie sur Blotato"
EOF
run_q Q2 <<'EOF'
graphify query "quels skills dependent de hyperframes"
EOF
run_q Q3 <<'EOF'
graphify query "mot cle CTA VEILLE journal IA"
EOF
run_q Q4 <<'EOF'
graphify query "qui ecrit dans google sheet"
EOF
run_q Q5 <<'EOF'
graphify query "avatar-bank banque avatar"
EOF
run_q Q6 <<'EOF'
graphify query "social analytics vers production video"
EOF
run_q Q7 <<'EOF'
graphify query "tts-gen voix clonee"
EOF
run_q Q8 <<'EOF'
graphify query "deploiement coolify previsualisation"
EOF
run_q Q9 <<'EOF'
graphify query "render-publish journal IA"
EOF
run_q Q10 <<'EOF'
graphify query "Dockerfile previsualisation"
EOF
echo "--- TOTAL ---"
node -e '
const fs=require("fs");
const L=fs.readFileSync("'"$RES"'","utf8").trim().split("\n").slice(1).map(l=>l.split("\t"));
const s=i=>L.reduce((a,r)=>a+ +r[i],0);
console.log("calls",s(1),"bytes",s(2),"ms",s(3),"tok",s(4));
'
Si ton projet tient en cinq fichiers, passe ton chemin. Si tu as une grosse base de code avec beaucoup de documents, c'est probablement pour toi. Entre les deux — comme moi — mesure, c'est une demi-heure.
Ce protocole te dit si un outil vaut le coup. Il ne te dit pas quoi construire ensuite. Si tu veux qu'on regarde ce que ton système coûte réellement et où l'automatiser change quelque chose, on commence par un audit — et si le calcul ne tombe pas en ta faveur, je te le dis.
Recevoir mon auditBENCHMARK GRAPHE DE CODE | TONY PAYET / AUTOMATION BOOST | 2026 EDITION
← Toutes les ressources