--disable-slash-commandsでスキルとコマンドを丸ごと無効化する
Claude Codeの--disable-slash-commandsはスキルとコマンドを止めるCLIフラグです。説明文が3通りある理由と、--bare・--safe-mode・--restrictedとの守備範囲の違いを比べます。
Claude Codeの--disable-slash-commandsは、起動時に付けるとそのセッションのスキルとコマンドをまとめて止めるCLIフラグです。ただし「何を止めるか」の書き方が、claude --help・公式のCLIリファレンス・changelogで少しずつ違います。hooksやMCPまで止めたいなら別のフラグが要り、スキルを1つだけ止めたいなら別の設定があります。
説明文が3通りある — どこまで止まるのかを読み解く
同じフラグの説明が、見る場所によって次のように変わります。
--disable-slash-commandsの3つの説明
claude --help
Disable all skills。対象の語は「skills」だけです。v2.1.287で確認しました。CLIリファレンス
Disable all skills and commands for this session。「skills and commands」とひとまとめにし、「このセッション」と範囲を区切っています。changelog v2.0.60(2025年12月6日)
disable all slash commands。フラグを追加した最初の版の表現は「slash commands」です。
名前は「スラッシュコマンドの無効化」、説明は「スキルの無効化」と食い違って見えますが、カスタムコマンドはスキルに統合されています。.claude/commands/deploy.mdと.claude/skills/deploy/SKILL.mdはどちらも/deployを作り、同じように動きます。.claude/commands/の既存ファイルはそのまま使えます。/loginや/upgradeなど組み込みコマンドを1つずつ隠す方法は、DISABLE_*_COMMAND環境変数7種の一覧にあります。
/メニューに並ぶものの出自は3種類です。CLI本体の固定ロジックで動く/clearや/modelなどの組み込みコマンドです。次に、Anthropicが同梱する/code-reviewなどのバンドルスキルがあります。最後が、ユーザーが置いたスキルとカスタムコマンドです。違いはバンドルスキルと組み込みコマンドの違いで詳しく扱っています。組み込みコマンドは3つの説明文のどれにも対象として挙がっていません。
使い方 — 起動時にフラグを付けるだけ
Claude Codeの起動時に渡せば有効になり、設定ファイルは要りません。
claude --disable-slash-commandsスクリプトからの1回限りの問い合わせにも使えます。
claude --disable-slash-commands -p "このリポジトリの構成を説明して"このフラグはCLI起動時にだけ渡す形で、対応する設定キーも環境変数も用意されていません。バンドルスキルを止めるdisableBundledSkillsがCLAUDE_CODE_DISABLE_BUNDLED_SKILLSという環境変数でも指定できるのとは対照的です。
公式リファレンスには、claude --helpに出ないフラグもあるので、--helpに無いことを使えない根拠にしないよう注意書きがあります。
サブエージェントへの影響も1つあります。サブエージェントのファイルは通常、~/.claude/agents/と.claude/agents/が監視され、変更が数秒で反映されます。--disable-slash-commandsで起動したセッションは、この監視を一切行いません。サブエージェントの定義側の仕様はAgent SDKのサブエージェント定義に書いています。
信頼できないリポジトリで -pを使うときの落とし穴
このフラグを使いたくなる典型は、クローンしたばかりのリポジトリです。.claude/skills/と.claude/commands/は、リポジトリの持ち主が置いたファイルをそのまま読みます。
ここで注意したいのは、claude -pのほうがむしろ無防備なことです。--bareなしの-pセッションは、そのプロジェクトの.claude/settings.jsonにあるhooksを実行し、.mcp.jsonのサーバーにも接続します。しかも初めて開くフォルダでも信頼ダイアログは出ず、サーバーごとの承認プロンプトも出ません。
このフラグの説明が挙げる対象はskills and commandsで、hooksとMCPは入っていません。そのため、このフラグを付けても、--bareなしの-pではhooksと.mcp.jsonは読まれる側に残ります。リポジトリの中身を一切読ませたくないなら、次の節で比べる--bareか--safe-modeの領分です。
--bare・--safe-mode・--restrictedとの守備範囲
目的で選ぶと次のようになります。右の列は公式の説明文が挙げている対象です。
| 手段 | 説明文が挙げる対象 | 指定方法 |
|---|---|---|
--disable-slash-commands | 説明文が挙げる対象skills and commands | 指定方法CLIフラグ |
--bare | 説明文が挙げる対象hooks・スキル・カスタムコマンド・サブエージェント・プラグイン・MCP・auto memory・CLAUDE.mdの自動検出をスキップ | 指定方法フラグ、CLAUDE_CODE_SIMPLE |
--safe-mode | 説明文が挙げる対象CLAUDE.md・スキル・プラグイン・hooks・MCP・カスタムコマンドとエージェント・出力スタイル・テーマ・キーバインドなど | 指定方法フラグ、CLAUDE_CODE_SAFE_MODE |
--restricted | 説明文が挙げる対象コマンド実行系ツールとWebFetchを外す。ファイルツールは作業ディレクトリ内に限定(v2.1.248以降) | 指定方法CLIフラグ |
disableBundledSkills | 説明文が挙げる対象バンドルスキルとバンドルワークフロー | 指定方法設定、CLAUDE_CODE_DISABLE_BUNDLED_SKILLS |
CLAUDE_CODE_DISABLE_POLICY_SKILLS | 説明文が挙げる対象システム全体の管理スキルディレクトリ | 指定方法環境変数 |
--bareと--safe-modeは、止めたものの周りの挙動が異なります。
--bare と --safe-mode の違い
--bare
スキル一覧が、システムリマインダーとしてClaudeに渡されなくなります。サブスクリプションのログインも読まないので、ANTHROPIC_API_KEYなどの認証を環境変数で用意します。--add-dirで渡したディレクトリの.claude/skills/は読み込まれますが、commands/とagents/は読まれません。claude --helpには「Skills still resolve via /skill-name」とあり、名前を直接打てばスキルは呼べます。チームメイトの~/.claudeにあるhooksや、プロジェクトの.mcp.jsonのMCPサーバーは、そもそも読まれないので動きません。同じ結果をどのマシンでも得たいCIやスクリプト向きの理由はここにあります。
--safe-mode
認証・モデル選択・組み込みツール・権限は通常どおり動きます。managed settingsのポリシーも有効のままで、ポリシー指定のhooksやステータスライン、ファイル候補コマンドも動きます。ただし、managedのスキル・プラグイン・CLAUDE.mdと、ポリシーで指定されたMCPサーバーは読み込まれません。LSPサーバー、ワークフロー、auto memoryも読み込まれない対象です。自動モデルフォールバックの原因がカスタマイズなのかを調べる用途も説明にあります。
--bareの制限はv2.1.286で厳しくなりました。v2.1.285以前は、対話の--bareセッションが通常どおりMCPサーバーに接続し、バックグラウンドタスクも使えていました。システムリマインダーは、対話・-pを問わず--bareのセッションすべてに送られていました。
v2.1.286以降は、リマインダーが付かないので、Claudeが先に読んだファイルがディスク上で変わっても知らされません。バックグラウンドタスクも動かず、タイムアウトに達したコマンドはバックグラウンドへ移らずに止まります。
評価ハーネスなど共有マシンでの組み合わせ方
--restrictedは、評価ハーネスが共有マシンでclaudeを動かすときに、そのマシンのユーザー設定とプロジェクト設定を読ませない用途のフラグです。読み込むのはmanaged settingsと--settingsだけで、bypassPermissionsの起動とクラウドセッションの作成も拒否します。
--restrictedが絞るのはツールと設定の読み込みで、スキルとカスタムコマンドは説明の対象語に入っていません。
スキルとコマンドには--disable-slash-commands、MCPには--strict-mcp-config --mcp-config ./eval-mcp.jsonを重ねます。eval-mcp.jsonには評価用に用意したサーバーだけを書きます。
claude --restricted --disable-slash-commands --strict-mcp-config --mcp-config ./eval-mcp.json -p "query"MCPのツールはmcp__サーバー名__ツール名の形です。ツール側で絞るなら、--disallowedTools "mcp__*"で接続中の全MCPツールを取り除けます。--toolsは組み込みツールだけを絞るフラグで、MCPツールには効きません。
バンドルスキルだけを止める設定の例外
自作スキルは残したまま、同梱分だけを外す手段がdisableBundledSkillsです。trueにしたとき、/initのような組み込みコマンドは、Claudeからは見えなくなっても、手で打てば動きます。/doctorも手で打てるままで、隠すにはDISABLE_DOCTOR_COMMANDを別に設定します。
プラグイン、.claude/skills/、.claude/commands/のスキルは影響を受けません。環境変数のCLAUDE_CODE_DISABLE_BUNDLED_SKILLS=1は、同じ効果をセッション単位で与えます。設定と環境変数のどちらかが無効にした状態を、もう一方で有効に戻すことはできません。
コンテナやCIで、運用側が用意した管理スキルだけを読み込ませたくない場合は、CLAUDE_CODE_DISABLE_POLICY_SKILLS=1が使えます。ユーザーやプロジェクトのスキルは残ります。
スキルを一部だけ止めたいとき
--disable-slash-commandsは全か無かです。範囲が違うときは別の手段を選びます。
- スキルの呼び出しをClaudeから全部止める:
/permissionsのdenyにSkillを入れます。この拒否が止めるのは、ClaudeがSkillツール経由で呼ぶ経路です。--disallowedTools "Skill"も同じ系統の手段です。/initや/security-reviewのような一部の組み込みコマンドもSkillツール経由で呼ばれるので、Claude側からの呼び出しは止まります。/compactなどの組み込みコマンドは経由しません - 特定のスキルだけ許可・拒否:
Skill(commit)のように名前で、Skill(review-pr *)のようにワイルドカードで指定します。細かい書き方はallowedTools/disallowedToolsの記事にあります - 1つのスキルだけ隠す:
skillOverridesに"deploy": "off"と書きます。値はon・name-only・user-invocable-only・offの4種類で、offはClaudeから見えなくなり、/の補完からも消えます。プラグインのスキルは対象外で、/pluginで管理します。詳しくはskillOverridesの記事にあります - Claudeの自動起動だけ止める: そのスキルのfrontmatterに
disable-model-invocation: trueを書きます。書き方はClaude Code Skills完全ガイドで扱っています
{
"skillOverrides": {
"deploy": "off"
}
}スキルの中のシェル実行だけを止める設定もあります。disableSkillShellExecutionをtrueにすると、スキルやカスタムコマンド内の!`...`と```!ブロックが実行されなくなります。ブロックは[shell command execution disabled by policy]という文字列に置き換わります。スキル自体は起動し、バンドルスキルとmanaged settings経由のスキルは対象外です。managedでの優先や確認手順はdisableSkillShellExecutionの解説にあります。
まとめ
信頼していないリポジトリを-pで読ませるなら、このフラグだけではhooksと.mcp.jsonが止まる対象に入りません。--bareか--safe-modeを先に選び、評価用途なら--restrictedと重ねます。