Découvertes thématiques · VisiDog CLIThematic guides · VisiDog CLI

Les modes d'exécution : Plan, Act, objectif et boucle infinieExecution modes: Plan, Act, autonomous goals and the infinite loop

Dans VisiDog CLI, chaque demande à l'agent s'exécute dans un mode. Deux pôles manuels — Plan, l'architecte en lecture seule, et Act, l'exécutant qui écrit sous checkpoints — forment un binôme qui évite les effets non voulus. Deux boucles autonomes s'appuient sur ce même binôme : /goal, l'objectif borné et vérifié, et /infinite, l'amélioration continue permanente. Cette page explique comment chaque mode fonctionne, quand l'utiliser et ce qui vous protège.In VisiDog CLI, every request to the agent runs in a mode. Two manual poles — Plan, the read-only architect, and Act, the executor writing under checkpoints — form a duo that avoids unintended effects. Two autonomous loops build on that same duo: /goal, the bounded and verified objective, and /infinite, permanent continuous improvement. This page explains how each mode works, when to use it, and what keeps you safe.

Les modes, en deux motsModes, in two words

Un agent qui peut « penser et toucher aux fichiers en même temps » mélange deux activités très différentes : décider ce qui doit changer, et changer. VisiDog sépare les deux. Le mode Plan confine l'agent à la lecture — il conçoit, il ne modifie rien. Le mode Act lui confie l'écriture — pas à pas, avec un instantané annulable avant chaque modification. Vous restez l'arbitre entre les deux : le plan se relit, s'approuve, se rejette.

An agent that can "think and touch files at the same time" mixes two very different activities: deciding what should change, and changing it. VisiDog separates the two. Plan mode confines the agent to reading — it designs, it modifies nothing. Act mode hands it the pen — step by step, with a revertible snapshot before every change. You remain the arbiter in between: the plan can be read, approved, or rejected.

Sur ce socle, deux boucles automatiques enchaînent les cycles Plan puis Act sans vous à chaque tour : /goal poursuit un objectif précis jusqu'à un succès vérifié, dans la limite d'un plafond ; /infinite fait tourner la même mécanique sans fin d'annonce, pour améliorer le projet en continu. Le badge de mode en haut du terminal, ou les commandes /plan, /act, /goal et /infinite, basculent d'un mode à l'autre.

On this foundation, two automatic loops chain Plan then Act cycles without you at every turn: /goal pursues a precise objective up to a verified success, within a cap; /infinite runs the same machinery with no announced end, to improve the project continuously. The mode badge at the top of the terminal, or the /plan, /act, /goal and /infinite commands, switch from one mode to another.

Plan / Act : l'architecte et l'exécutantPlan / Act: the architect and the executor

Le mode Plan transforme l'agent en architecte. Il peut lire les fichiers, chercher dans le code, inspecter l'état du projet — mais toute tentative d'écriture, d'édition ou de commande est refusée à la source, avec l'erreur PLAN_MODE_READ_ONLY. Ce n'est pas une politesse de prompt que le modèle pourrait contourner : la couche d'outils elle-même ne lui met pas la main à la pâte. Pendant ce temps, il construit un plan structuré — des étapes numérotées dont le statut suivra l'exécution.

Plan mode turns the agent into an architect. It can read files, search the code, inspect the project's state — but any attempt to write, edit or run a command is refused at the source, with the PLAN_MODE_READ_ONLY error. This is not a polite prompt the model could talk its way around: the tool layer itself keeps its hands off the files. Meanwhile, it builds a structured plan — numbered steps whose status will follow the execution.

Le plan fini, la main vous revient. Une carte d'approbation s'affiche : « Approuver le plan » — ou la commande /act — fait passer la session en mode Act. L'exécutant prend le relais : il déroule les étapes, et chaque mutation de fichier est précédée d'un instantané atomique de l'espace de travail — fichiers et répertoires. /undo rétablit le dernier état, /rewind revient plus loin : une modification approuvée n'en devient pas pour autant irréversible.

Once the plan is ready, the decision is yours. An approval card appears: "Approve the plan" — or the /act command — switches the session to Act mode. The executor takes over: it unfolds the steps, and every file mutation is preceded by an atomic snapshot of the workspace — files and directories alike. /undo restores the last state, /rewind goes further back: an approved change is not irreversible for all that.

Agent · ArchitecteAgent · Architect Mode Plan — lecture seulePlan mode — read-only lit, cherche, inspectereads, searches, inspects toute écriture est refuséeany write is refused PLAN_MODE_READ_ONLY Plan structuréStructured plan des étapes suiviestracked steps en attente, en cours,pending, in progress, terminées — visiblescompleted — all visible dans la carte de planin the plan card Vous arbitrezYou arbitrate relisez le plan, approuvezread the plan, approve ou /act — rejetez sinonor /act — reject otherwise Agent · ExécutantAgent · Executor Mode Act — écritureAct mode — write applique les étapesapplies the steps une par une, en lesone by one, ticking cochant au fil de l'eauthem off as it goes Checkpoint avant chaque écritureCheckpoint before every write instantané atomique de l'espace de travailatomic snapshot of the workspace /undo · /rewind rétablissent l'état exact/undo · /rewind restore the exact state aucune modification tant queno modification as long as le plan n'est pas approuvéthe plan is not approved
Schéma 1 — Le binôme Plan/Act : concevoir sans toucher, arbitrer, appliquer sous checkpoints.Diagram 1 — The Plan/Act duo: design without touching, arbitrate, apply under checkpoints.

Pourquoi ce binôme évite les effets non voulusWhy this duo avoids unintended effects

Trois protections s'additionnent. D'abord, la séparation physique : pendant qu'on discute de l'approche, aucun fichier ne bouge, car le mouvement est impossible — pas juste découragé. Ensuite, l'approbation humaine : le passage de la conception à l'application est un geste explicite, jamais un effet de bord d'une phrase ambiguë. Enfin, la réversibilité : quand l'exécution révèle un imprévu, /undo ramène l'espace de travail exactement en arrière — un instantané partiel ne détruit jamais ce qu'il n'a pas capturé, et une restauration incomplète reste réessayable.

Three protections stack up. First, physical separation: while you discuss the approach, no file moves, because movement is impossible — not merely discouraged. Second, human approval: going from design to application is an explicit gesture, never a side effect of an ambiguous sentence. Third, reversibility: when execution reveals a surprise, /undo takes the workspace exactly back — a partial snapshot never destroys what it could not capture, and an incomplete restoration stays retryable.

Ce même binôme sert de brique aux deux boucles autonomes qui suivent : dans /goal comme dans /infinite, chaque cycle repasse par une phase Plan en lecture seule puis une phase Act où toutes les écritures redeviennent possibles — et restent checkpointées.

This same duo is the building block of the two autonomous loops that follow: in /goal as in /infinite, every cycle goes through a read-only Plan phase then an Act phase where all writes become possible again — and stay checkpointed.

Le mode objectif (/goal) : la boucle qui se termineThe goal mode (/goal): the loop that ends

/goal suivie d'une description lance un objectif autonome : l'agent enchaîne les cycles Plan puis Act jusqu'à ce que la demande soit réalisée — ou jusqu'à un garde-fou. Chaque cycle suit la même mécanique en quatre temps.

A /goal followed by a description starts an autonomous objective: the agent chains Plan then Act cycles until the request is fulfilled — or until a guard fires. Every cycle follows the same four-beat mechanism.

/goal <description> --max=N le plafond d'itérations est une limite de sécurité (20 par défaut), pas un butthe iteration cap is a safety limit (20 by default), not a goal 1 Plan — lecture seulePlan — read-only l'agent inspecte et pose un plan structuréthe agent inspects and lays out a structured plan approbation manuelle possible :manual approval possible: pause « Plan prêt » jusqu'à votre accorda "Plan ready" pause until you agree 2 Act — réalise TOUTES les étapesAct — completes EVERY step écritures checkpointées, relances jusqu'à plan achevécheckpointed writes, follow-ups until the plan is done pas de plan à moitié fait :no half-done plan: la boucle ne cède pas avant la finthe loop does not yield before the end 3 Succès annoncé ? Contrôle globalSuccess claimed? Global check tour distinct en lecture seule : tout le projet est réinspectéa separate read-only turn: the whole project is re-inspected Tout est vérifiéEverything verified GOAL_VERIFIED : l'objectifGOAL_VERIFIED: the goal se termine en succèsends in success Du travail resteWork remains GOAL_REMAINING, verdictGOAL_REMAINING, a missing or absent ou ambigu : cycle suivantambiguous verdict: next cycle relais borné :bounded relay: bilan, chemins touchés,summary, touched paths, étapes restantes — puisremaining steps — then le cycle sort du contextethe cycle is dropped verdict rendu contre laverdict given against the demande initiale et sesinitial request and its critères — pas le dernier bilancriteria — not the last summary Objectif accompli — rapport finalGoal achieved — final report arrêts possibles à tout momentstops possible at any time /goal stop · bouton ArrêterStop button budget épuisé : arrêt honnête,budget exhausted: an honest stop, jamais présenté comme un succèsnever presented as a success plafond atteint : arrêt sanscap reached: stops without annonce d'objectif accompliclaiming the objective is done
Schéma 2 — La boucle /goal : plan, réalisation intégrale, contrôle de succès, relais borné, arrêts plafonnés.Diagram 2 — The /goal loop: plan, full realization, success check, bounded relay, capped stops.

Un avancement qui survit au rechargementProgress that survives a reload

Une boucle autonome peut durer longtemps — et le navigateur, lui, vit sa vie : onglet fermé par erreur, batterie, mise à jour. VisiDog journalise donc les jalons de chaque run — démarrage, raffinement de l'objectif avec ses critères d'acceptation, attente de validation, itérations enregistrées, auto-commits, arrêts — dans une base dédiée, distincte des sessions. À la réouverture, l'avancement est reconstruit : rien n'est rejoué sur vos fichiers (les modifications déjà appliquées y sont déjà), et les checkpoints restent disponibles via /undo.

An autonomous loop can run for a long time — and the browser, well, lives its own life: a tab closed by mistake, the battery, an update. VisiDog therefore journals the milestones of every run — start, goal refinement with its acceptance criteria, approval wait, recorded iterations, auto-commits, stops — in a dedicated store, separate from the sessions. On reopening, the progress is rebuilt: nothing is replayed onto your files (changes already applied are already there), and the checkpoints remain available through /undo.

La reprise est prudente par construction. Un run n'est marqué « interrompu » qu'après vérification que l'onglet qui le tenait est bien parti : tant qu'une autre fenêtre fait tourner la boucle, son verrou de session la protège — jamais deux boucles pour la même session, et un rechargement ne perd pas le run en cours. L'objectif restauré arrive en pause, avec son rapport : état, itérations accomplies, durée, jetons, dernière activité. /goal resume repart de là — ou /goal avec une nouvelle description ouvre un nouveau run, l'ancien restant archivé.

Resumption is cautious by design. A run is only marked "interrupted" after checking that the tab holding it is really gone: as long as another window runs the loop, its session lock protects it — never two loops for the same session, and a reload never loses the running run. The restored goal arrives paused, with its report: state, completed iterations, duration, tokens, last activity. /goal resume picks up from there — or /goal with a new description starts a new run, the old one staying archived.

Le mode Infinite (/infinite) : la boucle permanenteThe infinite mode (/infinite): the permanent loop

/infinite reprend exactement la mécanique de /goal — cycles Plan puis Act, checkpoints, budget, journal — et en retire ce qui fait finir : plus de plafond d'itérations, plus d'attente d'approbation (les plans sont auto-approuvés), plus de contrôle de complétion globale. Quand une phase Act se termine, le cycle suivant démarre : l'agent analyse l'état courant du projet et choisit lui-même la prochaine amélioration qui vaut le coup — correction de cas limite, optimisation, test manquant, refactoring ciblé — en 2 à 10 étapes par cycle.

/infinite reuses the exact machinery of /goal — Plan then Act cycles, checkpoints, budget, journal — and removes what makes it end: no iteration cap, no approval wait (plans are auto-approved), no global completion check. When an Act phase ends, the next cycle starts: the agent analyzes the project's current state and picks the next high-value improvement itself — an edge case fix, an optimization, a missing test, a targeted refactoring — in 2 to 10 steps per cycle.

Deux différences méritent le détour. À la fin de chaque cycle, la boucle crée un auto-commit Git — chore(infinite): cycle N continuous improvement — uniquement si un dépôt existe déjà et porte des modifications en attente : chaque cycle se trouve ainsi un point d'ancrage dans l'historique, et un espace de travail sans dépôt Git est laissé intact. Et la température du modèle progresse par paliers — focalisée au départ, elle monte lentement vers un plafond raisonnable — pour que les premiers cycles restent prudents et que les suivants gagnent en audace sans jamais devenir erratiques.

Two differences deserve a closer look. At the end of each cycle, the loop creates a Git auto-commit — chore(infinite): cycle N continuous improvement — only if a repository already exists and carries pending changes: every cycle thus gets an anchor in history, and a workspace without a Git repo is left untouched. And the model's temperature climbs in steps — focused at first, it rises slowly toward a reasonable ceiling — so early cycles stay careful while later ones gain boldness without ever becoming erratic.

Quand choisir /infinite plutôt que /goalWhen to choose /infinite over /goal

Tout se joue sur une question : votre demande a-t-elle une ligne d'arrivée vérifiable ? Si oui, /goal est fait pour elle — un objectif, des critères, un contrôle de succès, une fin annoncée. Si non, /infinite prend le relais : son « objectif » est une direction, pas un état final.

It all turns on one question: does your request have a verifiable finish line? If it does, /goal is made for it — an objective, criteria, a success check, an announced end. If it does not, /infinite takes over: its "objective" is a direction, not a final state.

/goal/infinite
Forme typiqueTypical shape « Migre ces 3 composants vers le nouveau routeur »"Migrate these 3 components to the new router" « Renforce la robustesse du module d'import »"Harden the import module's robustness"
Fin de la boucleLoop end Succès vérifié, plafond, budget ou arrêtVerified success, cap, budget or stop Votre arrêt, le budget ou rien d'autreYour stop, the budget, or nothing else
Validation des plansPlan approval Au choix : pause « Plan prêt » ou autoYour choice: a "Plan ready" pause or auto Toujours auto-approuvé, strictement non interactifAlways auto-approved, strictly non-interactive
Contrôle de succèsSuccess check Oui — tour de vérification en lecture seuleYes — a read-only verification turn Non — chaque cycle relance le suivantNo — every cycle relaunches the next one
Trace par cyclePer-cycle trace Itération journaliséeJournaled iteration Itération journalisée + auto-commit GitJournaled iteration + Git auto-commit
/infinite <description> plans auto-approuvés · strictement non interactif après le 1er tourauto-approved plans · strictly non-interactive after round 1 Plan du cycleCycle plan l'état du projet dictethe project's state dictates 2 à 10 étapes de valeur2 to 10 valuable steps ActAct applique, checkpointe,applies, checkpoints, coche chaque étapeticks every step Auto-commit du cycleCycle auto-commit chore(infinite): cycle N si un dépôt existe et porte des changementsif a repo exists and has changes cycle suivantnext cycle La température monte par paliers, plafonnéeTemperature climbs in steps, capped 0.15 0.20 0.25 0.30 0.35 plafondceiling 0.5 focalisé au départ,focused at first, plus exploratoire ensuitemore exploratory later Garde-fous inchangés : /goal stop ou le badge interrompt · budget respecté · checkpoints sur chaque écriture · journal des cycles · écran maintenu éveillé pendant la boucleUnchanged guards: /goal stop or the badge interrupts · budget enforced · checkpoints on every write · cycle journal · screen kept awake during the loop
Schéma 3 — La boucle /infinite : des cycles autonomes ancrés dans Git, une audace progressive, des garde-fous constants.Diagram 3 — The /infinite loop: autonomous cycles anchored in Git, progressive boldness, constant guards.

Les garde-fous de la boucle permanenteThe permanent loop's guards

Une boucle qui ne s'arrête pas d'elle-même doit être entourée. Celle-ci l'est à plusieurs étages : vous coupez quand vous voulez — /goal stop ou un clic sur le badge de mode ; le budget de dépense reste armé et arrête la boucle franchement quand le plafond est atteint ; chaque écriture reste précédée de son checkpoint, donc /undo défait n'importe quel pas ; chaque cycle achevé se fixe dans l'historique Git, ce qui borne mécaniquement la portée d'un cycle raté ; la température plafonne, et le journal conserve la trace de chaque cycle pour comprendre ce qui a été fait pendant votre absence.

A loop that never stops by itself must be surrounded. This one is, at several layers: you cut it whenever you want — /goal stop or a click on the mode badge; the spend budget stays armed and stops the loop plainly when the ceiling is hit; every write stays preceded by its checkpoint, so /undo undoes any single step; every completed cycle anchors itself in Git history, mechanically bounding the blast radius of a bad cycle; the temperature is capped; and the journal keeps the trace of every cycle so you can understand what was done while you were away.

L'utiliser dans VisiDogUsing it in VisiDog

1

Choisissez le modePick the mode

Pour un travail pas à pas, passez en Plan (/plan ou le badge de mode), formulez la demande, relisez le plan, puis approuvez — bouton ou /act. Pour déléguer d'un bloc, lancez /goal avec une description et, si besoin, --max=N ; pour l'amélioration continue, /infinite.

For step-by-step work, switch to Plan (/plan or the mode badge), state the request, read the plan, then approve — button or /act. To delegate in one go, run /goal with a description and, if needed, --max=N; for continuous improvement, /infinite.

2

Suivez la boucleFollow the loop

La carte de plan montre les étapes passer de « en attente » à « terminé », le statut de l'objectif affiche le cycle en cours — et, en mode infini, la température du moment. En /goal avec approbation manuelle, la boucle marque une pause « Plan prêt » à chaque cycle : c'est le moment de relire ou de laisser filer.

The plan card shows steps move from "pending" to "completed", the goal status shows the current cycle — and, in infinite mode, the current temperature. In /goal with manual approval, the loop takes a "Plan ready" pause every cycle: that is the moment to re-read, or let it run.

3

Arrêtez, reprenez, annulezStop, resume, undo

/goal stop interrompt à tout moment ; /goal resume reprend un objectif restauré après une fermeture ; /undo et /rewind ramènent l'espace de travail en arrière, y compris après une boucle entière. Le rapport d'objectif récapitule itérations, durée et jetons.

/goal stop interrupts at any time; /goal resume picks up a goal restored after a closure; /undo and /rewind take the workspace back, even after a whole loop. The goal report summarizes iterations, duration and tokens.

Ce que ça vous apporteWhat it brings you

Points d'attentionPoints of attention

La lecture seule n'est pas une politesseRead-only is not a courtesy

Le confinement du mode Plan s'applique à la couche d'outils : une tentative d'édition n'est pas « déconseillée », elle est refusée avec l'erreur PLAN_MODE_READ_ONLY. Rien ne dépend d'une consigne que le modèle déciderait d'ignorer.

Plan mode's confinement applies at the tool layer: a write attempt is not "discouraged", it is refused with the PLAN_MODE_READ_ONLY error. Nothing depends on an instruction the model might ignore.

Un objectif flou donne une vérification floueA vague goal yields a vague check

Le contrôle de succès juge la demande initiale et ses critères, pas un périmètre déduit des fichiers. Formulez /goal avec un livrable et des critères explicites : c'est ce texte que la vérification relira.

The success check judges the initial request and its criteria, not a scope inferred from the files. Phrase /goal with a deliverable and explicit criteria: that text is what verification will re-read.

Le relais n'est pas une archiveThe relay is not an archive

Entre deux cycles, seules les décisions importantes, le progrès vérifié et le travail restant survivent — les inspections détaillées du cycle retiré disparaissent. Ce qui doit traverser les cycles se dit dans le bilan : reportez-y vos contraintes persistantes.

Between two cycles, only key decisions, verified progress and remaining work survive — the retired cycle's detailed inspections are gone. Whatever must cross cycles is said in the summary: report your persistent constraints there.

/infinite ne crée pas de dépôt/infinite creates no repository

L'auto-commit de fin de cycle exige un dépôt Git déjà initialisé : sans /git init, l'espace de travail est laissé intact et les cycles tournent sans ancrage Git — seuls les checkpoints et le journal tracent alors le travail.

The end-of-cycle auto-commit requires an already-initialized Git repository: without /git init, the workspace is left untouched and cycles run without a Git anchor — only the checkpoints and the journal then trace the work.

Une boucle, un coureurOne loop, one runner

Le verrou de session interdit deux boucles simultanées sur la même session, quel que soit le nombre d'onglets. À l'inverse, un run tenu par un onglet vivant n'est jamais déclaré interrompu : la reprise ne s'applique qu'aux runs réellement orphelins.

The session lock forbids two simultaneous loops on the same session, whatever the number of tabs. Conversely, a run held by a live tab is never declared interrupted: resumption only applies to genuinely orphaned runs.

Le budget s'applique aux deux bouclesThe budget applies to both loops

Mode infini ou pas, le plafond de dépense reste actif : la boucle s'arrête en stopped_budget plutôt que de dépasser. Pour une boucle longue, prévoyez le budget en conséquence — l'arrêt est honnête, mais il arrive.

Infinite mode or not, the spend cap stays active: the loop stops in stopped_budget rather than overspending. For a long loop, plan the budget accordingly — the stop is honest, but it happens.