CLAUDE_CODE_HIDE_CWDとは — 起動ロゴの作業ディレクトリを隠す環境変数
CLAUDE_CODE_HIDE_CWDは起動ロゴの作業ディレクトリ表示を隠す環境変数です。v2.1.119で追加された経緯、設定の置き場所ごとの反映タイミング、隠れない箇所、IS_DEMOとの組み合わせを扱います。
CLAUDE_CODE_HIDE_CWDは、Claude Codeの起動ロゴに出る作業ディレクトリのパスを隠す環境変数です。1を設定するだけで有効になり、パスに含まれるOSのユーザー名を画面共有や録画に映したくない場面で使います。対象は起動ロゴの作業ディレクトリで、ステータスラインのカスタムスクリプトが描くパスには効きません。
画面に映したくないのはパスのどの部分か
環境変数リファレンスの説明文は、次の1行です。
CLAUDE_CODE_HIDE_CWD: Set to 1 to hide the working directory in the startup logo. Useful for screenshares or recordings where the path exposes your OS usernameClaude Codeの対話セッションは、起動ロゴに現在の作業ディレクトリを添えます。macOSやLinuxのホームは/Users/<ユーザー名>や/home/<ユーザー名>の形で、WindowsならC:\Users\<ユーザー名>の形です。プロジェクトの絶対パスをそのまま映すと、OSのログイン名が読み取れてしまいます。
デモ配信、チュートリアル動画の録画、サポート対応の画面共有で、パスの中身が必要になる場面は少なく、起動ロゴにたまたま含まれる副産物が、個人を特定できる情報になります。この1点だけを塞ぐのが、この変数の役割です。
追加されたのはv2.1.119(2026年4月23日)で、changelogには「起動ロゴの作業ディレクトリを隠す環境変数を追加」と1行だけ書かれています。同じ版にはprUrlTemplate設定も入りました。それより前の版にはこの変数がありません。
値の書き方は、一般的なオン・オフ変数と同じです。公式の規則では、1・true・yes・onで有効、0・false・no・offで無効になり、大文字小文字は問われません。DISABLE_TELEMETRYやIS_DEMOのように「空でなければ0でも有効」という例外の変数が一覧にありますが、CLAUDE_CODE_HIDE_CWDはそこに含まれていません。
配信を始める前の手順
効かせたい場面は、たいてい本番の直前です。順番を間違えると、ロゴはもう描かれています。
録画・配信前の準備
- 1
変数を設定する
シェルで
exportするか、設定ファイルのenvキーに書きます。置き場所の違いは次の節で扱います。 - 2
Claude Codeを起動し直す
シェルの環境変数は起動時に読み込まれます。いったん終了して、
claudeを新しく起動します。 - 3
画面共有・録画を始める
ロゴにパスが出ていないことを確かめてから共有を始めます。ステータスラインのスクリプトなど、ロゴ以外の表示は別に点検します。
設定の置き場所で反映のされ方が変わる
シェルで渡す方法と、設定ファイルのenvキーに書く方法があります。
export CLAUDE_CODE_HIDE_CWD=1
claudePowerShellでは$env:CLAUDE_CODE_HIDE_CWD = "1"、コマンドプロンプトではset CLAUDE_CODE_HIDE_CWD=1を実行してからclaudeを起動します。公式ページにはこの3シェルの書き方がタブで並んでいます。
設定ファイルなら、毎回の起動に自動で効きます。
{
"env": {
"CLAUDE_CODE_HIDE_CWD": "1"
}
}2つの方法は、変更後の挙動がはっきり違います。
シェルの変数と設定ファイルの env
シェルで export
シェルの環境変数はClaude Codeが起動時に読み込みます。実行中にexportし直しても、反映されるのは次にclaudeを起動したときです。
settings.json の env
実行中のセッションにも、ファイルを保存した時点で値が再適用されます。ただし、起動時に一度だけ値を読む機能は起動時の値のままです。
同じ変数をシェルと設定ファイルの両方に書いたときは、ほとんどのセッションで設定ファイル側の値が勝ちます。envの各エントリーが、シェルから引き継いだ値を置き換えるためです。たとえばシェルにCLAUDE_CODE_HIDE_CWD=0が残っていても、設定ファイルに"1"があれば隠れます。
逆向きにも注意が要ります。設定ファイルから変数の行を消しても、実行中のセッションでは解除されません。消した効果が出るのは次の起動からです。録画が終わってパスを戻したいときも、変数を消してから起動し直します。
envの値がいつ適用されるかは、ファイルの種類で違います。
- ユーザー設定・
--settings・管理設定: 起動時に適用され、保存した変更でenvが変わればセッション中にも再適用される - プロジェクト設定・ローカル設定: ワークスペースを信頼した後に適用される。ただし機能トグルのように安全と分類された変数は、起動時に適用される
-pモードにはトラストの確認画面が出ないため、プロジェクト設定とローカル設定のenvは起動時に適用されます。対話セッションでは、初回にワークスペースを信頼するまで、安全と分類された変数を除き、これらのファイルのenvは効きません。ロゴを確実に隠したいなら、起動時に適用されるユーザー設定か管理設定に書く方法があります。
どのファイルに書くかで、効く相手も変わります。
| ファイル | 適用範囲 |
|---|---|
~/.claude/settings.json | 適用範囲自分が使う全プロジェクト |
.claude/settings.json | 適用範囲プロジェクトの全員(バージョン管理に含める) |
.claude/settings.local.json | 適用範囲自分だけ、そのプロジェクトだけ |
| 管理設定 | 適用範囲組織の全メンバー |
プロジェクトの.claude/settings.jsonに書くと、そのリポジトリで作業する全員のロゴからパスが消えます。チームの同意なしに入れると、他のメンバーの画面表示を変えることになります。自分の画面だけで済ませたいなら、ローカル設定かユーザー設定にします。
登壇用の端末なら~/.claude/settings.jsonが手頃です。特定のデモ用リポジトリに限るなら.claude/settings.jsonが向きます。
ステータスラインのパスは隠れない
ステータスラインにカスタムスクリプトを使っていると、スクリプトへ渡されるJSONにcwdとworkspace.current_dirが含まれます。2つは同じ値で、workspace.current_dirはworkspace.project_dir(Claude Codeを起動したディレクトリ)と並べやすいように推奨されている名前です。project_dirは、セッション中に作業ディレクトリが変わるとcwdと異なる値になります。
スクリプトがこの値を画面に描いていれば、CLAUDE_CODE_HIDE_CWDを設定していてもパスは出続けます。公式のサンプルスクリプトはjq -r '.workspace.current_dir'で取り出した値を、${DIR##*/}で末尾のフォルダ名だけにして表示します。この形なら、ホームのパスやユーザー名は画面に出ません。
DIR=$(echo "$input" | jq -r '.workspace.current_dir')
echo "${DIR}" # フルパス。ユーザー名が映る
echo "${DIR##*/}" # 末尾のフォルダ名だけ。公式サンプルの書き方自作のスクリプトで$DIRをそのままechoしている場合が、見落としやすい箇所です。フォルダ名自体が顧客名やプロジェクト名を含むなら、それも映したくない情報かどうかを録画の前に判断します。
「隠れる」のは表示だけで、動作は変わりません。サンドボックスの書き込み許可は作業ディレクトリが基準で、書き込める範囲はこの変数で動きません。
録画の前に気になるのはロゴだけではありません。.claudeディレクトリには履歴や設定が残るので、録画用の環境をまっさらにしたいならClaude Codeの.claudeディレクトリに残るデータの消し方も確認してください。
画面共有・録画で候補になる他の設定
配信で隠したいものは、パスのほかにもあります。対象ごとに別の変数と設定キーが用意されています。
隠したいものと使う設定
作業ディレクトリ → CLAUDE_CODE_HIDE_CWD
起動ロゴのパスだけを隠します。
メールアドレス・組織名 → IS_DEMO
ヘッダーと
/statusの出力から、メールアドレスと組織名を隠します。オンボーディングも省かれます。配信や録画向けの変数として説明されています。タブのタイトル → CLAUDE_CODE_DISABLE_TERMINAL_TITLE
会話の内容に基づくターミナルタイトルの自動更新を止めます。セッションタイトルを作るための、バックグラウンドの小型モデルへのリクエストも省かれます。
認証情報 → sandbox.credentials
サンドボックス内で、認証情報ファイルと環境変数を隠すかマスクします。画面表示ではなく、実行するコマンドから見える範囲の話です。
タイトルの変数は、古い版に不具合がありました。changelogには、設定していても起動時にターミナルタイトルが設定される問題と、終了時にタイトルが消される問題の修正が、別々の版で載っています。古いClaude Codeで配信するなら、更新してから試すほうが確実です。
ステータスラインにも、会話由来の文字列が流れ込む経路があります。スクリプトに渡されるsession_nameは、--nameか/renameで付けた名前があればそれを使い、無ければAIが作ったセッションタイトルを使います。タイトルを隠したいなら、この値を描画していないかも見ておきます。
IS_DEMOはv2.1.0で追加された変数で、CLAUDE_CODE_HIDE_CWDより古くからあります。2つを併せて配信用の設定にするなら、ユーザー設定のenvにまとめて書けます。
{
"env": {
"CLAUDE_CODE_HIDE_CWD": "1",
"IS_DEMO": "1"
}
}IS_DEMOには罠があります。公式の説明では、空でない値なら0やfalseでも有効になり、止めるには未設定か空にします。CLAUDE_CODE_HIDE_CWDと同じ感覚でIS_DEMO=0と書くと、デモモードが入ったままです。録画後にパスもメールも元に戻すときは、両方の変数を消してから起動し直します。
隠したい対象が画面ではなくネットワーク送信なら、選ぶ設定は別物です。利用状況の送信を止めるならDISABLE_TELEMETRYとは、業界共通の慣習に合わせるならDO_NOT_TRACKとはを見てください。どちらも画面上のパス表示には関係しません。
組織で配る場合
画面共有の機会が多いチーム全員に適用したいなら、管理設定のenvブロックに書きます。
{
"env": {
"CLAUDE_CODE_HIDE_CWD": "1"
}
}Claude Desktopアプリやセルフホスト環境のランナーがセッションを始める場合は、優先関係が逆になります。起動環境がすでに設定している変数については、どの設定ファイルのenvの値も無視されます。無視された変数はデバッグログに名前が出るので、設定したのに効かないときはそこを見ます。
設定ファイル間で同じ変数が重なったときは、設定の優先順位に従い、管理設定のエントリーがユーザー設定やプロジェクト設定より優先されます。個人が~/.claude/settings.jsonに別の値を書いても、管理設定の値が残ります。
まとめ
CLAUDE_CODE_HIDE_CWD=1は、v2.1.119以降で起動ロゴのパスを隠します。確実に効かせたいなら、起動時に適用されるユーザー設定か管理設定に書きます。IS_DEMOを併用していて元に戻すときは、0を書かずに変数ごと消します。