Que fait storops ?
Voyez où va votre stockage. Comprenez pourquoi. Déplacez ce qui compte. Nettoyez ce qui ne sert pas.
StorOps n'est ni un scanneur de disque, ni un nettoyeur de disque. WizTree répond déjà à la question "qu'est-ce qui prend de l'espace ?" — StorOps répond à ce que ces éléments sont, s'il est sûr d'y toucher, et exécute un nettoyage ou une migration en toute sécurité une fois que l'utilisateur donne son accord. Raisonnement complet dans docs/DESIGN.md.
Ce fichier définit comment un agent doit se comporter lorsqu'il utilise StorOps — pas seulement quelles commandes existent. Préférez suivre les workflows ci-dessous plutôt que d'appeler les commandes au coup par coup ; l'utilisateur ne devrait pas avoir besoin de connaître les noms des commandes.
Règles non négociables
- Analyse avant action. Toujours scanner/inspecter/identifier avant de proposer quoi que ce soit, et ne jamais passer directement à une opération d'écriture.
- Tout est en lecture seule par défaut.
storops scan,storops inspect,storops search,storops identify,storops cleanup planetstorops migrate planne modifient jamais le système de fichiers — exécutez-les librement, sans demander d'abord. - Ne jamais deviner ce qu'est un chemin d'après son nom. Seul
storops identify(basé surrules/*.yaml) détermine la catégorie/risque/supprimabilité. Un chemin sans règle correspondante revient commeunknown/critical— traitez cela comme "ne pas toucher", pas comme une invitation à raisonner sur le dossier à partir de son nom. - Ne jamais considérer le mot "cache" ou "temp" dans un nom comme une autorisation de supprimer. N'agissez que sur ce que
storops identify/storops cleanup plana réellement classifié. - Les chemins à risque critique (Windows, Program Files, fichiers système inconnus, documents utilisateur) ne sont jamais proposés pour suppression ou migration. Ceci est appliqué dans le code (
assert_not_criticaldanssrc/storops/core/risk.py), pas seulement par convention — n'essayez pas de contourner cela. - Chaque opération d'écriture (
storops cleanup execute,storops migrate execute) nécessite d'abord la confirmation explicite et détaillée de l'utilisateur, et le CLI lui-même refuse de s'exécuter sans--confirm. Montrez le plan, attendez un vrai "oui", puis passez--confirm— ne le faites jamais à la place de l'utilisateur de manière préemptive. - Si une application peut être en cours d'exécution, ne déplacez pas ses données.
storops migrate plansignaleRequiresAppClosed;storops migrate executerefuse de s'exécuter sans un accusé de réception--app-closedexplicite dans ce cas. Dites à l'utilisateur de fermer l'application — ne supposez pas qu'elle est fermée et ne tuez pas le processus vous-même. - Pour les données volumineuses et re-téléchargeables de modèles IA/cache (cache Hugging Face, modèles Ollama/LM Studio, etc.), énoncez toujours la conséquence à voix haute ("cela devra être re-téléchargé") avant de les inclure dans quoi que ce soit que l'utilisateur approuve.
- Préférez la migration à la suppression pour tout ce que l'utilisateur identifie comme ayant de la valeur. La suppression est réservée aux données récupérables/ jetables ; les données volumineuses de modèles ou de projets qui ne sont pas jetables doivent être proposées comme DÉPLACEMENT, pas SUPPRESSION.
- Préférez la relocalisation basée sur la configuration de l'application elle-même plutôt qu'un Junction.
storops migrate planintègre déjà cette priorité — ne la remplacez pas par un Junction simplement parce que cela semble plus simple. - Vérifiez après chaque migration (
storops verifypar rapport au fichier de résultat écrit parstorops migrate execute). Si la vérification échoue, dites-le clairement et arrêtez-vous — ne supprimez ni ne modifiez rien d'autre pour "nettoyer" une vérification échouée. - Ne laissez pas le backend d'analyse (WizTree sur Windows, gdu/du sur Linux/macOS) devenir une dépendance dure dans votre raisonnement. S'il est complètement absent, le CLI lève une erreur claire indiquant où l'obtenir (WizTree : https://diskanalyzer.com/ ou
$env:STOROPS_WIZTREE_PATH; gdu : https://github.com/dundee/gdu ou$env:STOROPS_GDU_PATH) — relayez cela à l'utilisateur plutôt que d'essayer de contourner le problème d'une autre manière. - Sur Linux/macOS, chaque résultat
--jsond'une commande de lecture/planification (scan/inspect/search/cleanup plan/migrate plan) contient les champsBackendetBackendAdvice.BackendAdvicen'est non null que lorsque StorOps est tombé en recours sur le backend plus lentduparce quegdun'a pas été trouvé. Mentionnez-le à l'utilisateur une fois par conversation s'il est non null (par exemple "au fait, installer gdu rendrait ces analyses sensiblement plus rapides") — ne le répétez pas à chaque commande, et ne le mentionnez pas du tout sur Windows ou lorsqu'il estnull.
Workflow : "Pourquoi mon disque est-il plein ?"
storops scan C:\(ou le disque mentionné par l'utilisateur) pour les consommateurs de premier niveau et l'espace libre.- Pour toute entrée volumineuse et non identifiée ou ambiguë,
storops inspectpour voir ce qu'elle contient réellement. - Recoupez chaque entrée notable avec
storops identify(scan/inspect attachent déjà l'identité + l'action recommandée, mais appelez-le directement pour un chemin unique demandé par l'utilisateur). - Présentez une répartition classée : ce que c'est, la taille, et l'action recommandée (GARDER / SUPPRIMER / DÉPLACER / VÉRIFIER) avec la raison et le risque.
- Ne supprimez ni ne déplacez rien à ce stade — c'est purement diagnostic.
Workflow : "Nettoyer de l'espace disque" / "Supprimer X"
- Assurez-vous que la cible a déjà été scannée/identifiée (exécutez d'abord le workflow d'analyse ci-dessus si ce n'est pas le cas).
- Exécutez
storops cleanup plan(par défaut--max-risk low; ne l'augmentez que si l'utilisateur dit explicitement qu'il est d'accord avec les éléments à risque moyen/élevé aussi). Cela produit un plan JSON détaillé — rien n'est encore supprimé. - Présentez le plan groupé par niveau de risque, avec la taille de chaque élément, l'application concernée, et la conséquence (signalez explicitement les conséquences à risque moyen/élevé, par exemple "peut nécessiter d'être re-téléchargé"). Affichez la taille totale récupérable.
- Demandez à l'utilisateur de confirmer. S'il ne veut qu'un sous-ensemble, régénérez avec un
--max-riskplus strict ou indiquez quels éléments ignorer — ne modifiez pas les drapeauxApproveddans le fichier de plan sans dire exactement à l'utilisateur ce qui a changé. - Une fois que l'utilisateur a confirmé uniquement, exécutez
storops cleanup execute --plan-file <chemin> --confirm. - Rapportez le résultat par élément (supprimé / ignoré / échoué) et la taille totale récupérée. Un élément
échoué(par exemple fichier en cours d'utilisation) est signalé, pas réessayé de force.
Workflow : "Migrer X vers un autre disque"
- Identifiez le chemin source (
storops identifys'il n'est pas déjà connu d'une analyse). S'il n'est pasMigratable, dites-le et expliquez pourquoi (par exemple critique, ou aucun chemin de migration connu) au lieu d'en improviser un. - Exécutez
storops migrate plan <source> <destination>. Cela décide de la méthode (changement de configuration d'application, ou Junction en solution de repli) et produit une liste d'étapes ordonnées — rien n'est encore déplacé. - Présentez le plan : source, destination, taille, méthode, et si l'application doit être fermée d'abord. Si
RequiresAppClosed, demandez explicitement à l'utilisateur de la fermer avant de continuer. - Demandez une confirmation sur le plan dans son ensemble.
- Exécutez
storops migrate execute --plan-file <chemin> --confirm(ajoutez--app-closedune fois que l'utilisateur a confirmé que l'application est fermée). Cela copie les données, vérifie le nombre/taille des fichiers par rapport à la source, et seulement ensuite supprime l'original — pour la méthode Junction, cela relie également l'ancien chemin. - Si la méthode était un changement de configuration d'application (pas un Junction), dites à l'utilisateur le changement de configuration exact à effectuer (d'après le
MigrationHintdu plan) — StorOps ne modifie pas lui-même les fichiers de configuration arbitraires des applications. - Exécutez
storops verify --result-file <chemin depuis la sortie de migrate execute>et rapportez RÉUSSI / ÉCHEC par vérification. En cas d'échec, arrêtez-vous et décrivez exactement ce qui ne correspond pas — ne supprimez jamais les données restantes pour "résoudre" une vérification échouée.
Workflow : "Est-il sûr de supprimer/déplacer ?"
Exécutez simplement storops identify <chemin> et rapportez textuellement Catégorie, Supprimable, Migrable, RisqueNettoyage, Conséquence et l'action recommandée — c'est la réponse directe et déterministe ; n'éditorialisez pas au-delà de ce que la base de règles dit réellement, et ne devinez pas pour un résultat unknown.
Référence des commandes
| Niveau | Commandes | Confirmation |
|---|---|---|
| Lecture | storops scan, storops inspect, storops search, storops identify | aucune |
| Plan | storops cleanup plan, storops migrate plan | aucune (produit uniquement un fichier de plan) |
| Écriture | storops cleanup execute, storops migrate execute | nécessite --confirm (et --app-closed pour les migrations qui en ont besoin) |
| Vérification | storops verify | aucune (re-vérification en lecture seule) |
Toutes les commandes supportent --json pour une sortie lisible par machine. Invoquez-les comme python -m storops <commande> ..., ou storops <commande> ... si le paquet a été installé via pip install.
Voir README.md pour l'installation / les prérequis et rules/README.md pour le schéma des règles derrière l'identification.