Un mod = un dossier avec 3 fichiers (plugin.json, hooks.json, register.ts). Il choisit ce qu'il affiche (ui), ce qu'il intercepte (hooks) et ce qu'il utilise ($).
▶ Les mods en 35 secondes
🖼️ Ce qu'on voit
| Brique | Type | Utilité |
|---|---|---|
| Pane | VISUEL | Volet, panneau latéral ou vue en direct. Ouvert par une action de l'utilisateur (commande tapée, bouton cliqué), il s'affiche à toute largeur. Ouvert sans demande, il attend 144 colonnes de terminal. |
| Band | VISUEL | Bandeau au-dessus du prompt (AbovePrompt) : une ligne d'info ou d'actions toujours sous les yeux. |
| Status line | VISUEL | Une entrée dans la barre d'état, posée par $.ui.status(text) depuis n'importe quel hook, effacée avec undefined. |
| Toast | VISUEL | Notification brève avec $.ui.toast(text), déclenchable depuis n'importe quel hook. |
🪝 Ce qu'on intercepte (hooks)
| Hook | Type | Utilité |
|---|---|---|
| tool.call | HOOK | Bloquer ({ deny }), réécrire ou observer le résultat d'un appel d'outil, outil par outil. |
| prompt.submit | HOOK | Modifier ou observer un prompt avant son envoi, avec next({ ...e, text }). |
| session.start | HOOK | S'exécute au début de la session (et à chaque rechargement du mod) : enregistrer une commande, ouvrir un volet, lancer un minuteur. |
| command.run | HOOK | Répond à une slash command déclarée avec $.command.register({ name, description }), en renvoyant { text }. |
| ui.render | HOOK | Dessine un élément (Pane, AbovePrompt…) à partir de Box, Text, Button, adaptés à la surface : terminal, desktop, vscode ou mobile. |
🧰 Ce qu'on utilise (capacités
$)| Capacité | Type | Utilité |
|---|---|---|
| $.state | API | Valeurs gardées pour la session, déclarées dans un contrat de types (types/index.d.ts), conservées au rechargement. |
| $.store | API | Valeurs conservées d'une session à l'autre. |
| $.clock | API | Travail sur minuteur : rafraîchir un volet, interroger périodiquement. |
| $.tool | API | Déclarer un outil que le modèle peut appeler. |
| $.agent | API | Déclarer un type de sous-agent. |
| $.model | API | Faire des appels au modèle depuis le mod. |
| $.fs | API | Lire et écrire des fichiers. |
| $.process | API | Lancer des processus. |
🚀 Créer son premier mod
- Chargez le skill
plugin-authoringdans Claude Code : il connaît l'API exacte de votre version. - Décrivez le mod voulu (un volet, un bandeau, un blocage d'outil…). Claude écrit un dossier avec
.claude-plugin/plugin.json,hooks/hooks.jsonethooks/register.ts. - À la première écriture, Claude Code vous demande :
Enable hot reloading for this session?. RépondezEnable for this session: le mod se charge à la fin du tour, puis se recharge à chaque modification. - Vérifiez avant chargement avec
claude plugin validate <dossier du mod>. Si vous avez refusé le rechargement à chaud, chargez le mod avecclaude --plugin-dir <dossier>.
Exemple minimal : un toast à chaque prompt envoyé
// hooks/register.ts
export function register(on) {
on('prompt.submit', async ($, e, next) => {
$.ui.toast('Prompt envoyé');
return next(e);
});
}
// hooks/hooks.json
{ "modules": ["./register.ts"] }
// .claude-plugin/plugin.json
{ "name": "mon-premier-mod", "version": "0.1.0", "description": "Toast à chaque prompt" }