Claude Codeのボイスモードで、キーを離した瞬間に送信する
holdモードでキーを離しても送信されず、毎回Enterを押していた。settings.jsonのvoice.autoSubmitで解決するまでの記録。
Claude Codeのボイスモードを使い始めました。スペースキーを押しながら話す方式で、慣れると打鍵より速いのですが、ひとつ引っかかった点があります。キーを離しても入力欄にテキストが入るだけで、送信するにはEnterキーを別途押す必要がありました。
片手で完結させたかったので、自動送信の設定を探しました。
holdとtap、2つのモードがある
ボイスモードには2つの動作モードがあり、設定のvoice.modeで選びます。
hold … 押している間だけ話す(既定)
tap … 一度押して開始、もう一度押して停止と送信
説明を読んで気づいたのですが、tapは停止と送信がひとつの操作にまとまっています。つまり最初から送信まで完結します。一方holdは「離す」が録音停止を意味するだけで、送信は別操作でした。引っかかっていたのは、既定がholdだったからです。
tapに切り替える手もありましたが、押しっぱなしのほうが話し終わりを自分で制御できて好みだったので、holdのまま自動送信を足す方向で探すことにしました。
設定キーはvoice.autoSubmit
まず/configの設定画面で「Auto Submit」などの語を検索しましたが、目的の項目にたどり着けませんでした。検索語が悪かったのだと思います。
正しいキーはvoiceオブジェクトの下のautoSubmitでした。説明にはこう書かれています。
Submit the prompt when hold-to-talk is released (hold mode only)
holdモードのときだけ、と明記されています。tapは元から送信するので、この設定が効くのはholdだけ、という整理です。名前だけ見ていたときは全モード共通の設定だと思い込んでいたので、ここは読んでおいてよかったところです。
settings.jsonを直接書く
設定画面から見つけられなくても、~/.claude/settings.jsonを直接編集すれば設定できます。このときはClaude自身に編集を依頼しました。既存の設定を読んでから差分だけを足す形にしてもらうと、他の項目を壊す心配がありません。
書いたのは次の内容です。
{
"voice": {
"enabled": true,
"mode": "hold",
"autoSubmit": true
}
}
3つとも省略可能な項目なので、既にボイスモードが動いているならautoSubmitの1行を足すだけでも構いません。設定を変えたあとは、反映のためにセッションを開き直す必要がある場合があります。
なお、この記事は当時の記録です。手元のsettings.jsonを今あらためて確認したところ、このvoiceの項目は入っていませんでした。どこかの時点で失われたようですが、原因は追えていません。設定は残るものと思い込まず、記録を別に残しておくほうがよさそうです。
分かったこと
設定画面で見つからない項目でも、設定ファイルには存在することがあります。今回のように、キー名を英語の表示ラベルから推測して探すと空振りしやすいので、設定ファイルの構造そのものを見に行くほうが早いことがあります。
もうひとつ、既定値の意味を確かめておくと迷いが減ります。holdが既定だと知っていれば、「なぜ送信されないのか」ではなく「holdの仕様はどうなっているか」から調べ始められました。