Apprendre à travailler avec IBM Bob
Vous savez utiliser un éditeur et Git, vous connaissez les modèles de langage par l'usage, mais vous n'avez jamais travaillé avec un agent de code. Cette formation vous fait passer du premier dialogue à la personnalisation de l'outil pour votre équipe, en trois niveaux, avec un projet fil rouge et des travaux pratiques à refaire chez vous. Elle est construite sur deux sources recoupées : douze vidéos de démonstration et la documentation officielle de Bob.
Une conversation avec Bob, rejouée pas à pas
Cliquez sur les étapes : ce que vous tapez, ce que Bob répond, ce qu'il demande d'approuver. Scénario tiré du tutoriel « Inspect an unfamiliar codebase ».
Chaque chapitre suit le même déroulé : un objectif (« à la fin, vous savez… »), une explication courte, une démonstration commentée tirée d'une vidéo, les précisions de la documentation, un travail pratique à faire dans votre éditeur, une liste de vérification cochable et un quiz. Chaque niveau se termine par un test. Les modules marqués Interactif reposent sur des données tirées des sources ; ceux marqués Illustration sont des maquettes dessinées pour la formation. La page n'exécute pas Bob et ne fait aucun appel réseau : elle vous guide, vous faites les gestes dans votre éditeur. Les termes de l'interface restent en anglais, comme dans le produit. Quand un point n'est ni documenté ni montré, la formation le dit.
Découverte
Ce qu'est Bob, et ce qu'il n'est pas
Avant d'installer quoi que ce soit, il faut savoir de quelle catégorie d'outil on parle. Un agent de code n'est ni un moteur de complétion, ni un chatbot dans une barre latérale.
À la fin de ce chapitre, vous savez expliquer à un collègue ce que Bob fait, en quoi il diffère d'un complément de code, et quelle est la différence entre Bob IDE et Bob Shell.
- La définition officielle : un partenaire du cycle de vie logiciel, pas un générateur de lignes.
- Bob IDE et Bob Shell : deux portes d'entrée, les mêmes capacités.
- Ce qu'un agent fait de plus qu'une complétion : lire, décider, agir, demander l'approbation.
- Une contradiction dans les sources, et comment la formation la tranche.
La définition officielle
La page d'accueil de la documentation définit Bob comme un « AI SDLC partner » : un partenaire pour le cycle de vie du logiciel, qui vient s'ajouter à vos façons de travailler et vous aide à intervenir sur de vraies bases de code [D ide]. Le mot important est cycle de vie : la documentation ne vend pas un outil qui écrit des lignes à votre place, mais un outil qui intervient sur la compréhension, l'écriture, la revue, la documentation et l'automatisation.
Les usages annoncés sont au nombre de sept : générer du code, refactoriser et déboguer, écrire et mettre à jour la documentation, répondre à des questions, automatiser des tâches, créer des fichiers et des projets, et suivre sa consommation pour l'optimiser [D ide].
Un agent, pas une complétion
Un moteur de complétion propose la suite de la ligne que vous tapez. Il ne lit pas votre dépôt, ne lance pas vos tests, ne vous demande rien. Bob fonctionne autrement : il dispose d'outils et s'en sert. Il lit des fichiers, cherche dans le code, exécute des commandes dans le terminal, appelle des serveurs externes, et découpe le travail en sous-tâches [D ide/core-concepts/tools].
Cette capacité d'action est précisément ce qui impose un garde-fou : Bob demande votre approbation avant les actions sensibles, et vous pouvez décider à l'avance lesquelles sont automatiquement approuvées. C'est le sujet du niveau 2. Pour les sous-agents, la documentation est explicite : vous approuvez chaque lancement avant qu'il démarre [D ide].
/docs/ide, légende « Bob IDE ») : à gauche l'explorateur de fichiers, au centre l'éditeur, à droite le panneau de conversation. C'est l'écran dans lequel se déroule toute la formation.Bob IDE et Bob Shell
Bob existe sous deux formes. Bob IDE est l'application graphique, celle de cette formation. Bob Shell apporte les mêmes capacités à la ligne de commande : sessions interactives, sessions non interactives pour l'automatisation, intégration dans le terminal d'un éditeur [D shell]. Les deux outils offrent « la même assistance, optimisée pour leur environnement respectif » [D llms.txt], et l'on retrouve dans les deux les trois mêmes modes. Bob Shell est traité au niveau 3, pour l'automatisation et l'intégration continue.
Les sources ne s'accordent pas sur la nature de Bob IDE. Trois pages de tutoriel et le guide de démarrage écrivent, dans leurs prérequis : « Bob is a standalone IDE application and not an extension » [D ide/getting-started/quickstart]. Le fichier llms.txt du site parle au contraire d'installer « l'extension Bob pour VS Code » [D llms.txt], et la page de connexion mentionne « l'extension IDE » parmi les clients [D ide/account/signing-in]. Les installateurs proposés au téléchargement sont un .pkg macOS et un .exe Windows, ce qui va dans le sens d'une application autonome. Cette formation enseigne donc l'application autonome, en suivant la documentation la plus explicite et la plus récente. Si vous lisez « extension » ailleurs, c'est un reste de l'ancienne distribution.
Bob agit : il lit votre code, exécute des commandes et modifie des fichiers, sous votre approbation. Ce n'est pas un complément de code, et ce n'est pas non plus un outil auquel on délègue tout. Le reste de la formation consiste à apprendre à cadrer son travail pour qu'il soit utile et vérifiable.
Installer Bob et créer son compte
Comptez environ cinq minutes. La seule subtilité est le choix de l'installateur sur Mac, et le fait que la session ne se partage pas entre les clients.
À la fin de ce chapitre, Bob est installé sur votre machine, vous êtes connecté avec un IBMid, et le panneau de conversation s'ouvre au clavier.
Ce qu'il faut avant de commencer
La documentation annonce une installation d'environ cinq minutes et demande : un système macOS, Linux ou Windows, 4 Go de mémoire vive au minimum et 8 Go recommandés, 500 Mo d'espace disque, et une connexion internet active [D ide/getting-started/install].
Linux figure dans la liste des systèmes pris en charge, mais la page d'installation ne donne aucune étape ni aucun format de paquet pour Linux. Les seules procédures détaillées concernent macOS et Windows. Si vous travaillez sous Linux, la documentation lue le 20 septembre 2026 ne vous dit pas comment procéder.
Installer
Le téléchargement se fait depuis bob.ibm.com/download. Sur Mac, il faut d'abord savoir quel processeur équipe la machine : menu Pomme, « About This Mac », ligne « Chip ». Une puce M1, M2 ou M3 appelle l'installateur mac-ARM ; un processeur Intel appelle l'installateur mac-Intel. On ouvre ensuite le fichier .pkg et on suit l'assistant. Sur Windows, on exécute le .exe, on garde le répertoire proposé par défaut, et on termine par « Finish » [D ide/getting-started/install].
Se connecter
Un IBMid est nécessaire. Tous les clients passent par le même point d'entrée, bob.ibm.com/login [D ide/account/signing-in]. Bob ouvre votre navigateur, vous saisissez votre adresse, Bob reconnaît le domaine et vous redirige soit vers IBMid, soit vers le système d'authentification unique de votre entreprise, puis vous ramène dans l'application. Il est possible de créer un IBMid à partir d'un compte Google. L'authentification unique par SAML ou OIDC demande un plan Enterprise.
Deux détails qui font perdre du temps si on les ignore : les sessions expirent après une période d'inactivité, et une session est propre à chaque client. Être connecté dans Bob IDE ne vous connecte pas dans Bob Shell.
Pour ouvrir le panneau de conversation : Option + Command + B sur macOS, Ctrl + Alt + B sur Windows [D ide/getting-started/quickstart]. Ce raccourci est répété dans presque tous les tutoriels ; c'est le seul à connaître par cœur pour démarrer.
Le projet fil rouge de cette formation est Galaxium Travels, un système fictif de réservation de voyages spatiaux utilisé par les tutoriels officiels. Vous le garderez du niveau 1 au niveau 3.
- Installez Bob depuis
bob.ibm.com/download, en choisissant le bon installateur pour votre machine. - Lancez l'application et connectez-vous avec votre IBMid.
- Clonez le projet fil rouge. En ligne de commande :
La branche
git clone -b bob-learning-path-branch https://github.com/IBM/galaxium-travels
bob-learning-path-branchest celle qu'utilisent les tutoriels du parcours d'apprentissage. - Ouvrez le dossier dans Bob avec « File > Open Folder », puis répondez « Yes, I trust the authors » à la demande de confiance.
- Ouvrez le panneau de conversation avec le raccourci, et laissez-le ouvert.
- Bob est installé et se lance.
- Je suis connecté avec mon IBMid et je vois mon compte dans l'application.
- Le dépôt Galaxium Travels est cloné sur la branche
bob-learning-path-branch. - Le dossier est ouvert dans Bob et j'ai accordé ma confiance aux auteurs.
- J'ouvre et je ferme le panneau de conversation au clavier sans hésiter.
Les trois modes : Agent, Plan, Ask
Le mode décide de ce que Bob a le droit de faire. C'est le réglage le plus structurant de l'outil, et le premier réflexe à prendre avant d'écrire un message.
À la fin de ce chapitre, vous choisissez le mode adapté à votre intention, vous savez lequel peut modifier des fichiers ou lancer des commandes, et vous changez de mode au clavier.
Trois modes, trois niveaux de permission
La documentation annonce trois modes disponibles par défaut [D ide/features/modes]. Ce ne sont pas trois styles de réponse, mais trois jeux d'outils différents, donc trois niveaux de pouvoir sur votre projet.
Ask mode est en lecture seule : il lit, il explique, il ne modifie rien. Le guide de démarrage relie explicitement ce choix au principe du moindre privilège [D ide/getting-started/quickstart]. Agent mode est le mode complet : il lit, écrit et surtout c'est le seul à pouvoir exécuter des commandes dans le terminal. Plan mode se situe entre les deux, et sa position surprend souvent.
Plan mode peut écrire des fichiers. On imagine volontiers un mode de réflexion en lecture seule ; ce n'est pas le cas. Plan dispose de l'outil d'édition, parce qu'il doit enregistrer le plan qu'il rédige, par exemple dans un fichier Markdown. En revanche il ne peut pas exécuter de commandes [D ide/features/modes]. Le mode vraiment inoffensif pour votre dépôt, c'est Ask.
Changer de mode
Quatre façons de changer de mode sont documentées : le menu déroulant à gauche du champ de saisie, le raccourci cyclique Command + point sur macOS ou Ctrl + point ailleurs, l'acceptation d'une suggestion de Bob, et le changement que Bob opère de lui-même en cours de tâche, par exemple lorsqu'il passe de Plan à Agent une fois le plan prêt [D ide/features/modes]. Les commandes /agent, /plan et /ask font également le travail [D ide/getting-started/quickstart].
Les vidéos de démonstration les plus anciennes parlent de « code mode », et le fichier llms.txt du site annonce cinq modes : Code, Ask, Plan, Advanced et Orchestrator [D llms.txt]. La documentation, elle, n'en décrit que trois. L'indice décisif se trouve dans les images de la documentation : la capture d'écran nommée code-mode.png porte la légende officielle « Switch to Agent mode ». « Code mode » est donc l'ancien nom d'Agent mode. Les modes « Advanced » et « Orchestrator » ne sont confirmés par aucune page de documentation : cette formation ne les enseigne pas.
- Passez en Ask mode avec le menu déroulant ou
/ask. - Demandez : What is the purpose of this application? Describe the project structure and the main responsibilities of each top-level directory.
- Lisez la réponse, puis demandez à Bob d'écrire cette description dans un fichier
docs/ONBOARDING.md. - Observez son refus, ou sa proposition de changer de mode : c'est le garde-fou du mode, pas une mauvaise volonté.
- Passez en Agent mode avec le raccourci, redemandez la même chose, et approuvez la création du fichier.
Ce contraste, ressenti une fois, vaut toutes les explications : le mode n'est pas un ton, c'est une permission.
- Je change de mode au clavier sans chercher dans les menus.
- J'ai vu Ask refuser d'écrire un fichier.
- Je sais que Plan peut écrire mais pas exécuter de commande.
- Je sais qu'Agent est le seul mode capable de lancer une commande dans le terminal.
- Le fichier
docs/ONBOARDING.mdexiste dans mon projet.
Premier dialogue : comprendre une base de code
Le meilleur premier usage d'un agent n'est pas d'écrire du code, c'est de comprendre celui qui existe. C'est sans risque, et c'est là que le gain est le plus visible.
À la fin de ce chapitre, vous savez faire décrire un dépôt inconnu, en obtenir l'architecture avec des diagrammes, le démarrer, et conserver le résultat dans un fichier pour votre équipe.
Trois questions suffisent
Les vidéos d'onboarding suivent un scénario simple et reproductible : un développeur arrive sur un projet qu'il ne connaît pas, et personne n'est disponible pour lui expliquer. Il pose trois questions, dans cet ordre : à quoi sert cette application, comment la démarrer, et comment elle est architecturée.
- [00:20] Le présentateur bascule en Ask mode, présenté comme l'un des modes prédéfinis qui optimisent l'interaction.
- [00:45] Bob examine d'abord la structure des fichiers, reconnaît une application complète côté client et serveur, puis ouvre quelques fichiers clés avant de se prononcer.
- [01:10] En moins de vingt secondes, il rend le but de l'application, une vue d'architecture, les fonctionnalités principales et les cas d'usage visés.
Ordre remarquable : Bob part de la structure, pas du contenu. Il lit peu de fichiers, bien choisis. [V05]
- [00:30] Bob lit le
README, lepackage.jsonet leMakefile. - [00:55] Il explique qu'il faut lancer le serveur et le client, où les trouver, et quelle est la procédure de première installation.
- [01:15] C'est le présentateur qui exécute les commandes, l'une après l'autre. Bob, en Ask mode, n'exécute rien.
- [02:20] L'application tourne. Le présentateur conclut qu'il est opérationnel en moins d'une minute.
C'est la meilleure illustration concrète de la limite du mode Ask : Bob explique la commande, vous la lancez. [V06]
- [00:50] Bob distingue les couches, côté client et côté serveur, et nomme les patterns à connaître, par exemple l'injection de dépendances.
- [02:00] Il produit un modèle de données et un flux de données sous forme de diagrammes Mermaid, puis aborde la construction et la sécurité.
- [02:30] Le présentateur estime avoir obtenu en deux minutes ce qui demanderait des heures à la main.
- [03:00] Pour conserver l'analyse, il bascule en Agent mode, en restant dans la même tâche pour garder le contexte déjà accumulé, et demande la création d'un fichier Markdown.
Le geste à retenir est celui de la fin : rester dans la même tâche évite à Bob de relire tout le dépôt. [V07]
Cet exercice reprend le déroulé du tutoriel officiel « Inspect an unfamiliar codebase » [D ide/tutorials/inspect-a-codebase], dont les prompts sont repris presque tels quels.
- En Ask mode, demandez le but de l'application et la responsabilité de chaque répertoire de premier niveau.
- Toujours en Ask, demandez comment démarrer l'application, puis lancez vous-même les commandes indiquées.
- Demandez l'architecture, en réclamant explicitement des diagrammes Mermaid pour le modèle de données et le flux principal.
- Sans ouvrir de nouvelle tâche, passez en Agent mode et demandez de tout consigner dans
docs/ONBOARDING.md, avec les diagrammes et des tableaux. - Relisez le fichier produit et corrigez ce qui est faux. C'est votre première relecture critique d'un travail d'agent.
- J'ai obtenu une description du projet sans lire le code moi-même.
- J'ai démarré l'application en suivant les indications de Bob.
- J'ai obtenu au moins un diagramme Mermaid lisible.
- J'ai gardé la même tâche pour passer de l'analyse à l'écriture du fichier.
- J'ai relu le fichier produit et corrigé au moins une imprécision.
La fenêtre de contexte et les Bobcoins
C'est la notion que les débutants ignorent et que les utilisateurs expérimentés surveillent en permanence. Elle explique à la fois la qualité des réponses et le montant de la facture.
À la fin de ce chapitre, vous lisez l'indicateur de contexte, vous savez quand ouvrir une nouvelle tâche, et vous comprenez ce qui fait monter votre consommation.
Un budget, pas une mémoire
Chaque tâche dispose d'une fenêtre de contexte plafonnée à 270 000 tokens [D ide/core-concepts/context-window-management]. La documentation insiste sur une formule utile : la fenêtre de contexte n'est pas un espace de stockage, c'est le budget de tokens actif à chaque étape.
Quand la conversation approche du plafond, une compaction se déclenche, généralement autour de 190 000 tokens. Elle conserve le récent et le pertinent, résume ou supprime l'ancien. La documentation prévient sans détour : la compaction perd de l'information. Environ 20 000 tokens sont par ailleurs réservés à la réponse du modèle.
Ce qui occupe la fenêtre
Le panneau détaille six postes : le system prompt, les définitions d'outils, les outils MCP, les Rules, les Skills et les Messages. Vos mentions de fichiers, les sorties de commandes et les résultats d'outils comptent tous dans Messages ; le contenu des fichiers n'apparaît pas sur une ligne séparée.
Sur le projet fil rouge, la documentation mesure une surcharge de départ d'environ 8 500 tokens avant même votre première vraie question. Le point décisif est ailleurs : Bob renvoie l'intégralité du contexte actif à chaque message. Une longue conversation coûte donc de plus en plus cher à chaque tour.
/account/bobcoins et /core-concepts/context-window-management) : l'indicateur qui réunit les tokens et les Bobcoins. C'est le cadran à surveiller pendant le travail.- [02:25] Il ouvre l'indicateur et commente 44 000 tokens consommés sur 270 000.
- [02:50] Il détaille les postes à l'oral, avec des ordres de grandeur proches de ceux de la documentation sans être identiques.
- [03:10] Il énonce sa règle personnelle : ne jamais dépasser 100 000 tokens, 120 000 au grand maximum, et ouvrir une nouvelle conversation dès que possible.
Il qualifie la fenêtre de contexte de ressource la plus précieuse et de concept le plus important à maîtriser en codage assisté. [V02]
Les Bobcoins
La consommation se mesure en Bobcoins, des unités qui agrègent l'usage de ressources de calcul, tous modèles confondus [D ide/account/bobcoins]. Les tokens d'entrée comme de sortie comptent. Un Bobcoin vaut 0,50 dollar, un prix confirmé à deux endroits. Les allocations mensuelles documentées sont de 50 Bobcoins pour l'essai gratuit et le plan Pro, 180 pour Pro+, et 1 000 pour Ultra.
Le lien avec le chapitre précédent est direct, et c'est l'argument économique de la formation : puisque chaque message renvoie tout le contexte actif, une conversation qui traîne coûte plus cher à chaque tour. Ouvrir une nouvelle tâche quand on change de sujet n'est pas une coquetterie d'organisation, c'est une économie.
Trois chiffres manquent, et cette formation ne les invente pas. Le taux de conversion des tokens en Bobcoins n'est publié nulle part : la documentation indique seulement que Bob fait la conversion pour vous. Le prix mensuel en euros ou en dollars des plans Pro, Pro+ et Ultra n'apparaît pas dans les pages lues. Et le coût en Bobcoins d'une opération type, par exemple une lecture de fichier ou un sous-agent, n'est pas documenté. Vous pouvez donc suivre votre consommation, mais pas la prévoir à partir d'un nombre de tokens.
Regardez l'indicateur de contexte comme vous regardez la jauge de carburant. Et ouvrez une nouvelle tâche à chaque changement de sujet : la documentation en fait une bonne pratique explicite, avec un repère utile, autour de 19 000 tokens de Messages il est raisonnable de repartir à zéro.
- Je sais où lire le nombre de tokens consommés dans l'interface.
- Je connais le plafond de 270 000 tokens et le seuil de compaction autour de 190 000.
- J'ai compris que chaque message renvoie tout le contexte actif.
- J'ouvre une nouvelle tâche quand je change de sujet.
- Je sais où consulter ma consommation de Bobcoins.
Prise en main
Le cycle plan, implémentation, revue
C'est la méthode centrale de la formation. Elle tient en cinq étapes, et l'essentiel du travail se joue avant la première ligne de code.
À la fin de ce chapitre, vous savez faire produire un plan écrit, le relire de façon critique, le corriger, puis le faire implémenter dans une tâche neuve.
Cinq étapes
La vidéo 2 résume la méthode qu'on retrouve dans tous les tutoriels : donner le contexte, faire produire un plan, itérer sur le plan, implémenter, puis itérer sur l'implémentation. Le présentateur qualifie l'étape du plan de plus importante, et décrit l'implémentation comme « étonnamment peu spectaculaire » quand le plan est bon [V02].
Cadrer avant de demander
Le tutoriel sur les fonctionnalités complexes fait précéder le prompt de quatre questions, à se poser avant de toucher au clavier [D ide/tutorials/create-a-plan-and-implement-complex-features] : que fait la fonctionnalité, et surtout que ne fait-elle pas ? Quelles couches touche-t-elle, interface, service, base de données ? Quelles contraintes s'imposent, par exemple le nombre de fichiers ou la rétrocompatibilité ? Et à quoi reconnaîtra-t-on que c'est terminé ?
Ces quatre réponses se transposent directement en un prompt structuré en quatre blocs : ce que je veux, le périmètre, les contraintes, la définition de « terminé ». C'est le modèle à réutiliser pour toutes vos demandes de plan.
Faire écrire le plan dans un fichier
Un plan qui reste dans la conversation disparaît avec elle. La vidéo 2 en fait une consigne : toujours sauvegarder le plan dans un fichier pour pouvoir l'itérer [V02]. Le tutoriel obtient ce résultat en le demandant explicitement dans les contraintes, par exemple un dossier plans et au plus trois fichiers.
Le tutoriel sur les fonctionnalités complexes écrit que Bob « génère un ensemble de fichiers Markdown », tandis que la page sur le binôme avec Bob dit qu'il « peut l'enregistrer comme fichier Markdown ». La persistance semble donc dépendre de la consigne. Retenez-en une règle pratique : demandez toujours explicitement l'enregistrement du plan, ne comptez pas dessus par défaut.
Relire le plan, vraiment
C'est ici que la vidéo 2 place la phrase la plus utile de toute la playlist : c'est le moment d'« utiliser son propre cerveau » [V02]. Trois critères de relecture sont proposés par le tutoriel.
- Le périmètre correspond-il à ce que vous avez demandé, ni plus, ni moins ?
- Traquez le vague. Des formules comme « ajouter au besoin » ou « mettre à jour de façon appropriée » sont des trous dans le plan, pas des détails de rédaction.
- Chaque étape nomme-t-elle ses fichiers ? Une étape sans fichier identifié est une étape que personne ne peut vérifier.
Puis on corrige, dans la même conversation Plan, par une demande ciblée. Le tutoriel donne un exemple de correction portant sur des couleurs précises à associer à chaque classe de siège.
Implémenter dans une tâche neuve
Une fois le plan approuvé, on ouvre une nouvelle tâche avant d'implémenter. Le tutoriel donne trois raisons : la discussion de planification ne pèse plus sur le budget de tokens, le contexte se recentre sur le plan approuvé, et l'on évite de mélanger réflexion et exécution. Le prompt d'implémentation tient alors en une ligne, avec une mention du dossier de plans.
Build the features in the plans folder @plans/
- [00:20] Bascule en Plan mode, décrit comme servant à analyser les exigences puis produire un plan.
- [02:02] Une liste de tâches apparaît automatiquement pour les travaux longs, et se met à jour au fil de l'analyse.
- [02:30] Bob produit deux approches, chacune avec ses spécifications techniques et sa stratégie de test.
- [03:20] Il les compare : un calcul côté client, rapide à livrer mais refait à chaque rendu ; un calcul côté serveur, plus performant mais qui impose une migration des données existantes.
- [04:00] Le présentateur insiste : ce sont des points de discussion, l'avis de Bob, à confronter à des collègues.
- [04:40] La recommandation retenue respecte la contrainte de rapidité donnée au départ, et le plan inclut les étapes de déploiement.
Demander deux approches avec leurs avantages et inconvénients, plutôt qu'une solution, est la technique de prompt la plus rentable de ce chapitre. [V09]
- [00:35] Bob crée les fichiers, puis détecte et corrige seul des erreurs de style.
- [01:00] Certains outils sont auto-approuvés, mais Bob demande une approbation pour créer un répertoire.
- [02:40] Un point de reprise est créé à chaque écriture de fichier, ce qui permet de revenir à la dernière configuration correcte.
- [04:40] Bob écrit des tests unitaires et les lance, puis adapte les tests existants au nouvel attribut.
- [08:00] La construction du projet réussit, les tests passent.
- [08:40] Bilan annoncé : de l'idée à l'implémentation en une quinzaine de minutes, avec un résumé réutilisable dans la pull request.
Pendant que Bob travaille, le présentateur relit les fichiers produits au fur et à mesure. C'est le bon usage du temps d'attente. [V10]
Sur le projet fil rouge, vous allez ajouter des classes de siège aux réservations. C'est l'exercice du tutoriel officiel.
- Écrivez d'abord, sur papier, vos réponses aux quatre questions de cadrage.
- Passez en Plan mode et rédigez un prompt en quatre blocs. Périmètre suggéré : un sélecteur de classe dans l'interface de réservation, une API qui accepte et stocke la classe, une colonne
seat_classdans la table des réservations, et aucun changement au tableau de bord d'administration. Contraintes : un dossierplans, trois fichiers au maximum, un changement de base rétrocompatible. - Approuvez les outils que Bob demande, puis répondez à ses questions de clarification.
- Relisez le plan avec les trois critères. Imposez-vous de trouver au moins une formulation vague et de la faire corriger.
- Ouvrez une nouvelle tâche, passez en Agent mode, et lancez l'implémentation en mentionnant
@plans/. - Lancez l'application et vérifiez que vous pouvez choisir une classe. Le tutoriel officiel s'arrête avant cette vérification : ne faites pas la même erreur.
- J'ai répondu aux quatre questions de cadrage avant d'écrire le prompt.
- Mon plan est enregistré dans des fichiers, pas seulement dans la conversation.
- J'ai trouvé et fait corriger au moins une formulation vague dans le plan.
- J'ai ouvert une nouvelle tâche avant d'implémenter.
- J'ai vérifié moi-même que la fonctionnalité marche dans l'application.
Donner le bon contexte
La qualité d'une réponse dépend moins de la formulation que de ce que Bob a sous les yeux. Trop de contexte nuit autant que pas assez.
À la fin de ce chapitre, vous mentionnez précisément un fichier, une plage de lignes, un diagnostic ou un diff, vous connaissez les pièges des mentions, et vous savez reconnaître un contexte empoisonné.
Les mentions de contexte
Une mention commence par @ et ouvre un menu. Sept types sont documentés [D ide/features/context-mentions].
| Mention | Ce qu'elle fournit | À savoir |
|---|---|---|
@/chemin/fichier.ts | Le contenu complet, avec les numéros de ligne | Commence toujours par / depuis la racine. Les PDF et DOCX sont acceptés, pas les binaires. |
@/src/app.js:10-20 | Seulement ces lignes | La meilleure façon d'économiser du contexte. |
@/chemin/dossier | Les fichiers texte du dossier | Non récursif. Les sous-dossiers ne sont pas inclus. |
@problems | Erreurs et avertissements, groupés par fichier | Avec les chemins, les lignes et les messages. |
@terminal | La dernière commande et sa sortie | Limité au contenu visible du terminal. |
@a1b2c3d | Un commit : message, auteur, date, diff | Uniquement dans un dépôt Git. |
@git-changes | L'état Git et le diff non commité | Idéal avant d'écrire un message de commit. |
@https://exemple.com | La page convertie en Markdown | Les pages complexes se convertissent mal. |
Les mentions de fichier et de dossier passent outre .bobignore et .gitignore : un fichier explicitement mentionné est lu, même s'il est censé être ignoré [D ide/features/context-mentions]. En revanche, @git-changes et la mention d'un commit respectent .gitignore. Autrement dit, .bobignore vous protège des lectures automatiques, pas de vos propres mentions. Ne mentionnez jamais un fichier de secrets en pensant qu'il sera filtré.
Précis plutôt que large
La documentation oppose deux prompts pour illustrer la différence entre viser et ratisser [D ide/core-concepts/context-window-management].
# Précis : Bob lit 23 lignes et répond @/src/utils/validation.ts:45-67 Fix the email validation logic # Trop large : Bob remplit sa fenêtre et répond vaguement @/src @/tests @/docs Review everything and suggest improvements
Sur un gros projet, la page dédiée conseille aussi d'utiliser les outils de symboles plutôt que de mentionner un fichier entier : demander la liste des fonctions d'un fichier, puis n'agir que sur celle qui vous intéresse [D ide/core-concepts/large-projects].
Appeler Bob depuis l'éditeur
Les code actions évitent de décrire au clavier ce que vous avez sous les yeux : elles transmettent automatiquement le chemin et les numéros de ligne [D ide/features/code-actions]. On les atteint par l'ampoule dans la gouttière, par le clic droit au sous-menu « Bob », ou par la palette de commandes. Deux raccourcis valent la peine d'être retenus : Cmd ou Ctrl + K ouvre une conversation en ligne à l'endroit du curseur, Cmd ou Ctrl + L envoie la sélection au panneau de conversation.
Un contexte permanent avec /init
La commande /init fait analyser le projet par Bob et produit un fichier AGENTS.md à la racine, plus un jeu de règles par mode dans .bob/ [D ide/tutorials/start-a-project]. Ce fichier est rechargé à chaque conversation : il évite de réexpliquer le projet à chaque fois. La contrepartie est qu'il occupe du contexte en permanence, d'où le conseil répété de le garder court et opérationnel, limité aux commandes d'installation, de test et de style.
/init lancée dans la conversation.
AGENTS.md produit à la racine du projet.Quand le contexte s'empoisonne
La documentation consacre une page entière à un phénomène qui surprend les débutants : une information fausse ou hors sujet entrée dans la conversation y reste et continue d'être renvoyée à chaque message [D ide/core-concepts/context-poisoning]. La phrase clé mérite d'être citée : Bob n'ignore pas de façon fiable un texte plausible simplement parce qu'il est faux.
Les symptômes sont reconnaissables : les réponses se dégradent, Bob se trompe d'outil, un travail en plusieurs étapes tourne en rond, les corrections ne tiennent pas. Les causes principales sont un fait erroné énoncé plus tôt, une documentation obsolète dans le dépôt, un collage trop volumineux, ou une compaction dont le résumé a fini par remplacer l'original.
Le réflexe correctif est contre-intuitif : ne corrigez pas par de nouvelles instructions, cela masque le problème un ou deux échanges. Ouvrez une nouvelle tâche. Elle vide les messages empoisonnés tout en conservant vos règles et vos fichiers sur le disque. La page ajoute une règle de départage utile en cas de contradiction entre un commentaire et le code : faites confiance aux tests plutôt qu'au texte.
- Mentionnez un dossier contenant des sous-dossiers et vérifiez que seuls les fichiers directs sont pris en compte.
- Reprenez un prompt trop large et réécrivez-le avec une plage de lignes. Comparez la pertinence des deux réponses.
- Déboguez une commande qui échoue en utilisant
@terminal, sans recopier la sortie à la main. - Sélectionnez une fonction et lancez « Explain with Bob » par les trois chemins d'accès, pour trouver celui qui vous convient.
- Expérience d'empoisonnement : affirmez à Bob un fait faux sur le projet, par exemple une base de données qui n'est pas la bonne. Posez trois questions de suite et observez la dérive. Ouvrez ensuite une nouvelle tâche et reposez la dernière question.
- Je mentionne des plages de lignes plutôt que des fichiers entiers.
- Je sais que la mention d'un fichier ignoré le lit quand même.
- J'ai vu qu'une mention de dossier n'est pas récursive.
- Mon projet a un
AGENTS.mdcourt et à jour. - J'ai provoqué puis corrigé un empoisonnement de contexte.
Approuver sans perdre le contrôle
L'auto-approbation est le réglage qui fait gagner le plus de temps, et celui qui peut coûter le plus cher. La documentation est inhabituellement directe sur le sujet.
À la fin de ce chapitre, vous réglez les approbations selon le risque, vous savez ce que chaque groupe autorise, et vous récupérez une situation avec un retour en arrière.
Le mécanisme
Par défaut, Bob demande avant d'agir, une action à la fois. Les contenus volumineux, comme un diff complet, sont repliés dans un aperçu. Surtout, une commande est modifiable avant d'être approuvée : vous pouvez corriger ce que Bob s'apprête à lancer [D ide/features/auto-approving-actions].
S'y ajoutent les approbations au niveau de la tâche, ces boutons « Approve … tools for task » que vous avez déjà rencontrés : ils ouvrent un groupe d'outils pour la tâche en cours seulement. Pour l'exécution de commandes, un écran supplémentaire demande de confirmer que vous comprenez les risques.
Neuf groupes, trois niveaux de risque
Le panneau des permissions liste neuf catégories, chacune avec un niveau de risque documenté. Edit et Execute sont classés à risque élevé, la première parce qu'elle crée, modifie et supprime des fichiers, la seconde parce qu'elle lance des commandes. Read et Skill sont à risque moyen, MCP entre moyen et élevé. Les quatre dernières, Todo, Subtask, Subagent et Mode, sont à risque faible.
/features/auto-approving-actions) : le panneau où l'on choisit ce que Bob peut faire sans demander. Les deux lignes à considérer en dernier sont l'édition et l'exécution.La page d'auto-approbation s'ouvre sur une mise en garde explicite : cela peut entraîner une perte de données, une corruption de fichiers, ou pire, et l'accès à la ligne de commande est signalé comme particulièrement dangereux. Cinq règles suivent : commencer restrictif, régler par projet, désactiver quand c'est inutile, relire régulièrement les changements, et ne jamais auto-approuver en production.
La page recommande un réglage « par projet » mais n'indique nulle part où il se règle. Elle mentionne aussi une liste de « commandes auto-approuvées » de confiance, sans décrire comment la constituer. Enfin, les revues de code tournent en auto-approbation complète, sans que la documentation précise ce que cette approbation couvre exactement. Ces trois points ne sont pas documentés ; la formation les signale plutôt que de les combler.
Revenir en arrière
Bob prend des instantanés des fichiers pendant une tâche : au démarrage, puis avant chaque modification [D ide/features/rollback]. La vidéo 10 parle de « points de reprise » créés à chaque écriture, et décrit le retour comme un retour à la dernière configuration correcte connue [V10]. Les deux vocabulaires désignent visiblement le même mécanisme, mais aucune source ne l'affirme.
La restauration se fait à deux granularités : en survolant un de vos messages dans la conversation, pour revenir à l'état d'avant ce message ; ou fichier par fichier depuis la vue des fichiers modifiés. Dans ce second cas, Bob est informé que vous avez annulé un fichier.
Le retour en arrière est limité à la tâche : il ne couvre que les changements faits pendant une tâche Bob. Une modification que vous avez faite à la main, en dehors, n'est pas restaurable. La restauration écrase les modifications non enregistrées. Certains fichiers ne sont jamais capturés, notamment .env, les dossiers de dépendances et de construction, les médias et les journaux. Et un point subtil : .bobignore n'exclut pas du retour en arrière, seulement du contexte. La documentation précise que cette séparation est intentionnelle.
La page des bonnes pratiques en tire un conseil stratégique qui rejoint le chapitre précédent : si Bob produit un travail médiocre, revenez en arrière plutôt que de corriger par de nouvelles instructions [D ide/getting-started/best-practices]. Corriger laisse le mauvais contenu dans la conversation. Elle rappelle aussi que Git reste le vrai filet de sécurité.
- Ouvrez le panneau des permissions et vérifiez l'état de chaque groupe. Partez de tout désactivé.
- Activez uniquement Read et Todo, puis relancez une analyse. Mesurez le confort gagné pour un risque quasi nul.
- Laissez Edit et Execute sous approbation manuelle. À la prochaine commande, modifiez-la avant de l'approuver pour voir que c'est possible.
- Faites modifier trois fichiers, puis revenez en arrière depuis un de vos messages. Vérifiez les trois fichiers.
- Éprouvez une limite : modifiez un fichier à la main, hors de toute tâche Bob, puis tentez un retour en arrière. Constatez que votre modification n'est pas restaurée.
- Je sais quels groupes sont classés à risque élevé.
- J'ai modifié une commande avant de l'approuver.
- J'ai restauré des fichiers depuis un message précédent.
- Je sais que les modifications faites hors tâche ne sont pas restaurables.
- Je commite régulièrement : Git reste mon vrai filet.
Sous-agents et travail en parallèle
C'est la réponse de Bob au problème du chapitre 5 : explorer largement sans saturer la fenêtre de contexte principale.
À la fin de ce chapitre, vous savez ce qu'un sous-agent isole, ce qu'il renvoie, en quoi il diffère d'une sous-tâche, et quand le travail en parallèle est pertinent.
Un contexte isolé, un résumé en retour
Un sous-agent est un agent indépendant, lancé par Bob pour une tâche autonome, avec sa propre fenêtre de contexte, et qui ne renvoie qu'un résumé [D ide/features/subagents]. L'isolation est stricte : il ne partage ni état, ni fichiers, ni résultats d'outils avec Bob, sauf si Bob les lui transmet explicitement dans la description de la tâche.
C'est tout l'intérêt : la lecture de vingt fichiers consomme la fenêtre du sous-agent, pas la vôtre. La conversation principale ne reçoit que la conclusion et reste utilisable plus longtemps [V02].
Un point de contrôle important : vous approuvez chaque lancement avant qu'il démarre, et Bob attend votre confirmation.
Deux types, deux usages
Le type explore est en lecture seule et utilise un modèle plus léger : recherche, résumé, compréhension d'une structure. Le type general a l'accès complet, y compris l'écriture et les commandes. La documentation ne nomme pas les modèles correspondants. Par défaut l'historique de la conversation n'est pas transmis ; une option permet de le faire.
Les modes encadrent ce qui est permis : Agent autorise tous les types, Plan et Ask se limitent à explore. Si un mode interdit les sous-agents, Bob fait simplement le travail lui-même, sans échouer.
Sous-agent ou sous-tâche ?
La confusion est fréquente. Un sous-agent travaille en silence, en arrière-plan, sans interaction possible, et rend un résumé. Une sous-tâche est visible, interactive, et ouvre un fil qu'on peut suivre. Le premier sert à collecter sans polluer, la seconde à mener un travail complexe en gardant la main.
- [01:30] Le présentateur lance la revue de code. Bob démarre un sous-agent et annonce deux à quatre minutes.
- [01:45] Sans attendre, il ouvre une nouvelle tâche pour rédiger des notes de version. Il précise que plusieurs tâches peuvent tourner ensemble, et qu'il revient à l'utilisateur de juger si elles risquent d'interférer.
- [01:55] Les notes de version sont prêtes avant la fin de la revue.
- [02:00] La revue se termine et rend une liste de constats exploitables.
Notez la mesure : une revue en sous-agent, plus une tâche indépendante. Ce n'est pas une armée d'agents, et la documentation ne donne aucun nombre maximum de sous-agents. [V03]
Quand plusieurs sous-agents tournent, un panneau repliable les regroupe et affiche le nombre de terminés sur le total, le nombre d'outils utilisés, le cumul des tokens, du coût et du temps écoulé, ainsi que les appels d'outils en échec. Chaque entrée se déplie jusqu'aux appels individuels.
La documentation réserve les sous-agents aux lectures larges : explorer un dépôt entier, chercher une occurrence partout, résumer une arborescence. Elle les déconseille pour une lecture simple, une tâche à un seul outil, ou quand l'information est déjà dans le contexte. La règle tient en une phrase : un sous-agent se justifie quand le chemin pour trouver la réponse coûte plus cher que la réponse elle-même.
- Dans une tâche neuve, notez la consommation de départ dans l'indicateur de contexte.
- Demandez une analyse large du projet sans sous-agent, par exemple en mentionnant plusieurs dossiers. Relevez la consommation.
- Ouvrez une nouvelle tâche et demandez la même analyse en laissant Bob déléguer à un sous-agent. Approuvez le lancement.
- Comparez les deux consommations et la qualité des deux réponses.
- Pendant une revue longue, lancez une seconde tâche sans rapport et vérifiez qu'elles avancent toutes les deux.
- J'ai approuvé le lancement d'un sous-agent en connaissance de cause.
- J'ai constaté la différence de consommation entre lecture directe et sous-agent.
- Je sais qu'un sous-agent ne rend qu'un résumé.
- Je distingue un sous-agent d'une sous-tâche.
- J'ai fait tourner deux tâches en parallèle.
Sécurité proactive dans l'éditeur
Plutôt que d'attendre un audit, Bob signale certains problèmes à l'ouverture du fichier. C'est l'idée de détecter au plus tôt, avant que le coût de correction n'augmente.
À la fin de ce chapitre, vous savez réagir à une annotation de Bob, demander plusieurs solutions avant de choisir, et configurer un espace de travail sûr.
- [00:20] En faisant défiler un fichier Python, le présentateur découvre une annotation ajoutée par Bob.
- [00:40] Le mécanisme est expliqué : à l'ouverture d'un fichier, Bob exécute des détecteurs. Le principe revendiqué est celui d'un éditeur proactif, qui attrape tôt.
- [01:20] Au survol, Bob signale une requête SQL construite par concaténation avec une entrée non fiable, et explique le risque.
- [01:45] Un bouton ouvre une nouvelle tâche pré-remplie avec le contexte du constat.
- [02:01] Le présentateur relève que le prompt pré-rempli demande plusieurs solutions, pas une seule, et en fait une bonne pratique générale.
- [02:20] Bob propose trois solutions avec leurs avantages et inconvénients, de la plus simple à la plus structurante.
- [02:50] Le choix de la première déclenche la correction du fichier.
Le geste à copier n'est pas la correction, c'est la demande : trois options argumentées avant de trancher. [V08]
La détection proactive de sécurité est montrée dans la vidéo 8, mais la page Security ne la décrit pas : cette page est une liste de recommandations de configuration. Le seul type de faille nommé dans les sources est l'injection SQL ; la liste complète des détecteurs n'est pas publiée. Le mécanisme documenté le plus proche s'appelle « Bob tips », et il porte sur la qualité du code, pas sur la sécurité : il mesure en continu la complexité et la maintenabilité des fonctions, souligne les cas problématiques et propose de corriger [D ide/features/bob-tips]. Les seuils documentés sont une complexité de 10 ou plus, et un indice de maintenabilité de 70 ou moins.
Configurer un espace de travail sûr
La page de recommandations de sécurité tient en cinq points [D ide/security/bob-security-guidance] : configurer .bobignore, limiter l'auto-approbation, garder les secrets hors des prompts et des fichiers accessibles, n'utiliser que des serveurs externes authentifiés et contrôlés, et relire les sorties de Bob avant de les appliquer.
L'exemple de .bobignore donné par la documentation vise directement les secrets.
.env secrets/ *.key config/credentials.json
Deux limites sont énoncées sans détour : .bobignore ne vaut que pour l'espace de travail courant, et ce n'est pas un bac à sable système. Combiné à ce que vous avez vu au chapitre 7, où une mention explicite passe outre, cela donne la règle prudente : un secret qui compte ne doit pas se trouver dans le projet.
- Créez un
.bobignoreà la racine du projet fil rouge, avec au minimum.envet un dossier de secrets. - Ouvrez plusieurs fichiers du projet et cherchez des annotations ou des soulignements laissés par Bob.
- Sur un constat, utilisez l'action qui ouvre une conversation pré-remplie, et demandez explicitement trois approches avec leurs compromis avant toute correction.
- Choisissez-en une, faites-la appliquer, puis relisez le diff avant d'approuver.
- Activez ou désactivez les conseils de qualité dans les réglages pour voir l'effet sur le bruit à l'écran.
- Mon projet a un
.bobignorequi couvre les secrets. - J'ai réagi à une annotation laissée par Bob dans un fichier.
- J'ai obtenu trois solutions argumentées avant de corriger.
- J'ai relu le diff avant d'approuver la correction.
- Je sais que
.bobignoren'est pas une protection système.
Relire, committer, ouvrir la pull request
Dernière étape du cycle. L'idée directrice est de déplacer la revue vers l'amont, pour que le relecteur humain reçoive un travail déjà dégrossi.
À la fin de ce chapitre, vous lancez une revue avant la pull request, vous traitez les constats, et vous menez la séquence commit, push, pull request en gardant le contrôle de chaque commande Git.
Relire avant de faire relire
La vidéo 11 pose le problème : la relecture par un collègue reste précieuse pour le partage de connaissances, mais elle devient un goulet d'étranglement. D'où l'idée d'un premier niveau de revue dans l'éditeur [V11]. La commande /review déclenche l'analyse ; Bob examine le diff et les fichiers complets, puis rend des constats classés.
Les critères examinés sont énoncés dans la vidéo : cas limites, sécurité, accessibilité, couverture de tests et conventions du projet. Chaque constat porte une explication, un lien vers l'emplacement exact, et une action pour approfondir dans la conversation. Une fois corrigé, un constat passe à l'état résolu.
La vidéo 11, enregistrée en octobre 2025, indique qu'il faut d'abord passer en mode Advanced pour que Bob puisse examiner les diffs. Ce mode n'existe dans aucune page de la documentation lue en septembre 2026. Si vous regardez cette vidéo, ignorez cette étape : lancez simplement /review.
Le message de commit
Deux chemins mènent au même résultat. Par l'interface, une icône en forme d'étincelle à côté de la zone de message génère une proposition, et un second clic en donne une autre [D ide/features/commit-messages]. Bob s'appuie sur trois sources : les changements, le nom de la branche, et l'historique récent pour respecter le style du projet. D'où un conseil concret : mettez le numéro de l'issue dans le nom de branche, Bob le reprendra.
Par la conversation, on demande simplement le commit. La vidéo 3 relève un comportement appréciable : Bob a commité le code sans inclure les documents de planification [V03].
La pull request
Il faut des changements commités sur une branche et le droit de pousser. Trois points d'entrée existent : l'icône dans le panneau de contrôle de version, la palette de commandes, ou la commande /create-pr [D ide/features/pull-requests]. Bob propose les trois branches de base les plus probables, puis un titre et une description que vous pouvez faire réécrire autant de fois que nécessaire.
Détail qui fait gagner du temps en équipe : Bob cherche automatiquement un modèle de pull request dans six emplacements conventionnels, dont .github/pull_request_template.md. S'il en trouve plusieurs, il demande lequel utiliser.
La page sur les pull requests ne précise pas quelles plateformes sont prises en charge. Les tutoriels ne montrent que GitHub, avec une autorisation par le navigateur au premier usage. La page sur les revues de code indique par ailleurs que la validation par rapport à une issue exige GitHub.
Avant de commencer : vous aurez besoin d'un fork du projet sur votre compte et du droit d'y pousser.
- Lancez
/reviewsur vos changements. Choisissez la branche de comparaison. - Traitez au moins deux constats : un que vous corrigez, un que vous écartez en sachant pourquoi.
- Demandez à Bob de créer une branche, puis d'indexer vos changements. Avant chaque approbation, prédisez la commande Git qu'il va proposer, puis vérifiez.
- Faites générer le message de commit par la conversation, puis refaites-le par l'icône dédiée, et comparez les deux.
- Poussez, puis demandez la pull request avec un titre et une description tirés des changements.
- Relisez la description produite et corrigez-la avant de valider. Vérifiez que la pull request vise bien votre fork.
- J'ai lancé une revue avant d'ouvrir la pull request.
- J'ai corrigé un constat et écarté un autre en connaissance de cause.
- J'ai prédit correctement les commandes Git avant de les approuver.
- J'ai comparé les deux façons de générer un message de commit.
- Ma pull request a un titre et une description que j'ai relus.
Approfondissement
Rules : le contexte qui ne se tape pas
Aux niveaux 1 et 2, vous donniez le contexte à la main, conversation après conversation. Les trois mécanismes de personnalisation de Bob — Rules, modes, Skills — font la même chose sans que vous tapiez quoi que ce soit ; ils diffèrent par le quand et le comment. On commence par le plus simple et le plus coûteux : les « Rules ».
À la fin de ce chapitre, vous savez où placer un fichier de règles selon la portée voulue, dans quel ordre Bob les charge, comment les partager avec votre équipe, et combien elles vous coûtent en fenêtre de contexte.
- [00:00] La thèse d'ouverture : chaque équipe construit différemment, donc il faut personnaliser Bob tôt. Trois mécanismes annoncés : rules, modes, skills.
- [00:30] Le point commun est énoncé clairement : tous les trois ajoutent du texte à la conversation sans que vous le tapiez. Toute la différence est dans le moment et la manière.
- [00:45] Les règles : un fichier
rules.md, ou bienAGENTS.md; ajoutées à chaque conversation, toujours. Conséquence immédiate tirée de là : il faut les garder courtes. - [01:45] Démonstration sur
.bob/rules/rules.md. Le contenu n'est presque pas « à propos de Bob » : c'est surtout à propos du dépôt — pièges rencontrés, problèmes connus, prérequis, commandes d'installation, de lancement et de test. - [02:02] Point de méthode : c'est un document vivant, mis à jour par Bob plutôt qu'à la main. Le fichier fait 150 lignes, ce que le présentateur juge déjà long.
- [02:15] Il survole l'indicateur de contexte : 2 700 tokens sur 270 000 consommés par les règles. Le geste à retenir est celui-là — mesurer le coût de ses règles au lieu de le supposer.
La transcription automatique dit « roots.md » ; il s'agit de rules.md. Les noms de fichiers exacts sont à prendre dans la documentation, pas dans la vidéo. [V04]
Où vivent les règles
La documentation donne des chemins précis, et c'est la portée qui décide du chemin [D ide/configuration/rules].
| Portée | Chemin | Ce que ça couvre |
|---|---|---|
| Global, tous vos projets | ~/.bob/rules/ | Vos préférences personnelles. Sous Windows : %USERPROFILE%\.bob\rules\. |
| Projet, tous les modes | .bob/rules/ | Les conventions du dépôt. C'est le cas le plus courant. |
| Projet, un mode précis | .bob/rules-agent/, .bob/rules-plan/, .bob/rules-ask/ | Des consignes qui n'ont de sens que dans ce mode. |
| Projet, un mode personnalisé | .bob/rules-{slug}/ | Se combine avec le champ customInstructions du mode. |
| Fichier unique (alternative) | .bobrules-{slug} | Si le dossier rules-{slug}/ existe aussi, le dossier gagne. |
| Standard d'équipe | AGENTS.md à la racine | Chargé automatiquement ; c'est le fichier que crée /init. |
Il n'y a ni schéma ni en-tête à respecter : du Markdown ou du texte (.md, .txt). Les noms de fichiers cités par la documentation donnent le ton : coding-style.md, typescript.md, security.md, ou numérotés 01-style-guide.md et 02-formatting.txt quand l'ordre compte.
mkdir -p .bob/rules && echo "# Project standards" > .bob/rules/coding-style.md
Comment Bob les charge
Le comportement documenté est mécanique, et vaut la peine d'être connu précisément : lecture récursive des dossiers, fichiers traités dans l'ordre alphabétique — d'où la numérotation. Les fichiers vides sont ignorés, les liens symboliques suivis jusqu'à une profondeur de 5, et certains noms sont exclus d'office : .DS_Store, *.bak, *.cache, *.log, *.tmp, Thumbs.db.
La phrase la plus importante de la page est celle-ci : les règles sont injectées dans chaque conversation et dans tous les modes, et « un mode ne peut pas contourner une règle ». C'est ce qui distingue une règle d'une consigne de mode : la règle est un plancher, pas une option.
L'ordre de priorité documenté : le global (~/.bob/rules/) est chargé, puis le workspace (.bob/rules/) ; le workspace peut écraser le global. À l'intérieur d'un niveau, les règles de mode sont chargées avant les règles générales, et AGENTS.md se place entre les deux — après les règles de mode, avant les règles générales du workspace.
La page dit « mode-specific rules load before general rules », mais ne dit pas si « avant » signifie « plus prioritaire » ou « écrasé par ce qui suit ». Dans un cas de conflit réel entre une règle de mode et une règle générale, le résultat n'est donc pas prévisible à la lecture : il faut tester. C'est exactement le genre de point que le TP ci-dessous vous fait vérifier vous-même.
Un exemple conforme, et ce qu'il révèle
Le tutoriel « Standardize Bob's behavior » donne le contenu intégral d'un .bob/rules/basic_rules.md de trois règles [D ide/tutorials/standardize-bobs-behavior].
Always include concise JSDoc strings for every public function. Be very concise in your wording. Write a summary of every interaction into the folder `internal-monologue/`. Name the file starting with a timestamp, followed by a concise description of the interaction. Example: 2026-01-15_update-readme.md
Les trois règles ne jouent pas du tout dans le même registre, et c'est instructif : la première est un standard de documentation (une contrainte sur le code produit), la deuxième un style de communication (une contrainte sur les réponses), la troisième un journal persistant — un « monologue interne » qui donne une piste d'audit, une continuité entre sessions et une transparence vis-à-vis de l'équipe. Une règle peut donc porter sur le code, sur le dialogue, ou sur la trace laissée.
Partager, et payer le prix
Pour standardiser une équipe, la documentation propose trois approches : commiter .bob/rules/ (git add .bob/rules/) pour que la règle suive le dépôt ; cloner un dépôt de règles d'organisation dans ~/.bob/rules/ ; ou une approche hybride — l'organisation en global, le projet en workspace, sachant que le workspace l'emporte.
Reste le coût. Une règle est rechargée à chaque conversation, donc elle occupe une part fixe de vos 270 000 tokens, quoi que vous fassiez. La mesure de la vidéo 4 donne l'ordre de grandeur : 150 lignes ≈ 2 700 tokens, soit environ 1 % de la fenêtre. Ce n'est pas énorme, mais c'est permanent — et c'est précisément pour cette raison que la fonctionnalité suivante existe.
Deux réglages à connaître : AGENTS.md peut être désactivé avec "bob-code.useAgentRules": false côté IDE, "bob-shell.useAgentRules": false côté Shell.
Ce TP suit le tutoriel officiel. Pour la suite du niveau 3, le projet fil rouge devient Galaxium Travels, le dépôt de démonstration utilisé par tous les tutoriels IBM : git clone -b bob-learning-path-branch https://github.com/IBM/galaxium-travels. Ouvrez-le, passez en Agent mode, lancez /init et approuvez : vous devez obtenir un AGENTS.md à la racine et un dossier .bob/ contenant un AGENTS.md par mode.
- Créez
.bob/rules/basic_rules.mdet collez-y les trois règles ci-dessus, telles quelles. - Ouvrez une nouvelle conversation en Agent mode et tapez exactement :
Update the readme. Bob peut proposer plusieurs variantes (améliorer le dépannage, refonte complète, corriger des inexactitudes) : choisissez-en une. - Résultat attendu : Bob met à jour
README.md, et crée un dossierinternal-monologue/contenant un fichier<timestamp>_<description>.md. Vous n'avez rien demandé de tout ça : c'est la règle 3 qui a agi. - Survolez l'indicateur de contexte et notez le nombre de tokens consommés par vos règles. Comparez à la mesure de la vidéo.
- Créez maintenant une règle contradictoire : la même consigne en global (
~/.bob/rules/) et en workspace (.bob/rules/), avec deux valeurs différentes. Observez laquelle gagne, et vérifiez que c'est bien le workspace. - Désactivez
AGENTS.mdavec"bob-code.useAgentRules": false, relancez la même demande, et mesurez la différence de contexte. - Commitez
.bob/rules/:git add .bob/rules/. La règle voyage maintenant avec le dépôt.
- Galaxium Travels est cloné, ouvert, et
/inita été lancé. - J'ai une règle projet dans
.bob/rules/qui s'applique sans que je la mentionne. - J'ai constaté un effet que je n'avais pas demandé dans le prompt (le monologue interne).
- Je connais le coût en tokens de mes règles, mesuré et pas supposé.
- J'ai vérifié que le workspace l'emporte sur le global.
- Mes règles sont commitées et suivent le dépôt.
.bob/rules/ ?Modes personnalisés : des permissions déterministes
Une règle demande. Un mode empêche. C'est toute la différence, et c'est ce qui rend les modes personnalisés intéressants pour travailler à plusieurs conversations en parallèle : vous pouvez garantir qu'une conversation d'analyse ne touchera pas un fichier.
À la fin de ce chapitre, vous savez écrire un mode en YAML, restreindre l'édition à certains fichiers par expression régulière, surcharger un mode intégré, et expliquer pourquoi une permission de mode vaut mieux qu'une consigne en langage naturel.
- [02:40] Rappel : trois modes intégrés — agent, plan, ask. Les modes personnalisés vivent dans un fichier de configuration du projet.
- [03:00] Premier exemple : un mode « code reviewer », avec sa persona et des permissions explicites — lire, exécuter, activer des skills. Aucune édition.
- [03:30] L'usage qui justifie tout : avec plusieurs conversations en parallèle, on veut la garantie qu'une conversation d'analyse ne modifie rien. L'argument avancé : les permissions de mode sont « 100 % déterministes », contrairement à une consigne écrite en langage naturel, qui peut être ignorée.
- [03:50] Exemple plus fin : un mode « deployment engineer » qui n'a le droit d'éditer que dans un dossier de scripts — donc pas le code applicatif.
- [04:00] Activation : un clic sur le sélecteur de mode.
- [04:10] Le test qui compte. Le relecteur relève des points dans le README ; on lui demande de les appliquer ; il refuse. Et dans la liste des permissions activables, l'édition n'apparaît même pas : elle ne peut pas être accordée à la volée.
C'est la démonstration la plus convaincante de la série : la contrainte n'est pas une politesse du modèle, c'est une absence d'outil. [V04]
Le format : YAML, et dix groupes d'outils
Le format documenté est le YAML. Le JSON historique (custom_modes.json) est encore accepté mais migré automatiquement : le fichier global est converti au démarrage, le fichier projet lors d'une édition via l'interface [D ide/configuration/custom-modes].
| Champ | Rôle |
|---|---|
slug | Identifiant technique (lettres, chiffres, tirets), unique. Il sert aussi de commande /slug. Réutiliser le slug d'un mode intégré (agent, plan, ask) le surcharge. |
name | Nom affiché, émoji accepté. |
description | Optionnel. Texte affiché dans le sélecteur de mode. |
roleDefinition | La persona. Remplace une partie du system prompt. |
whenToUse | Optionnel. Indique quand employer ce mode. |
customInstructions | Optionnel. Instructions additionnelles, combinées avec .bob/rules-{slug}/. |
groups | Les groupes d'outils autorisés. Sans groups, le mode n'a aucun outil groupé — donc ne sert à rien. |
allowedSubagents | Optionnel. Restreint les sous-agents aux presets listés. |
Les dix groupes d'outils côté IDE : read, edit (restreignable), execute, mcp, skill, workflow, todo, subtask, subagent, mode. Vous reconnaissez les neuf groupes de permissions du chapitre 8, plus workflow.
La restriction qui n'existe qu'en YAML
Le groupe edit accepte un fileRegex, et c'est le mécanisme du « deployment engineer » de la vidéo. Voici l'exemple complet de la documentation.
customModes:
- slug: docs-writer
name: 📝 Documentation Writer
description: Writes and revises Markdown documentation.
roleDefinition: You are a technical writer specializing in clear documentation.
whenToUse: Use this mode for writing and editing documentation.
customInstructions: Focus on clarity and completeness in documentation.
groups:
- read
- - edit
- fileRegex: ".*\\.(md|mdx)$"
description: Markdown files only
- skillNotez la structure : le groupe edit restreint devient une liste à deux éléments — le nom du groupe, puis un objet de contrainte. C'est la partie de la syntaxe qui surprend le plus.
Les motifs cités par la documentation couvrent les cas courants : .*\.md$, ^src/.*, .*\.(css|scss)$, et le plus utile, ^(?!.*(test|spec)).*\.(js|ts)$ — tout le JavaScript et le TypeScript sauf les tests. La documentation suggère elle-même de demander à Bob de générer ces expressions.
D'abord : les restrictions fileRegex sont impossibles à créer depuis l'interface. Le formulaire ne les propose pas ; il faut éditer le YAML à la main. Ensuite : un fileRegex invalide peut empêcher le chargement du fichier entier — pas seulement du mode fautif. Une expression mal échappée fait donc disparaître tous vos modes personnalisés d'un coup.
Chemins et priorité
| Portée | Chemin (Bob IDE) | Accès par l'interface |
|---|---|---|
| Global | ~/.bob/settings/custom_modes.yaml | Settings → Modes → Edit Global Modes |
| Projet | .bob/custom_modes.yaml | Settings → Modes → Edit Project Modes |
La priorité côté IDE est simple : projet > global > défaut. Côté Bob Shell, la chaîne est plus longue : CLI > projet > global > modes système > défauts.
La page IDE place les modes globaux dans ~/.bob/settings/custom_modes.yaml ; la page Bob Shell, elle, donne ~/.bob/custom_modes.yaml — sans le sous-dossier settings/. Les deux pages sont à jour à la même date. Si un mode global n'est pas pris en compte, vérifiez les deux emplacements : la documentation ne tranche pas. [D shell/configuration/custom-modes-bobshell]
custom_modes.yaml produit par le formulaire. C'est ce fichier qu'on édite ensuite à la main pour aller plus loin.La documentation décrit trois parcours différents pour créer un mode par l'interface, selon la page consultée : Settings → onglet Modes → bouton de création ; sélecteur de modes → engrenage → + ; ou trois points de la barre latérale → Modes → Edit. Les trois mènent au même formulaire.
Suit le tutoriel « Add a custom mode ». Démarrez une nouvelle conversation avant de commencer, comme le conseille la documentation. Principe à garder en tête : un mode personnalisé ne remplace ni ne contourne les règles — le monologue interne du TP 9 continue de s'appliquer.
- Ouvrez le sélecteur de modes, cliquez l'engrenage, puis +. Créez le mode du tutoriel : slug
product-management, nameproduct-manager, Scope Project, Available Tools Read files, Edit files, Use MCP. Remplissez la définition de rôle et le « when to use » avec vos propres mots. - Sauvegardez : Bob crée
.bob/custom_modes.yaml. Ouvrez ce fichier et comparez-le à ce que vous avez saisi. - Basculez sur le mode et testez avec le prompt du tutoriel :
What feature should we build next?Vous devez obtenir des candidats, éventuellement précédés de questions de clarification. - Maintenant le geste que l'interface ne permet pas : éditez le YAML à la main pour ajouter un
fileRegexsur le groupeedit, par exemple.*\.(md|mdx)$. Relancez une demande d'édition sur un fichier de code et constatez le refus. - Reproduisez le test de la vidéo : créez un mode sans le groupe
editdu tout, demandez-lui d'appliquer ses propres recommandations, et vérifiez que l'édition n'apparaît pas dans la liste des permissions activables. - Créez
.bob/rules-product-management/01-style-guide.mdet constatez qu'il se combine avec lescustomInstructionsdu mode au lieu de les remplacer. - Vérifiez la priorité : surchargez un mode intégré en réutilisant son slug (
askpar exemple) au niveau projet, et observez que le vôtre gagne. - Commitez
custom_modes.yamlpour partager le mode avec l'équipe.
- J'ai un mode personnalisé de portée projet, créé par l'interface.
- J'ai lu le YAML produit et je sais le modifier à la main.
- J'ai ajouté une restriction
fileRegexet vérifié qu'elle bloque. - J'ai constaté qu'une permission absente ne peut pas être accordée à la volée.
- J'ai vérifié que les règles de mode se combinent avec
customInstructions. - Je sais que la documentation donne deux chemins différents pour les modes globaux.
Skills : un savoir-faire chargé à la demande
Le troisième mécanisme résout le problème de coût des deux premiers. Une règle est toujours chargée, un mode remplace une partie du system prompt — un « skill » ne coûte qu'une description de deux phrases tant que Bob ne s'en sert pas. C'est ce qui permet d'en avoir beaucoup.
À la fin de ce chapitre, vous savez écrire un SKILL.md conforme, rédiger la description qui fait que Bob active le skill tout seul, et choisir entre une règle, un mode et un skill pour un besoin donné.
- [01:20] La définition posée d'emblée : un skill est un prompt potentiellement long qui décrit un comportement. Seule une description d'une ou deux phrases est chargée en permanence ; Bob charge le corps à la demande.
- [04:35] Démonstration : un dossier de skills, un seul skill dedans, un fichier Markdown. Le corps est le skill ; la description courte est toujours en contexte.
- [05:00] Mise en garde intéressante : l'écosystème de skills disponibles est « énorme et un peu écrasant ». Le conseil est de construire les siens.
- [05:15] Le geste marquant : il active explicitement le skill qui sert à créer des skills, et demande une variante du skill existant qui poserait trois questions au maximum, publierait le résultat dans une issue GitHub si elle existe, sinon rangerait les plans dans un dossier d'artefacts sous
.bob, et produirait toujours une version HTML lisible. - [05:50] Il assume le caractère arbitraire de ces choix : c'est exactement le point. Un skill encode votre façon de travailler, de manière répétable et partageable.
- [06:01] Rappel de portée : skills, règles et modes existent au niveau projet ou global. Il choisit le projet.
- [06:30] Test décisif : en mode agent, il formule une demande sans nommer le skill, et Bob l'active seul. Il concède avoir employé un mot-clé de la description, mais affirme qu'une description vague suffirait.
- [07:00] Résultat conforme à la commande : une page HTML, et une proposition de poster le plan en commentaire de l'issue 44.
Les noms de skills entendus dans la transcription automatique sont trop incertains pour être cités ; seul le mécanisme est fiable. [V04]
Le format, et le champ qui décide de tout
Un skill est un dossier contenant un SKILL.md : un front matter YAML, puis les instructions en Markdown [D ide/features/skills].
--- name: code-review description: Review code for bugs, security issues, and best practices --- When reviewing code, check for: - Security vulnerabilities - Performance issues - Missing error handling at API boundaries - Unused imports and dead code Provide a summary with severity levels for each finding.
Deux champs seulement sont requis, et le second porte tout le poids. name est le nom affiché et le nom d'invocation (/code-review). description est ce que Bob lit pour décider d'activer le skill sans qu'on le lui demande — et la documentation est catégorique : « skills without descriptions are ignored ». Un skill sans description n'est pas un skill dégradé, il n'existe pas.
D'où le conseil de rédaction de la documentation, qui oppose deux formulations : « Review code for bugs, security issues, and best practices » est une bonne description, parce qu'elle contient les mots que l'utilisateur emploiera. « Code review skill » est une mauvaise description, parce qu'elle ne décrit rien. Un troisième champ apparaît dans le tutoriel : user-invocable: true, qui autorise l'appel explicite par /<nom>.
| Portée | Chemin |
|---|---|
| Projet (suivi par git) | .bob/skills/<nom>/SKILL.md |
| Global (tous vos projets) | ~/.bob/skills/<nom>/SKILL.md |
À nom égal, le skill de projet l'emporte sur le global. Le dossier peut contenir des fichiers d'appui — la documentation cite checklist.md, severity-guide.md, analyze.sh, report-generator.py — que Bob lit automatiquement une fois le skill activé. C'est le mécanisme qui permet à un skill court d'ouvrir sur un corpus long.
Règle, mode ou skill ?
Vous avez maintenant les trois. Le choix se fait sur deux questions : ce texte doit-il être là toujours, et doit-il empêcher quelque chose ?
Rule
Une contrainte qui vaut pour toute conversation, dans tous les modes. Coût permanent en contexte : à garder court. Ne peut pas être contournée par un mode.
Pour : conventions du dépôt, commandes de build, pièges connus.
Mode
Une persona et un jeu de permissions. Le seul des trois qui peut retirer une capacité de façon déterministe.
Pour : garantir qu'une conversation d'analyse n'écrit pas.
Skill
Une procédure, éventuellement longue, dont seule la description coûte en permanence. Activable par Bob seul, sur la foi de cette description.
Pour : une tâche répétitive avec une méthode précise.
Activation et approbation
Trois chemins d'invocation : explicite avec /<skill-name>, par le sélecteur $ en Bob Shell, ou implicite quand Bob reconnaît la correspondance avec la description. Pour créer : la commande /create-skill dans le chat, ou Bob Settings → Skills → +. Les skills sont chargés une seule fois par conversation, pour éviter de dupliquer le prompt.
Par défaut, Bob demande votre permission avant d'activer un skill. On peut la retirer par Bob Settings → Auto-Approve → Skills, ou côté Shell par "autoApprove": { "skills": true }.
L'auto-approbation des skills apparaît sous deux formes différentes dans la documentation : autoApprove.skills d'un côté, et approval.allowed_permissions: ["skill"] de l'autre. Aucune page ne dit laquelle prime, ni si elles sont redondantes. Si le comportement ne correspond pas à votre réglage, vérifiez les deux.
Non documenté : aucune limite de taille pour un SKILL.md, aucune indication de langue, et l'emplacement des skills fournis par Bob lui-même (comme create-plan, utilisé en mode Plan) n'est nulle part précisé.
Suit le tutoriel « Create and use skills ». Passez en Agent mode : c'est requis pour activer un skill et éditer des fichiers.
- Ouvrez Bob Settings → Skills → +. Créez le skill du tutoriel : nom
changelog-entry, portée projet, « Allow Bob to use this skill » activé. Pour la description, prenez celle de la documentation, qui est un modèle du genre : « Adds an entry to CHANGELOG.md using the Keep a Changelog format, creating the file if it does not exist, so change history stays consistent and release-ready. » - Dans les instructions, décrivez la procédure : format Keep a Changelog, entrées sous
## [Unreleased]et l'un des sous-titres### Added/### Changed/### Fixed/### Removed, une puce à l'impératif sans point final, fondée sur le diff réel (git diff) et non sur la formulation de la demande, et ne toucher queCHANGELOG.md. - Créez : Bob écrit
.bob/skills/changelog-entry/SKILL.md. Ouvrez le fichier et retrouvez-y votre front matter. - Produisez une modification à journaliser :
Add a one-line note to the end of the README.md that says "Powered by IBM Bob." - Invocation explicite : tapez
/changelog-entry, puisAdd a changelog entry for this change.Bob créeCHANGELOG.mdet y ajoute l'entrée. - Le test qui compte. Ouvrez une nouvelle conversation, faites une autre modification, puis demandez
Update the changelog for this edit.— sans jamais nommer le skill. Bob doit le reconnaître à la description et l'activer seul. - Retirez la
descriptionduSKILL.mdet refaites l'essai : le skill est désormais ignoré. - Créez un skill de même nom en global et en projet, avec deux comportements distincts, et vérifiez que le projet gagne.
- Ajoutez un fichier d'appui dans le dossier du skill (une
checklist.md) et vérifiez que Bob la lit une fois le skill actif.
- J'ai un skill de projet enregistré dans
.bob/skills/. - Je l'ai invoqué explicitement avec
/. - Bob l'a activé tout seul à partir de la description.
- J'ai vérifié qu'un skill sans description est purement ignoré.
- J'ai constaté que le skill de projet l'emporte sur le global.
- Je sais choisir entre une règle, un mode et un skill pour un besoin donné.
Commandes slash et hooks de cycle de vie
Deux mécanismes d'automatisation qui n'ont rien à voir. Une commande slash est un raccourci que vous déclenchez. Un hook est un script que Bob déclenche, à des moments précis de son cycle de vie — et qui peut l'arrêter net.
À la fin de ce chapitre, vous savez fabriquer une commande slash à partir d'un simple fichier Markdown, et écrire un hook qui bloque une action de Bob — en sachant exactement ce que ça implique côté sécurité.
Une commande, c'est un nom de fichier
Le mécanisme est d'une simplicité désarmante : vous déposez un fichier Markdown dans .bob/commands/ (projet) ou ~/.bob/commands/ (global), et le nom du fichier devient la commande [D ide/features/slash-commands]. review.md donne /review, test-api.md donne /test-api, deploy-check.md donne /deploy-check.
Le corps du fichier est le prompt, avec des arguments positionnels $1, $2. Un front matter optionnel améliore l'ergonomie : description s'affiche dans le menu, argument-hint affiche une indication grise sur les arguments attendus.
--- description: Create a new API endpoint --- Create a new API endpoint called $1 that handles $2 requests. Include proper error handling and documentation.
À nom égal, le projet l'emporte sur le global. Une protection est explicite : les commandes de mode (/agent, /plan, /ask, /<slug>) ne peuvent pas être surchargées. En revanche — et c'est un manque de la documentation — rien ne dit si une commande personnalisée peut surcharger une commande intégrée comme /review. Le nom de fichier review.md figure pourtant dans les exemples officiels. Testez avant de compter dessus.
Les commandes intégrées documentées côté IDE sont peu nombreuses et vous en connaissez déjà l'essentiel : /init (crée .bob et les AGENTS.md), /review avec ses variantes (/review <branche>, /review #<n> --issue-coverage), /create-pr, /create-skill. Bob Shell en ajoute une longue série propre au terminal — /compact, /hooks, /permissions, /resume, /mcp, /manage-secrets, /skills, /status, /logs — que vous retrouverez dans l'aide-mémoire.
Les hooks : cinq événements côté IDE, sept côté Shell
Un hook est une commande shell que Bob exécute à un moment donné, avec un payload JSON sur l'entrée standard [D ide/configuration/lifecycle-hooks].
| Hook | Quand | Peut bloquer | Que devient sa sortie |
|---|---|---|---|
SessionStart | Une fois, au début d'une session | Non | Injectée comme contexte |
UserPromptSubmit | À chaque prompt soumis | Oui (exit 2) | Injectée comme contexte |
PreToolUse | Avant l'exécution d'un outil filtré | Oui (exit 2) | Ignorée |
PostToolUse | Après l'exécution d'un outil filtré | Non | Ignorée |
Stop | À l'arrêt de l'agent | Non | Ignorée |
Bob Shell ajoute PreCompact (bloquant) et PostCompact, apparus en version 2.0.3. Deux hooks ont donc un pouvoir particulier : SessionStart et UserPromptSubmit, dont la sortie standard devient du contexte. C'est le moyen documenté d'injecter automatiquement l'état du dépôt — branche courante, version de Node, nom du projet — au début de chaque session.
{
"hooks": {
"PreToolUse": [
{
"matcher": "^write_file$",
"hooks": [
{ "type": "command", "command": "sh .bob/hooks/check.sh", "timeout": 5 }
]
}
]
}
}Le matcher est une expression régulière sur le nom de l'outil, et ne s'applique qu'à PreToolUse et PostToolUse ; omis, il attrape tous les outils. Le timeout est en secondes, 10 par défaut, 0 pour illimité. Le type "command" est le seul accepté côté IDE ; Bob Shell accepte en plus "https", qui appelle une URL.
Les codes de sortie portent toute la sémantique : 0 pour un succès, 2 pour bloquer l'action, et n'importe quel autre code non nul pour un échec non bloquant, journalisé puis ignoré. Un hook qui plante ne vous arrête donc pas — seul un exit 2 délibéré le fait.
Les emplacements suivent la logique habituelle, avec une nuance : ~/.bob/settings/settings.json pour le global, .bob/settings.json pour le workspace, et les hooks globaux s'exécutent toujours, les hooks du workspace étant fusionnés par-dessus.
La documentation le dit sans détour : « hooks run with your full user permissions ». Il n'y a ni isolation, ni restriction de chemin, ni télémétrie dédiée. Et le point d'attention qui suit est celui qui compte vraiment : vos hooks globaux s'exécutent dans tout dossier qui n'est pas explicitement marqué DONT_TRUST — y compris un dépôt que vous venez de cloner pour la première fois. Inversement, un .bob/settings.json présent dans un dépôt tiers contient du code qui s'exécutera chez vous. La recommandation de la documentation est de relire les hooks d'un dépôt « comme vous reliriez un Makefile ou une configuration de CI ».
Côté gouvernance, l'onglet Hooks des réglages (IDE 2.1.0) liste les hooks globaux et workspace avec leur type d'événement, leur matcher, leur portée et leur état, et permet de les activer individuellement ; l'équivalent en Bob Shell est /hooks. Une politique d'entreprise EnforcedHooks permet à un administrateur d'imposer des hooks exécutés avant tout hook utilisateur et non modifiables.
Les limites explicites de la page : pas de hooks planifiés, pas de réécriture de l'entrée, pas de blocage depuis PostToolUse ni Stop.
Aucun tutoriel officiel ne couvre les hooks : les gestes ci-dessous sont construits à partir des exemples de configuration de la page de référence. Travaillez sur Galaxium Travels, pas sur un dépôt qui compte.
- Créez
.bob/commands/deploy-check.mdavec un front matterdescriptionet un corps utilisant$1. Tapez/dans le chat et vérifiez que votre commande apparaît dans le menu avec sa description. - Lancez-la avec un argument et vérifiez que
$1a bien été substitué. - Créez un hook
SessionStartqui écrit sur la sortie standard la branche git courante (git rev-parse --abbrev-ref HEAD). Ouvrez une nouvelle session et vérifiez que Bob connaît la branche sans que vous la lui ayez dite. - Créez un hook
PreToolUseavecmatcher: "^write_file$"qui journalise le payload reçu dans un fichier. Faites écrire Bob, puis lisez le journal : vous y trouverezevent,session_id,tooletinput. - Faites-le bloquer : modifiez le script pour qu'il sorte en
exit 2quand le chemin visé est hors desrc/. Demandez une écriture ailleurs et constatez le refus. - Vérifiez la différence de sémantique : faites sortir le script en
exit 1au lieu de2. L'action doit passer malgré l'échec du hook. - Ouvrez l'onglet Hooks des réglages, retrouvez vos deux hooks, et désactivez-en un depuis l'interface.
- Pour finir, faites l'inventaire : listez les hooks globaux actuellement définis sur votre machine et demandez-vous lesquels vous accepteriez de voir tourner dans un dépôt inconnu.
- J'ai une commande slash personnalisée qui apparaît dans le menu.
- Elle reçoit correctement ses arguments positionnels.
- Un hook
SessionStartinjecte du contexte que je n'ai pas tapé. - J'ai lu un payload de hook et j'en connais les champs.
- J'ai bloqué une action de Bob avec
exit 2, et vérifié qu'exit 1ne bloque pas. - J'ai fait l'inventaire de mes hooks globaux en sachant qu'ils tournent partout.
PreToolUse se termine avec le code 1. Que fait Bob ?L'arbre de configuration et .bobignore
Vous avez maintenant écrit des règles, un mode et un skill. Il reste à savoir où tout cela vit, dans quel ordre Bob le charge, et ce qu'il ne doit jamais lire.
À la fin de ce chapitre, vous situez chaque fichier de configuration, vous savez qui gagne en cas de conflit entre le global et le projet, et vous protégez vos fichiers sensibles en connaissant les limites de cette protection.
Deux niveaux, et un troisième pour les administrateurs
Toute la configuration de Bob se répartit entre deux emplacements. Le global, dans ~/.bob/, s'applique à tous vos projets. Le projet, dans .bob/ à la racine du dépôt, ne vaut que pour lui et se versionne avec le code, ce qui en fait le support du partage en équipe.
S'y ajoute, sur Bob IDE uniquement, un niveau système réservé aux administrateurs, par préférences gérées sur macOS, par le registre sur Windows, et par /etc/bob/policy.json sur Linux. Quatre politiques existent, dont celle qui désactive des groupes d'auto-approbation et celle qui impose des hooks. Elles priment sur tout et verrouillent le réglage dans l'interface [D ide/security/group-policies].
Qui gagne en cas de conflit
C'est la question qui fait perdre le plus de temps quand une règle « ne s'applique pas ». Les ordres documentés sont les suivants.
- Modes : projet, puis global, puis les modes par défaut. Réutiliser le slug d'un mode intégré le surcharge.
- Règles : le global est chargé, puis le workspace, qui peut le surcharger. Dans chaque niveau, les règles de mode se chargent avant les règles générales, et
AGENTS.mdse place entre les deux. - Serveurs MCP et skills : le projet prime sur le global à nom identique.
- Hooks : les globaux s'exécutent toujours, ceux du workspace sont fusionnés par-dessus.
- Commandes slash : projet avant global, et les commandes de mode ne sont jamais surchargeables.
Pour les règles, la formule employée est que « les règles de mode se chargent avant les règles générales ». La documentation ne dit pas si « avant » signifie prioritaire ou au contraire écrasé par ce qui suit [D ide/configuration/rules]. En cas de doute sur un conflit, la seule méthode fiable est l'essai.
Deux divergences de chemin existent aussi entre les pages de Bob IDE et celles de Bob Shell : les modes globaux sont donnés en ~/.bob/settings/custom_modes.yaml d'un côté et ~/.bob/custom_modes.yaml de l'autre ; les serveurs MCP globaux en ~/.bob/settings/mcp.json contre ~/.bob/mcp_settings.json. Vérifiez lequel votre installation utilise avant de créer le fichier à la main.
Ce que Bob ne doit pas lire
Le fichier .bobignore, à la racine du workspace, utilise exactement la syntaxe de .gitignore [D ide/configuration/bobignore]. Il est lui-même toujours implicitement ignoré, ce qui empêche Bob de modifier ses propres règles d'accès.
.env secrets/ *.key config/credentials.json *password* *credential* *apikey* node_modules/ dist/ *.log
L'application est stricte en lecture comme en écriture pour les outils principaux, et list_files masque les fichiers ignorés ou les marque d'un cadenas. Quand Bob se heurte à un fichier interdit, il reçoit un message explicite lui demandant de continuer sans ce fichier ou de vous demander de modifier la liste.
Ce n'est pas un bac à sable. La formule exacte de la page est « Not a full sandbox ». Précisément :
- La portée est limitée au workspace courant ; ce qui est en dehors n'est pas concerné.
insert_contentetsearch_and_replacepeuvent contourner l'interdiction en écriture.- Pour l'exécution de commandes, seule une liste prédéfinie d'utilitaires est vérifiée ; un script maison ou un outil inhabituel peut passer. Cette liste n'est pas publiée.
- Et, vu au chapitre 7 : une mention explicite avec
@passe outre.
Conclusion pratique, qui est aussi la recommandation de la documentation : ajoutez vos fichiers de secrets à .gitignore et à .bobignore, mais considérez qu'un secret qui compte vraiment n'a pas sa place dans le projet.
La page de Bob IDE affirme que le fichier est surveillé et les modifications rechargées automatiquement. La page « Ignoring files » de Bob Shell dit au contraire qu'il faut redémarrer la session pour qu'un changement prenne effet. Après avoir modifié .bobignore, le plus sûr est de redémarrer.
- Dressez l'inventaire de votre configuration réelle. Dans un terminal, à la racine du projet fil rouge :
ls -a .bob/ 2>/dev/nullpuisls -a ~/.bob/. Comparez avec l'explorateur ci-dessus. - Créez un
.bobignoreavec au moins.env,secrets/et*.key. - Créez un fichier
.envfactice contenant une fausse clé, puis demandez à Bob de le lire. Constatez le refus. - Éprouvez la limite : mentionnez ce même fichier explicitement avec
@. Constatez qu'il est lu. Retenez la leçon. - Éprouvez la priorité : écrivez une règle dans
~/.bob/rules/et une règle contradictoire dans.bob/rules/. Posez une question qui met les deux en jeu et vérifiez laquelle l'emporte.
- Je sais distinguer ce qui vit dans
~/.bob/et dans.bob/. - Je connais l'ordre de priorité pour les modes, les règles, MCP et les skills.
- Mon projet a un
.bobignorequi couvre les secrets. - J'ai vérifié qu'une mention explicite contourne
.bobignore. - Je ne compte pas sur
.bobignorecomme sur un bac à sable.
.env dans .bobignore. Que pouvez-vous en conclure ?MCP : comprendre, brancher, gouverner
Les règles, modes et skills changent la façon dont Bob travaille. MCP change ce à quoi il a accès : bases de données, services, outils internes.
À la fin de ce chapitre, vous savez ce qu'est un serveur MCP, quel transport choisir, vous produisez un fichier de configuration valide, et vous savez à quoi regarder avant de brancher un serveur que vous n'avez pas écrit.
Un port universel
MCP, pour Model Context Protocol, est un protocole standardisé que la documentation compare à un port USB-C [D ide/configuration/mcp/understanding-mcp]. L'architecture est client-serveur : Bob est le client, et les serveurs exposent des capacités, qu'il s'agisse de fichiers, d'une base de données ou d'une interface de programmation. Les échanges se font en JSON-RPC 2.0.
L'intérêt est d'étendre Bob sans toucher à son cœur, et de ne charger les capacités que lorsqu'elles servent. Un point à savoir avant de chercher : aucun serveur MCP n'est pré-installé.
Trois transports, deux à retenir
| Transport | Statut | Quand le choisir |
|---|---|---|
| STDIO | local, standard | Le serveur tourne sur votre machine. Bob le lance comme processus enfant et dialogue par l'entrée et la sortie standard. Pas d'exposition réseau, latence faible, cycle de vie lié à Bob. C'est le cas par défaut. |
| Streamable HTTP | distant, standard moderne | Le serveur est ailleurs et sert plusieurs clients. Un seul point d'entrée accepte les requêtes, avec diffusion en flux optionnelle sur la même connexion. Demande des mesures de sécurité explicites. |
| SSE | distant, hérité | Remplacé par Streamable HTTP. À ne pas choisir pour une nouvelle intégration. |
Côté Bob IDE, aucune configuration SSE n'est documentée : la valeur à donner au champ type pour ce transport est introuvable. Et l'exemple STDIO officiel n'a pas de champ type du tout, sans qu'on sache si "type": "stdio" est accepté. Côté Bob Shell, la convention est différente : la clé url désigne SSE et la clé httpURL désigne Streamable HTTP. Ne transposez pas une configuration de l'un à l'autre sans vérifier.
L'authentification déléguée
Pour les serveurs qui exigent un accès à votre compte, par exemple un service d'hébergement de code, Bob gère OAuth 2.1 automatiquement. Vous ajoutez le serveur sans en-tête ni variable d'environnement, Bob détecte les métadonnées d'autorisation à la première connexion, ouvre votre navigateur, puis stocke et rafraîchit les jetons [D ide/configuration/mcp/mcp-oauth].
Un piège à connaître, car il produit une panne silencieuse : un en-tête Authorization statique désactive complètement OAuth, et inversement, quand OAuth est actif, Bob retire cet en-tête. La documentation le dit en une phrase : n'utilisez qu'une seule méthode. Pour changer de compte, le redémarrage ne suffit pas, il faut le bouton de réinitialisation de l'authentification.
Gouverner ce qu'on branche
Chaque serveur ajoute ses définitions d'outils à la fenêtre de contexte, à chaque message. D'où une recommandation déjà vue au niveau 1 et confirmée ici : n'activez que les outils utiles, serveur par serveur et outil par outil, et préférez une configuration de projet à une configuration globale.
Deux réglages commandent l'ensemble : un interrupteur général d'usage des serveurs MCP, qui retire toute la logique du system prompt quand il est éteint, et un second qui autorise ou non Bob à écrire des serveurs MCP. Pour auto-approuver un outil MCP, il faut deux réglages à la fois : l'option globale dans les permissions, et l'autorisation permanente à côté de l'outil concerné.
Un serveur MCP tourne avec vos droits et voit ce que vous lui donnez. La documentation propose une procédure d'examen en six temps : enquêter sur la source, lire la documentation, vérifier les permissions demandées, lire le code, tester en isolation, puis surveiller le comportement. Quatre contrôles sont à exiger d'un serveur distant : authentification, chiffrement, contrôles d'accès et journalisation.
Notez une incohérence de la documentation elle-même : elle interdit de coder en dur les clés dans les fichiers de configuration, tout en donnant un exemple qui place une clé directement dans env. Suivez la consigne, pas l'exemple : passez par une variable d'environnement ou un coffre.
- Avec le constructeur ci-dessus, produisez une configuration STDIO de portée projet et déposez-la dans
.bob/mcp.json. - Ouvrez l'onglet MCP des réglages et vérifiez que Bob voit le serveur, même s'il échoue à démarrer faute d'un vrai exécutable.
- Dépliez le serveur et désactivez un outil. Observez l'effet annoncé sur la consommation de contexte.
- Exercice avancé, tiré du tutoriel officiel : faites construire un serveur par Bob. En Plan mode, décrivez un serveur en lecture seule avec un seul outil, ses paramètres et son format de retour. Puis en Agent mode, demandez l'implémentation.
- Point clé de ce tutoriel : Bob n'enregistre pas le serveur tout seul. Demandez-le explicitement, en précisant la portée projet et le fichier
.bob/mcp.json, puis redémarrez Bob.
Ce dernier exercice se fait dans un répertoire neuf, pas sur le projet fil rouge, et demande une version récente de Node.js.
- Je sais choisir entre STDIO et Streamable HTTP.
- J'ai produit un
mcp.jsonvalide et Bob l'a chargé. - Je sais qu'un en-tête d'autorisation statique désactive OAuth.
- J'ai désactivé au moins un outil pour économiser du contexte.
- Je sais quoi vérifier avant de brancher un serveur tiers.
Authorization fixe « au cas où ». Que se passe-t-il ?Literate Coding
Pour une petite modification dans un fichier que vous connaissez déjà, passer par la conversation n'est pas toujours le plus rapide. Il existe une autre voie : écrire l'instruction là où le code doit aller.
À la fin de ce chapitre, vous activez ce mode, vous écrivez une instruction dans un fichier, vous générez le code et vous savez quand cette approche est préférable à la conversation.
Le principe
Le Literate Coding consiste à écrire des instructions en langage naturel, ou en pseudocode, directement dans le fichier source, puis à les faire remplacer par du code. Les instructions apparaissent surlignées en bleu. La génération analyse tout le fichier, comprend le contexte existant, remplace les instructions et présente un diff en ligne [D ide/features/literate-coding].
Plusieurs instructions dispersées dans le même fichier sont toutes prises en compte, où qu'elles se trouvent.
- [00:01] Le présentateur pose le cadre : pour une petite fonctionnalité dans un code qu'il connaît, la conversation n'est pas le meilleur outil. Il annonce une fonctionnalité qu'il présente comme propre à Bob.
- [00:40] La tâche : un interrupteur pour n'afficher que les articles créés dans les dernières vingt-quatre heures.
- [00:55] Il active le mode.
- [01:05] Il écrit une première instruction à l'endroit voulu, puis une seconde plus bas dans le même fichier.
- [01:30] Il lance la génération. Bob combine le code existant et les deux descriptions, et produit du code qui s'insère dans l'ensemble.
- [02:02] Il accepte tout, enregistre, revient à l'application : l'interrupteur fonctionne.
La vidéo date d'octobre 2025 et montre l'activation par un interrupteur dans l'interface. La documentation de 2026 donne un raccourci clavier ou une icône. Le geste a changé, pas le principe. [V12]
Les gestes
- Activer :
Cmd + Isur macOS,Ctrl + Iailleurs, ou l'icône en forme de baguette magique de la barre d'outils. Le tutoriel décrit une troisième voie, par le menu en points de suspension sur la ligne visée. - Écrire l'instruction en langage naturel.
- Générer :
Cmd + Entrée, ou le bouton de génération. - Accepter tout, ou rejeter avec
Cmd + Maj + Retour arrière.
Les modifications sont écrites dans votre fichier avant que vous ne les acceptiez. La documentation le présente comme un avantage : cela vous permet de tester avant de décider. Mais cela veut dire qu'un rejet est une annulation, pas un non-événement. Enregistrez votre travail avant de générer.
La portée est d'un seul fichier, le support multi-fichiers étant annoncé comme prévu. La fonctionnalité est signalée comme étant en aperçu. Pour un changement qui touche plusieurs fonctions ou plusieurs fichiers, la documentation renvoie à la conversation et à un plan, c'est-à-dire à la méthode du chapitre 6.
Deux points ne sont pas documentés : les équivalents Windows et Linux des raccourcis de génération et de rejet, et le fait de savoir si l'instruction se tape comme un commentaire dans le fichier ou dans un champ dédié, l'image et le titre de la page suggérant des réponses différentes.
L'exercice du tutoriel officiel porte sur un fichier de l'interface du projet fil rouge.
- Ouvrez un composant que vous connaissez et placez le curseur dans une fonction qui appelle le serveur.
- Activez le mode avec le raccourci.
- Écrivez une instruction courte et précise, par exemple que le serveur est parfois instable et qu'il faut une logique de reprise ici.
- Générez, lisez le diff, puis acceptez.
- Comparez : refaites la même demande par la conversation, sur une copie du fichier. Comparez le temps passé et la qualité du résultat. C'est ce qui vous dira quand choisir l'un ou l'autre.
- J'ai activé le mode au clavier.
- J'ai généré du code depuis une instruction écrite dans le fichier.
- J'ai lu le diff avant d'accepter.
- Je sais que les changements sont écrits avant acceptation.
- Je sais que la portée est limitée à un seul fichier.
Bob Shell et l'automatisation
Tout ce que vous avez appris se retrouve en ligne de commande, avec une différence de taille : en mode non interactif, personne n'approuve plus rien.
À la fin de ce chapitre, vous installez Bob Shell, vous l'authentifiez pour l'automatisation, vous distinguez les deux modes de session, et vous écrivez une commande d'intégration continue avec ses garde-fous.
Installer et authentifier
Bob Shell demande Node.js 24 ou supérieur, et fonctionne sur macOS, Linux, Windows, ainsi que sur z/OS et Linux sur IBM Z [D shell/getting-started/install-and-setup]. Un détail qui déroute au premier usage : le paquet s'appelle bobshell, la commande s'appelle bob.
Pour un usage interactif, l'authentification passe par le navigateur, comme dans l'IDE. Pour l'automatisation, il faut une clé d'API de portée « Inference », dont la valeur n'est affichée qu'une seule fois, exposée dans une variable d'environnement.
export BOB_API_KEY="votre-cle-api" echo 'export BOB_API_KEY="votre-cle-api"' >> ~/.bashrc
La variable exacte est BOB_API_KEY. La documentation se contredit sur un point qu'elle signale elle-même : la page consacrée à l'intégration avec les éditeurs cite BOBSHELL_API_KEY.
Deux modes de session
bob chat ouvre une session interactive. On y retrouve les mentions avec @, le sélecteur de skills, le menu des commandes, et un dialogue d'approbation à quatre réponses : approuver une fois, approuver le groupe d'outils pour la tâche, toujours autoriser une commande précise, ou refuser. Le pied de page affiche le mode, le contexte consommé et le coût en Bobcoins.
bob run exécute une session non interactive, acceptant un prompt en argument ou sur l'entrée standard, avec trois formats de sortie dont un JSON structuré et un flux d'événements.
La documentation l'écrit sans détour : en exécution non interactive avec bob run, tous les outils sont pré-approuvés. Personne n'approuve quoi que ce soit. Tout ce que vous avez appris au chapitre 8 sur les garde-fous d'approbation ne s'applique plus. C'est pour cela que les limites se posent autrement, par la commande elle-même.
Trois garde-fous pour l'intégration continue
Puisque l'approbation disparaît, la documentation propose de borner l'exécution sur trois axes : le coût, le nombre de tours, et les groupes d'outils autorisés. Désactiver l'édition, l'exécution et MCP donne un agent en lecture seule, ce qui est le bon réglage pour une revue automatisée.
export BOB_API_KEY=... bob run --accept-license --trust --format json --max-cost 1 --max-turns 15 \ --disable-tool-groups edit,execute,mcp "Review @src/ and list risks" > review.json jq -r '.status, .last_message' review.json
Le format JSON renvoie un objet final contenant le statut, le dernier message et des statistiques : identifiant de tâche, jetons consommés en entrée et en sortie, durée, coût de session et nombre d'appels d'outils. C'est ce qui rend le résultat exploitable par un script.
Les dossiers de confiance
Sur un agent d'intégration continue, un point mérite attention. Les hooks globaux s'exécutent dans tout dossier qui n'est pas explicitement marqué comme non fiable, y compris un dépôt cloné pour la première fois. Le mécanisme des dossiers de confiance, désactivé par défaut, permet de déclarer une confiance par dossier ou par dossier parent, et c'est le seul moyen d'empêcher cette exécution.
La documentation formule la recommandation de façon frappante : relisez les hooks globaux et le fichier de réglages de chaque dépôt comme vous reliriez un fichier de construction ou une configuration d'intégration continue.
- Installez Bob Shell, puis vérifiez la version avec
bob --version. Rappelez-vous que le paquet et la commande n'ont pas le même nom. - Ouvrez une session interactive avec
bob chatsur le projet fil rouge. Retrouvez le sélecteur de skills et le menu des commandes. - Observez le pied de page pendant quelques échanges : mode, contexte, coût.
- Sortez, puis lancez une revue non interactive en lecture seule, avec un coût et un nombre de tours plafonnés, et les groupes d'édition, d'exécution et MCP désactivés.
- Exploitez la sortie JSON avec un extracteur de champs pour n'afficher que le statut et le message final.
- Mesurez le risque : relancez la même commande sans
--disable-tool-groupssur un dépôt jetable, et mesurez ce que cela veut dire de laisser un agent écrire sans approbation.
- Bob Shell est installé et
bob --versionrépond. - J'ai mené une session interactive et lu le pied de page d'état.
- Je sais que
bob runpré-approuve tous les outils. - J'ai lancé une revue plafonnée en coût et en tours, en lecture seule.
- J'ai exploité la sortie JSON dans un script.
bob run dans une chaîne d'intégration continue. Qui approuve les actions ?Mesurer, gouverner, suivre l'outil
Dernier chapitre du parcours. Il ne s'agit plus de faire, mais de piloter : mesurer l'usage d'une équipe, connaître le cadre d'entreprise, et savoir lire le changelog pour ne pas travailler sur des souvenirs.
À la fin de ce chapitre, vous savez quels indicateurs existent et ce qu'ils mesurent exactement, ce que la télémétrie collecte, où trouver les réglages d'entreprise, et comment dater une fonctionnalité.
Mesurer : trois indicateurs
Bobalytics est réservé au plan Enterprise et s'atteint depuis la console d'administration [D ide/features/bobalytics]. Trois indicateurs structurent les tableaux de bord, et leurs définitions exactes méritent d'être lues, car elles ne sont pas intuitives.
| Indicateur | Définition documentée | À savoir |
|---|---|---|
| Adoption rate | Moyenne des utilisateurs actifs quotidiens divisée par le nombre total de sièges sous licence. | Est « actif » celui qui accepte au moins une complétion ou termine une conversation. |
| Bob factor | Lignes de code commitées par Bob divisées par le total des lignes commitées. | Les commits sans aucune ligne de Bob sont exclus du calcul au-delà de 40 000 lignes de total. |
| Bobcoin spend | Total des Bobcoins consommés sur la période. | Comparaison avec la période précédente calculée automatiquement. |
Les identifiants sont anonymisés dans les tableaux de bord, et les administrateurs n'accèdent pas aux données individuelles. Un export produit une archive contenant un fichier par table.
La télémétrie
Elle est activée par défaut et désactivable à tout moment dans les réglages généraux [D ide/configuration/telemetry-data]. Ce qui est collecté : les actions, les fonctionnalités et performances, les erreurs et diagnostics. Ce qui ne l'est pas, formulé explicitement par la documentation : ni le code, ni le contenu des prompts, ni les fichiers.
Les utilisateurs Enterprise doivent laisser la télémétrie activée pour apparaître dans Bobalytics. Or aucune politique d'entreprise ne permet de l'imposer, alors que l'indicateur d'adoption en dépend. Un utilisateur qui la désactive disparaît des mesures. Par ailleurs, la durée de conservation et la région de stockage de ces données ne sont pas documentées.
Le cadre d'entreprise, en survol
Ce bloc est donné sans travail pratique, conformément au périmètre de la formation. Les points à connaître : une instance se provisionne par région, et quatre régions existent, aux États-Unis, en Europe, en Inde et au Japon. Les identités se raccordent par SAML ou OpenID Connect, avec vérification du domaine par enregistrement DNS. Les équipes portent chacune un budget de Bobcoins. Le journal d'activité est téléchargeable par tranches horaires dans un format d'audit normalisé.
Deux limites utiles à retenir. D'abord, quelle que soit la région choisie, les données de compte, de facturation et de gestion des utilisateurs restent aux États-Unis, et le domaine d'authentification américain doit être joignable depuis tous les réseaux. Ensuite, le journal d'activité ne contient pas les actions des utilisateurs, ni leurs prompts ni leurs appels d'outils : pour cela, la documentation renvoie aux hooks du chapitre 15.
L'intégration avec un système de supervision de sécurité n'est pas en libre-service : elle passe par une demande au support avec les paramètres du collecteur.
Les paquets premium
Trois extensions optionnelles étendent Bob à des plateformes particulières, installées comme extensions après vérification automatique des droits. Java Modernization propose des workflows guidés de montée de version et de migration. Bob for Z couvre la modernisation sur mainframe, avec documentation et refactorisation de programmes COBOL, PL/I ou Assembler. Bob for i est le plus fourni, avec deux modes propres, des dizaines de skills et un accès au système IBM i. Aucun prix n'est indiqué dans la documentation.
Lire le changelog pour ne pas travailler sur des souvenirs
C'est la compétence qui vous servira le plus longtemps. Les versions de référence au moment de la lecture des sources sont Bob IDE 2.1.0, d'août 2026, et Bob Shell 2.0.4, de septembre 2026 [D ide/changelog]. Les deux produits ont des numérotations distinctes.
Cette formation vous a signalé au fil des chapitres plusieurs écarts entre ce que montrent les vidéos et ce que dit la documentation. Le changelog les explique tous.
| Ce qui a changé | Avant | Après | Version |
|---|---|---|---|
| Le mode d'écriture | Code mode | Agent mode | 2.0.0, juin 2026 |
| Modes supprimés | Advanced, Orchestrator | capacités absorbées par les modes par défaut | 2.0.0 |
| Nombre de modes par défaut | cinq | trois | 2.0.0 |
| Fenêtre de contexte | 200 000 jetons | 270 000 jetons | 2.0.0 |
Ce n'est pas seulement un problème de vidéos anciennes. Plusieurs pages à jour contiennent encore l'ancien vocabulaire : la page des commandes slash cite /code, un tutoriel fait son test « en Code mode », la page des modes personnalisés évoque encore l'Orchestrator pourtant supprimé, et la documentation de Bob Shell parle du dossier rules-code/. Quand une page et le changelog se contredisent, le changelog fait foi.
Signalons aussi une absence notable : le retour en arrière du chapitre 8 n'apparaît nulle part dans le changelog, alors qu'une page de documentation lui est consacrée.
Dépannage : les quatre pannes les plus fréquentes
- Connexion impossible. Cause habituelle, un pare-feu. Il faut autoriser en HTTPS les domaines de Bob, dont le domaine d'authentification américain, quelle que soit votre région.
- Lenteurs après installation sur Mac. Presque toujours le mauvais installateur pour le processeur. Vérifiez la puce, désinstallez, réinstallez la bonne variante.
- Panneau de Bob disparu. Il a été sorti de sa zone. On le récupère par les réglages d'apparence de la barre latérale secondaire.
- En dernier recours, une réinitialisation complète existe. Exportez vos réglages avant, car l'opération est irréversible, et sachez que la documentation ne décrit aucune procédure de réimport du fichier exporté.
Concernant la foire aux questions, un avertissement de méthode : les pages ont été capturées avec leurs rubriques mais sans le texte des questions, replié à la capture. Cette formation ne les utilise donc pas, plutôt que d'en inventer le contenu.
- Ouvrez les réglages et relevez votre version de Bob IDE.
- Ouvrez le changelog en ligne et lisez les entrées postérieures à votre version. Notez ce qui vous manque.
- Vérifiez votre réglage de télémétrie et décidez en connaissance de cause.
- Exercice de vigilance : reprenez trois affirmations de cette formation et vérifiez-les dans la documentation actuelle. Les sources ont été lues le 20 septembre 2026 ; tout a pu bouger depuis.
- Si vous encadrez une équipe, regardez lesquels des trois indicateurs répondent à une question que vous vous posez réellement, et ignorez les autres.
- Je connais la définition exacte des trois indicateurs.
- Je sais ce que la télémétrie collecte et ce qu'elle ne collecte pas.
- Je connais ma version de Bob et je sais lire le changelog.
- Je sais que le journal d'activité ne contient pas les actions des utilisateurs.
- J'ai vérifié au moins trois affirmations de cette formation dans la documentation actuelle.
Aide-mémoire, glossaire, références
Aide-mémoire
Les raccourcis, commandes, mentions et chemins de configuration rassemblés, avec la page de documentation d'où vient chaque ligne.
Raccourcis clavier
| Geste | macOS | Windows et Linux | Source |
|---|---|---|---|
| Ouvrir le panneau de conversation | Option + Command + B | Ctrl + Alt + B | [D ide/getting-started/quickstart] |
| Changer de mode (cycle) | Command + . | Ctrl + . | [D ide/features/modes] |
| Conversation en ligne dans l'éditeur | Command + K | Ctrl + K | [D ide/features/code-actions] |
| Envoyer la sélection à la conversation | Command + L | Ctrl + L | [D ide/features/code-actions] |
| Activer le Literate Coding | Command + I | Ctrl + I | [D ide/features/literate-coding] |
| Générer, puis accepter | Command + Entrée | non documenté | [D ide/features/literate-coding] |
| Rejeter la génération | Command + Maj + Retour arrière | non documenté | [D ide/features/literate-coding] |
| Chercher dans la conversation | Command + F | Ctrl + F | [D ide/features/chat-interface] |
| Envoyer, et aller à la ligne | Entrée · Maj + Entrée | identique | [D ide/features/chat-interface] |
| Bob Shell : changer de mode | Maj + Tab | identique | [D shell/getting-started/start-bobshell-interactive] |
| Bob Shell : auto-approuver sans dialogue | Ctrl + F | Alt + F | [D shell/getting-started/start-bobshell-interactive] |
Mentions de contexte
| Mention | Ce qu'elle fournit | Piège |
|---|---|---|
@/chemin/fichier.ts | Contenu complet, avec numéros de ligne | Passe outre .bobignore et .gitignore |
@/src/app.js:10-20 | Uniquement ces lignes | À privilégier systématiquement |
@/chemin/dossier | Fichiers texte du dossier | Non récursif |
@problems | Erreurs et avertissements par fichier | — |
@terminal | Dernière commande et sa sortie | Limité au tampon visible |
@a1b2c3d | Un commit, avec son diff | Dépôt Git requis ; respecte .gitignore |
@git-changes | État Git et diff non commité | Respecte .gitignore |
@https://… | Page convertie en Markdown | Conversion imparfaite sur pages complexes |
Source de tout ce tableau : [D ide/features/context-mentions]. Deux syntaxes apparaissent ailleurs sans figurer dans ce tableau officiel : @issues, cité uniquement par la page des revues de code, et le format à deux-points produit par les actions de code.
Commandes slash
| Commande | Effet | Source |
|---|---|---|
/init | Analyse le projet et crée AGENTS.md plus les règles par mode | [D ide/features/slash-commands] |
/review | Analyse les changements non commités | [D ide/features/code-reviews] |
/review <branche> | Compare une branche à la position courante | [D ide/features/code-reviews] |
/create-pr | Crée une pull request | [D ide/features/pull-requests] |
/create-skill | Création guidée d'un skill | [D ide/features/skills] |
/agent /plan /ask | Changent de mode ; non surchargeables | [D ide/features/slash-commands] |
/<slug> | Active un mode personnalisé | [D ide/configuration/custom-modes] |
/<nom-de-skill> | Active un skill explicitement | [D ide/features/skills] |
Propres à Bob Shell — /help · /clear · /compact · /copy · /editor · /hooks · /mode · /permissions · /resume · /settings · /mcp · /manage-secrets · /skills · /status · /team · /logs · /docs · /bug · /exit [D shell/features/slash-commands] | ||
Commandes personnalisées : un fichier Markdown dans .bob/commands/ ou ~/.bob/commands/, le nom du fichier devient la commande. Le projet prime sur le global.
Où vit la configuration
| Quoi | Global | Projet | Format |
|---|---|---|---|
| Règles | ~/.bob/rules/ | .bob/rules/, .bob/rules-<mode>/ | Markdown |
| Standards d'équipe | — | AGENTS.md à la racine | Markdown |
| Modes personnalisés | ~/.bob/settings/custom_modes.yaml | .bob/custom_modes.yaml | YAML |
| Skills | ~/.bob/skills/<nom>/SKILL.md | .bob/skills/<nom>/SKILL.md | Markdown + en-tête YAML |
| Commandes slash | ~/.bob/commands/*.md | .bob/commands/*.md | Markdown |
| Serveurs MCP | ~/.bob/settings/mcp.json | .bob/mcp.json | JSON |
| Hooks | ~/.bob/settings/settings.json | .bob/settings.json | JSON, clé hooks |
| Fichiers interdits | — | .bobignore à la racine | Syntaxe .gitignore |
Bob Shell donne des chemins globaux différents pour les modes et MCP. Voir le chapitre 16. Priorité générale : le projet prime sur le global, et les politiques d'entreprise priment sur tout.
Les chiffres à connaître
| Valeur | Chiffre | Source |
|---|---|---|
| Fenêtre de contexte par tâche | 270 000 jetons | [D ide/core-concepts/context-window-management] |
| Début de la compaction | environ 190 000 jetons | [D ide/core-concepts/context-window-management] |
| Réserve pour la réponse | environ 20 000 jetons | [D ide/core-concepts/context-window-management] |
| Prix d'un Bobcoin | 0,50 dollar | [D ide/account/bobcoins] |
| Allocations mensuelles | 50 · 50 · 180 · 1 000 | [D ide/account/bobcoins] |
| Délai d'expiration d'un hook | 10 secondes par défaut | [D ide/configuration/lifecycle-hooks] |
| Versions de référence | Bob IDE 2.1.0 · Bob Shell 2.0.4 | [D ide/changelog] |
Rassemblé ici pour éviter des recherches inutiles. Ne sont pas documentés : le taux de conversion des jetons en Bobcoins, le prix mensuel des plans, le coût en Bobcoins d'une opération type, le nombre maximum de sous-agents en parallèle, les modèles utilisés par les deux types de sous-agents, la liste complète des détecteurs de sécurité, la liste des commandes vérifiées par .bobignore, l'emplacement de stockage des instantanés de retour en arrière, les plateformes prises en charge pour les pull requests, et la durée de conservation de la télémétrie.
Glossaire bilingue
Les termes de l'interface restent en anglais dans le produit. Cette colonne du milieu donne la traduction retenue par IBM dans sa documentation française, quand elle existe.
Les équivalents français proviennent des vingt-quatre pages de la documentation française d'IBM téléchargées le 20 septembre 2026. Quand IBM conserve le terme anglais, c'est indiqué : cela signifie qu'il faut le garder, y compris à l'oral.
@.Références
Toutes les sources de cette formation, filtrables. Les citations du texte, comme [D ide/features/modes], pointent vers l'entrée correspondante de cette liste.
Deux sources de natures différentes ont été recoupées. Les vidéos montrent des gestes, dans un ordre, avec un résultat, mais datent de deux campagnes distinctes, octobre 2025 et juillet 2026. La documentation précise les options, les limites et les chiffres, et a été lue le 20 septembre 2026. Quand les deux divergent, le chapitre 20 explique comment trancher.
Les vidéos ne sont pas intégrées à cette page, seulement liées. Leurs transcriptions ne sont pas reproduites : elles sont automatiques, donc imparfaites, et ont servi de matière de travail, jamais de citation littérale.
Pour aller plus loin
- La documentation de Bob IDE et celle de Bob Shell, à relire après cette formation : vous y verrez des choses qui vous auraient échappé avant.
- Les changelogs, à consulter à chaque mise à jour. C'est l'habitude la plus utile que peut prendre un utilisateur d'agent de code.
- La playlist « Your Agentic AI Coding Partner », désormais lisible avec un œil critique sur ce qui a changé depuis.
- Le projet Galaxium Travels, pour refaire les travaux pratiques ou en inventer d'autres.
Formation générée le 20 septembre 2026 à partir de deux sources recoupées : la playlist « Your Agentic AI Coding Partner | IBM Bob » (12 vidéos exploitables sur 13, la treizième étant privée ; publiées en octobre 2025 et juillet 2026) et la documentation officielle bob.ibm.com (139 pages lues, Bob IDE et Bob Shell, plus le fichier llms.txt), capturée le 20 septembre 2026. Versions visées : Bob IDE 2.1.0, Bob Shell 2.0.4. Les captures d'écran du dossier assets/origin/ proviennent de la documentation IBM et sont reproduites sans modification, à usage local et pédagogique, avec leur page d'origine indiquée. Les schémas sont dessinés pour cette formation. Aucune commande, aucun raccourci, aucun chiffre n'a été inventé : les points que la documentation ne couvre pas sont signalés comme tels. La page ne fait aucun appel réseau à l'exécution.