Aide-mémoire harnais d'agent : composants, fichiers, problèmes et liste de contrôle au lancement
Le harnais d'un agent se compose de cinq sous-systèmes : instructions, outils, environnement, état et retour d'information. L'ensemble minimal de fichiers comprend un AGENTS.md faisant office de routeur court, un script de vérification (make check, verify.sh), un fichier d'avancement et une liste de fonctionnalités avec leur statut ; le statut d'achèvement est attribué par un script, et non par l'agent.
Les cinq sous-systèmes du harnais
| Sous-système | Ce que c'est | Artefacts | Signe de panne |
|---|---|---|---|
| Instructions | Ce que l'agent doit savoir sur le projet | AGENTS.md / CLAUDE.md, skills, docs/, ADR | Enfreint les conventions connues |
| Outils | Ce que l'agent peut faire | shell, tests, linter, navigateur, serveurs MCP | « Veut mais ne peut pas » |
| Environnement | Où l'agent travaille | fichiers de verrouillage, Docker/devcontainer, git worktree, bac à sable, init.sh | La session commence par la réparation de l'environnement |
| État | Ce qui survit à un redémarrage | PROGRESS.md, DECISIONS.md, feature_list.json, commits | Une nouvelle session ne sait pas où les choses en étaient |
| Retour d'information | Comment l'agent apprend son erreur | make check, E2E, hooks, arch-check, évaluateur | « Terminé », mais ça ne marche pas |
Ordre de construction à partir de zéro : retour d'information → instructions → état → environnement → outils.
Fichiers du harnais
| Fichier | Rôle | Règle |
|---|---|---|
| AGENTS.md / CLAUDE.md | Point d'entrée : de quoi il s'agit, comment lancer le projet, comment le vérifier | Un routeur court (environ 80 lignes) avec des renvois vers les documents assortis de la condition « quand le lire » |
| docs/*.md | Détails par thème | Lus au besoin, pas en entier |
| .claude/skills/*/SKILL.md | Procédures répétitives (déploiement, revue) | Chargés lorsque la tâche correspond à leur description |
| PROGRESS.md | État, travail accompli, blocages, prochaines étapes | Mis à jour à la fin de chaque session |
| DECISIONS.md | Décision, raison, options écartées | Consigner le chemin suivi, pas seulement la conclusion |
| feature_list.json | Fonctionnalités : comportement, vérification, état | Exactement une fonctionnalité active (WIP=1) |
| scripts/verify.sh | Vérifie une fonctionnalité et la fait passer à passing | Seul habilité à attribuer passing, avec le SHA du commit |
| scripts/arch-check.sh | Frontières d'architecture | Code de sortie 1 + POURQUOI et CORRECTION dans la sortie |
| scripts/init.sh | Vérification de l'environnement avant le travail | Environnement, git propre, make check vert, une fonctionnalité active |
| contrat de sprint | Contrat sur une fonctionnalité avant le code | Dans le périmètre / hors périmètre / questions ouvertes |
| .claude/settings.json | Permissions et hooks de Claude Code | Vérifications sur événements, non dans la mémoire de l'agent |
Squelette d'AGENTS.md
# Projet : backend de paiement (FastAPI, PostgreSQL)
## Lancer
docker compose up -d && ./scripts/init.sh
## Vérifier
make check # lint, types, unitaires, arch-check
make e2e # scénarios de bout en bout
## Definition of Done
- make check et make e2e — code 0
- fonctionnalité passée à passing par le script scripts/verify.sh
- PROGRESS.md mis à jour
## MUST
- requêtes vers la base uniquement via les repositories
- secrets uniquement depuis les variables d'environnement
## Documents
- docs/payments.md — lorsque la tâche touche aux paiements et aux remboursements
- docs/migrations.md — lorsque le schéma de la base change
États d'une fonctionnalité
| État | Signification | Qui le modifie |
|---|---|---|
| pending | En file d'attente | Planificateur |
| active | En cours (une seule à la fois) | Agent au démarrage |
| passing | Vérification réussie | Seul verify.sh |
| blocked | Nécessite une décision humaine | Agent, avec la description de la raison |
Niveaux de vérification
| Niveau | Quoi | Quand |
|---|---|---|
| 1 | Lint, types | Toujours |
| 2 | Tests unitaires et d'intégration | Toujours |
| 3 | E2E | Modification touchant plus d'une couche ; avant « terminé » |
| 4 | arch-check | Nouveaux imports entre couches |
Le droit de dire « terminé » n'existe qu'après le niveau le plus élevé. Des tests unitaires verts ne valent pas achèvement.
Rendre les règles mécaniques
| Niveau | Outil | Coût |
|---|---|---|
| Garde-fou grep | Script qui cherche un motif et affiche POURQUOI/CORRECTION | Quelques minutes |
| Règle de linter | import-linter (Python), dependency-cruiser, eslint-plugin-boundaries (JS/TS) | Une heure |
| Test d'architecture | Test en CI qui échoue si les couches sont violées | Plus lourd, mais visible dans make check |
#!/usr/bin/env bash
fail=0
if grep -rn "from app.db" app/services/; then
echo "POURQUOI : les services n'accèdent pas directement à la base"
echo "CORRECTION : utilisez un repository de app/repositories/"
fail=1
fi
exit $fail
Problèmes courants et solutions
| Problème | Sous-système | Solution |
|---|---|---|
| Une règle de CLAUDE.md n'est pas respectée | Instructions | Raccourcir le fichier, transformer la règle en vérification ou en hook |
| L'agent ne peut pas lancer les tests | Outils | Autoriser la commande, installer les dépendances dans l'image |
| Comportements différents selon les machines | Environnement | Fichiers de verrouillage, Docker/devcontainer, versions d'exécution figées |
| Amnésie entre les sessions | État | PROGRESS.md, passation de session, lecture au démarrage |
| Trois fonctionnalités commencées, aucune terminée | État | WIP=1 dans feature_list.json |
| « Terminé », mais ça ne marche pas | Retour d'information | DoD, E2E, verify.sh, évaluateur indépendant |
| Les tests sont verts, la fonctionnalité est cassée | Retour d'information | E2E avec vraie base et vraie configuration |
| L'agent reprend de mauvais motifs | Retour d'information | arch-check dès le premier jour |
| On ne sait pas ce que l'agent a fait | État | Petits commits, compte rendu dans PROGRESS.md, DECISIONS.md |
| L'agent a cassé l'environnement pendant la nuit | Environnement | Bac à sable, git worktree, points de contrôle, retour arrière via init.sh |
| Le même commentaire de revue deux fois | Harnais en général | Le transformer en vérification dans make check, retirer le texte des instructions |
Rôles pour les tâches longues
| Rôle | Fait | Ne fait pas |
|---|---|---|
| Planificateur | Fonctionnalités avec critères d'acceptation | N'écrit pas de code |
| Générateur | Implémente une fonctionnalité, lance les tests | Ne décide pas si elle est terminée |
| Évaluateur | Verdict selon une grille, avec renvoi à un fichier, une ligne ou un journal | Ne voit pas les raisonnements du générateur |
| Fusion | Commit lorsque review == pass | C'est du code, pas un agent |
Budget du travail autonome
- L'objectif tient en une phrase (par exemple : faire passer toutes les fonctionnalités en passing).
- WIP=1, une limite de temps et de tentatives par fonctionnalité.
- La métrique croît de façon monotone ; une régression entraîne un retour arrière immédiat.
- Migrations, infrastructure, argent : escalade vers un humain.
- Après plusieurs revues échouées, reprendre la fonctionnalité avec un contexte propre.
Liste de contrôle au lancement de l'agent
- Un AGENTS.md existe : pile technique, démarrage, commande de vérification, DoD.
- make check réussit sur un clone propre.
- L'environnement est reproductible : fichiers de verrouillage, Docker ou devcontainer.
- L'agent dispose des commandes nécessaires ; les commandes dangereuses sont interdites ou placées dans un bac à sable.
- Il existe un test E2E au moins pour le scénario principal.
- Il existe un PROGRESS.md et une règle imposant de le lire au début de la session.
- Les fonctionnalités figurent dans une liste avec leur statut, une seule est active.
- Le statut passing est attribué par un script.
- Les messages de vérification contiennent POURQUOI et CORRECTION.
- La tâche est formulée avec des critères d'acceptation et des limites de périmètre.
- Ce qui exige une décision humaine est défini.
- L'écart de vérification a été mesuré avant les modifications, pour servir de référence.
Métriques du harnais
| Métrique | Mode de calcul |
|---|---|
| Écart de vérification | Part des « terminé » non confirmés par une vérification, sur 10 tâches |
| MTTR | Temps entre la panne et le rétablissement d'un état de travail |
| Démarrage à froid | La nouvelle session répond-elle à « où en sommes-nous, quelle est la suite » sans deviner |
| Ablation | Chute lorsqu'un sous-système est désactivé sur un ensemble fixe de tâches |
En bref
Le harnais est une boucle, non un fichier : instructions, outils, environnement, état et retour d'information. Commencez par les vérifications, gardez AGENTS.md court, confiez le statut d'achèvement à un script et révisez le harnais régulièrement. Tout cela est assemblé dans son ensemble sur un projet de bout en bout dans le cours sur le harness engineering.
Questions fréquentes
En quoi AGENTS.md diffère-t-il de CLAUDE.md ?
Par leur fonction, ce sont la même chose : un fichier d'instructions pour l'agent. CLAUDE.md est lu par Claude Code, AGENTS.md est un format commun à plusieurs agents ; dans CLAUDE.md, il suffit de faire référence à AGENTS.md.
Combien de lignes doit comporter AGENTS.md ?
Il n'y a pas de limite stricte, mais le fichier d'entrée doit rester court — une centaine de lignes environ, comme une table des matières. Les détails sont déplacés dans des documents séparés.
Ai-je besoin de feature_list.json pour un petit projet ?
Pas pour de simples corrections ponctuelles. Il devient utile lorsque l'agent enchaîne plusieurs fonctionnalités ou travaille sur plusieurs sessions.
Où conserver les secrets auxquels l'agent doit accéder ?
Dans les variables d'environnement ou un gestionnaire de secrets, pas dans les fichiers d'instructions ni dans le code. On donne à l'agent accès à l'environnement, non aux valeurs écrites dans le texte.
Ce sujet est traité en détail avec de la pratique dans le cours « Harness Engineering: инженерия надёжности AI-агентов ».
- Из чего состоит harness AI-агента: инструкции, инструменты, среда, состояние, обратная связь
- Харнес AI-агента с нуля: AGENTS.md, feature_list.json, verify.sh и автономный цикл