O que workled MCP Controller faz?
Protocolo de Estado Obrigatório
Chame set_agent_state via MCP em toda transição de estado:
| Estado | Quando |
|---|---|
thinking | Primeira chamada de ferramenta de cada resposta; usuário envia uma mensagem |
idle | Turno finalizado; sessão encerrada |
input | Qualquer momento em que o agente esteja esperando o usuário — chamando uma ferramenta de entrada (question/ask/confirm), dentro de um modal do lado do cliente (hermes _confirm_destructive_slash, etc.), ou após renderizar uma lista de opções em texto simples / pergunta de múltipla escolha e aguardar a escolha do usuário |
error | Ocorreu um erro em tempo de execução |
Procedimento por turno (execute todo turno, em ordem):
- Turno iniciando / mensagem do usuário recebida →
set_agent_state("thinking")— primeira ação, antes de qualquer outra chamada de ferramenta. - Antes de renderizar opções / escolhas / abrir qualquer modal / fazer uma pergunta →
set_agent_state("input"). - Fim do turno, trabalho concluído, sem saída pendente →
set_agent_state("idle"). - Erro em tempo de execução / falha de chamada de ferramenta →
set_agent_state("error").
Verificação Pré-Resposta — verifique ANTES de emitir sua mensagem visível final:
- Eu chamei
set_agent_statepelo menos uma vez neste turno? - O estado do LED corresponde ao que estou prestes a mostrar (idle se concluído, input se perguntando, thinking se ainda trabalhando)?
- Se qualquer resposta for NÃO, emita a chamada correta de
set_agent_stateprimeiro, depois a resposta.
Referência de Ferramentas MCP
| Ferramenta | Propriedade | Descrição | Uso |
|---|---|---|---|
| set_agent_state | state_name: string | Define o LED para refletir o estado do agente (thinking/idle/input/error) | set_agent_state("thinking") |
| get_agent_state | — | Retorna o estado atual do LED do agente: idle/thinking/input/error (string vazia se não definido) | get_agent_state() |
| set_brightness | brightness: integer | Brilho do LED 0-255; 0 = desligado | set_brightness(128) |
| get_brightness | — | Retorna o brilho atual do LED 0-255; | get_brightness() |
| set_effect | effect_name: string, effect_json: string | effect_name ∈ led(efeito manual)/idle/thinking/input/error; effect_json é uma string JSON {"type","hue","saturation","value","speed"}. A luz deve estar ligada primeiro (set_brightness > 0). Mapeie cores em linguagem natural para HSV (veja tabela abaixo). | set_effect("led", '{"type":"breathe","hue":180,"speed":50}') |
| get_effect | effect_name: string | Obtém a configuração de effect_name como JSON | get_effect("thinking") |
| set_macro | macro_name: string, macro_json: string | Define a macro para um gesto no touch pad; macro_name ∈ single_click/double_click/long_press_start; macro_json é um array JSON de segmentos (veja Formato de Macro); macro_json vazio redefine | set_macro("single_click", '[{"combo":"ctrl+c"}]') |
| get_macro | macro_name: string | Retorna a macro como uma string de array JSON, ou string vazia se não definida (valores de senha mascarados) | get_macro("single_click") |
Mapeamento de cores em linguagem natural para set_effect
Use type:"solid" a menos que o usuário peça uma animação. Mapeie um nome de cor para HSV:
| Descrição | type | hue | saturation | value |
|---|---|---|---|---|
| branco puro | solid | 0 | 0 | 255 |
| branco quente | solid | 30 | 80 | 255 |
| vermelho | solid | 0 | 255 | 255 |
| laranja | solid | 30 | 255 | 255 |
| amarelo | solid | 60 | 255 | 255 |
| verde | solid | 120 | 255 | 255 |
| ciano/azul-petróleo | solid | 180 | 255 | 255 |
| azul | solid | 240 | 255 | 255 |
| roxo/violeta | solid | 270 | 255 | 255 |
| rosa | solid | 330 | 200 | 255 |
| modo escuro/noturno | solid | 30 | 80 | 60 |
| arco-íris (animado) | rainbow | - | - | - |
Regra geral: hue 0-359 escolhe a tonalidade, saturation 0-255 (0 = branco/pastel, 255 = vívido), value 0-255 brilho. Tons pastel/branco usam saturação baixa; tons vívidos usam 255.
Formato de Macro
Referência completa de macros macro_format.md
Configuração e Solução de Problemas
Se o dispositivo não estiver respondendo, execute node <skill-dir>/index.js status
e siga a hint (dica) JSON que for impressa. Referência completa de instalação / implantação /
solução de problemas: device_setup.md
Contribuindo
- Repositório: https://github.com/git-hub-cloud/workled
- Issues: https://github.com/git-hub-cloud/workled/issues