CommunityCoding & Developmentgithub.com

git-hub-cloud/workled

workled skill

What is workled?

workled is a Claude Code agent skill that workled skill.

Works with~Claude Code~Codex CLI~Cursor
npx skills add git-hub-cloud/workled

Installed? Explore more Coding & Development skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation

workled MCP Controller

Mandatory State Protocol

Call set_agent_state via MCP on every state transition:

StateWhen
thinkingFirst tool call of every reply; user submits a message
idleTurn finished; session torn down
inputAny time the agent is waiting on the user — calling an input tool (question/ask/confirm), sitting inside a client-side modal (hermes _confirm_destructive_slash, etc.), or after rendering a plain-text choice list / multi-option question and waiting for the user's pick
errorRuntime error occurred

Per-turn procedure (execute every turn, in order):

  1. Turn starting / user message received → set_agent_state("thinking")first action, before any other tool call.
  2. Before rendering options / choices / opening any modal / asking a question → set_agent_state("input").
  3. End of turn, work done, no more output pending → set_agent_state("idle").
  4. Runtime error / failed tool call → set_agent_state("error").

Pre-Reply Gate — check BEFORE emitting your final visible message:

  • Did I call set_agent_state at least once this turn?
  • Does the LED state match what I'm about to show (idle if done, input if asking, thinking if still working)?
  • If either is NO, emit the correct set_agent_state call first, then the reply.

MCP Tool Reference

ToolPropertyDescriptionUsage
set_agent_statestate_name: stringSet LED to reflect agent state (thinking/idle/input/error)set_agent_state("thinking")
get_agent_stateReturns current agent LED state: idle/thinking/input/error (empty string if unset)get_agent_state()
set_brightnessbrightness: integerLED brightness 0-255; 0 = offset_brightness(128)
get_brightnessReturns current LED brightness 0-255;get_brightness()
set_effecteffect_name: string, effect_json: stringeffect_name ∈ led(manual effect)/idle/thinking/input/error; effect_json is a JSON string {"type","hue","saturation","value","speed"}. Light must be on first (set_brightness > 0). Map natural-language colors to HSV (see table below).set_effect("led", '{"type":"breathe","hue":180,"speed":50}')
get_effecteffect_name: stringGet effect_name config as JSONget_effect("thinking")
set_macromacro_name: string, macro_json: stringSet the macro for a touch pad gesture; macro_name ∈ single_click/double_click/long_press_start; macro_json is a JSON array of segments (see Macro Format); empty macro_json resetsset_macro("single_click", '[{"combo":"ctrl+c"}]')
get_macromacro_name: stringReturns the macro as a JSON array string, or empty string if unset (password values masked)get_macro("single_click")

Mapping natural-language colors to set_effect

Use type:"solid" unless the user asks for an animation. Map a color name to HSV:

Descriptiontypehuesaturationvalue
pure whitesolid00255
warm whitesolid3080255
redsolid0255255
orangesolid30255255
yellowsolid60255255
greensolid120255255
cyan/tealsolid180255255
bluesolid240255255
purple/violetsolid270255255
pinksolid330200255
dim/night modesolid308060
rainbow (animated)rainbow---

Rule of thumb: hue 0-359 picks the hue, saturation 0-255 (0 = white/pastel, 255 = vivid), value 0-255 brightness. Pastel/white tones use low saturation; vivid tones use 255.

Macro Format

Full macro reference macro_format.md

Setup & Troubleshooting

If the device is not responding, run node <skill-dir>/index.js status and follow the JSON hint it prints. Full install / deployment / troubleshooting reference: device_setup.md

Contributing

Related Skills