Claude Code /renameコマンドでセッション名を変更する
/renameでセッション名を変えるとプロンプトバーとstatuslineに反映されます。文字の安全化・重複時の変化形・SessionStartフックでの自動化まで扱います。
Claude Codeの/renameコマンドは何を変えるか
/renameは、今動いているセッションに名前を付け直し、その名前をプロンプトバーに表示するコマンドです。名前を省略して/renameだけを実行すると、それまでの会話履歴からClaude Codeが自動で名前を生成します。
対話セッションだけでなく、非対話モード(-p)からも同じように呼び出せます。ただしこの-p対応はv2.1.205以降の挙動で、それより古いバージョンでは非対話モードから/renameを打っても効きません。-pはプロンプトバーを持たない一発実行なので画面上の見た目は変わりませんが、付けた名前は会話のトランスクリプトに残ります。あとからclaude --resume <name>でその実行結果を名前指定で呼び出せる点は、対話セッションと同じです。
/rename api-migration名前を付ける理由は、複数のセッションを並行して走らせたときの取り違え防止です。バックグラウンドセッションや/forkで複製したコピーが増えるほど、生成されたタイトルだけでは区別しづらくなります。作業内容がわかる名前を自分で付けておくと、あとから--resumeのピッカーで戻るときに迷いません。
名前を付けなかったセッションにも、Claude Codeは自動で2種類のラベルを割り当てます。1つは既定表示名で、作業ディレクトリ名と2文字のサフィックスを組み合わせたmy-app-3fのような形です(v2.1.196以降)。agent viewやclaude agents --jsonの一覧で見分けるためのラベルにすぎず、復帰の手がかりにはなりません。claude --resumeや/resumeにこの既定表示名を渡しても、該当セッションは見つかりません。もう1つは生成タイトルで、最初のプロンプトを要約する形でHaikuクラスの小型モデルへのバックグラウンドリクエストが作ります。こちらは--resumeや/resumeにそのまま渡せる復帰の手がかりとして機能し、名前を付けていないセッションではstatuslineのsession_nameフィールドにもこの生成タイトルが入ります。/renameか--nameで名前を明示すると、この既定表示名と生成タイトルの両方をその名前で置き換えます。トピックが変わって生成タイトルが実態と合わなくなったときは、引数なしで/renameを再実行すれば、その時点までの会話からタイトルを作り直せます。
名前を安全な文字列に整える仕組み(v2.1.221以降)
v2.1.221以降、/renameは渡された文字列から制御文字と不可視文字を取り除き、代わりに半角スペースへ置き換えます。この処理はターミナルからの/renameだけでなく、claude.aiやデスクトップアプリなどすべてのリネーム経路に共通して適用されます。名前の長さも200文字で打ち切られます。
不可視文字を取り除いた結果、名前が空文字列になった場合は拒否され、次のメッセージが表示されます。
That name is empty once invisible characters are removed. Usage: /rename <name>コピー&ペーストした文字列に見えないゼロ幅スペースが混じっていて、名前が反映されないように見えるケースはこの安全化の対象です。v2.1.220以前ではこの置換とサイズ上限が無いため、同じ文字列を渡しても挙動が違うことがあります。制御文字や不可視文字は、そのままだとプロンプトバーやターミナルタブの表示を崩したり、他のセッションと見分けが付かない同一表示の名前を作ったりする原因になります。すべてのリネーム経路で共通に安全化することで、どこから名前を付けてもプロンプトバー・タブタイトル・statuslineの見え方が揃います。
名前が重複した場合の挙動
同じマシン上で動く対話セッションは、v2.1.232以降は名前が重複しないように管理されています。/renameまたは起動時の--nameで渡した名前が、すでに別の生きているセッションで使われている場合、Claude Codeは先に使っていた側の名前をそのまま残し、後から名乗った側だけをauth-refactor-graceful-unicornのような2単語のサフィックス付き変化形に変えたうえで、変わったことを知らせます。自分で好きな名前を選び直したい場合は、そのまま/renameをもう一度実行すれば構いません。v2.1.231以前ではこの自動リネームがなく、同じ名前を持つセッションが2つ並存していました。
この重複チェックには3つの例外があります。生成タイトルや既定表示名は対象外(明示的に付けた名前どうしの衝突だけを見る)、バックグラウンドセッションや-pセッションの起動時--nameは対象外、古いバージョンのClaude Codeが動かしているセッションは変化形に変えられない、の3つです。この条件に当てはまると、一覧上で同じ名前のセッションが2つ並ぶことがあります。
この仕組みが必要なのは、名前がプロンプトバーの表示だけでなく、他のセッションを名前で名指しする機能とも結び付いているためです。プロンプトに@を打って別のセッションを名前でメンションすると、そのセッション宛てに直接メッセージが届きます。名前が重複したまま放置されると、この宛先指定が意図しないセッションに届く事故につながるため、Claude Code側で自動的に一意性を守っています。
起動時に名前を付ける--nameフラグとの使い分け
/renameがセッションの途中で名前を変えるのに対し、claude --name(短縮形-n)は起動する時点で名前を渡すフラグです。両者は同じ名前の仕組みを共有していて、/resumeの一覧やターミナルタブのタイトルにはどちらの経路で付けた名前も同じように表示されます。
claude --name "api-migration"
claude --resume "api-migration"--nameで付けた名前はclaude --resume <name>でそのまま指定でき、セッションIDを覚えていなくても目的の会話に戻れます。対話セッションの途中で--nameと同じ名前がすでに使われていた場合も、/renameと同様に変化形が適用されます。
起動時から名前が決まっている定型作業(特定のリポジトリ用スクリプトや、CIから起動するセッションなど)には--name、作業を始めてから内容に応じて名前を付け直したい場合は/renameという使い分けになります。claude remote-control --name "My Project"のように、Remote Controlサーバーを起動するコマンドでも同じ--nameが使えます。他のスラッシュコマンドとの役割分担はClaude Codeスラッシュコマンド一覧にまとめています。
名前を付ける経路はCLIの--nameと/renameだけではありません。セッションピッカーを開いてCtrl+Rを押す、plan modeでプランを承認する(すでに名前が付いていなければプラン内容から生成タイトルが付く)、claude.aiやClaudeアプリからRemote Controlセッションの名前を変える、デスクトップアプリでセッション名を変える、という経路もあります。claude.ai/Claudeアプリ側でのリネームがCLI側にも同じ名前として反映されるのはv2.1.221以降です。CLI経路またはclaude.aiで付けた名前はclaude --resume <name>か/resume <name>でそのまま戻れます(デスクトップアプリのセッションは、そのアプリ自身が持つ履歴の中で再開します)。
--resume(短縮形-r)は、IDまたは名前を直接指定して戻る使い方と、引数なしで対話式のピッカーを開いて選ぶ使い方の両方に対応します。ピッカーと名前検索の対象には、/add-dirでそのディレクトリを追加したセッションも含まれます。IDを渡した場合は現在のプロジェクトディレクトリとそのgit worktreeをまず探し、見つからなければマシン上の他の全プロジェクトも対象に広げて検索します(v2.1.223以降)。バックグラウンドセッションはピッカー上でbgのマークが付いて区別されるので、/forkで複製したコピーに名前を付けておけば、あとでピッカーを開いたときにbgマークと名前の両方から見分けが付きます。
名前による復帰は、今いるリポジトリとそのworktree全体が対象範囲です。同じ名前が2つ以上ヒットする曖昧な状態になったとき、claude --resume <name>はその名前を検索語に入れた状態でピッカーを開きますが、/resume <name>は戻らずエラーを返します。曖昧なときは/resumeを引数なしで実行してピッカーから選び直します。
claude --resume auth-refactor付けた名前はどこに表示されるか
名前が反映される場所は3か所あります。1つ目はプロンプトバーで、/renameを実行した直後からその場で切り替わります。2つ目はターミナルのタブタイトルです。Claude Codeは既定では会話の内容から生成したタイトルをタブに表示していて、/renameや--nameで名前を付けた時点でタブ側の表示もその名前に切り替わります。この自動切り替えを止めたい場合は、terminalTitleFromRenameをfalseに設定します。名前自体は内部的に有効なままなので、--resume <name>やセッション一覧からは引き続き見つかります。
{
"terminalTitleFromRename": false
}3つ目はstatuslineのsession_nameフィールドです。ここには--nameまたは/renameで付けたカスタム名か、それが無ければ最初のプロンプトから作られる生成タイトルが入ります。my-app-3fのような既定表示名だけの状態では、このフィールドには何も入らず省略されるので、statuslineスクリプト側は「値があれば表示、無ければ他の情報で埋める」という条件分岐を書いておくと欠落時に空欄が目立ちません。
NAME=$(echo "$input" | jq -r '.session_name // empty')Claude Codeはstatuslineスクリプトへ標準入力としてJSONを渡すので、jqでsession_nameキーを抜き出すだけで名前をそのまま表示に使えます。statuslineの表示項目を一から組み立てる手順はClaude Code statuslineの設定と表示項目の選び方で扱っています。設定ファイルのキーを/configから直接書き換える方法はClaude Code configコマンドでkey=value設定を直接変更するで詳しく扱っています。
SessionStartフックで名前を自動化する
名前を毎回手で打つ代わりに、SessionStartフックの出力で自動的に付けることもできます。sessionTitleフィールドを返すと、/renameを実行したときと同じ効果でセッションに名前が付きます。作業ディレクトリの名前やgitブランチ名、worktree名から自動生成する用途に向いています。
{
"hookSpecificOutput": {
"hookEventName": "SessionStart",
"sessionTitle": "auth-refactor"
}
}このsessionTitleが効くのはsourceがstartup / resume / forkのときで、/clear後や自動要約(compaction)後には適用されません。フックへの入力にはsession_titleフィールドが含まれ、すでに--nameや/renameで名前が付いている場合はその値が渡されます。フック側でこの値を先に確認すれば、ユーザーが明示的に付けた名前を上書きせずに済みます。同じsessionTitleフィールドはUserPromptSubmitフックの出力でも使え、こちらは最初のプロンプト内容から名前を組み立てる用途に向きます。Hooksの入出力の全体像はClaude Code Hooks完全ガイドにまとめています。
公式ドキュメントが挙げる主な用途は、起動フォルダ・gitブランチ・worktree名からの自動命名です。次のスクリプトは、session_titleが空のときだけ現在のgitブランチ名をsessionTitleとして返す例です。すでに名前が付いているセッションはそのまま素通しし、ブランチ名が取れない場合(gitリポジトリ外での起動など)は何も出力せずに終了します。
#!/bin/bash
input=$(cat)
existing=$(echo "$input" | jq -r '.session_title // empty')
if [ -n "$existing" ]; then
exit 0
fi
branch=$(git branch --show-current 2>/dev/null)
if [ -z "$branch" ]; then
exit 0
fi
jq -n --arg title "$branch" \
'{hookSpecificOutput: {hookEventName: "SessionStart", sessionTitle: $title}}'settings.json側ではSessionStartイベントにこのスクリプトをcommandとして登録します。登録の書式自体は他のフックと共通なので、フィルタ条件(matcher)やイベント名の細部はClaude Code Hooks完全ガイドを参照してください。
まとめ
/renameは実行中のセッションに名前を付け直し、プロンプトバーとターミナルタブ、statuslineのsession_nameに反映するコマンドです。名前を省略すると会話履歴から自動生成され、v2.1.205以降は非対話モードからも呼べます。v2.1.221以降は不可視文字の置換と200文字の上限が入り、名前が重複した場合は自動で変化形が付きます。起動時から名前を決めておきたいなら--name、途中で付け直したいなら/renameを使い、定型的な命名はSessionStartフックのsessionTitle出力に任せると手間が減ります。