
Claude Code のセッション名を手動 rename せずに自動命名するようにしてみた
はじめに
データ事業本部の荒木です。
Claude Code を複数案件で並行運用していると、プロンプトバー右上に表示されるセッション名が (unnamed) のままになり、/resume でセッションを切り替えるときにどれがどれだか分からなくなることはありませんか。/rename で都度命名するのも手間なので、UserPromptSubmit フックで自動命名する仕組みにしました。本記事ではその方法を紹介します。
環境
- OS: Windows 11 + WSL2 (Ubuntu)
- Claude Code: フック (
hookSpecificOutput.sessionTitle) が利用できるバージョン - シェル: bash
- 依存コマンド:
jq
本題
全体構成
UserPromptSubmit フックでスクリプトを呼び出し、入力 JSON の session_name が空のときだけ sessionTitle を返してセッション名を自動付与します。既に /rename で名前が付いている場合や --name で起動した場合は何もしません。
ユーザーがプロンプトを送信
↓
UserPromptSubmit フック発火
↓
auto-rename-session.sh
↓
session_name が空? ── Yes → cwd と日時から sessionTitle を返す
└─ No → 空 JSON を返して何もしない
↓
Claude Code が画面右上のセッション名を更新
フックスクリプトの作成
~/.claude/scripts/auto-rename-session.sh を新規作成します。
私はセッション名をClaude Codeを実行した際のパスと実行タイムスタンプを自動命名するように実装しています。
複数ターミナルで作業しているときにどのリポジトリで実行していClaudeなのかを見分けれればよかったので、これで十分かなと思ってます。
#!/usr/bin/env bash
# Claude Code UserPromptSubmit フック: 未命名セッションに「cwd + 日時」で自動命名する
# 入力: JSON (stdin) — Claude Code から渡される。session_name / cwd を参照する
# 出力: sessionTitle を含む hookSpecificOutput JSON。既に命名済みなら空 JSON を返して何もしない
input=$(cat)
session_name=$(echo "$input" | jq -r '.session_name // empty')
# 既に名前が付いていれば触らない (/rename や --name を尊重)
if [ -n "$session_name" ] && [ "$session_name" != "null" ]; then
echo '{}'
exit 0
fi
cwd=$(echo "$input" | jq -r '.cwd // empty')
if [ -z "$cwd" ] || [ "$cwd" = "null" ]; then
cwd="$PWD"
fi
stamp=$(date '+%Y-%m-%d %H:%M')
title="${cwd} ${stamp}"
jq -n --arg title "$title" '{
hookSpecificOutput: {
hookEventName: "UserPromptSubmit",
sessionTitle: $title
}
}'
ポイントは 2 つです。
session_nameがある場合は空 JSON{}を返して何もしない。/renameで付けた名前や--nameフラグで指定した名前を上書きしないようにしています。- 戻り値の JSON は
hookSpecificOutput.sessionTitleの形。Claude Code のフック仕様で、この形で返すとセッション名 (画面右上) と端末タブのタイトルが更新されます。
実行権限を付けておきます。
chmod +x ~/.claude/scripts/auto-rename-session.sh
settings.json への登録
~/.claude/settings.json の hooks.UserPromptSubmit に上記スクリプトを登録します。
{
"hooks": {
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "bash /home/<USER>/.claude/scripts/auto-rename-session.sh"
}
]
}
]
}
}
JSON 構文に誤りがないことを確認します。
jq . ~/.claude/settings.json > /dev/null && echo "JSON OK"
動作確認
ターミナルからClaudeを立ち上げて確認してみます。
Claude Codeを立ち上げた際には、まだ命名されていません。

何かしらの指示をした後に、自動でセッション名が付与されます。

まとめ
- UserPromptSubmit フックで
hookSpecificOutput.sessionTitleを返すと、/renameを呼んだのと同じ効果でセッション名を更新できる session_nameが空のときだけ返すようにすれば、/renameや--nameで付けた名前は尊重される
複数案件を並行で扱うときに /resume の見分けやターミナルの見分けが格段に楽になります。
是非お試しください。










