はじめに
tmux でペインを分割して Claude Code を複数起動していると、各ペインで何をやっているのかが分からなくなりがちです。
そんな時はペインタイトルを表示することで、作業状況を一目で把握できるようになります。
Step1: tmux のペインタイトルを表示する
まずは tmux のペインタイトルを表示できるようにします。
~/.tmux.conf に以下を追加します:
set -g pane-border-status bottom
set -g pane-border-format "#[fg=black,bg=blue] #P #{pane_title}"
設定を反映させます:
tmux source-file ~/.tmux.conf
これでペインタイトルが表示されるようになります。
参考として、このタイトルは任意の文字列に変更できます:
tmux select-pane -T "ペインタイトルのテスト〜ここに表示されます〜"
Step2: Claude Code のデフォルト表示を確認
ペインタイトルを表示した状態で Claude Code と対話を開始すると、自動的にコンテキストが表示されます。
ただし、情報が圧縮されすぎて分かりづらいのが課題です。
Step3: 最新のプロンプトをペインタイトルに表示する
そこで、最新のプロンプトメッセージをタイトルに表示するカスタマイズを行います。
まずは、Claude Code のセッションファイルから最新のメッセージを取得するスクリプトを作成します。
配置場所は任意ですが、今回は ~/.tmux/bin/update-claude-tmux-status.sh とします。
~/.tmux/bin/update-claude-tmux-status.sh
#!/bin/bash
# Claude Codeの現在のセッションの最新プロンプトをtmuxペインタイトルに表示するスクリプト
# 定数定義
readonly MESSAGE_MAX_LENGTH=200
readonly TAIL_LINES=100
# 現在のディレクトリを取得
CURRENT_DIR=$(pwd)
# Claude Codeのセッションディレクトリを構築
# ディレクトリパスのスラッシュ、ピリオド、アンダースコアをハイフンに置換してエスケープ
# 先頭に-を追加(Claude Codeの仕様)
PROJECT_DIR_ESCAPED=$(echo "$CURRENT_DIR" | sed 's/[\/\._]/-/g')
CLAUDE_PROJECTS_DIR="$HOME/.claude/projects"
SESSION_DIR="${CLAUDE_PROJECTS_DIR}/${PROJECT_DIR_ESCAPED}"
# セッションディレクトリが存在しない場合は終了
[ ! -d "$SESSION_DIR" ] && exit 0
# 最新のセッションファイルを取得
LATEST_SESSION_FILE=$(ls -t "$SESSION_DIR"/*.jsonl 2>/dev/null | head -1)
# セッションファイルが存在しない場合は終了
[ -z "$LATEST_SESSION_FILE" ] && exit 0
# 最新のユーザーメッセージを取得(エラー時は空文字)
# tail -> grep -> jq -> head の順でパイプラインを最適化
# contentが文字列の場合とtool_result配列の場合の両方に対応
LAST_USER_MESSAGE=$(tail -n "$TAIL_LINES" "$LATEST_SESSION_FILE" | \
grep '"type":"user"' | \
grep -v '"type":"tool_result"' | \
tail -1 | \
jq -r 'if .message.content | type == "string" then .message.content else empty end' 2>/dev/null | \
head -c "$MESSAGE_MAX_LENGTH")
# tmuxペインタイトルを構築
if [ -n "$LAST_USER_MESSAGE" ]; then
PANE_TITLE="💬${LAST_USER_MESSAGE}"
else
PANE_TITLE="Active"
fi
# tmuxペインタイトルを更新
if [ -n "$TMUX" ]; then
tmux select-pane -T "$PANE_TITLE"
fi
実行権限を付与することを忘れずに:
chmod +x ~/.tmux/bin/update-claude-tmux-status.sh
Hooks の設定
Claude Code で Hooks を設定し、Stop イベント時に先ほどのスクリプトが自動実行されるようにします。
~/.claude/settings.json は以下のイメージ:
{
"hooks": {
"Stop": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "~/.tmux/bin/update-claude-tmux-status.sh"
}
]
}
]
}
}
完成!
Claude Code を新たに起動すると、最新のプロンプトメッセージがペインタイトルに表示されます。
これで複数のペインで異なる作業をしていても、一目で内容が分かるようになったと思います。
カスタマイズ
表示フォーマットの変更
スクリプト内の PANE_TITLE の値を変更することで、表示形式をカスタマイズできます。
例えば、プロジェクト名を追加したり、絵文字を変更したりできます。
表示タイミングについて
本来であればプロンプト入力直後に表示したいところですが、PreToolUse や UserPromptSubmit イベントでは期待通りに動作しませんでした。
Hooks イベントの詳細は Hooks reference - Anthropic をご確認ください。
Claude Code のデフォルト表示を無効化
Claude Code による概要表示機能を無効にしたい場合は、以下の環境変数を設定して起動してください:
CLAUDE_CODE_DISABLE_TERMINAL_TITLE=1 claude
詳細は Claude Code settings - Anthropic を参照してください。CLAUDE_CODE_DISABLE_TERMINAL_TITLE については日本語ページには記載がありませんでした。
ドキュメントを確認していて気づいたのですが、デフォルトではターミナルのタイトルにも表示されるようです。
まとめ
tmux と Claude Code を組み合わせる際の課題を解決する方法を紹介しました。
この設定により、複数のペインでの作業がより効率的になるはずです。




