Tâches de code
Le tableau de code transforme une tâche écrite en code fusionné avec aussi peu de cérémonie que vous le souhaitez : écrivez ce dont vous avez besoin, soit Planifier d'abord — la découper en phases revues avec un agent de planification interactif — soit Démarrer tout de suite, regardez l'agent travailler dans son propre worktree git, revoyez le diff avec des commentaires ancrés à la ligne, et intégrez-le — l'agent qui a écrit le changement le fusionne (ou ouvre la pull request) une fois que vous l'approuvez. Chaque étape est une colonne ; chaque tâche se trouve dans l'une d'elles.
Dans la barre latérale, la section Tâches de code se place juste sous Sessions, au-dessus d'Automatisations et de Machines virtuelles. Son en-tête montre combien de tâches sont ouvertes, un badge orange comptant les tâches en attente dans Revue, un badge rouge quand un agent a besoin de vous, et un + pour une nouvelle tâche. En dessous, une ligne résume le tableau (2 planifiées · 1 en cours · 1 à revoir), ou indique Aucune tâche ouverte quand le tableau est vide. Cliquez sur le titre de la section (Ouvrir Tâches de code (⇧⌘T)) ou sur cette ligne pour ouvrir le tableau intitulé Tâches de code ; vous pouvez aussi appuyer sur ⇧⌘T (Espaces de travail › Tâches) ou choisir Tâches de code dans la palette ⌘K.
| Colonne | Ce qui s'y trouve |
|---|---|
| Backlog | Les tâches que vous avez écrites mais pas démarrées. Chacune propose Planifier d'abord et Démarrer, et peut être attribuée à une session ou à une salle. |
| Plan | Les phases qu'un agent planificateur a déposées depuis une tâche — numérotées, conscientes des dépendances, sélectionnables en groupe. |
| En cours | Les tâches et les phases sur lesquelles un agent travaille activement, chacune dans son propre worktree et chacune affichée comme une session dans la barre latérale. |
| Revue | Le travail terminé qui vous attend : cliquer une tâche ouvre la fenêtre de revue avec le diff de la branche. Une tâche en cours d'intégration reste ici jusqu'à ce que le changement soit entré. |
| Terminé | Chaque tâche dit comment elle y est arrivée : Fusionnée dans branche, PR n° N ouverte, Marquée terminée par vous ou Fermée sans fusion. |
Tout ce qui est sur cette page fonctionne à l'identique depuis un client riche distant — le tableau, la fenêtre de planification et la fenêtre de revue se reflètent tous par l'API de contrôle.
Écrire une tâche
Nouvelle tâche en haut du tableau, le + sur l'en-tête Tâches de code de la barre latérale, ou un clic sur une tâche du Backlog ouvre l'éditeur :
- Un Titre et une description écrite en Markdown, avec une bascule Écrire / Aperçu. La description devient le prompt de l'agent, écrivez-la donc comme tel.
- Espace de travail et Agent — la tâche tourne sur la machine choisie (un espace de travail, dans l'éditeur de réglages) avec l'un des agents qui y sont disponibles.
- Démarrer l'agent dans — un dossier à l'intérieur de la machine. Quand c'est un dépôt git à part entière, la tâche tourne dans un worktree et une branche neufs, là-bas.
- Créer le dossier et le dépôt git si besoin — pour un travail à partir de rien : démarrer ou planifier exécute d'abord
mkdir+git init(avec un commit racine vide) quand le dossier n'est pas déjà son propre dépôt. Laissez ceci désactivé pour un dossier à l'intérieur d'un dépôt existant. - Une fois approuvée — comment la tâche quitte la Revue : Valeur de l'espace de travail (le choix de la machine, qui reprend lui-même les Préférences par défaut — voir Général), Fusionner dans la branche ou Ouvrir une pull request.
Une nouvelle tâche reprend l'espace de travail et le dossier que vous avez utilisés en dernier.
Une tâche dans le Backlog propose deux boutons :
- Démarrer envoie la tâche En cours : un nouvel agent fait tout le travail de façon autonome dans un worktree neuf et vous remet le diff dans Revue. (Il n'est pas disponible pendant que la tâche est en planification.)
- Planifier d'abord ouvre d'abord une session de planification.
Démarrer vérifie avant que quoi que ce soit ne bouge : la machine est amorcée si besoin, puis le dossier doit exister et être un dépôt git à part entière (ou Créer le dossier et le dépôt git si besoin doit être activé). Pendant la vérification, la tâche reste dans sa colonne avec un indicateur Démarrage… ; elle ne passe En cours qu'une fois que l'agent peut réellement démarrer. Une tâche qui ne peut pas démarrer reste où elle était et en affiche la raison en rouge — un dossier manquant, un dossier qui n'est pas un dépôt — si bien que le tableau (et GET /tasks) ne montre jamais En cours une tâche qui ne tourne pas.
Chaque tâche du Backlog montre aussi qui la prend en charge : Attribuer ouvre le choix (un nouvel agent, le Standard, une session ou une salle) et la tâche indique alors Attribuée à nom ; Retirer l'attribution la retire de cette file. Nouvelles tâches : non assignées en haut du tableau règle à qui les nouvelles tâches sont attribuées quand vous les créez.
Planifier
Planifier d'abord lance une session de planification visible et interactive et ouvre sa fenêtre — une vue de conversation native, sans terminal requis. La session s'ouvre sur votre tâche ; l'agent explore le dépôt en lecture seule, raconte ce qu'il trouve, et pose des questions quand la tâche laisse de vrais choix ouverts.
Les questions arrivent sous forme de carte à onglets — un onglet par question, reflétant exactement le sélecteur que l'agent montre dans sa propre session. Les réponses sont collectées localement et restent modifiables jusqu'à ce que vous appuyiez sur Envoyer, ce qui expédie l'ensemble d'un coup ; un clic malheureux n'est jamais définitif. Vous pouvez aussi taper des réponses libres dans la zone de composition en bas de la fenêtre, ou appuyer sur Ouvrir le terminal pour regarder la session brute.
Quand l'agent a ce qu'il lui faut, il dépose le plan sur le tableau — des phases ordonnées dans la colonne Plan, chacune valant à peu près une pull request revue, avec des dépendances entre elles — et enregistre une vue d'ensemble du plan. La fenêtre affiche alors Le plan est prêt avec le nombre de phases et un bouton Fermer, l'onglet de la session de planification se ferme de lui-même et sa session est archivée, et la tâche quitte le Backlog (ses phases la remplacent ; retirez-les toutes et elle revient).
La planification est surveillée : si la machine redémarre, si l'agent est quitté, ou si la session meurt avant que les phases ne soient déposées, le rouet de la tâche se termine avec une raison précise — cliquez sur Planifier d'abord pour réessayer — au lieu de tourner sans fin.
La colonne Plan
Les phases sont numérotées dans l'ordre du plan et portent :
- Un badge de dépendance (un cadenas avec des numéros de phase) quand la phase exige que des phases antérieures soient Terminé d'abord.
- Un badge en file quand vous l'avez démarrée avant la fin de ses dépendances — elle démarre automatiquement dès qu'elles sont toutes Terminé.
- Le nom de leur tâche parente.
Sélectionnez plusieurs phases avec les cases à cocher et la barre de sélection apparaît : Démarrer les N sélectionnées les démarre chacune (les phases bloquées par des dépendances se mettent en file), Effacer abandonne la sélection, et Supprimer retire toute la sélection derrière une seule confirmation. Modifier une phase montre sa liste Dépend de — chaque phase sœur avec une case à cocher, pour que les dépendances puissent être retravaillées à la main.
Les phases tournent complètement en autonomie — aucune intervention interactive n'est attendue une fois qu'elles sont démarrées.
En cours
Une tâche démarrée amorce la machine si besoin, crée un worktree neuf du dépôt, et lance l'agent avec la description de la tâche comme prompt. L'agent apparaît comme une session dans la barre latérale comme n'importe quelle autre, vous pouvez donc le suivre dans le chat. La tâche montre l'état de son agent avec les mêmes mots que la ligne de la session dans la barre latérale — En cours, Vous attend en rouge quand l'agent est bloqué sur une question, Prêt quand l'agent attend à son invite sans avoir rendu la tâche, En pause quand sa session dort — plus l'heure de démarrage. La cliquer (Ouvrir la session en direct de la tâche) met cette session sur la scène ; une session disparue propose Redémarrer la session, et une tâche dont le dépôt ou la branche a disparu propose Recommencer (une nouvelle exécution sur une nouvelle branche). Un agent qui meurt au démarrage — une commande manquante, une mauvaise option — est repéré en quelques secondes : la tâche le dit en rouge, avec le code de sortie de l'agent, et propose Redémarrer la session. Quand un message pour l'agent trouve du texte déjà présent dans sa zone de saisie, Bromure ne tape pas par-dessus : le message attend que la zone se vide, et sinon la tâche le dit en rouge. Le badge Tâches de la barre latérale les compte, si bien que vous n'en manquez aucune.
Survoler une tâche En cours affiche un bouton ✓ Terminé (Marquer comme terminée, après une confirmation : rien n'est fusionné et la branche est conservée). Un clic droit propose Ouvrir la session, Redémarrer la session, Passer en Revue, Marquer comme terminée, Arrêter et remettre dans le backlog (l'agent s'arrête ; son worktree et sa branche restent dans l'espace de travail, la tâche retourne dans le Backlog), Arrêter et abandonner la branche et Retirer la tâche uniquement. Glisser une tâche du Backlog ou une phase sur En cours la démarre. Une tâche confiée à une session ou à une salle propose plutôt Ouvrir la session et Arrêter et remettre dans le backlog.
Quand l'agent signale qu'il a fini, la tâche passe à Revue. Sa session reste ouverte : les commentaires de revue que vous renvoyez atteignent la même conversation, et quand vous approuvez la tâche, le même agent l'intègre. La session est archivée une fois la tâche intégrée, marquée terminée ou abandonnée — ou après environ deux heures en Revue sans que rien ne se passe, auquel cas un renvoi ou une intégration reprend la conversation de l'agent dans un nouvel onglet. Si au contraire l'agent plante, la tâche devient rouge plutôt que de faire semblant de travailler.
Revue
Une tâche dans Revue montre sa branche, ses commentaires de revue et où elle en est : Prête à intégrer, Intégration — agent fusionne dans branche… (avec la dernière ligne de l'agent), ou Vous attend — raison en rouge (deux lignes sur la carte, le tout au survol) avec les boutons Réessayer et Ouvrir la session. Une tâche qui n'a produit aucun code indique Aucune modification de code — lisez le rapport. Survolez une tâche pour ✓ Terminé ; glissez-la sur Terminé pour la marquer terminée. Cliquez dessus pour ouvrir la fenêtre de revue — la même fenêtre qui sert à revoir les changements d'une session, intitulée Revue — <tâche>, avec les boutons propres à la tâche.
Sous l'en-tête de la fenêtre, un résumé dit où en est la branche : Kimi Code a travaillé sur wt/fix-login dans Web app · ~/app · 3 commits · 4 fichiers (+120 −7) par rapport à main · main a avancé de 2 commits depuis · copie de main propre · distant : origin.
La fenêtre montre le diff de la branche, lu en direct depuis la machine (la machine doit donc tourner), avec des dépliants par fichier, les décomptes de lignes ajoutées et retirées, les commits et l'état de la copie de travail, et le plan que l'agent a enregistré, s'il y en a un. Un sélecteur en haut choisit à quoi le diff est comparé :
| Choix | Ce qu'il montre |
|---|---|
| Depuis <parent> (défaut) | Tout ce que la branche a changé depuis qu'elle a quitté sa branche parente, validé ou non. |
| Non validé | Seulement les modifications pas encore validées, nouveaux fichiers inclus. |
| Dernier commit | Le dernier commit seul. |
Revoyez-la comme une pull request :
- Marquez les fichiers comme vus. Chaque fichier a une marque Vu (Marquer comme vu — il se replie jusqu'à ce qu'il change de nouveau). Un fichier vu se replie, et se déplie de lui-même si son diff change.
- Commentez. Survolez une ligne et cliquez la bulle dans la marge (Commenter cette ligne) pour commenter cette ligne exacte, servez-vous de Commenter ce fichier sur un en-tête de fichier, ou tapez dans la zone de composition en bas pour un commentaire sur tout le changement. Dans la zone de composition, ⏎ ajoute le commentaire, ⌥⏎ insère un retour à la ligne et ⇧⌘⏎ renvoie le tout. Les commentaires en brouillon peuvent être retirés avant que vous ne les envoyiez.
- Renvoyez. Le bouton d'envoi indique Renvoyer (N). Il remet chaque commentaire en brouillon à l'agent dans un seul message — formaté comme Dans
foo.js, ligne 196 : utilisez une autre méthode — et remet la tâche En cours pour un nouveau tour, dans la même conversation, le même worktree et la même branche (⇧⌘⏎). - Intégrez-la. Le bouton principal suit le choix Une fois approuvée de la tâche : Fusionner dans branche ou Ouvrir une pull request (proposé seulement quand le dépôt a un distant). Son menu contient l'autre, Squash et fusion dans branche, Fusionner dans une autre branche… et Garder la branche — marquer comme terminée. Chacun ouvre une confirmation qui dit exactement ce qui va se passer (voir Intégration), avec une option Garder la branche.
- Marquer comme terminée — terminée sans fusion, après une confirmation que la branche est conservée.
- Plus — Ouvrir la session, Voir la transcription et Abandonner la branche… (supprime la branche et sa copie ; la tâche passe à Terminé comme fermée sans fusion, sa transcription conservée).
- Ouvrir le terminal saute à la session de la tâche sur la machine.
Une tâche qui n'a produit aucun code — pas de branche, une branche sans changement par rapport à sa cible, ou une livraison déléguée sans worktree — montre le rapport final de l'agent au lieu de git : son bouton principal est Marquer comme terminée, à côté de Voir la transcription et Renvoyer.
Une tâche faite par une session ou une salle qui a déjà ouvert une pull request propose Voir la pull request n° N et Marquer comme fusionnée (une fois qu'elle est fusionnée sur la forge).
Clic droit sur une tâche dans Revue pour Examiner les modifications, Ouvrir la session, Réessayer l'intégration (quand elle vous attend), Marquer comme terminée, Fusionner dans branche… (ouvre la revue sur sa confirmation de fusion), Retour vers En cours, Abandonner la branche… et Retirer la tâche uniquement. Abandonner une tâche, ou la marquer terminée, indique combien de commentaires de revue jamais parvenus à l'agent partent avec elle.
Clic droit sur une tâche Terminé pour Lire la transcription, Ouvrir la session tant que sa session est encore en vie, Ouvrir une pull request quand elle en a une, et Retirer la tâche. Le menu de chaque carte est aussi son menu VoiceOver (VO-Maj-M) et sa liste d'actions ; VoiceOver lit une carte comme son titre et son état.
Intégration
Approuver une fusion intègre le changement sans que vous ayez à résoudre quoi que ce soit à la main :
- Voie rapide. Quand la branche est strictement en avance sur sa cible, que sa copie n'a rien de non validé et que la copie de la cible est propre, Bromure la fusionne lui-même — un fast-forward là où la cible est extraite, ou une mise à jour directe de la branche quand elle n'est extraite nulle part. Il ne fusionne jamais dans une copie qui est sur une autre branche.
- L'agent l'intègre. Sinon c'est l'agent qui a écrit le changement qui s'en charge, dans sa propre session — tapé dans sa conversation en direct, ou cette conversation reprise : il valide ce qui reste, rebase sur la cible la plus récente (en résolvant les conflits en gardant l'intention des deux côtés), lance les vérifications rapides du projet et corrige ce que son changement a cassé, fait avancer la cible en fast-forward, et rend compte. Il ne touche jamais aux modifications non validées dans la copie de la cible. Une intégration par pull request pousse plutôt la branche et lance
gh pr createavec un résumé et un plan de test. - Vérifiée. La tâche ne passe à Terminé qu'une fois que Bromure voit le changement dans l'historique de la cible. Une intégration que l'agent signale mais que Bromure ne peut pas vérifier (une machine qu'il ne peut pas joindre) est enregistrée comme signalée par l'agent, non vérifiée.
- Vous attend. Si l'agent signale qu'il est bloqué, s'arrête sans intégrer, ou n'a pas fini au bout de 20 minutes, la tâche devient rouge avec la raison ; la fenêtre de revue propose Ouvrir la session, Réessayer et Annuler l'intégration.
Ensuite la branche et sa copie sont retirées (sauf si vous les avez gardées) et la session est archivée. Les tâches confiées à une session ou à une salle s'intègrent de la même façon : la personne assignée reçoit la demande d'intégration sur la même délégation et rend compte avec deliver.
Astuce : vous n'avez pas besoin d'une tâche pour revoir le travail d'un agent. Chaque session avec un dossier a Revoir les changements dans son menu et dans ⌘K, et la ligne N fichiers modifiés du chat ouvre la même fenêtre pour ce tour. Voir Branches et revue.
Retirer des tâches
Chaque tâche fait pousser un ✕ au survol (Retirer la tâche), derrière une confirmation. Pour une tâche En cours, le dialogue propose Arrêter et abandonner la branche, qui démonte tout, ou Retirer la tâche uniquement, qui laisse la session et la copie de travail intactes sur la machine ; pour une tâche dans Revue, il propose Abandonner la branche ou Retirer la tâche uniquement. Le menu d'une tâche du Backlog contient Retirer la tâche.
Stockage et API
Les tâches persistent dans un seul fichier à côté du magasin des machines, avec des écritures atomiques et des dates ISO-8601 :
~/Library/Application Support/BromureAC/tasks.json
Tout le tableau est reflété sur la socket de contrôle de l'app pour les clients riches et les scripts :
| Point d'accès | Rôle |
|---|---|
GET /tasks | Lister toutes les tâches. |
POST /tasks | Créer ou mettre à jour (upsert) un document de tâche. |
POST /tasks/<id>/start | La démarrer (worktree + agent). Les vérifications passent d'abord : la tâche reste dans sa colonne avec startingAt renseigné, puis passe à inProgress — ou garde sa colonne avec lastError renseigné quand elle ne peut pas démarrer. |
POST /tasks/<id>/plan | Lancer la session de planification. |
POST /tasks/<id>/comment | Ajouter un commentaire de revue (text, file et line facultatifs). |
POST /tasks/<id>/send-back | Remettre les commentaires non envoyés et renvoyer la tâche En cours. |
POST /tasks/<id>/land | L'intégrer : mode (merge, squash ou pr), target et keepBranch facultatifs. /merge et /open-pr en sont des alias. |
POST /tasks/<id>/retry-landing, /cancel-landing | Relancer une intégration bloquée, ou y renoncer. |
POST /tasks/<id>/mark-done | Terminée en l'état (rien de fusionné, branche conservée). |
POST /tasks/<id>/mark-merged | Terminée comme fusionnée ailleurs (une pull request fusionnée sur la forge). |
POST /tasks/<id>/close-no-merge | Abandonner : supprimer la branche et sa copie, Terminée comme fermée sans fusion. |
POST /tasks/<id>/stop | Arrêter l'agent et remettre la tâche dans le Backlog (worktree conservé). |
POST /tasks/<id>/to-testing, /to-in-progress | La déplacer à la main vers Revue ou En cours. |
POST /tasks/<id>/destroy | Arrêter l'agent, supprimer le worktree et la branche, retirer la tâche. |
DELETE /tasks/<id> | Retirer la tâche seulement. |
Sous le capot, les agents de planification et de tâche parlent au tableau à travers un serveur MCP de tableau par session (vsock, côté hôte) : board_get_task, board_set_plan, board_create_subtasks, board_ready_for_review et board_report_landing sont la façon dont les phases sont déposées, dont une tâche terminée s'annonce, et dont une intégration signale merged, pr_opened ou blocked — pas de sondage, pas de raclage. Les outils sont câblés automatiquement pour chaque agent pris en charge : Claude Code charge une configuration MCP par branche, Codex reçoit des surcharges mcp_servers par invocation, et Grok lit un .grok/settings.json cantonné au projet, écrit dans la copie de travail de la session (et exclu de son diff).