La ligne de commande ros

Tout ce que fait l'application, scriptable. La CLI et l'application partagent les mêmes données — elles ne peuvent pas diverger. Cette page montre d'abord les flux les plus utilisés, puis la liste complète des commandes ; chaque commande et sous-commande répond à --help.

Espaces de travail & capture

ros init ~/project          # créer un espace de travail
ros status                  # ce qu'il y a ici
ros run "python train.py --lr 0.05" -n baseline -p lr=0.05 -s 42 -t demo
ros list-runs               # le tableau des runs
ros show <run-id>           # tout sur un run
ros diff <run-a> <run-b>    # ce qui a changé entre deux runs
ros trace <run-id>          # provenance d'un run
ros pack <run-id>           # pack de repro rejouable
ros replay <pack.zip>       # ré-exécuter un pack dans un environnement neuf
ros flow pipeline.yaml      # runs multi-étapes, liés
ros run --notebook analysis.ipynb -p lr=0.05   # Jupyter, sans interface + capturé

--notebook exécute le notebook via le Jupyter de votre propre environnement (papermill, s'il est installé, injecte réellement les paramètres -p) ; la copie exécutée — sorties comprises — devient un artefact du run. Dans un notebook interactif, %load_ext researchos.jupyter fournit la magie de cellule %%ros : la cellule s'exécute normalement et est enregistrée comme un run (source archivée, paramètres depuis la ligne de magie, métriques via ros_log(acc=0.93)) — elle capture ce que la cellule a fait, pas un pipeline rejouable ; utilisez --notebook pour cela. La magie nécessite le paquet Python researchos importable dans le noyau.

Les runs passent automatiquement par l'environnement de votre projet : un .venv de l'espace de travail, un environment.yml (conda run), un uv.lock ou un poetry.lock est détecté — pour la CLI, l'application et les runs à distance de la même façon (ROS_NO_VENV=1 désactive) — et la capture enregistre l'interpréteur que la commande résout réellement, pas celui du démon. Les commandes non Python sont capturées aussi : les versions de R, de Julia et de Node sont enregistrées quand la commande ou les lockfiles de l'espace de travail les désignent.

Connaissances

ros note new "Title" --log --mood 4 --time 90   # entrée de carnet de bord
ros note seal <note-id>     # sceau infalsifiable
ros note verify             # vérifier toute la chaîne
ros note timestamp <note-id>   # ancrage RFC 3161 d'une entrée scellée
ros note probative <note-id>   # dossier de preuve autonome
ros bib add 1706.03762      # import arXiv/DOI avec PDF
ros bib import-zotero --path ~/Zotero
ros paper new "Title" && ros paper insert-cite vaswani2017
ros paper check             # les figures correspondent-elles toujours à leurs runs ?
ros paper export --pdf

Des figures pour votre article (LaTeX, Word…)

ros assets follow baseline loss.png --as fig-loss.png   # suit le dernier run 'baseline'
ros assets add <artifact-id> --as fig3-frozen.png        # ou épingle un artefact précis
ros assets export            # → paper-assets/ + provenance.{json,md,tex}
ros assets list              # les correspondances (dans ros-assets.json)

Votre document inclut les fichiers de paper-assets/ sous leurs noms stables ; relancez l'expérience, exportez, recompilez — la figure se met à jour sur place. provenance.tex et .md contiennent le tableau figure-vers-run (identifiant du run, paramètres, date), prêt à coller en annexe. Fonctionne avec n'importe quel éditeur — LaTeX, Word, LibreOffice, Beamer — puisque ce n'est qu'un dossier de fichiers.

Des diapositives pour votre prochaine réunion

ros slides                    # slides.md (Marp) sur les 14 derniers jours
ros slides --pinned --format beamer -o deck.tex
ros slides --runs run_a,run_b # exactement ces runs

Une diapositive par run — titre, paramètres, résultats, figures, identifiant — plus un tableau de provenance final : chaque affirmation du diaporama reste à un pas de sa preuve. Les diaporamas Markdown se rendent avec Marp (ou tout outil Markdown-vers-diapositives) ; Beamer se compile avec votre chaîne LaTeX habituelle. Disponible aussi depuis l'écran Article de l'application.

Traces & rapports

ros timeline --project aim2      # toute la chronologie, fusionnée
ros report --from 2026-07-01     # brouillon de rapport d'avancement pour une réunion
ros transmission -o handover.zip # transmission complète du projet, formats ouverts

Planification

ros todo add "Write results" --due 2026-08-02 --priority
ros todo add "Backup" --every weekly
ros agenda list             # les 14 prochains jours
ros agenda export-ics       # vers n'importe quelle app de calendrier
ros overview                # tous les espaces de travail à la fois

Synchronisation & compte

# Serveur bêta : https://sync-dev.tramea.org (code d'invitation requis)
ros account register you@lab.org --server https://sync-dev.tramea.org --invite <code>
ros account login you@lab.org --server https://sync-dev.tramea.org
ros account recover you@lab.org --server …   # réinitialisation par code de récupération
ros account passphrase      # renouveler phrase secrète + code de récupération
ros sync enable             # cet espace de travail ⇄ le serveur
ros sync now                # un cycle push-pull-blobs
ros sync status             # état de synchronisation de cet espace

Sur un second ordinateur, connectez-vous avec le même compte, puis recréez n'importe quel espace synchronisé avec tout son historique :

ros sync spaces             # ce qu'il y a sur votre compte
ros sync join my-project -p ~/my-project

Fichiers du projet & runs à distance

ros sync files on           # scripts et données voyagent en blobs chiffrés
ros sync files status       # ce qui est synchronisé, ce qui est exclu
ros sync remote-exec on     # autoriser CETTE machine à exécuter les runs en file
ros run --remote "python train.py --lr 0.07"   # mettre en file depuis un autre ordinateur

La synchronisation des fichiers du projet transporte les fichiers de travail jusqu'à 50 Mo chacun par défaut, respecte un fichier .rosignore, et exclut toujours .git. ros run --remote met le run en file sur une machine exécutrice du même espace synchronisé ; les résultats reviennent comme un run ordinaire. Détails dans Synchronisation & sécurité.

Espaces partagés & partage

ros lab create thesis-duo              # un espace partagé (Duo), jusqu'à 3 personnes
ros lab invite colleague@lab.org       # sceller la clé de l'espace vers ses appareils
ros publish <element-id> --to thesis-duo   # partager UN SEUL élément
ros share colleague@lab.org            # partager tout un espace de travail
ros invites list                       # les invitations qui vous attendent

Labs : annuaire, conversations, gouvernance

Un labo complet — des équipes, un annuaire des membres, une gouvernance — est la couche d'organisation de l'offre Lab, mise en place à l'intégration. À l'intérieur, le groupe ros lab s'enrichit d'un outillage d'organisation :

ros lab directory                 # équipes, personnes et espaces d'équipe
ros lab profile --interests "…"   # profil d'expertise opt-in, rédigé à la main
ros lab search diffusion          # trouver des collègues par ce qu'ils ont publié
ros lab dm colleague@lab.org "…"  # message direct E2EE (fil créé au premier usage)
ros lab conversations             # vos MD et discussions de groupe sur cette machine
ros lab messages <space-id>       # lire un fil
ros lab team-space NAME --team <id>   # espace d'équipe de l'organisation (resp./admin)
ros lab project-space NAME        # espace projet inter-équipes (tout membre)
ros lab team-invite colleague@lab.org --team <id>   # tous les espaces d'équipe d'un coup
ros lab publish-report            # publier votre rapport d'avancement dans l'espace
ros lab overview                  # admins : vue d'ensemble de l'activité — métadonnées seules
ros lab org-audit                 # admins : piste d'audit à l'échelle de l'organisation
ros lab announce-sync             # inviter les membres absents des annonces

Les invitations de conversation sont acceptées automatiquement par le démon du destinataire — écrire à un collègue fonctionne immédiatement, sans étape d'acceptation. Hors d'un labo, ros lab dm atteint toute personne avec qui vous partagez déjà un espace (le serveur l'impose). Les messages sont chiffrés de bout en bout comme tout le reste ; la vue d'ensemble et l'audit des admins ne voient que des métadonnées.

Le démon, l'API et l'interface web

ros api --daemon            # démon d'arrière-plan : API REST, sync, runs à distance
ros api --status            # tourne-t-il ?
ros api --stop
ros ui                      # interface web rendue côté serveur, dans votre navigateur

L'application de bureau parle au démon ; les paquets installés le démarrent à l'ouverture de session sur Linux et Windows. L'API n'écoute qu'en boucle locale et est protégée par un jeton bearer — documentation interactive sur http://127.0.0.1:<port>/v1/docs.

L'assistant (optionnel)

ros ask --provider anthropic --set-key sk-…   # votre propre clé API
ros ask "what did I try last week?"           # l'IA sur votre espace de travail
ros ask --provider hosted "which run had the best F1?"   # crédits de l'offre

Trois façons de l'alimenter : votre propre clé avec Anthropic (Claude), OpenAI (GPT), Google (Gemini) ou Mistral — une clé par fournisseur, stockée sur votre machine, les requêtes vont directement au fournisseur ; hosted — les crédits inclus dans votre offre (10 questions par mois pendant la bêta), relayés par votre serveur de synchronisation au fournisseur du modèle puis oubliés, jamais stockés ; ou lab — le modèle de votre labo, si votre labo en a configuré un, pour que les requêtes ne quittent jamais le réseau du labo. Les éléments que vous verrouillez restent invisibles à tous les trois (ros ask --set-default locked rend chaque élément opt-in).

Porte de sortie

ros export --all            # archive en clair de tout

Toutes les commandes de premier niveau

Une ligne chacune, telles qu'affichées par ros --help (v0.12.0). Les groupes listent leurs sous-commandes avec ros <commande> --help.

CommandeCe qu'elle fait
accountGérer votre compte sur le serveur de synchronisation (auto-hébergé, chiffré de bout en bout).
agendaGérer les événements du calendrier (échéances, réunions, jalons).
apiServir l'API REST locale (http://127.0.0.1:<port>/v1).
archiveArchiver (suppression douce) un run pour le masquer de list-runs.
askPoser une question ancrée dans les runs, le carnet et les notes de cet espace de travail.
assetsExporter les artefacts de runs vers un dossier stable inclus par votre article.
bibGérer les références bibliographiques.
compareComparer N runs côte à côte : métadonnées, paramètres et métriques.
datasetSuivre les versions des jeux de données par hachage de contenu.
diffComparer deux runs (paramètres, git, artefacts).
digestGénérer un résumé hebdomadaire de l'activité de l'espace de travail.
exportExporter les données de runs en CSV, JSON ou Markdown — ou tout, avec --all.
flowExécuter un pipeline multi-étapes défini dans un fichier YAML.
initInitialiser un espace de travail ResearchOS.
invitesLister et accepter les invitations d'espaces de travail envoyées par des collègues.
labEspaces partagés et labs.
list-runsLister les runs récents.
logAfficher les logs stdout/stderr d'un run.
metricsConsulter et enregistrer les métriques des runs.
noteGérer les notes liées aux runs, artefacts ou références.
overviewAgenda et tâches unifiés sur tous les espaces de travail enregistrés.
packCréer un pack de repro rejouable pour un run.
paperGérer les articles de recherche et l'écriture.
pinÉpingler (ou désépingler) un run pour le mettre en avant dans les listes.
projectGérer l'état du projet : objectifs, hypothèses, TODOs, décisions.
publishPublier un élément (id de note/log, id de run, citekey, id de dataset) dans un autre espace de travail.
replayRejouer un pack de repro dans un environnement neuf.
reportBrouillon de rapport d'avancement pour une période (réunions d'avancement).
runExécuter une commande (ou un notebook) et capturer tout son contexte.
searchRecherche plein texte dans les runs, notes et références.
sharePartager cet espace de travail avec un collègue (par email de compte).
showAfficher les informations détaillées d'un run.
slidesGénérer un squelette de diaporama depuis des runs récents (ou choisis).
statusAfficher la vue d'ensemble et les statistiques de l'espace de travail.
syncSynchroniser cet espace de travail entre appareils (chiffré de bout en bout).
tagAjouter (ou retirer) des étiquettes sur un run.
timelineChronologie fusionnée de tout : runs, carnet de bord, notes, tâches, références.
todayAfficher l'activité du jour depuis le journal d'événements.
todoGérer les listes de tâches et leurs éléments.
traceAfficher la chaîne de provenance complète d'un run.
transmissionPaquet de transmission : carnet de bord, notes, runs + interprétations, bibliothèque, boussole et chronologie en un seul zip aux formats ouverts.
uiLancer l'interface web ResearchOS.
Chaque modification faite par la CLI est enregistrée exactement comme celles de l'application — les deux ne divergent jamais, et les deux se synchronisent.