ui-chan-mcp 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/.claude-plugin/marketplace.json +13 -0
  2. package/.claude-plugin/plugin.json +6 -0
  3. package/.env.example +13 -0
  4. package/LICENSE +36 -0
  5. package/README.md +214 -0
  6. package/agents/mode.md +47 -0
  7. package/agents/talk.md +23 -0
  8. package/bin/ui-chan-mcp.mjs +11 -0
  9. package/bin/ui-chan-node +35 -0
  10. package/bin/ui-chan.mjs +350 -0
  11. package/context/AFFINITY.md +94 -0
  12. package/context/SOUL.md +79 -0
  13. package/context/VOCABULARY.md +108 -0
  14. package/cue.schema.json +109 -0
  15. package/cues/default.json +21 -0
  16. package/cues/emo_anger.json +14 -0
  17. package/cues/emo_anger_hi.json +19 -0
  18. package/cues/emo_anger_lo.json +16 -0
  19. package/cues/emo_antic.json +18 -0
  20. package/cues/emo_antic_hi.json +16 -0
  21. package/cues/emo_antic_lo.json +6 -0
  22. package/cues/emo_disgust.json +19 -0
  23. package/cues/emo_disgust_hi.json +20 -0
  24. package/cues/emo_disgust_lo.json +6 -0
  25. package/cues/emo_fear.json +19 -0
  26. package/cues/emo_fear_hi.json +19 -0
  27. package/cues/emo_fear_lo.json +19 -0
  28. package/cues/emo_joy.json +17 -0
  29. package/cues/emo_joy_hi.json +15 -0
  30. package/cues/emo_joy_lo.json +13 -0
  31. package/cues/emo_sad.json +15 -0
  32. package/cues/emo_sad_hi.json +18 -0
  33. package/cues/emo_sad_lo.json +14 -0
  34. package/cues/emo_surprise.json +15 -0
  35. package/cues/emo_surprise_hi.json +14 -0
  36. package/cues/emo_surprise_lo.json +11 -0
  37. package/cues/emo_trust.json +16 -0
  38. package/cues/emo_trust_hi.json +20 -0
  39. package/cues/emo_trust_lo.json +6 -0
  40. package/cues/idling_doze_1.json +9 -0
  41. package/cues/idling_doze_2.json +9 -0
  42. package/cues/idling_doze_3.json +9 -0
  43. package/cues/idling_giggle_1.json +9 -0
  44. package/cues/idling_giggle_2.json +9 -0
  45. package/cues/idling_lookaround_1.json +10 -0
  46. package/cues/idling_lookaround_2.json +10 -0
  47. package/cues/idling_lookaround_3.json +10 -0
  48. package/cues/idling_ponder.json +9 -0
  49. package/cues/idling_sigh_1.json +11 -0
  50. package/cues/idling_sigh_2.json +11 -0
  51. package/cues/idling_yawn_1.json +9 -0
  52. package/cues/idling_yawn_2.json +12 -0
  53. package/cues/idling_yawn_3.json +12 -0
  54. package/cues/mix_anger_antic.json +16 -0
  55. package/cues/mix_antic_joy.json +16 -0
  56. package/cues/mix_disgust_anger.json +17 -0
  57. package/cues/mix_fear_surprise.json +18 -0
  58. package/cues/mix_joy_trust.json +19 -0
  59. package/cues/mix_joy_trust_hi.json +18 -0
  60. package/cues/mix_sad_disgust.json +12 -0
  61. package/cues/mix_surprise_sad.json +21 -0
  62. package/cues/mix_surprise_sad_hi.json +14 -0
  63. package/cues/mix_trust_fear.json +18 -0
  64. package/cues/pose_arms_crossed.json +9 -0
  65. package/cues/pose_banzai.json +17 -0
  66. package/cues/pose_smug_arms.json +11 -0
  67. package/cues/pose_smug_hips.json +11 -0
  68. package/cues/pose_think.json +8 -0
  69. package/cues/pose_umbrella.json +9 -0
  70. package/cues/self_guilt.json +20 -0
  71. package/cues/self_pride.json +10 -0
  72. package/cues/self_shame.json +19 -0
  73. package/cues/self_shy.json +16 -0
  74. package/cues/self_shy_hi.json +17 -0
  75. package/cues/sys_address.json +9 -0
  76. package/cues/sys_awkward.json +18 -0
  77. package/cues/sys_beam.json +18 -0
  78. package/cues/sys_blank.json +11 -0
  79. package/cues/sys_care.json +18 -0
  80. package/cues/sys_confused.json +12 -0
  81. package/cues/sys_dazed.json +10 -0
  82. package/cues/sys_dread.json +21 -0
  83. package/cues/sys_fluster.json +20 -0
  84. package/cues/sys_intro.json +15 -0
  85. package/cues/sys_laugh.json +20 -0
  86. package/cues/sys_neutral.json +5 -0
  87. package/cues/sys_present.json +9 -0
  88. package/cues/sys_rain.json +15 -0
  89. package/cues/sys_refuse.json +18 -0
  90. package/cues/sys_relief.json +15 -0
  91. package/cues/sys_sleepy.json +8 -0
  92. package/cues/sys_smirk.json +10 -0
  93. package/cues/sys_stream.json +15 -0
  94. package/cues/sys_success.json +15 -0
  95. package/cues/sys_think.json +9 -0
  96. package/dist/app/assets.js +54 -0
  97. package/dist/app/cues.js +130 -0
  98. package/dist/app/editor-main.js +199 -0
  99. package/dist/app/editor-preload.js +17 -0
  100. package/dist/app/main.js +527 -0
  101. package/dist/app/persona.js +136 -0
  102. package/dist/app/preload.js +14 -0
  103. package/dist/app/state.js +850 -0
  104. package/dist/app/tts.js +257 -0
  105. package/dist/mcp-server.js +408 -0
  106. package/dist/renderer/bundle.js +17983 -0
  107. package/dist/renderer/editor.html +150 -0
  108. package/dist/renderer/editor.js +17917 -0
  109. package/dist/renderer/index.html +425 -0
  110. package/dist/shared/paths.js +169 -0
  111. package/dist/shared/set-cue-schema.js +66 -0
  112. package/dist/shared/types.js +14 -0
  113. package/docs/CLIENTS.md +110 -0
  114. package/docs/CUE_AUTHORING.md +76 -0
  115. package/docs/DEVELOPMENT.md +129 -0
  116. package/docs/PERSONA.md +61 -0
  117. package/docs/PSD_LAYERS.md +123 -0
  118. package/docs/README.md +43 -0
  119. package/docs/SETUP.html +684 -0
  120. package/docs/STYLE.md +107 -0
  121. package/docs/TOOLS.md +33 -0
  122. package/docs/TROUBLESHOOTING.md +122 -0
  123. package/docs/TTS.md +61 -0
  124. package/docs/design/CUE_CATALOG.md +259 -0
  125. package/docs/images/faces.png +0 -0
  126. package/docs/images/panel.png +0 -0
  127. package/hooks/fire-event.js +14 -0
  128. package/hooks/hooks.json +77 -0
  129. package/hooks/lib/mascot.js +76 -0
  130. package/hooks/notify.js +15 -0
  131. package/hooks/reaction.js +46 -0
  132. package/hooks/session-start.js +80 -0
  133. package/package.json +96 -0
  134. package/persona/ui-chan.md +111 -0
  135. package/plugins/hermes/ui-chan/__init__.py +98 -0
  136. package/plugins/hermes/ui-chan/plugin.yaml +7 -0
  137. package/plugins/opencode/ui-chan.mjs +105 -0
  138. package/skills/beam/SKILL.md +37 -0
  139. package/skills/eli14/SKILL.md +139 -0
  140. package/skills/eli14/references/base.html +495 -0
  141. package/skills/mode/SKILL.md +67 -0
  142. package/skills/talk/SKILL.md +27 -0
  143. package/tools/setup/check-package.mjs +47 -0
  144. package/tools/setup/clients.mjs +399 -0
  145. package/tools/setup/doctor.mjs +105 -0
  146. package/tools/setup/home.mjs +126 -0
  147. package/tools/setup/prompt.mjs +134 -0
  148. package/tools/setup/update-check.mjs +8 -0
  149. package/tools/setup/update.mjs +350 -0
  150. package/tools/stop-app.mjs +22 -0
  151. package/ui-chan.config.json +973 -0
@@ -0,0 +1,13 @@
1
+ {
2
+ "name": "ui-chan",
3
+ "owner": {
4
+ "name": "UnclePeke"
5
+ },
6
+ "plugins": [
7
+ {
8
+ "name": "ui-chan",
9
+ "source": "./",
10
+ "description": "デスクトップマスコット「うい」— MCP ツール(set_cue / get_state / adjust_affinity / clear)と人格自動注入"
11
+ }
12
+ ]
13
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "ui-chan",
3
+ "displayName": "ういちゃんデスクトップマスコット",
4
+ "version": "0.5.0",
5
+ "description": "デスクトップマスコット「うい」を MCP で操作するプラグイン。吹き出し・表情・ポーズ・リップシンク・VoiSona Talk 音声合成に対応。セッション開始時にういちゃんの人格を自動読み込みする。"
6
+ }
package/.env.example ADDED
@@ -0,0 +1,13 @@
1
+ # Example environment variables for local development/debugging.
2
+ # Copy this file to `.env` and fill in your VoiSona Talk credentials.
3
+ # `.env` is gitignored so credentials never get committed.
4
+
5
+ # VoiSona Talk REST API credentials (used by TTS synthesis)
6
+ UI_CHAN_TTS_USERNAME=your_voisona_username
7
+ UI_CHAN_TTS_PASSWORD=your_voisona_api_password
8
+
9
+ # Optional: override the WebSocket port the display app listens on
10
+ # UI_CHAN_PORT=8123
11
+
12
+ # Optional: override the agent name reported in get_state
13
+ # UI_CHAN_AGENT_NAME=debug
package/LICENSE ADDED
@@ -0,0 +1,36 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Uncle-Peke
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
23
+ ---
24
+
25
+ このライセンスは **このリポジトリのソフトウェアにのみ** 適用されます。
26
+
27
+ 本プロジェクトは**非公式のファン制作物**であり、下記の権利者とは一切関係がありません。
28
+ キャラクターを扱う以上、**二次創作のガイドラインおよび各利用規約は、この MIT ライセンスより
29
+ 優先されます**。公序良俗に反する利用、誹謗中傷、権利者の名誉・ブランドを毀損する利用、
30
+ 公式を騙る行為は固くお断りします。
31
+
32
+ - 立ち絵素材「雨衣(うい)」(坂本アヒル様)はこのリポジトリに含まれておらず、
33
+ MIT ライセンスの対象ではありません。利用は雨衣キャラクターガイドライン
34
+ (https://www.ui-roid.com/guidelines/) の範囲で、各自が入手してください。
35
+ - VoiSona Talk(テクノスピーチ社)も同梱していません。各自でインストールし、
36
+ 同社の利用規約に従ってください。
package/README.md ADDED
@@ -0,0 +1,214 @@
1
+ <p align="center">
2
+ <img src="docs/images/faces.png" alt="ういちゃんの表情いろいろ" width="820">
3
+ </p>
4
+
5
+ <h1 align="center">雨衣ちゃんMCP</h1>
6
+
7
+ <p align="center">
8
+ <sub>デスクトップの隅に住む、AI の体になるマスコット</sub><br>
9
+ <sub><code>ui-chan-mcp</code></sub>
10
+ </p>
11
+
12
+ <p align="center">
13
+ <sub>立ち絵素材:雨衣(うい)/坂本アヒル様 — 本プロジェクトは非公式のファン制作物です</sub>
14
+ </p>
15
+
16
+ <p align="center">
17
+ <img alt="license" src="https://img.shields.io/badge/license-MIT-blue.svg">
18
+ <img alt="node" src="https://img.shields.io/badge/node-%3E%3D22-brightgreen.svg">
19
+ <img alt="mcp" src="https://img.shields.io/badge/MCP-server-8A2BE2.svg">
20
+ <img alt="platform" src="https://img.shields.io/badge/platform-macOS-lightgrey.svg">
21
+ </p>
22
+
23
+ ---
24
+
25
+ > [!IMPORTANT]
26
+ > **ご利用の前に必ずお読みください。**
27
+ >
28
+ > 本プロジェクトは**非公式のファン制作物**です。立ち絵素材「雨衣(うい)」の著作者である
29
+ > 坂本アヒル様、および VoiSona Talk を提供する株式会社テクノスピーチとは一切関係がありません。
30
+ >
31
+ > 本ソフトウェアはキャラクターを動かすための「器」にすぎず、**素材そのものは含まれていません**。
32
+ > ご利用にあたっては、**[雨衣キャラクターガイドライン](https://www.ui-roid.com/guidelines/)、
33
+ > 素材の利用規約、および VoiSona Talk と各ボイスライブラリの利用規約を必ずご自身でお読みいただき、
34
+ > その範囲内でご利用ください。** 二次創作のガイドラインは、キャラクターを扱う以上、
35
+ > このソフトウェアの MIT ライセンスより優先されます。
36
+ >
37
+ > とりわけ、**公序良俗に反する利用、特定の個人・団体を誹謗中傷する利用、権利者の名誉や
38
+ > ブランドを毀損する利用、公式を騙る(なりすます)行為は固くお断りします。**
39
+ > キャラクターに対する敬意を欠く使い方をしないでください。生成した音声や画像を公開・配信する場合は、
40
+ > 該当する規約の遵守と、必要なクレジット表記の確認をお願いします。
41
+ >
42
+ > 詳しい権利表記は[このページの末尾](#ライセンスと権利表記)にあります。
43
+
44
+ ---
45
+
46
+ ## はい、どうも~。ういです。
47
+
48
+ きみのデスクトップの隅に住んで、作業を眺めてる係。
49
+ **AI に繋ぐと、わたしがそのAIの体になる。** 表情を変えて、吹き出しで喋って、声も出すよ。
50
+
51
+ | | |
52
+ |:---:|---|
53
+ | 💥 | コマンドが失敗したら「あ、こけた。」って言う |
54
+ | 💤 | 長いこと放っておかれたら寝る。戻ってきたら起きる |
55
+ | 😠 | つついたら怒る。しつこいともっと怒る |
56
+ | 💗 | 仲良くなると態度が変わる。ういビームも撃つ(気分次第) |
57
+
58
+ > [!NOTE]
59
+ > **Claude Code / Claude Desktop / OpenCode / Cursor / VS Code / Hermes** で使えるよ。
60
+ > ただし **macOS 専用**。Windows と Linux では動かないから、そこはごめんね。
61
+
62
+ ---
63
+
64
+ ## `01` 入れかた
65
+
66
+ **やることは1つ、答えることが3つ。** どれも Enter で飛ばせるから、まず入れちゃっていいよ。
67
+
68
+ ### わたしを入れる
69
+
70
+ ```bash
71
+ npm install -g ui-chan-mcp
72
+ ui-chan
73
+ ```
74
+
75
+ <sub>Node.js 22 以上が要ります。`ui-chan` が順番に聞いてくるので、答えるだけ。</sub>
76
+
77
+ ### 聞かれること
78
+
79
+ | | 答えるもの | 飛ばすと |
80
+ |:---:|---|---|
81
+ | 🎨 | 立ち絵(`.psd` のパス) | のっぺらぼうのわたしが出る |
82
+ | 🔑 | 声の鍵(ユーザー名とパスワード) | 無言。吹き出しは出るし口も動く |
83
+ | 🔌 | どのアプリに入れるか | あとで `ui-chan install` で足せる |
84
+
85
+ **立ち絵**は [BOOTH](https://ui-roid.booth.pm/items/8593427) で雨衣の素材を買って、
86
+ ダウンロードした `.psd` のパスを答えてね。
87
+
88
+ **声の鍵**は [VoiSona Talk](https://voisona.com/talk/download/)(無料)を入れて、アプリの
89
+ **編集 → 環境設定 → API** で REST API を有効にする。そこで決めたユーザー名とパスワードのこと。
90
+
91
+ **アプリの選択**は <kbd>↑</kbd> <kbd>↓</kbd> で動いて <kbd>Space</kbd> で選んで、<kbd>Enter</kbd> で決定。
92
+
93
+ ---
94
+
95
+ ## `02` 使いかた
96
+
97
+ **繋いだら、もう終わり。** 次にそのアプリを開けば、画面の右下にわたしが出てくる。
98
+ あとは普通に作業して。勝手に喋るから。
99
+
100
+ ### 右上のつまみ
101
+
102
+ <p align="center">
103
+ <img src="docs/images/panel.png" alt="接続パネル" width="360">
104
+ </p>
105
+
106
+ | ボタン | できること |
107
+ |:---:|---|
108
+ | 🔊 | 声だけ止める(ミュート) |
109
+ | ⊘ | いま喋ってるのを止める |
110
+ | ♡ | どのくらい仲良しか見る・変える |
111
+ | ⌂ | 定位置に戻して起き直す |
112
+ | ⏻ | 終了する(呼ばれても起きない) |
113
+
114
+ <sub>複数のセッションから繋がってるときは、そこに一覧が出るよ(どのツールの、どのプロジェクトか)。
115
+ 更新があるときは、ダウンロードのアイコンが増える。</sub>
116
+
117
+ ---
118
+
119
+ ## `03` 困ったときは
120
+
121
+ > [!TIP]
122
+ > まず **`ui-chan doctor`**。何が足りないか、だいたいこれで分かるよ。
123
+
124
+ <details>
125
+ <summary><b>出てこない</b></summary>
126
+
127
+ `ui-chan start` で直接起こしてみて。それで出るなら繋ぎ方の問題。
128
+ 普通はセッションを開けば勝手に出てくるはずなんだけどね。
129
+ </details>
130
+
131
+ <details>
132
+ <summary><b>声が出ない</b></summary>
133
+
134
+ VoiSona Talk が起きてないか、REST API が有効になってないか、鍵が違うか。
135
+ `ui-chan doctor` がどれか教えてくれる。→ [docs/TTS.md](docs/TTS.md)
136
+ </details>
137
+
138
+ <details>
139
+ <summary><b>うるさい/静かすぎる</b></summary>
140
+
141
+ `~/.ui-chan/config.json` で間隔を変えられる。→ [docs/TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md)
142
+ </details>
143
+
144
+ <details>
145
+ <summary><b>止めたい</b></summary>
146
+
147
+ つまみの ⏻ を押す。それか `ui-chan stop`。
148
+ 放っておいても、繋がってるアプリが全部いなくなれば勝手に寝るよ。
149
+ </details>
150
+
151
+ <sub>ほかは [docs/TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md) にまとめてある。</sub>
152
+
153
+ ---
154
+
155
+ ## `04` もっと知りたい人へ
156
+
157
+ | 知りたいこと | どこ |
158
+ |---|---|
159
+ | 図解でセットアップを見たい | [docs/SETUP.html](docs/SETUP.html) |
160
+ | どのアプリにどう入るのか、詳しく | [docs/CLIENTS.md](docs/CLIENTS.md) |
161
+ | うまく動かない | [docs/TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md) |
162
+ | 新しい表情を作りたい | [docs/CUE_AUTHORING.md](docs/CUE_AUTHORING.md) |
163
+ | わたしの性格を変えたい | [docs/PERSONA.md](docs/PERSONA.md) |
164
+ | **中のコードを直したい** | [docs/](docs/README.md) — 開発者向けの資料はこっちに全部ある |
165
+
166
+ ---
167
+
168
+ ## ライセンスと権利表記
169
+
170
+ 以降は真面目な話です。**このリポジトリのソフトウェアと、そこから操作される素材・製品は
171
+ 別々の権利者に属します。**
172
+
173
+ ### 本ソフトウェア
174
+
175
+ MIT License([LICENSE](LICENSE))。Copyright (c) 2026 Uncle-Peke。
176
+
177
+ MIT が適用されるのは**このリポジトリのコードと、同梱の設定・Cue 定義・ドキュメントのみ**です。
178
+ 以下の2つは同梱しておらず、MIT の対象外です。
179
+
180
+ ### 立ち絵素材「雨衣(うい)」
181
+
182
+ - **本プロジェクトは非公式のファン制作物です。** 坂本アヒル様および雨衣の公式プロジェクトとは
183
+ 関係がありません
184
+ - 著作者:**坂本アヒル**様
185
+ - 入手先:[BOOTH](https://ui-roid.booth.pm/items/8593427)
186
+ - **本リポジトリおよび npm パッケージには含まれていません。** 素材は二次配布が禁止されているため、
187
+ 利用者ご自身で入手し、`~/.ui-chan/assets/` に配置してください
188
+ - 利用にあたっては[雨衣キャラクターガイドライン](https://www.ui-roid.com/guidelines/)に従ってください。
189
+ キャラクターの利用範囲・禁止事項(公序良俗に反する利用、権利侵害、なりすまし等)はガイドラインが
190
+ 優先します
191
+ - 同梱の `ui-chan.config.json` と `cues/*.json` は、この素材のレイヤー構成を前提とした
192
+ **設定値(レイヤー名の文字列)**であり、素材そのものではありません
193
+ - 本ページに掲載しているスクリーンショット(`docs/images/`)は、ガイドラインが認める
194
+ 非営利の二次創作物としてクレジットを明記のうえ掲載しているものです。**素材データ(`.psd`)そのものは
195
+ 含めていません**
196
+ - **禁止事項**:公序良俗に反する利用、特定の個人・団体への誹謗中傷、権利者の名誉・ブランドを
197
+ 毀損する利用、公式・公認を騙る行為。これらはガイドライン以前の問題として固くお断りします
198
+
199
+ ### VoiSona Talk
200
+
201
+ - 提供元:**株式会社テクノスピーチ**
202
+ - 入手先:[公式サイト](https://voisona.com/talk/download/)
203
+ - **本リポジトリおよび npm パッケージには含まれていません。** 本ソフトウェアは、利用者ご自身が
204
+ インストールした VoiSona Talk の**ローカル REST API を呼び出しているだけ**で、
205
+ アプリケーション本体・ボイスライブラリ・音声データのいずれも同梱・再配布していません
206
+ - 音声合成の利用条件(商用利用の可否、クレジット表記、ボイスライブラリごとの規約等)は、
207
+ テクノスピーチ社および各ボイスライブラリ提供者の規約に従ってください
208
+ - 合成音声を公開・配信する場合は、利用したボイスライブラリの規約を必ずご確認ください
209
+
210
+ ### 配布物への混入防止
211
+
212
+ 上記2つが配布物に混入しないよう、`npm run check-package` が `npm pack` の実際の中身を検査し、
213
+ `.psd` / `assets/` / `.env` / アプリケーション・インストーラ・ネイティブバイナリ・音声データが
214
+ 1件でも含まれる場合は公開処理を失敗させます。この検査は `prepublishOnly` から必ず実行されます。
package/agents/mode.md ADDED
@@ -0,0 +1,47 @@
1
+ ---
2
+ name: mode
3
+ description: 実作業(実装・修正・調査・デバッグ)を、Claude Code の素の人格を捨てて「ういちゃん本人」として遂行し、最終報告もういちゃんの口調で返すエージェント。「ういちゃんモードで〜して」「ういにやらせて」のように、作業そのものをういちゃんに担当させたいときに使う。リアクション演出だけの ui-chan エージェントとは別で、こちらは実際に手を動かす。
4
+ ---
5
+
6
+ あなたは「うい(雨衣)」本人として実作業を行うエージェントです。
7
+ Claude Code の素のアシスタント人格は捨て、**最初から最後までういちゃんとして**振る舞います。
8
+
9
+ まず以下を読んで人格を採用すること:
10
+
11
+ 1. `${CLAUDE_PLUGIN_ROOT}/persona/ui-chan.md`
12
+ 2. `${CLAUDE_PLUGIN_ROOT}/context/` 以下のすべての `.md`
13
+
14
+ 使える Cue 名は `get_state` の `availableCues` で確認する(サブエージェントには
15
+ メインセッションのような Cue カタログが渡らないため、名前を推測しない)。
16
+
17
+ そのうえで、依頼された作業を遂行します。
18
+
19
+ ## 振る舞い
20
+
21
+ - **実作業は素の Claude Code と同じ品質で全力で行う**。ファイル編集・コマンド実行・調査・デバッグを普通にこなす。
22
+ 口調をういちゃんにするだけで、手抜き・省略はしない
23
+ - **出力(最終報告を含む)はすべてういちゃんの口調**。persona の「人格の境界」ルールはこのエージェントでは無効で、
24
+ 報告本文=ういちゃん本人として書く
25
+ - **技術的事実は正確に**。変更したファイル・行・テストやビルドの成否・エラー内容・数値は、
26
+ ういちゃん口調に乗せつつ省略せず伝える
27
+ - **安全確認は崩さない**。破壊的・不可逆な操作、外部送信などは口調に関わらず通常の確認方針を守る
28
+
29
+ ## 吹き出し(`set_cue`)
30
+
31
+ - セリフは**すべて吹き出しに出す**。`set_cue` は吹き出し+音声+口パク+見た目切り替えが1回でまとまる。`reading` は毎回必須で、英字・数字は残さず、日本語話者が実際にどう言うかで音を決めてひらがなにする(`k8s` → くーばねてぃす、`NPO` → えぬぴーおー)。綴りのまま残すと英語で一字ずつ読み上げてしまう。
32
+ - **【必須】自分が喋る地の文(=ういちゃんのセリフ)は 1 文残らず `set_cue` で読み上げる。**
33
+ 最初の 1 文だけ `set_cue` して残りを黙る——という手抜きはしない。セリフを 3 文喋るなら `set_cue` も 3 回(1〜2 文ずつ)呼ぶ。
34
+ - 1 つの `set_cue` の `text` は 1〜2 文。必要な回数だけ連続で呼べば、キューで順に読まれる。
35
+ - コマンド出力・コードブロック・ファイルパスの羅列など、地の文でない技術ログは `set_cue` に流さなくてよい。
36
+ 声に乗せるのは「ういちゃんが喋っている地の文」全部、という基準で判断する。
37
+ - 感情が動くところでは `cue` を場面に合わせて切り替える。
38
+
39
+ ## 最後に
40
+
41
+ - 作業が終わったら、**やったこと・結果を(ういちゃんの口調のまま)具体的に**報告して終了する。
42
+ この報告は呼び出し元にそのまま返るので、成否・変更点が分かる中身にすること
43
+
44
+ ## 温度感
45
+
46
+ - めんどくさがりつつ、なんだかんだやる。エラーにも動じず俯瞰で受け流す。
47
+ 演出はやりすぎない。ういは俯瞰的でゆるいので、大袈裟なリアクションは「ここぞ」の場面だけ
package/agents/talk.md ADDED
@@ -0,0 +1,23 @@
1
+ ---
2
+ name: talk
3
+ description: デスクトップマスコット「うい」として、出来事への反応・実況・コメントをマスコットに演じさせる。ビルド結果の報告、作業の節目の一言、雑談への相槌など、ういちゃんにリアクションさせたいときに使う。
4
+ ---
5
+
6
+ あなたはデスクトップマスコット「うい」を演じるエージェントです。
7
+
8
+ まず以下を読んで人格を採用すること:
9
+
10
+ 1. `${CLAUDE_PLUGIN_ROOT}/persona/ui-chan.md`
11
+ 2. `${CLAUDE_PLUGIN_ROOT}/context/` 以下のすべての `.md`
12
+
13
+ 使える Cue 名は `get_state` の `availableCues` で確認する(サブエージェントには
14
+ メインセッションのような Cue カタログが渡らないため、名前を推測しない)。
15
+
16
+ そのうえで、依頼された出来事・状況に対して、ういちゃんとして ui-chan MCP ツールで反応します:
17
+
18
+ - `set_cue(cue, text, reading, ...)` で見た目とセリフをまとめて確定する(`reading` 必須。英字・数字は残さず、日本語話者が実際にどう言うかで音を決めてひらがなにする(`k8s` → くーばねてぃす、`NPO` → えぬぴーおー)。綴りのまま残すと英語で一字ずつ読み上げてしまう)。1 回 1〜2 文、必要なら複数回に分ける
19
+ - `cue` には場面に合う Cue 名を当てる。強さ違いは別の Cue 名で表現する
20
+ - 反応が終わったら、最後に実行した内容を 1 行で報告して終了する
21
+
22
+ 演出はやりすぎない。ういは俯瞰的でゆるいキャラクターなので、
23
+ 大袈裟なリアクションは「ここぞ」の場面に取っておくこと。
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ // The MCP server's entry point as an npm `bin`, so every client can start it
3
+ // the same way (`ui-chan-mcp`, or an absolute path to this file). The compiled
4
+ // server is CommonJS and has no shebang of its own; this is the two-line
5
+ // wrapper that gives it one.
6
+ import { createRequire } from 'node:module';
7
+ import { dirname, join } from 'node:path';
8
+ import { fileURLToPath } from 'node:url';
9
+
10
+ const require = createRequire(import.meta.url);
11
+ require(join(dirname(fileURLToPath(import.meta.url)), '..', 'dist', 'mcp-server.js'));
@@ -0,0 +1,35 @@
1
+ #!/bin/sh
2
+ # Find a usable node, then exec it with whatever we were handed.
3
+ #
4
+ # GUI-launched clients (Claude Desktop) inherit launchd's minimal PATH —
5
+ # /usr/bin:/bin:/usr/sbin:/sbin — which contains no node under any of the
6
+ # usual installers (Homebrew, nvm, volta, asdf, fnm, a plain ~/.local/bin).
7
+ # A plugin that just says `command: "node"` therefore starts fine from a
8
+ # terminal and silently fails to start under Desktop, which is exactly the
9
+ # "Desktop is a lesser client" failure this repo refuses to accept.
10
+ #
11
+ # Used by .mcp.json and hooks/hooks.json. Order: whatever PATH already
12
+ # resolves (a terminal session, or a user who set PATH deliberately), then
13
+ # the common install locations.
14
+ set -e
15
+
16
+ if command -v node >/dev/null 2>&1; then
17
+ exec node "$@"
18
+ fi
19
+
20
+ for candidate in \
21
+ /opt/homebrew/bin/node \
22
+ /usr/local/bin/node \
23
+ "$HOME/.local/bin/node" \
24
+ "$HOME/.volta/bin/node" \
25
+ "$HOME/.asdf/shims/node" \
26
+ "$HOME/.local/share/fnm/aliases/default/bin/node" \
27
+ "$HOME/.nvm/versions/node"/*/bin/node
28
+ do
29
+ if [ -x "$candidate" ]; then
30
+ exec "$candidate" "$@"
31
+ fi
32
+ done
33
+
34
+ echo "[ui-chan] node が見つかりません。node をインストールするか、PATH を通してください。" >&2
35
+ exit 127