baton

Coordonnez des agents de codage sur un projet local partagé avec propriété des tâches, revendication de fichiers, points de contrôle Git, transferts de contexte, revue indépendante et récupération.

Qu'est-ce que baton ?

Baton est une compétence pour agents d'IA (Codex, Claude Code, Antigravity) qui transforme un projet local en espace de travail collaboratif structuré. Elle fournit un registre de tâche faisant autorité via un moteur Python embarqué, permettant aux agents de revendiquer la propriété de fichiers, de réaliser des points de contrôle Git, de transférer le contexte entre eux et de soumettre des revues indépendantes. Le moteur gère l'initialisation des tâches, les handoffs atomiques, la récupération après échec et la fusion ou la publication conditionnelle. Baton ne démarre pas de daemon ni ne détecte automatiquement les limites d'utilisation du modèle : toutes les actions sont déclenchées par des commandes explicites de l'utilisateur ou de l'agent via `/baton` ou `$baton`. Cette approche garantit une coordination déterministe et sécurisée, en respectant les autorisations préalables et en empêchant les actions non autorisées telles que les publications sur des dépôts distants. La compétence est idéale pour les flux de travail multi-agents complexes où la traçabilité, la visibilité et la reprise contrôlée sont essentielles.

Compatible avec✓Claude Code✓Codex CLI~Cursor✓Antigravity
npx skills add https://github.com/Harshit1garg1/Baton/tree/HEAD/skills/baton

Installed? Explore more Développement et programmation skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait baton ?

Utilisez le moteur Python fourni comme registre de tâche local faisant autorité. Exécutez les commandes explicitement ; cette compétence ne démarre pas de démon, ne détecte pas les limites d'utilisation du modèle et ne contacte pas d'autres agents automatiquement.

Interpréter les actions de chat

Les utilisateurs invoquent normalement cette compétence dans le chat, comme /baton handover TASK-01 to pc1-codex, $baton continue TASK-01, ou /baton:baton status, selon l'hôte. Interprétez les mots restants comme une demande d'action et exécutez la commande moteur correspondante pour l'utilisateur. Il s'agit de demandes adressées à cette seule compétence, et non de commandes enregistrées séparément ou de commandes terminal.

Action demandéeAction moteur
initAmorcer si nécessaire ; inspecter le projet ; InitFresh seulement pour un nouveau tableau.
joinJoinExisting.
status, tasks, packet TASKStatus, Tasks, WebPacket.
add TASK "Titre" with files ...AddTask, avec dépendances le cas échéant.
start TASK, claim TASKSilentHandshake ; utiliser --git-branch pour le travail Git et un worktree isolé si demandé. Ensuite, implémenter seulement si l'utilisateur a demandé une implémentation.
checkpoint TASK with message ...Checkpoint ; ajouter --push uniquement dans le cadre de l'autorisation de téléversement de l'utilisateur.
progress TASK to 60 percentUpdateProgress, avec un chiffre de progression véridique et des notes.
handover TASK to AGENT, handoff TASK to AGENTAtomicHandoff ; inclure l'invite actuelle, les modifications et le travail restant de la conversation.
continue TASK, resume TASKCheckOrContinue ; agir sur sa décision de propriété avant d'éditer.
done TASKExécuter les vérifications de projet pertinentes, puis Done lorsque l'implémentation est prête.
review TASKInspecter les modifications épinglées et les vérifications pertinentes en tant qu'agent différent, puis SubmitReview.
reopen TASK, merge TASK, release TAG, revert TASK, recover TAGReopenTask, MergeTask, ReleaseTag, RevertTask, RecoverTag respectivement.
release files ... from TASKReleaseFiles pour les revendications spécifiées.
resolve recoveryResolveRecovery ; conserver le travail non résolu et son journal si refusé.
abandon recoveryResolveRecovery --abandon-recovery seulement lorsque l'abandon est explicitement demandé. Signaler les réparations restantes.
selftestSelfTest.
reset workspaceResetWorkspace --confirm-reset uniquement pour une réinitialisation explicite autorisée par le chef.

Résoudre les identifiants de tâche et les chemins à partir de la demande et du tableau actuel. Demander les informations réellement manquantes, comme la clé d'un nouveau projet ou une identité de collaborateur ambiguë. Toujours passer l'identifiant de collaborateur de cette conversation explicitement aux actions moteur qui en nécessitent un ; un autre agent peut avoir changé l'identifiant sauvegardé de la session locale partagée. Respecter l'autorisation antérieure dans la conversation. MergeTask et ReleaseTag tentent un téléversement distant, ne pas les utiliser contre un dépôt distant configuré lorsque la demande de l'utilisateur interdit le téléversement.

Configurer un projet

Prérequis : Python 3.10+ et Git. Sélectionner un interpréteur Python 3 disponible (python3, python, ou py -3 sur Windows) ; ne pas supposer que l'alias Windows python3 fonctionne.

Avant la première commande moteur dans un projet, localiser le script scripts/bootstrap.py de cette compétence et l'exécuter avec l'interpréteur choisi et --project <chemin-absolu-du-projet>. Il copie le moteur fourni dans .collab/collab_engine.py et ajoute /.collab/ au .gitignore du projet. Il n'initialise pas le registre et ne remplace pas un moteur existant différent. Résoudre une mise à niveau séparément si elle est refusée.

Les commandes ci-dessous s'exécutent depuis la racine du projet. Remplacer python3 par l'interpréteur sélectionné si nécessaire. Pour les tâches basées sur Git, vérifier d'abord que le projet est un dépôt Git avec un commit de base et une identité Git configurée. Utiliser sa branche de base réelle avec --base-branch <branche> lorsqu'elle n'est pas main.

Établir la propriété avant d'éditer

  1. Exécuter Status. Rejoindre l'espace de travail initialisé avec un identifiant de collaborateur distinct ; obtenir la clé du projet via le contexte local autorisé de l'utilisateur. Pour un nouvel espace de travail, utiliser InitFresh avec le chef choisi et une clé de projet. Garder la clé et la session locale hors de Git.
  2. Ajouter une tâche avec ses chemins de fichiers prévus et ses dépendances si elle n'existe pas.
  3. Exécuter SilentHandshake avant d'éditer. Un BUSY_REDIRECT est un refus de revendiquer cette tâche ; choisir une alternative éligible. Utiliser --use-worktree pour les tâches simultanées avec branche partageant le même projet.
  4. Point de contrôle (Checkpoint) sur les progrès significatifs. Lors du transfert de propriété, utiliser AtomicHandoff ; l'agent récepteur exécute CheckOrContinue. Un agent qui a transféré doit respecter SKIP_ALREADY_HANDED_OFF.
  5. Exécuter Done lorsque l'implémentation est prête, puis faire examiner le commit épinglé par un agent différent. Une véritable revue signifie inspecter les modifications et les vérifications pertinentes avant de soumettre le verdict.

Respecter le périmètre de l'utilisateur et l'autorisation existante pour les commits, téléversements, fusions et publications. L'approbation par un pair n'autorise pas en soi une publication externe. N'envoyer aucun message à d'autres agents ou personnes sans autorisation ; les enregistrements de transfert peuvent être consommés par l'agent suivant lorsqu'il s'exécute.

Commandes moteur

Préfixer chaque ligne avec python3 .collab/collab_engine.py --local-path .. Fournir un --collaborator-id <agent> stable le cas échéant.

ActionArguments et comportement
InitFresh--project-key <clé> --collaborator-id <chef> ; refuse un registre existant.
JoinExisting--project-key <clé> --collaborator-id <agent> --device-cluster-id <cluster> --same-device true pour une collaboration sur le même PC.
Status / TasksInspecter la propriété, la progression et la livraison. Status accepte --render-format CLI ou Markdown.
AddTask--task-id T1 --task-title "Implémenter la fonctionnalité" --files src/feature.py ; optionnel --depends-on T0.
SilentHandshake--task-id T1 --collaborator-id <propriétaire> --git-branch ; optionnel --use-worktree.
Checkpoint--task-id T1 --collaborator-id <propriétaire> --commit-message "point de contrôle : progrès significatif" ; optionnel --push. Valide les fichiers actuellement possédés.
ReleaseFiles--task-id T1 --collaborator-id <propriétaire> --files <chemins> pour la libération intentionnelle de revendication.
AtomicHandoff--task-id T1 --collaborator-id <propriétaire> --target-agent-id <récepteur> --reason "Continuer l'implémentation" ; ajouter du contexte avec --last-prompt, --changes-summary, --remaining-todo ; optionnel --push.
CheckOrContinue--task-id T1 --collaborator-id <agent> ; charger le transfert ou respecter la garde de reprise-skip.
Done--task-id T1 --collaborator-id <propriétaire> ; épingle un travail propre pour revue ; optionnel --push.
SubmitReview`--task-id T1 --collaborator-id --review-verdict APPROUVÉ
ReopenTask--task-id T1 --collaborator-id <propriétaire-ou-chef> pour réviser un travail en attente ou annulé.
MergeTask--task-id T1 --collaborator-id <agent> --squash ; tente un push. Utiliser --use-worktree pour préserver le checkout partagé d'une autre tâche ; --reapply réapplique explicitement le travail annulé.
ReleaseTag--tag v1.0.0 --tag-message "Jalon accepté" --collaborator-id <agent> ; étiquette la branche de base vérifiée et tente le téléversement.
RevertTask--task-id T1 --collaborator-id <agent> ; crée un commit d'annulation ; optionnel --push et --use-worktree.
RecoverTag--tag v1.0.0 --recovery-branch recover/v1.0.0 pour créer une branche à partir d'un jalon.
ResolveRecoveryRésoudre seulement après réparation du checkout affecté. --abandon-recovery archive explicitement le journal et liste les réparations manuelles ; il n'effectue pas ces réparations.
SelfTestExécuter la suite de 42 étapes du moteur dans des fixtures jetables.

Pour une tâche basée sur une branche utilisant un worktree, éditer et exécuter les vérifications de projet à l'intérieur du worktreePath enregistré de la tâche.

Limites et récupération

  • Les revendications sont des vérifications coopératives au niveau du moteur ; les éditeurs et les commandes Git arbitraires peuvent les contourner. Les identifiants de collaborateur sont des étiquettes, pas des identités authentifiées.
  • Le tableau d'un PC est l'autorité locale. Des PC séparés utilisent des branches et la synchronisation Git ; les répliques de tableau synchronisées ne fournissent pas de verrou distribué. Ne pas traiter un dossier partagé de disque comme un registre transactionnel partagé.
  • --backup-path <dossier-local-synchronisé> écrit un instantané unidirectionnel du tableau. Le client de synchronisation gère le téléversement cloud ; le moteur n'a pas d'adaptateur natif pour Drive, OneDrive ou TeraBox.
  • L'approbation de la revue marque la tâche comme terminée et libère ses revendications ; la fusion/livraison vérifiée est une opération distincte. Signaler LIVRAISON : COMPLÈTE uniquement lorsque le moteur vérifie le push distant ; conserver LOCAL_ONLY ou INCOMPLETE lorsqu'il est retourné.
  • Si la récupération signale UNRESOLVED, conserver le journal et les fichiers locaux. Inspecter le checkout nommé, sauvegarder les modifications pertinentes et réessayer après nettoyage. Ne pas utiliser l'abandon comme substitut à la préservation des fichiers.
  • ResetWorkspace archive le tableau et nécessite l'identité du chef plus --confirm-reset ; l'utiliser seulement lorsque la réinitialisation de l'espace de travail fait partie de la demande de l'utilisateur.

La compétence nécessite un agent de codage avec accès au système de fichiers et au shell. Utiliser l'invocation de compétence réelle de l'hôte ; /baton n'est pas une commande de terminal ou d'API de chat universellement enregistrée.

Skills associés