Claude Media
Claude Codeでセッション名を変更する方法 — /renameと--name

Claude Codeでセッション名を変更する方法 — /renameと--name

Claude Codeのセッション名は会話中なら/rename、起動時なら--nameで変更できます。反映先・重複時の変化形・SessionStartフックでの自動化まで扱います。

Claude Codeのセッション名を変更するには

セッション名の変更は、会話中なら/rename 新しい名前、起動時ならclaude -n 新しい名前(--name)で行います。過去のセッションの名前は、--resumeのピッカーでCtrl+Rを押して変えられます。

Claude Codeの/renameコマンドは何を変えるか

/renameは、今動いているセッションに名前を付け直し、その名前をプロンプトバーに表示するコマンドです。名前を省略して/renameだけを実行すると、それまでの会話履歴からClaude Codeが自動で名前を生成します。

/rename api-migration

非対話モード(-p)からも呼び出せますが、これはv2.1.205以降の挙動です。名前を付ける理由は、複数のセッションを並行して走らせたときの取り違え防止にあります。バックグラウンドセッションや/fork(v2.1.212以降)で複製したコピーが増えるほど、自動の名前だけでは区別しづらくなります。作業内容がわかる名前を自分で付けておけば、あとから--resumeのピッカーで戻るときに迷いません。

名前を付けなかったセッションには何が付くか

名前を付けなかったセッションにも、Claude Codeは2種類のラベルを割り当てます。見た目は似ていますが、あとから戻る手がかりになるのは片方だけです。

くらべる

名前なしセッションの2つのラベル

戻れない

既定表示名

作業ディレクトリ名に2文字のサフィックスを付けたmy-app-3fのような形です(v2.1.196以降)。agent viewやclaude agents --jsonの一覧で見分けるためのもので、claude --resumeや/resumeに渡しても該当セッションは見つかりません。statuslineのsession_nameにも入りません。

戻れる

生成タイトル

最初のプロンプトの要約で、小型で速いモデル(通常はHaikuクラス)へのバックグラウンドリクエストが作ります。--resumeと/resumeにそのまま渡せ、名前が無いときはstatuslineのsession_nameにも入ります。シェルやスクリプトから直接起動したclaude -pには付きません。

/renameか--nameで名前を明示すると、既定表示名は一覧でその名前に置き換わります。プロンプトバーやstatuslineの表示も、付けた名前が優先されます。トピックが変わって生成タイトルが実態と合わなくなったときは、引数なしで/renameを再実行すれば、その時点までの会話からタイトルを作り直せます。

名前はどの入口から付けられるか

定型作業やCIから起動するセッションは、claude -n auth-refactor(--name)で起動時に名前を決められます。走らせながら決めるなら/rename auth-refactorで、実行した直後からプロンプトバーが切り替わります。

過去のセッションの名前は、セッションピッカーでCtrl+Rを押すと、カーソルを当てた行について変えられます。plan modeでプランを承認したときは、まだ名前が無ければプランの内容から生成タイトルが付きます。

claude.aiやClaudeアプリでRemote Controlセッションの名前を変えると、CLI側にも同じ名前が反映されます(v2.1.221以降)。claude remote-control --name "My Project"なら、claude.ai/codeの一覧に出るタイトルを起動時に指定できます。デスクトップアプリ上での変更は、そのアプリ自身の履歴の中で再開するセッションに効きます。

/renameが途中で名前を変えるのに対し、--name(短縮形-n)は起動時点で名前を渡します。どちらで付けた名前も、/resumeの一覧とターミナルタブのタイトルに同じように表示されます。他のスラッシュコマンドとの役割分担はClaude Codeスラッシュコマンド一覧にまとめています。

v2.1.285の--helpで確認した表記

手元のv2.1.285でclaude --helpを実行すると、--nameと--resumeは次のように出力されます。--nameの説明が挙げる表示先は、プロンプトボックス・/resumeピッカー・ターミナルタイトルの3か所です。

claude --help
-n, --name <name>      Set a display name for this session
                       (shown in the prompt box, /resume
                       picker, and terminal title)
-r, --resume [value]   Resume a conversation by session ID, or
                       open interactive picker with optional
                       search term

--resumeの[value]は省略でき、省略するとピッカーが開きます。値を渡すとセッションID、または名前として解決されます。セッションの.jsonlトランスクリプトファイルの絶対パスも渡せます。

名前を付けたセッションに戻るとき

claude --resume <name>なら、セッションIDを覚えていなくても戻れます。IDを渡した場合は、現在のプロジェクトディレクトリとそのgit worktreeを先に探し、見つからなければマシン上の他のプロジェクトにも探索を広げます。他のプロジェクトまで探すのはv2.1.223以降で、それ以前は現在のプロジェクトとworktreeだけが対象でした。

claude --resume auth-refactor

名前による復帰の対象は、今いるリポジトリとそのworktree全体です。同じ名前が2つ以上ヒットしたときの挙動は、コマンドによって違います。v2.1.299以降は終了時の案内がIDになりましたが、名前での再開はそのまま使えます(終了メッセージがUUIDになる理由)。

くらべる

名前が曖昧なときの2つのコマンド

ピッカーが開く

claude --resume

その名前を検索語に入れた状態でセッションピッカーが開くので、そのまま選んで戻れます。

エラーで止まる

/resume

戻らずにエラーを返します。/resumeを引数なしで実行してピッカーを開き、選び直します。

ピッカーと名前検索には、/add-dirで現在のディレクトリを追加したセッションも含まれます。バックグラウンドセッションにはbgのマークが付きます。/fork(v2.1.212以降)で作ったコピーは、agent viewが有効ならバックグラウンドセッションになるので、名前を付けておけば、bgマークと名前の両方から見分けられます。

/clearしたあと名前はどうなるか

/clearで会話を空にしたとき、引数なしなら新しい会話は--nameや/renameで付けた名前を引き継ぎます。引き継がないのはAIが生成したタイトルのほうです。

離れる側の会話に名前を残したいときは、/clear release-prepのように名前を渡します。渡した名前は、直前の会話を/resumeのピッカーで探すときのラベルになります。新しい会話は名前なしで始まります。

名前を安全な文字列に整える仕組み(v2.1.221以降)

/renameは渡された文字列の制御文字と不可視文字を半角スペースに置き換え、名前の長さを200文字で打ち切ります。この処理はターミナルからの/renameだけでなく、claude.aiやデスクトップアプリなど、すべてのリネーム経路に共通です。

不可視文字を取り除いた結果、名前が空になった場合は拒否され、次のメッセージが表示されます。

That name is empty once invisible characters are removed. Usage: /rename <name>

コピー&ペーストした文字列に見えないゼロ幅スペースが混じっていて、名前が反映されないように見えるときは、この安全化が働いています。v2.1.220以前は置換も上限もないため、同じ文字列でも挙動が違うことがあります。

名前が重複した場合の挙動

同じマシン上の対話セッションは、v2.1.232以降、名前が重複しないよう管理されます。/renameや起動時の--nameで渡した名前が、別の生きているセッションですでに使われているとします。Claude Codeは先に使っていた側の名前を残し、後から名乗った側をauth-refactor-graceful-unicornのような2単語のサフィックス付きの名前に変えて知らせます。好きな名前に選び直したければ、/renameをもう一度実行します。

重複チェックには3つの例外があります。

  • 生成タイトルと既定表示名は対象外です。明示的に付けた名前どうしの衝突だけを見ます。
  • バックグラウンドセッションと-pセッションの起動時の--nameも対象外です。
  • 古いバージョンのClaude Codeで動いているセッションは、変化形に変えられません。

例外に当たると、一覧に同じ名前のセッションが2つ並ぶことがあります。v2.1.231以前は、この自動リネームがなく同名が並存していました。

プロンプトで@を打つと、別のセッションを名前でメンションできます。ClaudeはSendMessageでそのセッションに直接メッセージを届けます。同じ名前のセッションが並んでいると、どちらを指しているのか見分けにくくなります。

バージョン

セッション名まわりの変更が入ったバージョン

  1. v2.1.196既定表示名(my-app-3fのような形)が付く
  2. v2.1.205/renameが-pから使える
  3. v2.1.212/forkで複製したバックグラウンドセッションが作れる
  4. v2.1.221不可視文字の置換と200文字上限、claude.aiでの変更のCLI反映
  5. v2.1.223セッションIDでの復帰が他のプロジェクトまで探索する
  6. v2.1.232重複した名前に2単語のサフィックスが付く

付けた名前はどこに表示されるか

名前は/resumeの一覧のほかに、3か所へ反映されます。1つ目はプロンプトバーで、/renameの直後にその場で切り替わります。2つ目はターミナルのタブタイトルです。既定では会話から生成したタイトルが出ていて、/renameや--nameで名前を付けると、タブもその名前に切り替わります。

この切り替えを止めるには、terminalTitleFromRenameをfalseにします。タブには生成タイトルが残りますが、名前自体は有効なので、/resume <name>やセッションピッカーからは見つかります。タイトルの更新自体を止めたいときは、環境変数CLAUDE_CODE_DISABLE_TERMINAL_TITLEを1にします。この変数は、生成タイトルを作る小型モデルへのリクエストも省きます。

{
  "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を抜き出せば名前をそのまま表示に使えます。表示項目を一から組み立てる手順は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フックの出力でも使えます。こちらは最初のプロンプトの内容から名前を組み立てる用途に向きます。

次のスクリプトは、session_titleが空のときだけ現在のgitブランチ名をsessionTitleとして返す例です。名前が付いているセッションは素通しし、ブランチ名が取れない場合(gitリポジトリ外での起動など)は何も出力せずに終了します。

~/.claude/hooks/name-from-branch.sh
#!/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完全ガイドで扱っています。

まとめ

並行セッションが増える運用なら、起動時の--nameかフックのsessionTitleで最初から名前を決めておくと、/resumeが曖昧になる場面を避けられます。

参照した一次ソース

この記事の記述は、次の一次ソースと照合しています。更新時に参照先が変わった場合は一覧も更新します。

  1. code.claude.com/docs/en/commands
  2. code.claude.com/docs/en/cli-reference
  3. code.claude.com/docs/en/sessions
  4. code.claude.com/docs/en/statusline
  5. code.claude.com/docs/en/hooks
  6. code.claude.com/docs/en/settings-reference
  7. code.claude.com/docs/en/env-vars
  8. code.claude.com/docs/en/remote-control
この記事を共有:XはてブLinkedIn