Que fait ask ?
Arrêtez-vous d'abord
Si l'utilisateur mentionne $ask, /ask, un mode ask, oracle, révision approfondie,
révision parallèle, table ronde, débat, révision d'écart CAE, ou un DAG ask, lisez l'intégralité de ce
fichier avant d'agir. Utilisez ensuite le point d'entrée réel du moteur d'exécution, sauf si l'utilisateur
demande explicitement une solution de repli ou que le moteur est indisponible et que ce repli est signalé.
Ne remplacez pas $ask par spawn_agent, un simple appel de modèle, une recherche web simple, un
résumé manuel ou une révision inventée.
Point d'entrée du moteur d'exécution
Exécutez les commandes depuis ce répertoire. La syntaxe de compétence Pi skill-command telle que
/skill:ask webgpt What is 2 + 2? est un raccourci de première classe : le gestionnaire de navigateur
principal (webgpt, webclaude, webkimi, webgemini ou webgrok) achemine vers un DAG de
single-call de Tau avec --execute --json. Les références de compétence Pi en ligne telles que
$ask webgpt What is 2 + 2? et l'orthographe naturelle avec espaces $ask web gpt What is 2 + 2?
doivent être traitées de la même manière (web gpt est normalisé en webgpt). Il s'agit uniquement
d'un raccourci de compatibilité pour les utilisateurs Pi ; il ne doit pas utiliser le chemin direct
WebGPT oracle supprimé.
./run.sh tau-dag "<requête>" correspond en interne à la sous-commande tau-dag run de Typer.
./run.sh team-plan "<requête>" --team <préréglage> génère un plan multi-agent basé sur les rôles
et un aperçu figé du DAG Tau ; l'exécution nécessite explicitement --execute --live (voir README
"Team Orchestration").
cd skills/ask
./run.sh --help
./run.sh webgpt What is 2 + 2?
./run.sh webgpt --compile-only What is 2 + 2?
./run.sh ask --help
./run.sh tau-dag run --help
Toute exécution non triviale doit conserver les artefacts du moteur. L'ensemble standard d'artefacts est :
<ask_id>.request.json<ask_id>.status.json<ask_id>.events.jsonl- des sorties spécifiques au mode telles que
review.md,review.json, des manifestes DAG, ou des preuves de navigateur
Les artefacts du moteur se trouvent par défaut sous .ask_artifacts/runs/<ask_id> ou sous le
--run-output-root fourni. Pour les exécutions longues, en direct ou générées, privilégiez une
racine de stockage persistante telle que /mnt/storage12tb/skills/ask/outputs/.... Ne validez pas
les artefacts ask générés.
Chaque appel de gestionnaire exécuté (succès ou échec) est enregistré dans la collection
ask_call_log dans $memory au point d'étranglement de l'exécution, avec le gestionnaire, le statut,
le code d'échec, et controlled_tab_id/l'URL de la conversation lorsqu'elle est présente, ainsi que la
méthode prouvée du dernier appel réussi (sélection de raisonnement, liaison d'onglet, mode de cycle de
vie, commande de dispatch avec secrets masqués). Les identifiants de modèle sont validés par rapport au
catalogue SciLLM en direct à la compilation (invalid_scillm_model_id BLOQUÉ avec les alternatives
valides les plus proches) ; un siège de navigateur avec 3+ échecs consécutifs enregistrés est signalé
comme connu avant le dispatch avec ses codes d'échec. Vérifiez un siège avant de l'utiliser :
python3 skills/ask/scripts/ask_call_history.py --handler webgemini affiche le dernier appel réussi
et les échecs récents ; ajoutez --recommend pour la méthode prouvée exacte à réutiliser. Un
gestionnaire sans succès enregistré est une supposition aveugle — compilez d'abord uniquement ou
testez à moindre coût. Les exécutions historiques peuvent être rétrochargées :
python3 skills/ask/scripts/backfill_call_log.py [outputs-root] ingère chaque reçu de nœud sur
disque de manière idempotente (clé _key déterministe par exécution+nœud).
Le JSON de résultat de chaque exécution EXÉCUTÉE (et execution-status.json) contient également
handler_last_success : par siège, la dernière méthode réussie provenant de la mémoire
(URL de conversation, onglet, cycle de vie/disposition), les échecs consécutifs actuels, et les codes
d'échec à éviter — renvoyés en contexte afin que l'agent du projet n'ait jamais besoin d'une recherche
séparée dans l'historique après avoir consommé une exécution.
Références approfondies (à lire à la demande)
| Avant de faire ceci | Lisez |
|---|---|
team-plan avec un fichier de plan ; status --run --projection | references/plans-and-status.md |
| Cible explicite de sous-agent natif Pi | references/pi-subagents.md |
| Transformer la sortie ask (unique/table ronde/compétition/salle blanche) en couloirs de sous-agents | references/lane-handoff.md |
herdr list/who/send vers le volet d'un autre agent | references/herdr.md |
| Choisir entre unique, table ronde ou compétition ; sélecteurs de modèle/effort | references/modes.md |
| Audits de panneaux, liste des sièges, sièges limités, politique webclaude | references/seats-and-audits.md |
| Exécution/supervision de toute exécution en direct (surveillance, fenêtres, matrice de charge, déblocage, dérive) | references/operations.md |
| Tout échec d'exécution | references/diagnosis.md |
| Compilation/exécution de tout DAG multi-siège (table ronde/compétition/créateur-réviseur) | references/workflows.md |
| Toute exécution de gestionnaire de navigateur | references/browser.md |
Quatre types de cibles
/ask adresse quatre types de cibles équivalents. Ils diffèrent par le transport, pas par le
statut :
| Cible | Exemple | Propriétaire du transport |
|---|---|---|
| Session Herdr — un agent en direct dans un volet | memory, w11:p13 | $monitor-herdr via herdr pane run |
| Appel de modèle — gestionnaire API/modèle | gpt-5.5-high, Codex-opus-5-high, deepseek-ai/DeepSeek-V3.2-TEE | $tau (SciLLM est interne à Tau) |
Modèle web — réviseur avec navigateur (onglet de chat, PAS le modèle agentique ; voir l'avertissement webclaude ci-dessous) | webgpt, webclaude, webkimi | $surf + $browser-oracle |
| Sous-agent natif Pi — conseiller/travailleur enfant local de Pi | pi reviewer, subagent general-purpose, local coder | Outil subagent natif de pi-subagents |
Un agent de projet ne doit pas se soucier de savoir quel côté est un navigateur, un modèle, une session Herdr ou un sous-agent natif Pi au-delà du nom de la cible.
Guide de démarrage rapide pour l'agent de projet
Commencez ici lorsque l'utilisateur demande un simple appel de modèle, une table ronde, une compétition, ou une boucle créateur-réviseur. Utilisez l'une de ces formes ; n'inventez pas de chemin orchestration personnalisé.
| Intention de l'utilisateur | Forme de la commande |
|---|---|
| Un gestionnaire répond | ./run.sh tau-dag "<tâche>" --repo <dépôt> --target <cible> --immutable-goal "<objectif>" --handler <gestionnaire-ou-modèle> --execute --json |
| Table ronde | ./run.sh tau-dag "<tâche partagée>" --repo <dépôt> --target <cible> --immutable-goal "<objectif>" --dag-template roundtable --handler <a> --handler <b> --topology concurrent --execute --json |
| Compétition | ./run.sh compete "<tâche isolée>" --repo <dépôt> --target <cible> --immutable-goal "<objectif>" --handler <a> --handler <b> --criterion <critère> --execute --json |
| Unique (réponses par siège, pas de consensus) | ./run.sh one-shot "<question>" --handler <a> --handler <b> --handler <c> — N couloirs d'appels uniques indépendants s'exécutent en parallèle ; chacun renvoie sa propre réponse liée à une nonce ou un bloqueur nommé. Les réponses partielles sont DÉGRADÉES-mais-utilisables (sortie 0 à ou au-dessus de --min-answered) ; un refus de quorum d'une table ronde ne s'applique jamais ici. |
| Sous-agent natif Pi depuis Pi | subagent({ action: "list" }), puis subagent({ agent: "<agent>", task: "<tâche>" }) ou un workflowScript de répartition. Ceci est UNIQUEMENT pour les cibles explicites pi/subagent/local reviewer ; ce n'est pas un remplacement pour les gestionnaires Tau/navigateur. |
| Créateur puis réviseur | ./run.sh tau-dag "<tâche du créateur puis verdict du réviseur>" --repo <dépôt> --target <cible> --immutable-goal "<objectif>" --dag-template creator-reviewer --handler <créateur> --handler <réviseur> --topology sequential --execute --json |
| Diagnostiquer/réparer/fermer des issues GitHub | ./run.sh fix-issues --repo <propriétaire/nom> --issue <N> [--issue <M>] [--handler gpt-5.5] [--execute] — rassemble chaque issue via gh, diagnostique via un gestionnaire unique en direct dans un JSON structuré de cause/correction avec la porte de débogueur (needs_debugger recommande $debugger uniquement lorsque la transition défaillante est un état d'exécution en cours qu'aucun artefact n'explique), et est fermé en cas d'échec : simulation par défaut ; --execute ferme une issue UNIQUEMENT après que sa commande de vérification nommée (généralement un test $agentic-evals) réussit réellement. Pas de vérification → blocked ; échec de vérification → verify-failed, issue reste ouverte. Reçus par issue sous outputs/fix-issues/. Porte : fixtures/fix_issues.json. |
Les gestionnaires sont équivalents même lorsque leurs transports diffèrent. Les gestionnaires de
navigateur (webgpt, webclaude, webkimi, webgemini, webgrok) s'exécutent via $surf et
$browser-oracle. Les gestionnaires API/modèle tels que gpt-5.5-high, gpt-5.5-xhigh,
Codex-opus-5-high, ou chutes deepseek-ai/DeepSeek-V3.2-TEE sont routés par Tau. Les agents de
projet ne doivent pas se soucier de savoir quel côté est un navigateur ou une API au-delà du nom du
gestionnaire.
Les gestionnaires sont équivalents qu'ils soient soutenus par un navigateur (webgpt, webclaude,
webkimi, webgemini, webgrok via $surf/$browser-oracle) ou par une API (gpt-5.5-high,
claude-opus-5-high, chutes <fournisseur/modèle> via Tau).
Avant d'exécuter tout DAG multi-siège : compilez d'abord (omettez --execute), montrez à l'humain
le diagramme ASCII imprimé, et exécutez uniquement sur confirmation. Exemples complets de modes et
règles de sélection : references/modes.md. Protocoles complets et tables fermées en cas d'échec :
references/workflows.md.
Non-négociables pour chaque exécution
- Un objectif immuable explicite (
--immutable-goalou une ligneImmutable goal:étiquetée) est requis pour la table ronde, le créateur-réviseur et la compétition ; un objectif manquant échoue à la vérification pré-vol avecNEEDS_INTERVIEWavant que tout gestionnaire ne soit contacté. - Les tables rondes sont TOUJOURS
--topology concurrentavec un paquet identique pour chaque siège. Les candidats de compétition sont isolés et ne se voient jamais mutuellement. - Les DAG exécutés doivent être surveillés jusqu'à un verdict terminal via les artefacts de flux JSON
de l'exécution (
events.jsonl,dag-progress.json, reçus de nœuds,execution-status.json) ; ne lancez pas et ne partez pas. PASSn'est qu'une preuve de réviseur/modèle ; la clôture locale nécessite une preuve locale déterministe.DEGRADED/NEEDS_ATTENTION/limites de débit sont spécifiques au couloir : gardez les sièges utilisables, suivez le paquet de récupération du couloir en échec.- Les complétions API non diffusées doivent passer une admission typée avec
finish_reason=stopavant que leur texte puisse compter comme preuve. Les complétions tronquées, filtrées, sans raison de fin, ou malformées émettentscillm_response_incomplete; conservez les octets bruts et les erreurs de validationresponse.meta.json. Ne réparez pas le texte de verdict partiel et ne réessayez pas automatiquement. Cas retenus :completion-admission-rejects-truncation(rejeu capturé) etcompletion-admission-live-positive(relecture réelle du fournisseur). - Les échecs ne sont pas silencieux : chaque couloir en échec expose
failure_code, un paquet de récupération, etnext_command/instruction de ticket. En cas d'échec, lisezreferences/diagnosis.mdet dispatchez en fonction du reçu propriétaire avant de théoriser. - Le routage direct de l'oracle WebGPT (
$ask chatgpt,--oracle-backend webgpt,--webgpt-*) échoue fermé ; les gestionnaires de navigateur Tau restent pris en charge. - Continuité de suivi : chaque reçu de nœud de couloir navigateur /
response.meta.jsondoit contenircontrolled_tab_idet l'URL de la conversation ; un identifiant d'onglet nul est un transfert échoué. Lorsque l'humain peut poser des questions de clarification ou de suivi, exécutez avec--browser-tab-lifecycle fresh-keep(oureuse-bound) — la valeur par défautauto/fresh-temporary FERME la fenêtre après l'exécution, tuant la conversation. Après l'exécution, signalez l'identifiant d'onglet + l'URL de la conversation et liez-les (skills/browser-oracle/run.sh bind <projet> --backend <b> --tab-id <id> --url <url> --manual) afin que le suivi cible la même session. - Porte de visibilité des onglets (observé le 2026-09-15, webgemini) : certains fournisseurs
(Gemini confirmé) diffèrent l'envoi du compositeur tant que l'onglet est un document masqué —
dans une fenêtre partagée, un seul onglet peut être au premier plan, donc N-1 des N couloirs
simultanés sont toujours masqués et bloquent avec
prompt_too_large_or_stalled("le prompt est resté dans le compositeur après l'envoi"). Les couloirs de navigateur simultanés utilisent donc par défaut des fenêtres isolées (une fenêtre par siège, placée sur le bureau du réviseur) afin que chaque onglet de couloir soit un document visible ;--window-layout sharedest en opt-in. Un compositeur déjà saisi et bloqué est récupérable :skills/surf/run.sh tab.switch <id>rend l'onglet visible et l'envoi en file d'attente est dispatché. Vérifiezdocument.visibilityStateavant de réduire les prompts pour cette classe d'échec. La méthode de travail vérifiée par siège est stockée dans$memory(ask_call_logcléask:method:webgemini; voirask_call_history.py --handler webgemini --recommend). webclaudeest un onglet de chat claude.ai, réservé aux tests — PAS Claude agentique. Préférezclaude-fable-low, puisclaude-opus-4-8-high(voirreferences/seats-and-audits.md).
Routeur de mode
Utilisez le mode le plus restreint qui correspond à la demande de l'utilisateur.
| Demande | Modèle d'exécution | Détails requis |
|---|---|---|
| Question avec mémoire | ./run.sh ask "<question>" --json | Incluez le périmètre lorsque pertinent. |
| Réponse oracle | ./run.sh ask "<question>" --oracle ... --json | Choisissez explicitement le backend/modèle/persona lorsqu'il est demandé. |
| Raccourci navigateur Pi | ./run.sh webgpt What is 2 + 2? depuis /skill:ask webgpt What is 2 + 2? | Réécrit en Tau single-call avec --handler webgpt --execute --json ; utilisez --compile-only pour émettre le DAG sans transport navigateur en direct. |
| Gestionnaire nommé unique | ./run.sh tau-dag "<requête>" --handler <gestionnaire-ou-modèle> --json | Les gestionnaires de navigateur utilisent $surf ; les gestionnaires non navigateur sont des noms de modèles $scillm routés par Tau. Ajoutez --execute pour le transport en direct. |
| Cible de sous-agent natif Pi | Outil subagent natif Pi, après subagent({ action: "list" }) | Uniquement lorsqu'il s'exécute dans Pi et que l'utilisateur nomme explicitement pi, subagent, pi-subagent, local reviewer, ou local coder. Les requêtes navigateur/modèle/Tau Ask n'utilisent pas cette route. |
| Table ronde multi-gestionnaire | ./run.sh tau-dag "<requête>" --handler webclaude --handler gpt-5.5 ... --topology concurrent --execute --json | La table ronde est un prompt vers DAG Tau. Les gestionnaires de navigateur reçoivent une nouvelle fenêtre appartenant à Ask par défaut. Conservez browser-tab-lifecycle.json, dag.json, les spécifications de commande, les reçus de gestionnaire et les reçus de jointure. |
| Compétition / bakeoff | ./run.sh compete "<tâche>" --handler webgpt --handler webclaude --handler gpt-5.5-high --criterion deterministic-proof --execute --json | Candidats isolés plus tableau de bord de la compétition et demande de continuation du gagnant. Les gestionnaires navigateur/API sont équivalents. L'agent de projet doit vérifier localement les fonctionnalités avant la promotion. |
| Boucle créateur-réviseur | ./run.sh tau-dag "<tâche du créateur puis verdict du réviseur>" --repo <dépôt> --target <cible> --immutable-goal "<objectif>" --dag-template creator-reviewer --handler <créateur> --handler <réviseur> --topology sequential --execute --json | Les reçus du créateur et du réviseur sont enregistrés séparément. Le reçu de jointure combine les deux. |
La suite de la documentation SKILL.md d'origine a été tronquée mais doit être traduite et incluse dans son intégralité dans une production réelle.
Récupération d'échec
Chaque échec de couloir expose un paquet de récupération dans le reçu du nœud :
failure_code: code d'échec normalisé (ex.handler_unavailable,rate_limited,browser_tab_stalled)recovery_packet: commande ou action recommandée pour récupérernext_command: commande shell exacte à exécuter, le cas échéantticket: instruction pour l'humain si l'action humaine est requise
Avant de théoriser une cause profonde, lisez references/diagnosis.md et dispatchez en fonction
du code d'échec.
Enregistrement et audit
Tous les appels de gestionnaire sont enregistrés centralement dans $memory.ask_call_log avec :
handler: nom du gestionnairestatus:success,failure,degradedfailure_code: code d'échec normalisé (uniquement en cas d'échec)controlled_tab_id: identifiant de l'onglet navigateur (uniquement pour les gestionnaires navigateur)conversation_url: URL de la conversation (uniquement pour les gestionnaires navigateur)method: méthode prouvée utilisée (sélection de raisonnement, cycle de vie, etc.)timestamp: horodatage ISO 8601
Utilisez python3 skills/ask/scripts/ask_call_history.py --handler <nom> pour inspecter l'historique.
Notes importantes
- Ne contournez jamais
$ask. Il s'agit du point d'entrée autorisé unique pour toutes les requêtes oracle, révision et DAG. Tout contournement viaspawn_agent, un appel de modèle direct, ou une recherche web est interdit. - Préférez les gestionnaires API aux gestionnaires navigateur lorsque cela est possible : ils sont plus rapides, plus fiables et moins sujets aux limites de débit et aux problèmes de visibilité des onglets. Utilisez les gestionnaires navigateur uniquement lorsque l'accès au contenu web en direct est nécessaire.
- Validez toujours les identifiants de modèle par rapport au catalogue SciLLM en direct avant l'exécution. Les identifiants de modèle invalides sont bloqués en phase de compilation.
- Surveillez les exécutions en direct jusqu'à un verdict terminal. Ne lancez pas de DAG et ne partez pas sans surveillance.
- Conservez les artefacts de chaque exécution pour l'auditabilité et le débogage.
- Signalez les identifiants d'onglet et les URL de conversation après les exécutions avec navigateur pour permettre les suivis.
Exemples
# Question simple
./run.sh ask "Quel est le bug principal dans le module d'authentification ?" --json
# Table ronde avec deux gestionnaires navigateur
./run.sh tau-dag "Évaluez la sécurité de cette PR" --handler webgpt --handler webclaude --topology concurrent --execute --json
# Compétition entre API et navigateur
./run.sh compete "Générez une expression régulière" --handler gpt-5.5-high --handler webgemini --criterion exact-match --execute --json
# Boucle créateur-réviseur
./run.sh tau-dag "Concevez une classe puis révisez-la" --dag-template creator-reviewer --handler claude-opus-4-8-high --handler webkimi --topology sequential --execute --json