Rappelle l'outillage de ce dépôt à chaque sous-agent, en tête de son prompt.

hooks/register.ts 32 lines1// Mod outillage : rappelle l'outillage de ce dépôt à chaque sous-agent, à son lancement.
2//
3// LE TEXTE VIENT DU SCRIPT : `scripts/rappel.sh` décide de ce que le sous-agent reçoit, et se
4// tait hors du dépôt ; le mod lance le script par `$.commande.lancer` et transporte sa sortie.
5//
6// LES SOUS-AGENTS SEULS : la session principale lit l'outillage par `.claude/CLAUDE.md`. Le
7// rappel passe par le `prompt` du sous-agent, réécrit avant `next` : `$.session.append` ne peut
8// pas viser le sous-agent avant, son `agentId` n'existe qu'après.
9//
10// ÉCHEC OUVERT : un script qui échoue se dit sur la ligne d'état, par le mod commun ; une erreur
11// du hook lui-même, par le `.catch` de son enregistrement. Le sous-agent démarre dans les deux cas.
12import type { Register } from 'claude-code'
13
14const RAPPEL = '.claude/skills/outillage/scripts/rappel.sh'
15
16/** Pose le hook du mod : le rappel d'outillage en tête du prompt d'un sous-agent. */
17export const register: Register = on => {
18 on('agent.spawn', async ($, e, next) => {
19 const racine = await $.session.root()
20 const texte = await $.commande.lancer({
21 argv: [`${racine}/${RAPPEL}`],
22 cwd: racine,
23 source: 'outillage',
24 })
25 return next(texte ? { ...e, prompt: `${texte}\n\n---\n\n${e.prompt}` } : e)
26 }).catch(($, e, next) => {
27 // `next.error` est un constat du moteur : son motif est dans `message`.
28 $.ui.status(`outillage : ${(next.error.message ?? next.error.kind).slice(0, 60)}`)
29 return next(e)
30 })
31}
32