Communityコーディング&開発github.com

workled MCP コントローラー

workled スキル - MCP 経由で LED デバイスを制御し、エージェントの状態を可視化します。

workled MCP コントローラー とは?

このスキルは、Claude Code などの AI エージェントと連携し、MCP (Model Context Protocol) を通じて WorkLED デバイスの LED を制御します。エージェントの状態(思考中、入力待ち、アイドル、エラー)を LED の色やエフェクトで可視化することで、ユーザーはエージェントの内部状態を一目で把握できます。主な機能として、状態の設定・取得、明るさやエフェクトの変更、タッチパッドのマクロ設定が可能です。開発の際は、各ターンごとに適切な状態遷移(thinking → input または idle)を必ず実行することがプロトコルとして定義されており、エージェントの応答前に状態が正しいことを確認する「Pre-Reply Gate」の実装が推奨されています。

対応~Claude Code~Codex CLI~Cursor
npx skills add git-hub-cloud/workled

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

workled MCP コントローラー は何をしますか?

必須状態プロトコル

すべての状態遷移時に MCP 経由で set_agent_state を呼び出します:

状態タイミング
thinking各応答の最初のツール呼び出し時、ユーザーがメッセージを送信した時
idleターン終了時、セッション終了時
inputエージェントがユーザーからの入力を待つ場合 — 入力ツール (question/ask/confirm) の呼び出し時、クライアントサイドモーダル内 (hermes _confirm_destructive_slash 等)、または平文の選択肢リスト/複数選択質問を表示してユーザーの選択を待つ場合
error実行時エラー発生時

ターンごとの手順(毎ターン、この順序で実行):

  1. ターン開始 / ユーザーメッセージ受信 → set_agent_state("thinking") — 最初のアクション、他のツール呼び出しより先に。
  2. オプション/選択肢のレンダリング、モーダルを開く、質問をする前に → set_agent_state("input")。
  3. ターン終了、作業完了、保留中の出力なし → set_agent_state("idle")。
  4. 実行時エラー / 失敗したツール呼び出し → set_agent_state("error")。

応答前ゲート — 最終的な表示メッセージを出力する前にチェック:

  • このターンで set_agent_state を少なくとも1回呼び出しましたか?
  • LED の状態はこれから表示しようとしている内容と一致していますか?(完了なら idle、質問中なら input、作業中なら thinking)
  • いずれかが NO の場合、正しい set_agent_state 呼び出しを 最初に 実行してから応答を出力してください。

MCP ツールリファレンス

ツールプロパティ説明使用例
set_agent_statestate_name: stringLED をエージェントの状態 (thinking/idle/input/error) に設定set_agent_state("thinking")
get_agent_state—現在のエージェント LED 状態を返します: idle/thinking/input/error (未設定の場合は空文字列)get_agent_state()
set_brightnessbrightness: integerLED の明るさ 0-255、0 = 消灯set_brightness(128)
get_brightness—現在の LED の明るさ 0-255 を返しますget_brightness()
set_effecteffect_name: string, effect_json: stringeffect_name ∈ led(手動エフェクト)/idle/thinking/input/error; effect_json は JSON 文字列 {"type","hue","saturation","value","speed"}。先にライトを点灯する必要があります (set_brightness > 0)。自然言語の色を HSV にマッピングします (下記の表を参照)。set_effect("led", '{"type":"breathe","hue":180,"speed":50}')
get_effecteffect_name: stringeffect_name の設定を JSON で取得get_effect("thinking")
set_macromacro_name: string, macro_json: stringタッチパッドジェスチャのマクロを設定; macro_name ∈ single_click/double_click/long_press_start; macro_json はセグメントの JSON 配列 (マクロ形式参照); 空の macro_json でリセットset_macro("single_click", '[{"combo":"ctrl+c"}]')
get_macromacro_name: stringマクロを JSON 配列文字列として返す。未設定の場合は空文字列 (パスワード値はマスクされます)get_macro("single_click")

自然言語の色を set_effect にマッピング

ユーザーがアニメーションを要求しない限り type:"solid" を使用します。色名を HSV にマッピング:

説明typehuesaturationvalue
純白solid00255
温白色solid3080255
赤solid0255255
オレンジsolid30255255
黄色solid60255255
緑solid120255255
シアン/ティールsolid180255255
青solid240255255
紫/バイオレットsolid270255255
ピンクsolid330200255
薄暗い/ナイトモードsolid308060
レインボー (アニメーション)rainbow---

経験則: 色相 0-359 で色を選び、彩度 0-255 (0 = 白/パステル、255 = 鮮やか)、明度 0-255 で明るさを調整します。パステル/白系の色調は低彩度、鮮やかな色調は 255 を使用します。

マクロ形式

完全なマクロリファレンス: macro_format.md

セットアップとトラブルシューティング

デバイスが応答しない場合は、node <skill-dir>/index.js status を実行し、出力される JSON の hint に従ってください。完全なインストール / デプロイ / トラブルシューティングリファレンス: device_setup.md

コントリビューション

関連スキル