Claude Codeのtmuxペインタイトルが乱れる原因と画像が出ない理由
tmuxでClaude Codeを起動すると、ペインタイトルがGi=31,s=1…に書き換わる。画像も出ない。原因はkitty graphicsの問い合わせが包まれずに送られること。いまできる回避策を示します。
tmuxの中で起きる2つの症状は同じ原因から来ている
tmuxでClaude Codeを起動した直後、ペインタイトルが Gi=31,s=1,v=1,a=q,t=d,f=24;AAAA という文字列に変わることがあります。プロンプトを1回送ると元のセッション名に戻ります。もうひとつの症状は、プラグインのmodが描く画像が出ず、代替テキストだけが表示されることです。
どちらも、Claude Codeが起動時に送る「画像を描けるか」の問い合わせが、tmuxの内側で期待どおりに外側の端末へ届かないことに行き着きます。allow-passthrough on を入れていても直りません。
この記事では、症状ごとの原因、設定で効くもの・効かないもの、いまの回避策を順に書きます。Kitty本体の通知アイコンの話はKittyでのClaude Codeの既知の症状に、tmuxの基本設定はClaude Codeをtmuxで使う設定にあります。
ペインタイトルが Gi=31,... になる仕組み
問い合わせはAPCシーケンスで送られる
Claude Codeは、セッションを開始・再開するときに、kitty graphicsの対応を調べる問い合わせを端末へ送ります。issue #99005の報告では、その中身は次のAPCシーケンスです。
ESC _ Gi=31,s=1,v=1,a=q,t=d,f=24;AAAA ESC \GNU screenとの互換のため、tmuxはAPCの中身をペインタイトルとして扱います。ペインタイトルは #T で参照できる値なので、タイトルが Gi=31,s=1,v=1,a=q,t=d,f=24;AAAA に置き換わります。
どんなときに目に見えるか
報告にある再現条件は次の3点です。
set -g set-titles onにしているset-titles-stringに#Tを含めている- 起動後、プロンプトを送らずに1秒ほど待つ
この状態だと、ペインのタイトルと、外側の端末ウィンドウのタイトルの両方に文字列が出ます。プロンプトを処理した時点でClaude Code自身がタイトルを設定し直すため、そこで元に戻ります。報告の環境はClaude Code 2.1.285、Linux、tmuxのgit HEAD(next-3.6)、TERM=tmux-256color です。
つまり被害は表示だけです。セッションの動作や会話の内容には影響しません。ただし、タイトルにセッション名を出して複数のペインを見分けている運用では、起動直後や --resume の直後に名前が消えるので紛らわしくなります。
画像が出ないのは判定と転送の2段階で失敗するから
判定が通らない
issue #100146は、tmuxの中でkitty graphicsが有効にならない理由を2つ挙げています。
- 画像対応の問い合わせが包まれずに送られ、tmuxが外側の端末に渡さない(上で見たタイトル書き換えと同じ現象)
- 端末名の問い合わせ(
XTVERSION)にtmux自身がtmux 3.7cのように答え、kittyとGhosttyだけを許す名前の判定に落ちる
名前の判定は、tmuxの外でも別の端末で問題になっています。SwiftTermを使う端末がグラフィックスの問い合わせに正しく答えても、SwiftTerm <version> という名前のせいで拒否される、という報告が#99566です。
強制的に有効にしても転送が通らない
端末が自動検出されないときの逃げ道として、CLAUDE_CODE_FORCE_TERMINAL_IMAGES=1 があります。ところが、tmuxやscreenの中ではこれが効かないと、ドキュメントに明記されています。代替テキストは消えるものの、Claude Codeが画像をtmux・screen向けのパススルーで包まずに送るからです。
#100146のコメントは、この点をtmuxで直接確かめた結果です。
- 包まない
ESC _ G … ESC \は、allow-passthroughがoffでもonでも、外側の端末には届かない ESC P tmux; … ESC \で包み、内側のESCを二重にすると、allow-passthrough onのときに届く- 画像の転送(
a=T,U=1,…)と削除(a=d)も、問い合わせと同じく包まれていない
パススルーの包みがあるかないか
包まずに送る(現状)
ESC _ G … ESC \ がそのままtmuxに渡り、allow-passthrough の設定に関係なく外側へ出ません。問い合わせはペインタイトルになります。
`ESC P tmux; …` で包む
内側のESCを二重にして包むと、allow-passthrough on のときだけ外側の端末に届きます。issueが求めているのはこの形です。
Claude Codeは画像をUnicodeプレースホルダーで描くため、プレースホルダーのセルは普通の文字としてtmuxを通ります。パススルーが要るのは、転送のAPCだけです。
設定で効くものと効かないもの
| 手段 | タイトル書き換え | 画像表示 |
|---|---|---|
allow-passthrough on | タイトル書き換え変わらない | 画像表示変わらない |
CLAUDE_CODE_FORCE_TERMINAL_IMAGES=1 | タイトル書き換え変わらない | 画像表示代替テキストが消えるだけで、画像は出ない |
CLAUDE_CODE_DISABLE_TERMINAL_TITLE=1 | タイトル書き換え解決にならない(下記) | 画像表示関係しない |
| tmuxの外で起動する | タイトル書き換え起きない | 画像表示対応端末なら出る |
allow-passthrough on はtmuxの基本設定としてShift+Enterや通知のために入れるものです。通知や進捗バーは包まれて送られるので外側に届きますが、問い合わせと画像は包まれないため、この設定の対象外です。
CLAUDE_CODE_DISABLE_TERMINAL_TITLE=1 は、タイトルの自動更新とセッション名の自動生成を止める変数です。#99005の報告は、この変数が解決策にならない理由を2つ書いています。
- 欲しいのはセッション名の入ったタイトルで、止めたくない
- 問い合わせはOSCのタイトル更新ではなくAPCなので、変数を設定すると、書き換わった文字列が戻らず残る可能性がある
後者は報告者の推測で、検証済みの挙動ではありません。また、tmux側で allow-set-title off にすると、正常なセッション名のタイトルまで止まります。
いまできる切り分けと回避策
自分の環境で起きているかを見る
ペインタイトルが問い合わせで書き換わるかは、Claude Codeを使わなくても試せます。問い合わせと同じAPCをペインに出力して、#T の値を読みます。
# tmuxのペイン内で実行(issueが示すAPCと同じ中身)
printf '\033_Gi=31,s=1,v=1,a=q,t=d,f=24;AAAA\033\\'
# ペインタイトルを読む
tmux display-message -p '#{pane_title}'出力が Gi=31,s=1,v=1,a=q,t=d,f=24;AAAA になれば、tmuxがAPCをタイトルとして扱う挙動に当たっています。あくまでtmux側の挙動の確認で、Claude Codeが送る内容の再現ではありません。
次の順で見ると、原因の層を切り分けられます。
タイトルと画像の症状の切り分け
- Qtmuxの中でClaude Codeを動かしていますか?答えがtmuxの外答えがはい
tmuxの外なら、この記事の症状は対象外です。画像が出ないときは、端末が対応しているか、バックグラウンドセッションでないかを見ます。
- Q起動直後のペインタイトルが Gi=31,... になりますか?答えがタイトルは正常答えがはい
画像だけが出ない場合は、判定と転送の失敗です。次の問いへ進みます。
- Qset-titles-string に #T を使っていますか?答えが#T を使っていない答えがはい
使っていないなら、外側の端末のタイトルには出ません。ペインのタイトルを
pane-border-formatなどで出していないかを見ます。
issueの修正を待つ状態
#T を使う表示は一時的に乱れます。次の回避策から選びます。
回避策
issueは修正を求める要望で、ユーザー側の完全な解決策は載っていません。取れる手段は次のとおりです。
#Tを使わない:set-titles-stringを、セッション名とウィンドウ名で組み直します。例としてset -g set-titles-string '#S: #W'があります。これはtmuxの一般的な書式で、issueに載っている対処ではありません。ペインタイトルを参照しないので、APCの影響を受けません- 画像が欲しいセッションはtmuxの外で動かす: 対応端末(Ghostty、kitty 0.28以降)のタブやウィンドウで直接起動します。ドキュメントも、tmuxの中でのステータス報告について同じ回避策(tmuxの外で起動)を勧めています
- modを書く側は
altを単独で意味が通る文にする: tmux・screenの中では、利用者に見えるのは代替テキストだけです
どれもtmuxの外へ出るか、タイトルの参照先を変える手段です。tmuxの中のまま画像を出す設定は、いまのところありません。
修正の状況
報告時点では、関連するissueはいずれもopenです。#99005は2026-10-02、#100146は2026-10-07、#99566は2026-10-05に立てられています。2.1.296までのchangelogには、画像の問い合わせ・転送のパススルーに関する項目がありません。
#100146が求めている修正は3つです。
$TMUXがありallow-passthroughがonのとき、問い合わせと画像のシーケンスをすべて包む- 端末名ではなく、問い合わせへの肯定的な応答を信じる
- 読み取れない環境向けに、明示的な上書き用の環境変数を用意する
#100146のコメントは、すべてのグラフィックスのシーケンスが包まれるなら、既存の CLAUDE_CODE_FORCE_TERMINAL_IMAGES がそのまま上書き用になる、とも指摘しています。#99005側の案は、tmuxの中では問い合わせを省くか包むこと、問い合わせの後でタイトルを再送すること、問い合わせだけを止める設定を設けることです。
直ったかどうかは、claude --version のバージョンと、上の printf による切り分けで見られます。起動直後にタイトルが乱れなくなれば、問い合わせが包まれている可能性が高いです。
よくある質問
screenでも同じ症状が出る?
#99005は、tmuxがGNU screenとの互換でAPCをタイトル扱いにすると説明しています。screen側の挙動は、報告に載っていません。ドキュメントは、画像の判定がtmuxとscreenのどちらの中でも失敗すると書いています。
画像が出ない原因を端末側に探したほうがいい?
tmuxの中なら、先にtmuxを疑います。ドキュメントによれば、tmux・screenの中では端末の種類にかかわらず判定が失敗します。外側がkittyやGhosttyでも同じです。tmuxを抜けて動くなら、端末の問題ではありません。
タイトルが戻るのを待つ以外に、ペインタイトルを固定できる?
tmuxには select-pane -T でタイトルを設定するコマンドがあります。ただし、その後にClaude Codeがタイトルを書けば上書きされます。固定したいなら、#T を使わない上の回避策のほうが確実です。
まとめ
タイトルの文字化けと画像の非表示は、包まれずに送られるkitty graphicsの問い合わせと転送という同じ原因から来ています。allow-passthrough on も CLAUDE_CODE_FORCE_TERMINAL_IMAGES=1 も効かないので、手元でできるのは #T を外すか、画像が要るセッションをtmuxの外で動かすことです。包む修正が入るまでは、被害の大きい表示側(タイトル参照)を組み替えるのが現実的です。