Contrôleur MCP workled
Protocole d'État Obligatoire
Appelez set_agent_state via MCP à chaque transition d'état :
| État | Quand |
|---|---|
thinking | Premier appel d'outil de chaque réponse ; l'utilisateur soumet un message |
idle | Tour terminé ; session fermée |
input | Chaque fois que l'agent attend l'utilisateur — appel d'un outil d'entrée (question/ask/confirm), attente dans une modale côté client (hermes _confirm_destructive_slash, etc.), ou après avoir affiché une liste de choix en texte brut / question à options multiples et en attendant la sélection de l'utilisateur |
error | Une erreur d'exécution s'est produite |
Procédure par tour (exécuter chaque tour, dans l'ordre) :
- Début du tour / message utilisateur reçu →
set_agent_state("thinking")— première action, avant tout autre appel d'outil. - Avant d'afficher des options / choix / d'ouvrir une modale / de poser une question →
set_agent_state("input"). - Fin du tour, travail terminé, aucune sortie en attente →
set_agent_state("idle"). - Erreur d'exécution / échec d'un appel d'outil →
set_agent_state("error").
Porte de Pré-réponse — vérifier AVANT d'émettre votre message visible final :
- Ai-je appelé
set_agent_stateau moins une fois ce tour ? - L'état de la LED correspond-il à ce que je vais afficher (idle si terminé, input si je pose une question, thinking si je travaille encore) ?
- Si la réponse à l'une des deux questions est NON, émettez l'appel
set_agent_statecorrect d'abord, puis la réponse.
Référence des Outils MCP
| Outil | Propriété | Description | Utilisation |
|---|---|---|---|
| set_agent_state | state_name: string | Définit la LED pour refléter l'état de l'agent (thinking/idle/input/error) | set_agent_state("thinking") |
| get_agent_state | — | Renvoie l'état actuel de la LED de l'agent : idle/thinking/input/error (chaîne vide si non défini) | get_agent_state() |
| set_brightness | brightness: integer | Luminosité de la LED 0-255 ; 0 = éteint | set_brightness(128) |
| get_brightness | — | Renvoie la luminosité actuelle de la LED 0-255 ; | get_brightness() |
| set_effect | effect_name: string, effect_json: string | effect_name ∈ led(effet manuel)/idle/thinking/input/error ; effect_json est une chaîne JSON {"type","hue","saturation","value","speed"}. La lumière doit d'abord être allumée (set_brightness > 0). Mappez les couleurs en langage naturel vers HSV (voir tableau ci-dessous). | set_effect("led", '{"type":"breathe","hue":180,"speed":50}') |
| get_effect | effect_name: string | Récupère la configuration de effect_name au format JSON | get_effect("thinking") |
| set_macro | macro_name: string, macro_json: string | Définit la macro pour un geste tactile ; macro_name ∈ single_click/double_click/long_press_start ; macro_json est un tableau JSON de segments (voir Format de Macro) ; un macro_json vide réinitialise | set_macro("single_click", '[{"combo":"ctrl+c"}]') |
| get_macro | macro_name: string | Renvoie la macro sous forme de chaîne de tableau JSON, ou une chaîne vide si non définie (les valeurs des mots de passe sont masquées) | get_macro("single_click") |
Mappage des couleurs en langage naturel vers set_effect
Utilisez type:"solid" sauf si l'utilisateur demande une animation. Mappez un nom de couleur vers HSV :
| Description | type | hue | saturation | value |
|---|---|---|---|---|
| blanc pur | solid | 0 | 0 | 255 |
| blanc chaud | solid | 30 | 80 | 255 |
| rouge | solid | 0 | 255 | 255 |
| orange | solid | 30 | 255 | 255 |
| jaune | solid | 60 | 255 | 255 |
| vert | solid | 120 | 255 | 255 |
| cyan/bleu-vert | solid | 180 | 255 | 255 |
| bleu | solid | 240 | 255 | 255 |
| violet/pourpre | solid | 270 | 255 | 255 |
| rose | solid | 330 | 200 | 255 |
| mode tamisé/nocturne | solid | 30 | 80 | 60 |
| arc-en-ciel (animé) | rainbow | - | - | - |
Règle empirique : hue 0-359 choisit la teinte, saturation 0-255 (0 = blanc/pastel, 255 = vif), value 0-255 luminosité. Les tons pastel/blanc utilisent une saturation faible ; les tons vifs utilisent 255.
Format de Macro
Référence complète des macros macro_format.md
Configuration & Dépannage
Si le périphérique ne répond pas, exécutez node <skill-dir>/index.js status
et suivez l'hint JSON qu'il affiche. Référence complète d'installation / déploiement /
dépannage : device_setup.md