Documentation / Commandes

web et search

Mis à jour le

TL;DR — `tokenade web <url>` récupère une page en markdown, et `--prompt "q1, q2"` ne renvoie que les passages qui répondent. `tokenade search "requête"` interroge des moteurs indépendants et renvoie titre, URL et extrait. Les deux acceptent plusieurs cibles par appel.

tokenade web récupère une page et la renvoie en markdown compact, sans scripts, menus ni balisage. tokenade search lance une requête sur plusieurs moteurs de recherche indépendants et renvoie des résultats fusionnés et dédupliqués. Les deux acceptent plusieurs cibles à la fois et les traitent en parallèle.

web

tokenade web <url|file>… [--prompt "…"] [--max-tokens N]
FormeExemple
Une URLtokenade web https://example.com
Plusieurs URL, récupérées en parallèletokenade web https://a.com https://b.com
HTML reçu sur l'entrée standardcurl -s https://example.com | tokenade web -
Fichier enregistrétokenade web saved.html
OptionEffet
--prompt "q1, q2"Ne renvoie que les passages qui répondent à chaque question, chacune sous son titre. Aussi --question, -q
--max-tokens NBorne l'entrée analysée, pas la réponse. La page est quand même convertie en entier, donc la réponse a la même taille avec ou sans. Pour borner la réponse, posez une question avec --prompt
$ tokenade web https://example.com
# Example Domain

This domain is for use in documentation examples without needing permission. …
$ tokenade web https://doc.rust-lang.org/std/keyword.match.html \
--prompt "can match guards bind variables, what is exhaustiveness checking"
### Q1 · can match guards bind variables
[tokenade: relative links below resolve under https://doc.rust-lang.org]
…
match a_number {
Some(x) if x <= 5 => println!("0 to 5 num = {x}"),
Some(x @ 6..=10) => println!("6 to 10 num = {x}"),
…

Les liens de la page restent utilisables : les liens relatifs sont réécrits depuis la racine du site, ceux qui pointent dans la page deviennent des ancres, et ceux vers d'autres sites sont écrits en entier.

tokenade search "<query>"… [--answer] [--json]
tokenade search "<q1>" "<q2>" SEVERAL queries, run concurrently
tokenade search <file>|- compact a SAVED results page
tokenade search --diagnose probe every engine
OptionEffet
--answerRécupère les premiers résultats et renvoie les passages, pas les liens
--jsonSortie lisible par une machine : engines, query, refused, results[] avec title, url, snippet
--diagnoseInterroge chaque moteur et indique lesquels répondent
--html, --serpTraite l'argument comme une page de résultats enregistrée, même s'il ressemble à une requête

Chaque argument entre guillemets est une requête distincte. Les résultats sont fusionnés, dédupliqués et classés selon l'accord entre moteurs. La sortie se limite à titre, URL et extrait, pour une fraction du coût d'une page de résultats.

$ tokenade search "rust anyhow vs thiserror"
[tokenade:search via yahoo] "rust anyhow vs thiserror":

1. Rust Error Handling: thiserror, anyhow, and When to Use Each
https://momori.dev/posts/rust-error-handling-thiserror-anyhow/
Feb 6, 2024 · In this blog post, we'll explore strategies for …
2. Rust Error Handling Compared: anyhow vs thiserror vs snafu
https://dev.to/leapcell/rust-error-handling-compared-anyhow-vs-thiserror-vs-snafu-2003
…

Moteurs utilisés : Bing, Brave, DuckDuckGo, Ecosia, Marginalia, Mojeek et Yahoo. --diagnose montre ceux qui répondent depuis votre réseau :

$ tokenade search --diagnose
probing 7 engines with "python asyncio vs threading"

engine bytes hits ms verdict
ecosia 0 0 1705 unreachable
bing 132143 10 223 ok
brave 365044 20 816 ok
duckduckgo 34856 10 696 ok
mojeek 5516 0 132 thin
yahoo 165192 7 842 ok
marginalia 1029 0 188 thin

4/7 engines healthy

Pour lire une page trouvée, enchaînez avec tokenade web <url>.

Dans votre agent

Sur Claude Code, les hooks de Tokenade prennent aussi en charge les outils web de l'agent :

  • WebSearch : la recherche s'exécute localement sur les mêmes moteurs et remplace le résultat natif. Si les moteurs échouent ou sont trop lents, l'outil natif prend le relais.
  • WebFetch : intercepté seulement quand c'est rentable (PDF et autres binaires, très grosses pages) ; tout le reste passe sans modification.

La liste complète est dans Comment les hooks interceptent les appels d'outils.

Désactiver les fonctions web

VariableEffet
TOKENADE_NO_WEBSEARCH=1Tokenade ne remplace ni ne compacte plus la recherche web de l'agent, tokenade search refuse de s'exécuter (sortie 3), et les consignes écrites par Tokenade n'en parlent plus
TOKENADE_NO_WEBFETCH=1Tokenade n'intercepte plus les récupérations de pages de l'agent

Utilisez-les quand les requêtes web ne doivent passer que par votre fournisseur d'IA. Pour Claude Code, placez-les dans le bloc env de ~/.claude/settings.json, puis lancez une fois tokenade install avec la variable définie dans votre shell pour mettre à jour les consignes écrites.

Codes de sortie et pièges

  • 0 succès, 1 page impossible à récupérer, 2 erreur d'utilisation (option inconnue, argument en forme de chemin qui n'existe pas), 3 recherche désactivée par TOKENADE_NO_WEBSEARCH.
  • Une option mal tapée est refusée, pas envoyée comme requête.
  • tokenade search /path/that/does/not/exist.html est refusé au lieu d'être recherché : un chemin local ne quitte jamais votre machine.
  • Mettez chaque requête de plusieurs mots entre guillemets : tokenade search "q1" "q2" lance deux recherches.
  • Une page de résultats plus grande que le seuil du stash est repliée ; récupérez le détail avec tokenade expand-ref.

Voir aussi