Cette page est traduite de la documentation anglaise. Les commandes, identifiants et exemples sont inchangés. Runtime 7.24.4 · SDK 2.6.7. Source anglaise
Mode autonome
Statut : Actif Portée : état actuel Dernière revue : 2026-08-25 Responsable : runtime ax-code
Le mode autonome permet à ax-code d’achever des tâches sans attendre une confirmation humaine à chaque étape à faible risque. Lorsqu’il est activé, les invites de permission sont approuvées automatiquement, sauf si elles sont explicitement bloquées, et les boîtes de dialogue de questions reçoivent une réponse automatique selon une heuristique de bonne pratique qui privilégie les choix recommandés, par défaut, courants, simples et minimaux, tout en évitant les options risquées ou sur-conçues.
Par défaut, le mode autonome est activé. Si vous l’avez déjà désactivé, cette préférence est enregistrée et rétablie au prochain lancement.
Démarrage rapide
Basculez depuis le TUI :
- Saisissez
/autonomousdans l’invite, ou - Appuyez sur
Ctrl+Pet recherchez « autonomous », ou - Cliquez sur l’indicateur autonome activé/désactivé dans la barre d’état
La barre d’état affiche l’état courant :
- autonome activé (fond jaune, texte rouge en gras) — l’agent s’exécute sans pause
- autonome désactivé (texte vert) — l’agent s’interrompt pour les invites de permission ou de question
Le réglage persiste d’une session à l’autre dans ax-code.json.
Ce qui change
| Comportement | Autonome désactivé | Autonome activé |
|---|---|---|
| Permissions d’outils (read, edit, bash, etc.) | Demande l’approbation de l’utilisateur | Hybride : les actions sûres (read/grep/list/…) sont approuvées automatiquement ; les actions risquées (edit/bash/webfetch/…) passent au jeu de règles afin que les règles de refus s’appliquent toujours |
| Boîtes de dialogue de questions | Attend que l’utilisateur choisisse une option | Choisit l’option de bonne pratique ou par défaut et l’enregistre |
| Planification | Suit l’invite normale de l’agent | Utilise un cadre de décision léger de style PRD/ADR avant la mise en œuvre |
| Boucle de session en cas de rejet | S’arrête et attend | Poursuit l’exécution |
Invites isolation_escalation |
Demande toujours | Demande toujours (jamais approuvé automatiquement) |
Fonctionnement
Le mode autonome agit sur trois couches :
Source de vérité
Cette page résume le comportement visible par l’utilisateur. Lorsque le comportement change, vérifiez la documentation par rapport à :
packages/ax-code/src/session/processor.tspour l’approbation automatique des permissions, le comportement de la boucle, la gestion des rejets et les plafonds autonomes.packages/ax-code/src/session/system.tset les fichiers d’invite des fournisseurs souspackages/ax-code/src/session/prompt/pour les instructions du flux de travail autonome.packages/ax-code/src/question/etpackages/ax-code/test/question/question.test.tspour les heuristiques de réponse automatique aux questions et le comportement d’escalade.packages/ax-code/src/session/blast-radius.tspour les plafonds de pas autonomes et de modifications de fichiers.packages/ax-code/test/session/system.test.ts,packages/ax-code/test/session/prompt.test.tset les tests de session associés pour le comportement des invites et du registre de décisions.
Maintenez ici les garanties de sécurité alignées sur la documentation du bac à sable ; le mode autonome change le comportement d’approbation, pas l’application de l’isolation.
1. Approbation automatique des permissions (côté serveur)
Le mode autonome utilise une politique hybride qui refuse d’abord (ADR-004 / PRD v4.2.0). Lorsqu’un outil appelle ctx.ask() pour une permission, le module Permission classe la permission :
- Les permissions SAFE (read, glob, grep, list, lsp, code_intelligence, skill, todoread) sont approuvées automatiquement sans créer d’invite bloquante.
- Les permissions RISK (edit, bash, external_directory, task, webfetch, websearch, codesearch, …) passent au jeu de règles — les règles d’autorisation et de refus configurées pour l’agent s’appliquent toujours, et les règles de refus définies par l’utilisateur sont toujours appliquées. En mode bac à sable
full-access, les permissions RISK sont approuvées automatiquement après l’évaluation des règles de refus. - Les permissions inconnues demandent par défaut (
experimental.autonomous_strict_permission: falseconserve le comportement d’autorisation hérité).
Permissions qui atteignent toujours une décision par appel au lieu d’une approbation immédiate fondée sur les règles : isolation_escalation (demandes de contournement du bac à sable), les permissions INTERACTIVE_ONLY et l’ensemble NEVER_AUTONOMOUS_AUTOAPPROVE. Un resserrement (ADR-098) : en mode bac à sable full-access, les requêtes external_directory marquées comme interactives seulement — commandes bash dont les chemins ne peuvent pas être vérifiés statiquement parce qu’elles utilisent un glob, une variable ou une expansion d’accolades — sont aussi approuvées automatiquement, car un bac à sable en accès complet n’a plus de frontière de système de fichiers à protéger. Les règles de refus explicites s’appliquent toujours, et les modes avec bac à sable activé (workspace-write, read-only) conservent l’invite par appel.
« Autoriser une fois » au repos (activé par défaut) : Auto activé plus bac à sable désactivé (full-access) signifie une interaction minimale : chaque permission en attente peut recevoir une réponse automatique une fois après 15 secondes, y compris requireInteractive, les invites de hook et d’escalade du bac à sable. Auto désactivé ou bac à sable activé exige une réponse humaine aux invites en attente. WebMCP exige en plus que le pont correspondant soit connecté ; un autre pont connecté ne suffit pas. Les règles de refus explicites s’appliquent toujours. experimental.permission_idle_once.enabled: false désactive les comptes à rebours, et permissions peut en restreindre la portée. Le réglage hérité timeout_ms est accepté pour la compatibilité, mais ne modifie plus la durée fixe de 15 secondes.
Le serveur possède le compte à rebours. La requête la plus ancienne de chaque session reçoit une échéance ; les requêtes en file reçoivent 15 secondes nouvelles lorsqu’elles arrivent en tête. Les réponses humaines annulent le minuteur. Désactiver Auto, activer le bac à sable ou déconnecter le pont WebMCP concerné annule les comptes à rebours en attente. Rétablir l’éligibilité lance un nouveau compte à rebours. Les interruptions temporaires de rechargement de configuration suspendent le compte à rebours. Les réponses automatiques revérifient le mode courant, le pont et les règles de refus, et n’enregistrent jamais une approbation persistante. Le contournement interne de débogage et de test AX_CODE_PERMISSION_IDLE_ONCE_MS reste disponible et est plafonné au maximum du minuteur Node.
Les modes sont limités au répertoire actif. Un ax-code.json imbriqué peut remplacer les réglages de la racine du dépôt ; utilisez le basculement Bac à sable de la session active pour changer son mode effectif.
Chemins protégés non remplaçables : le mode autonome refuse aussi d’écrire un ensemble fixe de chemins du plan de contrôle et de politique — ax-code.json/ax-code.jsonc, .ax-code/**, .git/config et .git/refs/** — afin que l’agent ne puisse pas modifier sa propre configuration, relever ses propres plafonds d’autonomie ni installer des hooks Git. Contrairement à la liste configurable de chemins bloqués, ceux-ci ne peuvent pas être retirés par la configuration du projet ou de l’utilisateur.
2. Réponse automatique aux questions (côté serveur)
Lorsqu’un outil pose une question à l’utilisateur, le module Question choisit une réponse immédiatement. Il préfère les options marquées comme recommandées, par défaut, sûres, standard, courantes, conventionnelles, bonne pratique, simples ou minimales. Il évite les options marquées expérimentales, risquées, dangereuses, destructrices, avancées, complexes, réécriture ou sur-conçues. Si aucune option ne porte de signal, il choisit la première, car l’outil de question demande aux agents de placer l’option recommandée en premier.
3. Boucle du processeur (niveau session)
Si une permission est malgré tout rejetée (par exemple par une règle de refus explicite), la boucle du processeur ne s’arrête pas — elle passe à l’étape suivante au lieu d’interrompre la session.
4. Cadre de décision de style PRD/ADR
Le mode autonome ajoute un rappel de flux de travail léger à l’invite système. Avant la mise en œuvre, l’agent doit cadrer le travail avec le problème, les contraintes, la décision, les compromis, le plan et la validation. Pour des changements substantiels multi-fichiers, architecturaux ou visibles dans le produit, il peut créer ou mettre à jour un document du dépôt lorsque cela correspond au modèle de documentation du dépôt. Pour les changements triviaux, il doit garder ce cadre léger dans le plan afin d’éviter la sur-conception.
Autonome + bac à sable
Le mode autonome et le mode bac à sable sont indépendants. Vous pouvez utiliser les deux en même temps :
| Combinaison | Comportement |
|---|---|
| Autonome ACTIVÉ + bac à sable ACTIVÉ | L’agent s’exécute librement mais reste confiné à l’espace de travail. Recommandé pour les dépôts non fiables ou d’équipe. |
| Autonome ACTIVÉ + bac à sable DÉSACTIVÉ | L’agent s’exécute librement avec un accès complet au système. À utiliser pour les projets de confiance. |
| Autonome DÉSACTIVÉ + bac à sable ACTIVÉ | L’agent demande une permission pour chaque action, confiné à l’espace de travail. Contrôle maximal. |
| Autonome DÉSACTIVÉ + bac à sable DÉSACTIVÉ | L’agent demande une permission pour chaque action, avec un accès complet au système. |
La posture d’exécution par défaut est autonome activé plus bac à sable désactivé : full-access avec le réseau activé. Cela offre le comportement CLI le moins frictionnel, mais aucune frontière d’isolation. Utilisez /sandbox, --sandbox workspace-write, AX_CODE_ISOLATION_MODE ou la configuration du projet pour activer des restrictions pour un travail non fiable ou sans surveillance.
Configuration
Fichier de configuration
Dans ax-code.json :
{
"autonomous": true
}
Définissez la valeur false pour désactiver :
{
"autonomous": false
}
Variable d'environnement
AX_CODE_AUTONOMOUS=true ax-code # force autonomous on
AX_CODE_AUTONOMOUS=false ax-code # force autonomous off
Préséance
Variable d’environnement > fichier de configuration > valeur par défaut (activé)
Budgets de charge (tours de modèle et appels d'outils)
Le mode autonome ne signifie pas une exécution illimitée. Plusieurs plafonds indépendants s’appliquent. Les valeurs par défaut ci-dessous sont les constantes livrées ; augmentez-les ou diminuez-les dans ax-code.json lorsqu’une charge a besoin de plus de marge.
Un tour de modèle est une requête de modèle de la boucle externe. Un appel d’outil est une invocation d’outil à l’intérieur d’un tour de modèle. Ce sont des budgets distincts : un seul tour de modèle peut émettre plusieurs appels d’outils. Les noms de configuration hérités contenant steps restent pris en charge, mais ils ne rendent pas les deux unités interchangeables.
Préférez l’objet de premier plan autonomy. Les clés héritées session.* et experimental.autonomous_caps.* fonctionnent encore comme alias (préséance plus basse).
| Plafond | Défaut | Unité | Configuration préférée | Alias hérité |
|---|---|---|---|---|
| Tours de modèle par segment | 500 | Requêtes de modèle par segment de continuation | autonomy.budget.model_turns.per_segment |
session.max_steps |
| Continuations automatiques | 3 | Segments après un plafond de tours de modèle (autonome ordinaire) | autonomy.budget.continuations |
session.max_continuations (0 désactive) |
| Tours de modèle cumulés | 2,000 ordinaire · 20,000 objectif / Super-Long | Requêtes de modèle additionnées à travers les continuations | autonomy.budget.model_turns.total |
session.max_total_steps |
| Tours de modèle par agent | Non borné pour les agents natifs | Requêtes de modèle pendant que cet agent est actif | agent.<name>.steps (facultatif) |
— |
| Nouvelles tentatives automatiques de tâches | 10 | Continuations tant que des tâches restent en attente | autonomy.budget.todo_retries |
session.max_todo_retries |
| Appels d’outils du rayon d’impact | 500 / segment | Invocations d’outils en mode autonome | autonomy.budget.tool_calls.per_segment |
experimental.autonomous_caps.steps |
| Fichiers / lignes du rayon d’impact | 50 fichiers · 5,000 lignes | Empreinte des changements (survit aux continuations) | autonomy.budget.changes.files_total / .lines_total |
experimental.autonomous_caps.files / .lines |
| Chemins exemptés de lignes | Fichiers de verrou + instantanés générés (*.snap, *-snapshot.json) |
Globs qui comptent pour le plafond de fichiers mais pas pour le plafond de lignes | autonomy.budget.changes.lines_exempt_paths |
experimental.autonomous_caps.linesExemptPaths |
| Plafonds d’inondation par outil | p. ex. bash 50, edit 100 | Appels par tour de modèle | autonomy.budget.tool_calls.per_tool |
experimental.autonomous_caps.perTool |
| Coupe-circuit de série d’outils seuls | Rappel 15 · final ~30 · arrêt 35 | Finitions de modèle consécutives avec outils seuls | autonomy.stall.tool_only_* |
— |
| Budget de mutations échouées | 30 / segment | Tentatives d’outils mutateurs qui ont échoué sans succès | autonomy.stall.failed_mutation_attempts |
— |
| Limiteur de rafale d’appels d’outils | 30 appels / 10s | Fenêtre glissante par tour de processeur | autonomy.budget.tool_calls.rate |
— |
| Budget d’erreurs consécutives | 3 | Erreurs de fournisseur ou d’outil d’affilée avant que l’exécution abandonne | autonomy.stall.max_consecutive_errors |
— |
Les fichiers binaires (cp d’un exécutable, curl -o d’une archive zip et les autres écritures non textuelles) comptent toujours pour le plafond de fichiers, mais ils imputent zéro ligne. Le plafond de lignes mesure le changement textuel. Les écritures textuelles du shell conservent l’estimation ceil(size / 80) afin qu’une charge dense ne puisse pas échapper au budget en ayant peu de sauts de ligne.
Les chemins non suivis que git check-ignore signale comme ignorés imputent aussi zéro ligne et comptent toujours comme un fichier. Cela couvre les arborescences générées telles que target/ lorsqu’un vérificateur y redirige sa sortie (cargo clippy > target/review/clippy.log). L’exemption ne s’applique que lorsque git se termine avec le code 0. Un dépôt manquant, un échec de git et un fichier suivi conservent l’imputation normale de lignes, y compris un fichier suivi dont le nom correspond à un motif d’ignorance.
Profils
Définissez autonomy.profile pour initialiser plusieurs champs à la fois (les champs explicites l’emportent toujours) :
| Profil | Intention |
|---|---|
standard |
Valeurs livrées par défaut (500 / 3 continuations / rafale 30·10s / outils seuls 35) |
quick |
Correctifs courts : 80 pas/segment, 1 continuation, outils seuls et rafale plus serrés |
long |
Lots multi-fichiers : 10 continuations, 10k au total, outils seuls et rafale plus larges |
goal |
Marge à l’échelle d’un objectif sans exiger /goal |
custom |
Aucune amorce de profil — seulement les clés explicites et les constantes |
Inspecter avec /limits
Dans une session, exécutez /limits pour afficher la pile de budgets résolue, le dénominateur TUI effectif de l’agent actif, les sources de configuration et les avertissements de doctor (par exemple lorsque agent.steps est plus serré que le segment de session). Utilisez /limits help pour les noms de clés.
Ce que le TUI affiche : pendant une exécution autonome, l’en-tête indique turn current/max · total current/max · cont current/max. turn est le segment de continuation courant et utilise le plafond de cadence effectif de l’agent actif — min(agent.steps, session.max_steps) lorsque l’agent est plafonné, sinon la limite par segment. total survit aux continuations automatiques. cont affiche ∞ lorsqu’un objectif actif ou le mode Super-Long lève le plafond de continuation ordinaire.
Routage automatique : le routage par mots-clés peut basculer la session vers un agent spécialiste (Debug, Security, DevOps, …). Les spécialistes partagent la même politique de tours de modèle non bornée par défaut que Dev, sauf si vous définissez agent.<name>.steps. Désactivez le routage avec "routing": { "disable": true } si vous ne voulez que l’agent Dev.
Exécutions longues : utilisez /goal ou Super-Long pour un travail de plusieurs heures — ils lèvent les plafonds de continuation ordinaires et utilisent le plafond cumulé plus élevé (20,000 par défaut), avec une sémantique de vérification et de pause documentée dans Mode boucle. /goal écrit d’abord un contrat révisable (critères d’acceptation + plan de vérification) et bascule en échec fermé vers l’état en pause si ce plan ne peut pas être produit.
Lorsqu'une limite arrête une exécution
Avant qu’une exécution ordinaire n’atteigne son plafond cumulé de tours de modèle, AX Code injecte une instruction de convergence bornée (au plus les 50 derniers tours, réduite pour les petits budgets personnalisés). Elle demande au modèle d’arrêter l’exploration large, de terminer ou de mettre en attente en toute sécurité le travail en cours, d’exécuter une vérification ciblée et de signaler honnêtement le travail inachevé. Elle n’ajoute pas de budget et ne contourne aucun plafond.
Lorsqu’un budget terminal est atteint, session.error inclut un code facultatif lisible par machine, et l’événement de rejeu session.end enregistre la même valeur comme stopCode. Les raisons de fin grossières existantes restent inchangées pour la compatibilité. Les codes de limite actuels sont :
MODEL_TURN_SEGMENT_LIMITMODEL_TURN_TOTAL_LIMITAGENT_MODEL_TURN_LIMITAGGREGATE_TOOL_CALL_LIMITFILE_CHANGE_LIMITLINE_CHANGE_LIMIT
À un plafond de segment, AX Code continue automatiquement tant que le budget de continuation configuré reste disponible. Une fois ce budget épuisé, l’exécution s’arrête et le message indique ce qui s’est passé. Envoyer une nouvelle invite telle que continue démarre une nouvelle exécution dirigée par l’utilisateur avec une nouvelle comptabilité d’exécution ; cela n’étend pas rétroactivement l’exécution arrêtée. Utilisez /goal lorsque l’objectif doit rester explicite et reprisable jusqu’à l’achèvement, un blocage ou une frontière de budget d’objectif ou d’exécution. /goal ne désactive pas les garde-fous de permission, d’isolation, de rayon d’impact, de blocage, de jetons, de temps ou de tours de modèle cumulés.
Exemple : relever les budgets pour un grand lot autonome
{
"autonomous": true,
"autonomy": {
"profile": "long",
"budget": {
"model_turns": { "per_segment": 500, "total": 20000 },
"tool_calls": {
"per_segment": 1000,
"rate": { "count": 40, "window_seconds": 10 },
"per_tool": { "bash": 80, "edit": 150 }
},
"changes": { "files_total": 100, "lines_total": 10000 }
},
"stall": {
"tool_only_turns": 50,
"tool_only_nudge": 20,
"failed_mutation_attempts": 30,
"max_consecutive_errors": 3
}
},
"agent": {
"debug": { "steps": 200 }
}
}
Quand désactiver le mode autonome
- Apprendre ax-code — voir ce que fait l’agent à chaque étape
- Opérations sensibles — examiner chaque modification de fichier avant qu’elle ne soit appliquée
- Déboguer le comportement de l’agent — comprendre pourquoi l’agent prend certaines décisions
- Code non fiable — examiner les appels d’outils lorsque vous travaillez avec des dépôts inconnus
Quand garder le mode autonome activé
- Tâches routinières — remaniement, corrections de bogues, migrations lorsque vous faites confiance à l’agent
- Pipelines CI/CD — exécution sans interface lorsque la tâche est déjà contrainte par une politique
- Usage du SDK — exécution programmatique de l’agent via
createAgent() - Grandes tâches — changements multi-fichiers où s’arrêter à chaque permission prendrait des heures
Usage sans interface / CI
En mode sans interface (ax-code run, ax-code serve, SDK), le mode autonome est essentiel — il n’y a pas de TUI pour afficher les invites. L’approbation automatique côté serveur garantit que l’agent s’exécute jusqu’au bout sans rester bloqué sur des invites sans réponse.
# Headless one-shot with autonomous on (default)
ax-code run "Fix all TypeScript errors in src/"
# Explicit override
AX_CODE_AUTONOMOUS=true ax-code run "Migrate API routes"
ax-code run affiche par défaut une sortie d’outil concise : la sortie de commande est réduite à sa fin, les modifications montrent un résumé de diff, et les écritures de tâches montrent un compteur de progression sur une ligne. Les erreurs ne sont jamais masquées — elles s’affichent avec le même plafond de fin que les autres sorties. Passez --full pour rétablir la sortie d’outil complète (diffs complets, sortie de commande non tronquée, listes de tâches complètes) pour l’audit.
Garanties de sécurité
Même avec le mode autonome activé :
- Le bac à sable applique toujours les frontières — les écritures hors de l’espace de travail sont bloquées, quel que soit le mode autonome
- L’escalade d’isolation demande toujours — l’agent ne peut pas contourner silencieusement les restrictions du bac à sable
- Les règles de refus sont appliquées — les règles de permission explicites
"deny"bloquent toujours les appels d’outils - Les choix autonomes sont enregistrés — les métadonnées de l’outil de question incluent un registre structuré
autonomousDecisions, et la sortie d’outil inclut les réponses choisies afin que l’agent puisse les signaler plus tard - Éviter la sur-conception — la continuation autonome rappelle à l’agent de préférer le changement de pratique courante le plus simple et d’éviter les abstractions sans 3 cas d’usage concrets ou plus
- Les instantanés de session sont enregistrés — chaque appel d’outil est journalisé pour l’audit et le rejeu
- L’abandon fonctionne toujours — appuyer sur Esc (interruption) arrête l’agent immédiatement