L'espace de travail local : une bulle privée, un vrai disqueThe local workspace: a private bubble, a real disk
L'espace de travail est la terre où vit le code de votre projet dans VisiDog CLI. Vous choisissez le terrain : une bulle privée tenue par le navigateur (OPFS) ou un vrai dossier de votre machine (un dossier local). Cette page explique les deux mondes, comment y entrer des fichiers sans jamais les abîmer, comment tout emporter en ZIP, et pourquoi aucun chemin ne sort jamais de la racine.The workspace is the ground where your project's code lives in VisiDog CLI. You choose the ground: a private bubble kept by the browser (OPFS) or a real folder on your machine (a local folder). This page explains both worlds, how to bring files in without ever damaging them, how to take everything out as a ZIP, and why no path ever escapes the root.
Deux terres, une même commandeTwo grounds, one command
Quand vous créez un projet, VisiDog CLI vous demande de choisir son terrain. Le premier choix est la bulle : le navigateur garde pour VisiDog une arborescence privée — l'OPFS, « système de fichiers privé de l'origine » — que rien ne parcourt sur votre disque. Le second est le vôtre : vous pointez un dossier de votre machine, et le navigateur, avec votre accord, autorise le CLI à y lire et y écrire comme vous le feriez.
When you create a project, VisiDog CLI asks you to choose its ground. The first choice is the bubble: the browser keeps a private tree for VisiDog — the OPFS, the "origin private file system" — that never walks onto your disk. The second is yours: you point at a folder on your machine, and the browser, with your consent, lets the CLI read and write there as you would.
Le plus important : les deux terrains parlent la même langue. Lire un fichier, le modifier, le déplacer, tout lister, tout exporter — les mêmes commandes et les mêmes outils fonctionnent à l'identique, et le CLI bascule d'un projet à l'autre en changeant simplement de terrain.
The key point: both grounds speak the same language. Reading a file, editing it, moving it, listing everything, exporting everything — the same commands and the same tools work identically, and the CLI switches projects by simply switching grounds.
Schéma 1 — Deux terrains sous une même couche d'accès : la bulle privée du navigateur et votre vrai dossier local.Diagram 1 — Two grounds under one access layer: the browser's private bubble and your real local folder.
1La bulle prive le reste du monde. Un projet OPFS vit dans l'espace du navigateur : ni votre explorateur de fichiers, ni un autre site, ni un autre projet ne peut y toucher. Le CLI y repose un terrain séparé par projet.The bubble keeps the world out. An OPFS project lives in the browser's own space: neither your file explorer, nor another site, nor another project can touch it. The CLI keeps one separate ground there per project.
2Le vrai dossier reste le vôtre. Un projet local (FSA) pointe sur un dossier de votre machine : le code qu'y écrit le CLI est le même que celui que voient votre Git, votre éditeur et vos outils. L'accès vous est demandé une fois, et peut être révoqué par le navigateur.The real folder stays yours. A local (FSA) project points at a folder on your machine: the code the CLI writes there is the same your Git, your editor and your tools see. Access is asked once, and the browser can revoke it.
3La serrure est unique. Toutes les lectures et écritures passent par la même couche, quelle que soit la terre : c'est elle qui normalise les chemins, garantit les écritures et refuse les sorties de terrain.The lock is single. Every read and write goes through the same layer, whichever ground: it normalizes paths, backs up before overwriting, and refuses any escape from the ground.
L'import : un dépôt qui ne réussit qu'en entierThe drop: it only ever lands in full
Entrer des fichiers dans l'espace de travail se fait au plus simple : on glisse un dossier ou une sélection de fichiers depuis sa machine, on vise le dossier d'accueil dans l'explorateur, et on lâche. Sous ce geste court une conduite rigoureuse, pensée pour que rien ne soit jamais écrasé ou laissé à moitié.
Bringing files into the workspace is as simple as it gets: drag a folder or a selection of files from your machine, aim at the host folder in the explorer, and release. Behind that gesture runs a rigorous pipeline, built so that nothing is ever silently overwritten or half-landed.
Schéma 2 — La conduite d'import : qualifier, annoncer, sauvegarder, puis écrire sans jamais laisser un arbre à moitié déposé.Diagram 2 — The import pipeline: qualify, announce, back up, then write without ever leaving a half-landed tree.
Trois règles ressortent. Un dossier déposé là où un dossier existe déjà fusionne : le dépôt verse ses fichiers et ne touche pas les voisins. Un fichier posé sur le chemin d'un dossier — ou l'inverse — est un conflit de nature : le dépôt entier est refusé avant tout octet écrit, avec le chemin fautif. Et lorsqu'un fichier existant va vraiment être remplacé, un écran liste les écrasements annoncés ; votre accord pris, une sauvegarde complète de ce qui est remplacé est mémorisée, si bien que /undo rend vos octets d'avant, même après un dépôt réussi.
Three rules stand out. A drop onto an existing folder merges: the drop pours its files in and leaves neighbors alone. A file landing where a folder already exists — or the reverse — is a nature conflict: the whole drop is refused before any byte is written, naming the offending path. And when an existing file really will be replaced, a screen lists the announced overwrites; once you agree, a complete backup of what gets replaced is memorized, so that /undo brings your earlier bytes back — even after a successful drop.
L'export ZIP : tout emporter, à l'octet prèsThe ZIP export: take it all, to the byte
Le bouton dédié de l'explorateur, un bouton des réglages, ou la commande /export zip : le terminal parcourt l'arborescence de l'espace de travail et fabrique une archive ZIP que votre navigateur télécharge. La restitution est fidèle : les mêmes fichiers, les mêmes dossiers, les mêmes octets.
A dedicated button in the explorer, one in the settings, or the /export zip command: the terminal walks the workspace tree and builds a ZIP archive your browser downloads. Restitution is faithful: same files, same folders, same bytes.
L'archive s'adapte à la charge : sous les comptes standards, un ZIP classique ; au-delà — plus de 65 535 entrées ou des fichiers de plus de 4 Go —, la variante ZIP64 prend le relais. Les noms de fichiers sont validés avant le traitement des contenus : un nom impossible refuse le téléchargement lui-même, plutôt que de livrer une archive boiteuse que d'autres outils n'ouvriront pas.
The archive adapts to the load: under standard counts, a classic ZIP; beyond them — over 65,535 entries or files larger than 4 GB — the ZIP64 variant takes over. File names are validated before any content is processed: an impossible name refuses the download itself, rather than shipping a fragile archive other tools would fail to open.
C'est aussi la sortie de secours de la bulle : un projet OPFS vit dans le navigateur, donc exporter un ZIP avant de purger ses données ou de changer de machine, c'est garder une copie tangible en dur.
It is also the bubble's escape hatch: an OPFS project lives in the browser, so exporting a ZIP before clearing site data or changing machines is how you keep a tangible copy.
Ouvrir avec VisiDog CLIOpen with VisiDog CLI
Une fois VisiDog CLI installée comme application, votre système peut lui confier des fichiers : « Ouvrir avec VisiDog CLI » sur un dossier de code ou un fichier de code (.py, .java, .md…) pose les poignées dans le terminal, comme si vous les aviez déposées à la main.
Once VisiDog CLI is installed as an app, your system can hand it files: "Open with VisiDog CLI" on a code folder or a code file (.py, .java, .md…) lays its handles into the terminal, as if you had dropped them by hand.
Deux sûretés. D'abord, le lot d'une ouverture est borné — aussi bien en nombre d'entrées qu'en profondeur ou en poids : au premier plafond atteint, l'ouverture entière est refusée avec une raison nommée, et rien n'est écrit. Ensuite, l'ouverture n'est pas un cas particulier : une fois le lot jugé, elle rejoint exactement la conduite d'import — qualification, confirmation des remplacements, sauvegarde, dépôt atomique. Si l'espace de travail n'est pas encore prêt, le dépôt attend sans écrire, et une carte vous signale qu'il patiente.
Two safeguards. First, an opening batch is bounded — in entry count, depth and weight alike: at the first cap, the whole opening is refused with a named reason, and nothing is written. Second, an opening is not a special case: once the batch is judged, it follows the exact import pipeline — qualification, confirmation of overwrites, backup, atomic landing. If the workspace is not ready yet, the drop waits without writing, and a card tells you it is pending.
Les frontières : aucun chemin ne sortThe boundaries: no path escapes
La racine de l'espace de travail — le dossier du projet affiché — est une vraie frontière, vérifiée à chaque opération : lecture, écriture, dépôt, déplacement, suppression. Un chemin qui chercherait à « monter » au-dessus d'elle est refusé avant même qu'on aille voir sur le disque.
The workspace root — the folder of the shown project — is a real boundary, checked on every operation: read, write, drop, move, delete. A path trying to climb above it is refused before anyone even looks at the disk.
Schéma 3 — Le confinement : la couche d'accès rejette toute traversée avant de toucher un seul octet.Diagram 3 — Confinement: the access layer refuses any traversal before touching a single byte.
La frontière protège aussi contre les courses : les opérations longues (dépôt, déplacement, renommage, suppression) sont épinglées sur la racine qu'elles ont visée. Si vous changez de projet pendant qu'elles courent, elles s'arrêtent net avec un motif explicite — au lieu de laisser finir un dépôt dans le mauvais dossier. Les écrans d'écriture font la même vérification : un enregistrement lancé depuis une fenêtre qui appartient à un autre projet est refusé avant de toucher le fichier.
The boundary also guards against races: long operations (drop, move, rename, delete) are pinned to the root they aimed at. If you switch projects while they run, they stop dead with an explicit reason — instead of letting a drop finish in the wrong folder. Write screens run the same check: a save issued from a window belonging to another project is refused before touching the file.
L'utiliser dans VisiDogUsing it in VisiDog
1
Choisissez le terrainPick the ground
À la création du projet : « projet dans le navigateur » pour la bulle privée, sans permission à accorder ; ou « projet sur un dossier local », où le navigateur demandera le droit d'accéder au dossier choisi. On passe de l'un à l'autre en changeant de projet : le CLI sert une racine à la fois, et le même code fonctionne partout.
Upon project creation: "browser project" for the private bubble, with no permission to grant; or "project on a local folder", where the browser will ask for permission to reach the chosen folder. Switching from one to the other is just switching projects: the CLI serves one root at a time, and the same code works everywhere.
2
Alimentez l'espace de travailFeed the workspace
Glissez un dossier ou des fichiers dans l'explorateur, ou ouvrez depuis le bureau avec « Ouvrir avec VisiDog CLI ». La conduite d'import qualifie, annonce et sauvegarde avant d'écrire : un refus vous nomme le chemin fautif, et un remplacement se corrige par /undo.
Drag a folder or files into the explorer, or open from the desktop with "Open with VisiDog CLI". The import pipeline qualifies, announces and backs up before writing: a refusal names the offending path, and an overwritten file can be fixed with /undo.
3
Emportez ou connectezTake away or connect
/export zip télécharge l'arborescence complète, fidèle à l'octet — l'archivage d'un travail ou le transfert d'un projet OPFS vers un autre poste. Un projet local, lui, reste connecté à votre vrai dossier : ce que le CLI écrit, votre Git le voit, et l'inverse aussi.
/export zip downloads the whole tree, faithful to the byte — archiving your work, or moving an OPFS project to another machine. A local project, meanwhile, stays connected to your real folder: what the CLI writes, your Git sees — and the other way around.
Cas d'usageUse cases
Le prototype sans conséquenceThe consequence-free prototype
Tester une idée dans une bulle OPFS : rien de ce qui se passe dans le projet ne touche votre disque ; si l'idée survit, l'export ZIP la rend tangible, sinon les données du site restent sages d'elles-mêmes.
Try an idea inside an OPFS bubble: nothing that happens in the project touches your disk; if the idea survives, the ZIP export makes it tangible, otherwise the site data stays quietly contained.
Reprendre un dépôt existantTake over an existing repo
Placer le CLI sur un dossier local : l'IA travaille dans le même arbre que votre Git et vos outils, avec imports vérifiés et sauvegardes avant remplacement — vos habitudes ne changent pas, la vitesse de travail change.
Put the CLI on a local folder: the AI works in the same tree as your Git and your tools, with verified drops and backups before overwrites — your habits stay, the working pace changes.
Passer d'une machine à l'autreMove from one machine to another
La bulle ne se déplace pas, le ZIP oui : exporter avant de partir, importer sur l'autre poste en une glisse qualifiée, sauvegardée, atomique — et le projet repart là où il était.
The bubble does not travel, the ZIP does: export before leaving, import on the other machine with one qualified, backed-up, atomic drop — and the project picks up where it left off.
Du bureau au terminal en un clicFrom the desktop to the terminal in one click
« Ouvrir avec VisiDog CLI » sur un dossier ou un fichier de code : le lot arrive gouverné par les mêmes bornes et la même conduite d'import que toute autre entrée — pas de raccourci qui écrive à votre place.
"Open with VisiDog CLI" on a folder or a code file: the batch arrives governed by the same bounds and the same import pipeline as any other entry — no shortcut that writes behind your back.
Ce que ça vous apporteWhat it brings you
✓Deux terrains, zéro adaptation : la bulle privée ou le vrai dossier, avec les mêmes commandes, les mêmes outils, le même confort.Two grounds, zero adaptation: the private bubble or the real folder, with the same commands, the same tools, the same comfort.
✓Ne plus craindre d'écraser : chaque remplacement est annoncé à l'écran et sauvegardé ; /undo rend vos octets d'avant.No more overwrite anxiety: every overwrite is announced on screen and backed up; /undo brings your earlier bytes back.
✓Jamais à moitié : un dépôt est refusé entier ou réussi entier — jamais d'arbre déposé à moitié, jamais d'échec silencieux.Never halfway: a drop fully refuses or fully succeeds — no half-landed tree, no silent failure.
✓Une sortie tangible : l'export ZIP restitue l'arborescence à l'octet près, dans un format universel.A tangible exit: the ZIP export rebuilds the tree to the byte, in a universal format.
✓Des gestes partout : l'ouverture par l'OS suit la même conduite que la glisse manuelle — aucun chemin d'exception.Gestures everywhere: opening from the OS follows the same pipeline as a manual drop — no exception path.
✓Une racine assumée : chaque opération reste dans le seul projet affiché — ni métadonnées égarées ailleurs, ni débordement.A mastered root: every operation stays within the single shown project — no stray data elsewhere, no overflow.
Points d'attentionPoints of attention
La bulle vit dans le navigateurThe bubble lives in the browser
Un projet OPFS n'existe nulle part ailleurs que dans les données du site : vider ces données efface le projet. Exportez un ZIP avant toute purge ou changement de machine : c'est votre copie en dur.
An OPFS project exists nowhere but in the site's data: clearing that data erases the project. Export a ZIP before any purge or machine change — that is your hard copy.
Les quotas sont réelsQuotas are real
Le navigateur alloue une place finie : un dépôt qui la dépasserait serait entièrement défait — rien ne reste à moitié — et vous le verrez nommé. Les gros corpus attendent un dossier local.
The browser allocates a finite amount of room: a drop that would exceed it would be entirely undone — nothing left halfway — and you will see it named. Larger corpora call for a local folder.
Le lot d'ouverture est bornéAn opening batch is bounded
Une ouverture par l'OS accepte des dizaines de dossiers d'entrée, plusieurs milliers de fichiers, une profondeur raisonnable et quelques dizaines de Mo par fichier — au-dessus, refus nommé et rien n'est écrit : vérifiez le dossier visé plutôt qu'un demi-dépôt.
An OS opening accepts dozens of top-level folders, several thousand files, a reasonable depth and a few tens of MB per file — beyond that, a named refusal and nothing is written: check the aimed folder rather than accept a half-drop.
Un espace de travail à la foisOne workspace at a time
Les opérations longues écrivent dans la racine qu'elles ont visée, pas dans celle qui s'affiche : changer de projet en pleine opération interrompt celle-ci avec un motif — le mauvais dossier n'est jamais touché, mais votre action est à relancer.
Long operations write into the root they aimed at, not the one on display: switching projects mid-operation interrupts it with a reason — the wrong folder is never touched, but your action needs to be run again.