turn-eta — indiquez quand ce tour sera terminé, puis apprenez de ce qu'il a fallu
Avant que le travail ne commence, écrivez les étapes sous forme de liste numérotée et dites à quelle heure ce sera terminé. Chronométrez chaque étape lorsqu'elle se termine. Lorsque le tour se termine, fermez la réponse avec l'heure réelle de fin. L'estimation suivante lit ce journal.
Quand cela s'exécute
Chaque tour qui contient du travail réel — modifier un fichier, exécuter une commande, chercher dans la base de code.
- Travail dans le tour → appelez
planavant de commencer et ouvrez votre réponse avec ce qu'il affiche, dans l'ordre où il l'affiche : la ligne**ETA …**en premier, seule, puis les étapes numérotées. L'heure de fin est ce que le lecteur attendait ; les étapes ci-dessous sont le raisonnement qui la justifie. Appelezstep <id>à chaque étape qui se termine, etdone <id>lorsque le travail du tour est terminé. - Le dernier paragraphe est aussi une heure, et cette heure dépend du fait que quelque chose est encore en cours d'exécution.
- Tout est terminé avant que vous écriviez la réponse → le bloc
doneentier s'affiche : la ligne de fin dedone. À ce moment-là, l'ETA a expiré ; le réafficher donne au lecteur une estimation que l'horloge a déjà démentie, tandis que les temps par étape montrent où cela a déraillé. - Quelque chose est toujours en cours d'exécution (une tâche en arrière-plan, une tâche déléguée) → la prévision :
**ETA 17:45**. Recalculez-la au moment où vous écrivez, ne collez jamais le nombre queplana affiché plus tôt.
- Tout est terminé avant que vous écriviez la réponse → le bloc
- Tour de conversation uniquement (répondre à une question, décider quoi construire) → ne faites rien. C'est du bruit.
- Une correction d'une ligne ne mérite pas non plus cette cérémonie. Utilisez-la lorsqu'il y a plus d'une étape.
Commandes
Node pur, pas d'installation. Appelez-le depuis l'endroit où la compétence est installée.
# avant le travail — nommez les étapes et obtenez une ETA
node <skill>/scripts/eta.js plan \
"reproduire l'échec" "corriger l'analyseur de dates" "mettre à jour les fixtures" "relancer la suite" \
--provider anthropic --model claude-opus-5 --size M
# **ETA 17:45** (14 min)
#
# 1. reproduire l'échec
# 2. corriger l'analyseur de dates
# 3. mettre à jour les fixtures
# 4. relancer la suite
#
# 4 étapes, ~14 min (3.5 min/étape de anthropic/claude-opus-5 M, 6 tours)
#
# (les 6 dernières estimations ont duré 3 min de plus)
# id du tour : 48i35qek
# chaque fois qu'une étape se termine — mesurée, et le reste est ré-estimé à partir du rythme mesuré
node <skill>/scripts/eta.js step 48i35qek
# 2/4 corriger l'analyseur de dates — 8m 06s
#
# **ETA 17:49** (4 min plus tard)
# lorsque le travail du tour est terminé
node <skill>/scripts/eta.js done 48i35qek
# **TERMINÉ 17:48** (estimé 14 min / réel 17 min)
# ce que dit le journal maintenant
node <skill>/scripts/eta.js stats
Nommez les étapes, ne les comptez pas simplement. plan refuse un simple nombre. Un nombre que personne ne peut vérifier n'est pas un plan — les étapes nommées permettent à la personne qui lit de dire "saute 3" avant que vous ne commenciez. Mettez cette liste numérotée en haut de votre réponse, puis effectuez le travail.
Vous devez passer votre propre --provider et --model. Un shell ne peut pas voir quel modèle le pilote. Utilisez les identifiants que vous connaissez vous-même — --provider anthropic --model claude-opus-5, --provider openai --model gpt-5-codex, --provider google --model gemini-3-pro. Tout ce qui manque atterrit sous unknown/unknown, qui fonctionne toujours mais regroupe tous les modèles ensemble.
--size est S (petite correction), M (normal, par défaut) ou L (gros morceau). Une approximation est suffisante ; cela empêche seulement les petits tours de tirer la moyenne des grands vers le bas.
L'id du tour est obligatoire. plan en affiche un ; transportez-le à travers chaque step et le done final — step 48i35qek, done 48i35qek. Un autre agent travaillant dans le même projet écrit dans le même journal, donc un appel sans id fermait auparavant le tour qui était ouvert — celui de quelqu'un d'autre. step et done refusent maintenant sans cela. Un tour que personne n'a touché depuis quatre heures est considéré comme abandonné.
Où se trouve le journal
<racine du projet>/.eta/<fournisseur>/<modèle>/log.tsv
À l'intérieur du projet, afin qu'un agent dont les permissions s'arrêtent à son répertoire de travail puisse toujours lire son propre historique. La racine du projet est le .git le plus proche en remontant, sinon le répertoire courant. Le fournisseur et le modèle sont des dossiers, de sorte que le rythme d'un modèle ne devient jamais silencieusement celui d'un autre.
Ajoutez .eta/ à .gitignore. C'est une mesure de votre machine sur vos tours ; cela ne signifie rien pour personne d'autre et cela change à chaque tour.
Définissez TURN_ETA_DIR sur un autre répertoire .eta pour partager l'historique entre les projets. Il n'est consulté que lorsque le journal local est trop maigre pour dire quoi que ce soit.
Comment l'estimation s'améliore
done enregistre l'estimation, le réel et les temps par étape. plan les relit et prend la médiane des minutes par étape, en parcourant l'échelon le plus étroit vers l'extérieur et en s'arrêtant au premier échelon avec au moins 3 tours terminés :
- ce fournisseur + modèle + même taille
- ce fournisseur + modèle
- ce fournisseur, n'importe quel modèle
- tout dans le
.etade ce projet - le journal partagé dans
TURN_ETA_DIR, même ordre - sinon 4 minutes par étape
Médiane plutôt que moyenne, afin qu'un tour qui a duré longtemps ne tire pas toutes les estimations futures avec lui. Seuls les 20 derniers tours par échelon comptent. plan affiche l'échelon qu'il a utilisé, donc le nombre n'est jamais un mystère.
En cours de tour, step mélange cet historique avec le rythme que ce tour prend réellement, pondéré par la proportion du tour déjà effectuée : à l'étape 1 sur 4, l'historique porte encore les trois quarts, à l'étape 3, ce tour porte les trois quarts. Une première étape lente déplace l'heure de fin sans la détourner.