タイプライターの右側にはレバーが付いていて、行の終わりにそれを押すと、紙が一行送られて活字の位置が左端に戻ります。行を変えるための動作で、それ以上の意味はありません。
電信の機械では、同じ位置にある符号が行の終わりの合図として使われました。紙を戻す動作ではなく、ここまでで一区切りという知らせです。
同じ合図なのに、受け取る機械によって意味が違います。送る側は同じものを送っていて、それを行変えと読むか区切りと読むかは受け取る側が決めています。
合図の意味は、いつも受け取る側が持っています。
逆のことが二か所で起きている
ターミナルで動く AI に、少し長い指示を書こうとしています。MulmoTerminal は AI を何枚ものマスに並べて見張るための画面です。無料で、オープンソースとして公開されています。
このバグを直して。
条件はこれ。
テストも足して。
一行目を書いて、Shift と Enter を押します。送信されました。まだ書き終わっていないのに。
そして同じ日、スマホから返信しようとして送信ボタンを押すと、テキストが入るだけで送信されません。
この二つは同じ原因です。不具合ではありません。Claude Code 側のキー設定と食い違っているサインです。
決めているのはターミナルではない
ここが理解の鍵になります。
Enter で送信するか改行するかを決めているのは、MulmoTerminal ではなく Claude Code です。そしてその判定は、キーの名前ではなくバイト列で行われます。
ターミナルは Enter が押されたと伝えているのではなく、決まった数値の並びを送っています。関係するのは二つで、素の Enter が送るものと、Shift や Option を足した Enter が送るものです。
それを送信と読むか改行と読むかは、受け取る側が決めます。タイプライターと電信機の話と同じ構図です。
標準では、素の Enter が送信
Claude Code の標準は、素の Enter が送信で Shift を足した Enter が改行です。これが MulmoTerminal の既定なので、設定を変えていない限りこの記事の設定は不要です。
ただし人によっては、Claude Code を逆に設定していることがあります。そうすると二つの症状が同時に出ます。
Shift を足した Enter が送信になります。逆の側が送信になっているからです。そしてスマホの送信がテキストを入れるだけになります。素の Enter を送っているからです。
一行で合わせる
設定はこれだけです。
{ "terminalSubmit": "esc-cr" }
これで、キーボードもスマホも、自分の Claude Code の設定に合わせて動きます。
どちらのモードでも、人から見た意味は同じです。Enter が送信で、Shift を足した Enter が改行。設定に合わせてバイト列だけが入れ替わります。
選ぶ基準は一つ
esc-cr を選ぶのは、Shift を足した Enter が改行ではなく送信になってしまう場合だけです。
判断が付かないときは既定のままにして、おかしいときに切り替えます。
安心できる点があって、書き間違えても Enter は壊れません。使えない値を書いた場合は無視されて既定に戻ります。設定を触るのが不安な部分なので、ここが安全なのは助かります。
反映に三手かかる
設定画面から変えるのが一番早いです。両方のモードが挙動の言葉で並んでいます。
手で書く場合は三手です。設定ファイルに書いて、ブラウザのタブを再読み込みして、アプリを再起動します。
キーボードはページを読むときに値を読み、スマホ側は起動時にファイルから読みます。読むタイミングが違うのが、この三手の理由です。再読み込みだけやってスマホが直らないときは、再起動を忘れています。
Claude のマスだけに効く
一つ大事な切り分けがあります。
この設定は Claude Code のキー設定を表すものなので、効くのは Claude のマスだけです。素のターミナルや Codex のマスは、常に素の Enter で送信します。
これは正しい線引きだと思います。シェルの Enter は OS の作法なので、Claude の都合で変えるものではありません。設定を変えたらシェルの Enter もおかしくなった、が起きません。
スマホでは改行が入れられない
画面上のキーボードは素の Enter しか送れません。Shift を足した Enter は無く、Android では Return キーが通常の Enter ですらないことが多いです。
スマホでは、画面上のキーボードから改行は入れられません。複数行は入力欄から送ってください。
日本語入力には影響しない
ここは安心してよい点です。
変換中の Enter は変換の確定として扱われて、どちらのモードでも送信や改行にはなりません。変換候補を確定する Enter が送信になってしまう、という事故は起きません。
日本語で AI に指示を出すときに一番気になるところなので、明示されているのは助かります。
ボタンから起動したときも、この設定に従う
一つ知っておくと診断が楽になる点があります。
最初の指示を入れた状態で起動する場合、たとえばスキルのボタンや記録の画面から開いた会話では、その指示が入力欄に打ち込まれて代わりに送信されます。この送信もこの設定に従います。
設定を間違えていると、ボタンから起動したのに送信されていないという症状も出ます。一見別の不具合に見えるので、繋がっていることを知っていると早く直せます。
使ってみる
MulmoTerminal は、次の一行で立ち上がります。ターミナル(Windows なら PowerShell、Mac ならターミナル)を開いて、そのまま貼り付けます。
npx mulmoterminal@latest
ブラウザが開いて http://localhost:34567 が表示されれば成功です。インストールという作業はなく、合わなければ閉じるだけで終わります。止めるときは、打ったターミナルで Ctrl + C を押します。
動かない場合、足りないものは次の二つのどちらかです。
| 確かめ方 | 無ければ | |
|---|---|---|
| Node.js 22.12 以上 | node -v |
nodejs.org/ja/download の LTS。入れたらターミナルを閉じて開き直す |
| Claude Code | claude --version |
macOS は curl -fsSL https://claude.ai/install.sh | bash、Windows は irm https://claude.ai/install.ps1 | iex。そのあと claude でログイン |
Claude Code は、AI をターミナルから使うためのコマンドです。使うには Claude の有料プラン(Pro / Max / Team / Enterprise)か API のアカウントが必要で、無料プランには含まれていません。MulmoTerminal 自体は無料で、AI の使用量はその契約から引かれます。
書く場所は ~/.mulmoterminal/config.json です。無ければ作ります。設定画面の Terminal keys からでも変えられます。
{
"terminalSubmit": "esc-cr"
}
書いたら、タブを再読み込みしてアプリも再起動します。キーボード用とスマホ用で読むタイミングが違うので、両方必要です。
Shift を足した Enter で改行が入り、素の Enter で送信されれば成功です。
やめるときは、その項目を消すか "cr" に戻します。使えない値を書いても既定に戻るだけで、Enter が壊れることはありません。
まとめ
タイプライターの Return は紙を戻す動作で、電信の機械では同じ符号が区切りの合図でした。合図の意味は受け取る側が決めます。
Enter で送信するか改行するかを決めているのは、ターミナルではなく Claude Code です。Shift を足した Enter が送信になってしまうのは、その設定と食い違っているサインです。
terminalSubmit を esc-cr にすると合います。書き間違えても既定に戻るだけなので、Enter が壊れる心配はありません。
