Claude CodeのClaude-Session trailerを消すsessionUrl設定
クラウドやRemote Controlのコミットに付くClaude-Session行とPRのセッションリンクを、attribution.sessionUrlで省く方法。設定を置く場所と、付いたかどうかの確かめ方を扱います。
Claude-Session行は何で、どう消すか
Claude-Sessionは、Claude Codeがクラウドセッションまたはリモート操作(Remote Control)のセッションからコミットやPRを作るとき、claude.aiのセッションリンクを添えるgit trailerです。コミットにはtrailerとして、PR本文にはリンクとして入ります。消すにはattribution.sessionUrlをfalseにします。
{
"attribution": {
"sessionUrl": false
}
}このキーは既定がtrueです。v2.1.183で追加されました。Co-Authored-Byの署名文を変えるキー(commitとpr)とは別のスイッチで、署名文の側はattributionでコミット署名とPR署名を変える記事で扱っています。ここでは、セッションリンクだけを狙って外す場面に絞ります。
どのセッションで付き、どこに入るのか
公式の設定リファレンスは、対象を「クラウドまたはRemote Controlのセッションからコミットするか、PRを開くとき」と書いています。ローカルの端末でそのままclaudeを起動したセッションは、この記述に含まれていません。
セッションリンクの入る場所
コミット
メッセージ末尾にClaude-Sessionのtrailerとして入ります。git logのtrailer機能で取り出せます。
PR本文
説明文の中にリンクとして入ります。trailerではなく通常の文面です。
リンクの先は、そのコミットを作ったセッションです。コミットから「どの会話でこの変更が生まれたか」をたどれるので、履歴の追跡には便利です。一方で、コミットメッセージに外部サービスのURLが残るのを避けたいリポジトリもあります。
見え方はセッションの共有設定に左右される
クラウドセッションの共有では、閲覧範囲を切り替えます。Team・EnterpriseアカウントはPrivateとTeam、Max・ProアカウントはPrivateとPublicから選びます。Publicはclaude.aiにログインした誰にでも見えます。共有の節は、セッションに非公開リポジトリのコードや認証情報が含まれうるとも注意しています。
共有の節は閲覧範囲の切り替えだけを定めていて、trailerのリンクを誰が開けるかの条件は載っていません。気になるときは、実際にリンクを開いて共有設定を確かめるのが確実です。公開リポジトリでは、リンクがそのまま外部に残ります。
設定をどこに書けば効くか
置き場所は、セッションがどこで動くかで変わります。クラウドセッションは手元のマシンではなく、リポジトリの新しいクローン上で動くため、ローカルで当たり前に効く置き場所がそのままでは届きません。
クラウドセッションの場合
クラウドセッションで読まれる設定ファイル
読まれる
.claude/settings.jsonは、リポジトリの一部としてクローンされます。リポジトリが1つのセッションでは、ここに書いたキーが有効です。
読まれない
~/.claude/settings.jsonと.claude/settings.local.jsonは読まれません。どちらも手元のマシンにあり、ローカルファイルはクローンに含まれないためです。
つまり、自分のホームの設定にsessionUrl: falseを書いても、クラウドセッションのリンクは消えません。ブラウザのclaude.ai/codeで/configを開いても、変わるのはclaude.ai側のClaude Code設定で、セッションのattributionではありません。消したいリポジトリの.claude/settings.jsonにコミットして初めて効きます。
リポジトリを複数つないだセッションにも注意が要ります。Anthropicが管理する環境で複数のリポジトリを使うと、各リポジトリの.claude/settings.jsonから読まれるのはenabledPluginsとextraKnownMarketplacesの2キーだけです。この構成ではattributionが読まれないことになるので、単一リポジトリのセッションを前提に置き場所を決めます。環境の種類や制限はクラウドセッションで使えるツールとリソース制限にまとまっています。
組織全体で揃えたいときの選択肢は、サーバー管理設定です。手元のmanaged-settings.jsonやMDMのプロファイルはクラウドセッションに届きませんが、組織のサーバー管理設定は届きます。どのクラウドセッションが受け取るかは、モデル設定ページの利用形態別の対応表が示しています。モデルの許可リストを例にした表ですが、サーバー管理設定はWeb・モバイル・クラウドセッションに届き、Claude Tagのセッションだけが例外です。
Remote Controlの場合
Remote Controlは、claude.ai/codeやスマホのアプリから、手元のマシンで動いているclaudeを操作する仕組みです。実行もファイル操作も手元のマシンのままなので、クラウドの「個人設定は読まれない」という規則は当てはまりません。公式のRemote Controlページは、ファイルシステム、MCPサーバー、プロジェクト設定が手元のまま使えると説明しています。~/.claude/settings.jsonは、そのマシンの全プロジェクトに効く通常のユーザー設定です。
つまりRemote Controlだけで使う個人の環境なら、ホームの設定にsessionUrl: falseを書けば足ります。チームで揃えるなら、クラウドと同じく.claude/settings.jsonにコミットします。
落とし穴は、claude remote-controlの起動時に--settingsのようなフラグを付けることです。サーバーが作るセッションに引き継がれないフラグは起動が拒否されるため、設定は設定ファイルに書いておきます。手元で/statusを実行すると、読み込まれた設定ファイルがSetting sourcesの行に並ぶので、意図したファイルが効いているかを確かめられます。
Remote Controlが会話に投稿するセッションURLは別の機能で、sessionUrlでは消えません。
設定が届かないときの切り分けは、settings.jsonが反映されないときの確認手順にまとめています。
署名をすべて消すときの注意
attributionをfalseだけにする書き方はv2.1.281以降のみ受け付けます。古いバージョンはfalseを拒否し、その設定ファイルを丸ごと読み飛ばします。チームに古いバージョンが混ざるなら、commitとprを空文字にし、sessionUrlをfalseにしたオブジェクト形式にします。この書き分けとCo-Authored-Byの文言の変え方は、attributionでコミット署名とPR署名を変える記事に詳しくあります。
trailerが付いたか確かめる
設定を入れたら、実際のコミットで確かめます。Claude-Sessionはgit trailerなので、git logの書式指定で取り出せます。
# trailerの値を1行ずつ表示する
git log --format='%h %(trailers:key=Claude-Session,valueonly,separator=%x2C )'
# 付いているコミットのハッシュだけ拾う
git log --format='%h' --grep='^Claude-Session:'使い捨てのリポジトリで、Claude-Session行を含むコミットと含まないコミットを1つずつ作り、Git 2.50.1で試しました。1つ目のコマンドは、含まないコミットには空欄を、含むコミットにはURLを返します。2つ目は含むコミットのハッシュだけを返しました。設定後の新しいコミットでこの空欄を確認できれば、sessionUrl: falseが届いたと判断できます。
付与済みのtrailerは設定では消えない
sessionUrlが決めるのは、これから作るコミットにリンクを足すかどうかです。すでにコミットされたClaude-Session行は、設定を変えても残ります。
消す場合はgitの操作になります。手元の使い捨てリポジトリでは、直近のコミットをgit commit --amendでClaude-Session行なしに書き換えると、trailerの取り出し結果が空に変わりました。ただし、履歴の書き換えはpush済みのコミットのハッシュを変えます。共有ブランチに載ったコミットに行う前に、チームの運用ルールを確認してください。
trailerを集計や検査に使うとき
trailerは、コミットとセッションを結ぶ手がかりになります。クラウドセッション由来のコミットだけを抽出するのは、--grep1行で足ります。
git log --grep='^Claude-Session:' --onelinesessionUrlをfalseにすると、この抽出ができなくなります。AI経由のコミットを区別したい場合は、Co-Authored-Byの側を使うか、PRのラベルなど別の印を用意する形になります。逆に、リンクを消してもCo-Authored-Byには影響しません。2つのキーは独立しているからです。
コミットメッセージを規約で検査しているリポジトリでは、行の長さにも注意が要ります。署名行がcommitlintに引っかからないかどうかは、commitlintでコミットメッセージの書式を揃える記事で、Claude-Session行を含むメッセージを実際に通して確かめています。
まとめ
Claude-Session行を消す設定はattribution.sessionUrl: falseの1行です。クラウドセッションに効かせるには、リポジトリの.claude/settings.jsonに置きます。クラウドセッションでは個人のホーム設定が読まれません。手元のマシンで動くRemote Controlなら、ホームの設定でも効きます。
消した後は、新しいコミットでgit logのtrailer表示が空になることを確認します。過去のコミットは変わらないため、残っている行は履歴の書き換えという別の判断になります。