Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

listen と say を Claude とつなぐ(スキル / MCP サーバー / 音声会話モード)

Offen
#2 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Anfängerfreundlichkeit
25/100
Issue-Typ
Feature
Klarheit
Muss geklärt werden
Aktivitätsstatus
Aktiv
Tech-Stack
github, go

Rechercherichtung

The issue describes three approaches and additional voice command tasks, but leaves key choices open, including the Claude integration method, scope, timeouts, and usage limits. Start by reading the daemon IPC and CLI command handling, then identify which approach the maintainers want to pursue. Done means that approach and its acceptance criteria are agreed; the issue does not yet name files or tests.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

enhancement

目的

listen(聞き取り)と say(発話)を LLM(Claude)とつなぎ、スタックチャンと会話したり、Claude にスタックチャンを動かしてもらったりできるようにする。この issue は進め方の叩き台。

前提

  • daemon が gateway(stackchan-mcp)を 1 つだけ起動して持ち続けている。gateway はデバイスの接続(WebSocket :8765)を待ち受けるので、2 つ目の gateway は起動できない(ポートが競合する)。LLM からの操作も daemon を経由する必要がある。
  • daemon は 127.0.0.1:8770 の IPC で CLI のコマンドを受け付ける。stackchan-cli <cmd> は daemon があれば自動で転送される。
  • gateway はタッチを stackchan/event の通知で送ってくる。Claude Code の Channels 用の通知(notifications/claude/channel)にも対応している。
  • 使える操作: say / listen / avatar / mouth / move-head / led / photo / status、ほかに call <tool> で gateway のツールを直接呼べる。

案

段階を分けて、軽いものから試す。

案 1: スキル(コードの変更なし)

Claude Code のスキル(SKILL.md)に、stackchan-cli の使い方を書く。

  • Claude は Bash で stackchan-cli listen を実行して聞き取り、stackchan-cli say "..." で返事をする。表情、首、LED も同じ方法で動かす。
  • 書くこと: コマンド一覧、聞き取り → 返事 → 表情の流れ、発話は短くすること(say は再生が終わるまで返らない)。
  • 長所: すぐ試せる。CLI のコマンドがそのまま使える。
  • 短所: Bash の実行許可が毎回要る(許可リストで緩和できる)。タッチなどのデバイス側のイベントを Claude が受け取れない。会話の 1 往復ごとに Claude 側の操作が要る。
案 2: stackchan-cli 自身を MCP サーバーにする

stackchan-cli mcp で stdio の MCP サーバーとして起動し、ツール呼び出しを daemon の IPC に転送する。

  • Claude Code の mcpServers に stackchan-cli mcp を登録する。gateway を直接登録するのとは違い、daemon の gateway を共有するので、ポートは競合しない。
  • 公開するツールの例: say(text, speaker?)、listen(sec?)、set_face(face)、move_head(yaw, pitch, speed?)、set_leds(...)、take_photo(question?)、status()。引数を型付けしたいので、call ではなく個別のツールにする。
  • タッチなどのイベントを Channels の通知として Claude Code に届ける。そうすれば「頭をなでられた」を会話のきっかけにできる。そのためには、daemon から IPC の接続先にイベントを送る仕組みが要る(今の IPC は 1 リクエスト 1 応答のみ)。
  • 長所: Claude から型付きのツールとして見える。Bash の許可が要らない。イベントを受け取れる。
  • 短所: MCP の実装(自前で書くか、Go の MCP ライブラリを使うか)と、IPC の拡張が要る。
案 3: 音声会話モード(Claude API を直接呼ぶ)

daemon(または stackchan-cli chat)が、聞き取り → Claude API → 発話を自分でループする。

  • きっかけ: 画面のタップ、頭のタッチ、または一定時間ごとの聞き取り。
  • Claude API は Messages API を Go SDK(anthropic-sdk-go)で呼ぶ。返事の長さ、表情の指定(構造化出力やツール使用)、会話履歴の持ち方を決める必要がある。
  • 長所: 人が端末を操作しなくても会話できる。Claude Code を起動しておく必要がない。
  • 短所: API キーと利用料が要る。会話の設計(いつ聞き取りを始め、いつ会話を終えるか)の作り込みが要る。

進め方の提案

  1. 案 1 のスキルを作り、会話の流れ(聞き取りの長さ、返事の長さ、表情の付け方)の手応えを見る。
  2. 使っていて不便な点(許可の手間、イベントが取れない)がはっきりしたら、案 2 に進む。
  3. 端末なしで会話したくなったら、案 3 を検討する。

先に片付けたいこと

  • daemon の出力の順番待ち(別 issue)。listen の実行中にほかの操作が止まると、会話中の表情の変更や LED の演出が遅れる。
  • デバイスの応答の遅れ(0.3〜10 秒、ときどきタイムアウト)。発話後に表情を変える処理は、これで失敗することがある。

決めること

  • スキルを置く場所(このリポジトリの .claude/skills/ か、個人のスキルか)
  • MCP サーバーを自前で実装するか、Go の MCP ライブラリ(例: mark3labs/mcp-go)を使うか。CLI は今のところ外部依存をほぼ持たない方針。
  • 案 3 で使うモデルと、1 日の利用料の上限

追加タスク: 音声コマンドから Claude に任せる

音声コマンド(#4、~/.stackchan/voice-commands.txt)は、聞き取った文にキーワードが含まれるかで決まった操作をする。答えが決まっている返事や、PC で分かる情報(日付と時刻は say の {date} {weekday} {time} で話せる)はこの仕組みで足りる。答えを調べたり組み立てたりする必要がある話しかけは、Claude に任せる。

タスク 1: 「(言葉)ってなに?」でその言葉を検索し、まとめを話す
  • 聞き取った文を Claude に渡し、Claude が Web 検索して要約した文を say で話す。
  • 要約は 2〜3 文に収める(say は話し終えるまで返らず、長いと待たされる)。
  • 返事を待つ間は thinking の顔にする(音声コマンドの文字起こしと同じ)。検索と要約で 10 秒前後かかる見込み。
タスク 2: そのほかの話す音声コマンド
  • 天気など外部の情報が要るものや、自由な会話を Claude に任せる。
  • 決まった返事や PC で分かる情報は、ルールファイルに say を書けば作れるので、こちらには含めない。
作り方の案

ルールファイルから Claude を呼べるようにする。

ってなに|って何 => ask "{heard} を Web で調べて、2〜3 文で説明して"
* => ask "{heard} に短く答えて"
  • ask "<依頼>" は、依頼を Claude に送り、返ってきた文を話すコマンド。
  • {heard} は聞き取った文に置き換える。
  • * の行を ask にすれば、どのキーワードにも当たらなかった話しかけを Claude に任せられる。
決めること(追加分)
  • Claude の呼び方: Claude Code を非対話で動かす(claude -p)か、API キーで Messages API を呼ぶ(Web 検索はサーバー側のツールを使う)か
  • 1 回の返事にかけてよい時間と、時間切れのときの反応
  • 利用料の上限(* を Claude に回すと、聞き間違いでも毎回呼ぶことになる)
Vorherrschende Sprache
Go
Sterne
1
Forks
0
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Entwicklungsumgebung

Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus kan/stackchan-cli

Alle Issues in kan/stackchan-cli

Ähnliche Issues

Weitere Issues zu Go

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.