Human in the Loop
Couche d'interfaces éphémères entre le propriétaire et l'agent. L'agent décrit ce que le propriétaire doit examiner et décider, le script construit une page HTML autonome, le propriétaire répond dans le navigateur dans n'importe quel ordre et renvoie un JSON. La page n'est pas écrite à la main : seulement spec.json et scripts/build.py.
$SKILL ci-dessous désigne le dossier de ce fichier.
Quand utiliser
- Document à approuver : spec, PRD, proposition, plan. Statut par sections, modification du texte sur place, réponses aux questions ouvertes.
- Choix parmi des variantes pour plusieurs questions à la fois, chaque question ayant des options de l'agent et une réponse libre.
- Étiquetage en aveugle d'un étalon : le propriétaire répond, les réponses du modèle se trouvent dans un fichier séparé et ne sont pas incluses dans la page, puis
score.pycalcule la correspondance. - Évaluation de propositions sur une échelle.
Si la question est unique ou double, demande-la dans le chat.
Cycle
- Spec. Construis
spec.json(format :references/spec-format.md). Pour un document Markdown, il existe un modèle :python3 $SKILL/scripts/from_markdown.py doc.md --options options.json -o spec.json(les sections##et###deviennent des blocs avec édition, la section « Questions ouvertes » devient des questions avec les options deoptions.json). Pour l'étiquetage en aveugle, place les réponses cachées dans unsidecar.jsonséparé, elles ne doivent pas apparaître dansspec.json. - Page.
python3 $SKILL/scripts/build.py spec.json -o page.htmlconstruit et ouvre la page. Placespecet la page à côté du projet (par exemple dansprivate/), pas dans le scratchpad, afin que le propriétaire puisse y revenir. Dis au propriétaire en une ligne ce qui est ouvert et ce que tu attends de lui. - Le propriétaire répond puis insère le JSON dans le chat (bouton « Copier le JSON pour l'agent »). Le JSON contient uniquement ce qu'il a touché :
status,comment,markdown_old/markdown_new,answers,notes, plusdecisionetgeneral_comment. - L'agent applique les réponses en fonction du champ
taskdu JSON et rend compte de ce qu'il a modifié et de ce qui reste. Undecisionvide alors que des boutons de décision existent signifie que la décision n'a pas été prise : redemande, ne considère pas le document comme approuvé. Pour l'étiquetage : sauvegarde le JSON et exécutepython3 $SKILL/scripts/score.py labels.json sidecar.json --spec spec.json. Affiche les divergences au propriétaire sous forme de liste ; ne corrige pas toi-même les erreurs d'étiquetage.
Si le spec change, la page est reconstruite avec la nouvelle version ; les anciennes réponses dans le navigateur ne s'y appliquent pas.
Vérification
python3 $SKILL/tests/selftest.py [dossier] construit les deux exemples du dossier examples/, les parcourt dans un Chromium sans tête et vérifie les exportations. Lance-le après toute modification du modèle ou des scripts.