mcpField
P
permission-check

permission-check

github.com/pedrohcgsエージェントワークフロー1.7k37 回インストール4 週間前に更新
リポジトリ

permission-check について

Claude Code の VS Code、CLI、プロジェクト、セッション各層の権限設定を調べる読み取り専用スキルです。上書きの競合を特定し、ホスト全体のファイルを読む前に確認を求めます。

主な機能

  1. 016 層の権限設定を確認
  2. 02モードの優先順位と上書きを判定
  3. 03allow と deny のルールを統合
  4. 04よくある設定ミスを検出
  5. 05無関係なホスト設定を伏せる

活用シーン

  1. 01権限プロンプトが出る原因の特定
  2. 02プロジェクト設定の bypass を診断
  3. 03VS Code と CLI のモードを比較
  4. 04古いセッションモードの調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/pedrohcgs/claude-code-my-workflow --skill permission-check

インストール後、Claude Code で/permission-checkを入力して読み込まれたか確認します。

詳細

権限チェック

目的

Claude Code が尊重するすべてのレイヤーにおける権限モードの全体像を示し、プロンプトが表示される(または表示されない)理由をユーザーがひと目で確認できるようにします。Claude Code は 6 層のスタックから権限モードを解決するため、いずれか 1 層の設定ミスが、目視ではデバッグしにくいサイレントな上書きを引き起こします。

6 つのレイヤー(優先順位:下のレイヤーが優先)

  1. VSCode ユーザー設定 — ~/Library/Application Support/Code/User/settings.json(macOS)、%APPDATA%/Code/User/settings.json(Windows)、~/.config/Code/User/settings.json(Linux)。キー:claudeCode.initialPermissionMode。
  2. VSCode ワークスペース設定 — <repo>/.vscode/settings.json。同じキーを使用します。ユーザー設定より優先されます。
  3. CLI ユーザー設定 — ~/.claude/settings.json。キー:permissions.defaultMode。
  4. CLI プロジェクト設定 — <repo>/.claude/settings.json。同じキーを使用します。ユーザー設定より優先されます。
  5. CLI プロジェクトローカル設定 — <repo>/.claude/settings.local.json。同じキーを使用します。プロジェクト設定より優先されます。
  6. セッション内モード — セッション開始時にレイヤー 1〜5 から設定され、その後は Shift+Tab(CLI)またはモードインジケーター(VS Code / Desktop)から変更できます。/permissions で管理するのは許可/拒否ルールであり、モードではありません。セッションが終了するまで有効です。

スタックに優先する 2 つのルール(Anthropic の permission-modes ドキュメント、2026-09-26 に再確認):

  • レイヤー 4 と 5 では、開始モードとして auto または bypassPermissions は適用されません。そこに設定した bypassPermissions は無視され、ターミナルセッションは Manual(default)で開始します。そこに設定した auto は無視され、組み込みのデフォルトが適用されます。それ以外のモード値は、どのレイヤーからでも適用されます。
  • VS Code 拡張機能は、開始モードの設定にレイヤー 4〜5 を読み込みません。auto を受け付けない claudeCode.initialPermissionMode を使用し、bypass 値を使うには拡張機能の Allow dangerously skip permissions トグルが必要です。上書き設定がない場合、Claude Code ≥ 2.1.283 は auto モードで開始します。

まず「bypass がプロジェクト設定に設定されているが、そこでは適用されない」ケースを確認し、その後、以下のセッション中の上書きを確認してください。

重要なポイント: initialPermissionMode が適用されるのはセッション開始時のみです。セッション中に切り替えた場合(または設定を変更する前にセッションを開始した場合)、ファイルレベルの設定は正しくても、実行時のモードは異なります。これと、プロジェクト設定にのみ bypass が設定されていることが、「bypass が機能しない」という混乱の主な原因です。

プライバシーに関する取り決め

ホスト全体に適用される設定ファイル(~/.claude/settings.json、VSCode ユーザー設定)には、次の情報が含まれている場合があります。

  • 無関係なプロジェクトへのパスやシークレット
  • このリポジトリ外で追加された API キー、トークン、プロバイダーの認証情報
  • ユーザーの組織または雇用主が設定した権限ポリシー

このスキルは、多層防御を目的として設計されています。フェーズ A は自動実行され、リポジトリ内のファイルのみを読み取ります。 フェーズ B では、ユーザーが明示的に確認した場合に限り、ホスト全体に適用されるファイルを読み取ります。決して無断で読み取ることはありません。ホスト全体に適用されるレイヤーを報告する際は、permissions.*、claudeCode.*、allowDangerouslySkipPermissions に直接関係しないキーをすべて伏せてください。

プロトコル

フェーズ A:リポジトリ内のレイヤー(自動実行)

これらはすぐに読み取ってください。リポジトリにチェックインされている(またはリポジトリ内で Git に無視されている)ため、信頼境界を越えません。

VSCODE_WS="${CLAUDE_PROJECT_DIR}/.vscode/settings.json"
CLI_PROJECT="${CLAUDE_PROJECT_DIR}/.claude/settings.json"
CLI_LOCAL="${CLAUDE_PROJECT_DIR}/.claude/settings.local.json"

存在する各ファイルから、以下を抽出します。

  • VSCode ワークスペース: claudeCode.initialPermissionMode と allowDangerouslySkipPermissions(claudeCode. プレフィックスなし。claudeCode.allowDangerouslySkipPermissions のようにプレフィックスが付いたものを見つけた場合は、無視される誤記として指摘してください)
  • CLI プロジェクト/プロジェクトローカル: permissions.defaultMode、permissions.allow、permissions.deny

ファイルが見つからなくても問題ありません。エラーにせず、「存在しません」と報告してください。

上記の 2 つの優先ルールを適用し、この 3 つのレイヤーだけから解決された defaultMode を出力してください。レイヤー 4 または 5 だけにある bypassPermissions または auto は、解決されたモードではなく無視されるものとして報告してください。それだけでプロンプトが表示される理由が説明できる場合(例:.claude/settings.json にのみ bypass が設定されている場合)は、ここで終了し、診断結果と修正方法を提示してください。修正方法は、~/.claude/settings.json に移す、--permission-mode bypassPermissions を指定する、または auto モードを使う、のいずれかです。

フェーズ B:ホスト全体のレイヤー(ユーザーによる明示的な確認が必要)

フェーズ A で結論が出ない場合(例:リポジトリ内のすべてのレイヤーで bypass に一致しているのに、ユーザーにプロンプトが表示される場合)は、ユーザーに次のように尋ねてください。

「診断を完了するには、このリポジトリ外にある 2 つのファイルを読み取る必要があります。

  • ~/.claude/settings.json(CLI のユーザーレベル設定)
  • VSCode のユーザー設定(macOS の場合は ~/Library/Application Support/Code/User/settings.json、Linux/Windows では異なります)

これらには、無関係なパスやシークレットが含まれている可能性があります。permissions.*、claudeCode.*、または allowDangerouslySkipPermissions に該当しないキーはすべて伏せます。続行しますか?」

ユーザーが確認した後に限り、次を読み取ってください。

# VSCode user (platform-dependent path; try all three)
case "$(uname -s)" in
    Darwin)  VSCODE_USER="${HOME}/Library/Application Support/Code/User/settings.json" ;;
    Linux)   VSCODE_USER="${HOME}/.config/Code/User/settings.json" ;;
    MINGW*|MSYS*|CYGWIN*) VSCODE_USER="${APPDATA}/Code/User/settings.json" ;;
    *)       VSCODE_USER="" ;;
esac

CLI_USER="${HOME}/.claude/settings.json"

内容を報告する際は、関連するキーだけを抽出してください。

  • CLI ユーザー:permissions.defaultMode、permissions.allow、permissions.deny
  • VSCode ユーザー:claudeCode. で始まるキー

ファイル全体を出力してはいけません。それ以外はすべて (other keys redacted) として伏せてください。

ステップ 2:解決された状態を算出する

解決された defaultMode は、優先順位が最も高いレイヤーで設定されている値です。次を報告してください。

  • defaultMode の優先順位でどのレイヤーが採用されたか。
  • マージされた allow リスト(CLI の各階層の和集合)。
  • マージされた deny リスト(和集合。別の場所で許可されていても、deny があればそのアクションはブロックされます)。
  • VSCode の設定が bypass で CLI の設定がそれ以外(またはその逆)かどうか。これは指摘すべき正当な競合です。
ステップ 3:実行時のモードを報告する

セッション中の現在のモードは、ステータスラインで確認できます(.claude/scripts/statusline.sh を参照)。ユーザーに次のように伝えてください。

「ステータスラインにモードバッジ([AUTO]、[BYPASS]、[PLAN]、[AUTO-EDIT]、[PROMPT])が表示されている場合、それがセッション中の現在のモードです。上記で解決された defaultMode と異なる場合は、セッション中に切り替え(Shift+Tab)が行われたか、上記の解決結果ですでに説明がついています。たとえば、プロジェクト設定にのみ bypass が設定されているために [PROMPT] が表示される場合です。バッジが表示されていない場合、Claude Code はモードを報告していません。Claude Code パネルのモードインジケーターで確認できます。」

ステータスラインが設定されていない場合は、警告を出して .claude/scripts/statusline.sh を案内してください。

ステップ 4:よくある失敗パターンにフラグを立てる

次の項目を確認し、該当するものを明示してください。

  1. プロジェクト設定だけでのバイパスまたは自動モードの設定: レイヤー 4~5 では、これらの開始モードを設定できません。そこでバイパスを設定しても、セッションは手動モードで開始します。そこで auto を設定すると、組み込みのデフォルト(2.1.283 以降では自動モードがオン)にフォールバックします。対処方法:プロジェクトファイルから設定を削除し、ユーザー設定または CLI フラグでバイパスを設定するか、組み込みの自動モードのデフォルトを利用してください。
  2. レイヤー間の不一致: CLI のユーザー設定ではバイパスが指定されている一方、CLI のプロジェクトローカル設定では default が指定されている場合、プロジェクトローカルの default が優先されます(有効な値として扱われます)。これがプロンプトが表示される理由です。
  3. VSCode だけのバイパス: VSCode のレイヤーではバイパスが指定されているものの、CLI のレイヤーには指定されていない場合、ターミナル版 Claude Code では引き続きプロンプトが表示されます。拡張機能で有効にするには、Allow dangerously skip permissions をオンにする必要があります。
  4. 許可リストが空で、デフォルトモードが設定されている: defaultMode: "default" かつ allow が空の場合、設計どおり、すべてのツールでプロンプトが表示されます。
  5. 古いセッション: 設定が正しいのにユーザーからプロンプトが表示されると報告された場合、ほとんどの場合、修正前から使われているセッションが原因です。「Cmd+Shift+P → Developer: Reload Window を実行し、その後、新しい Claude Code セッションを開始してください」と案内してください。
  6. deny が優先される: deny リスト内の一致項目は、すべてのモード(バイパスを含む)で、allow の設定にかかわらずツールをブロックします。制限付きデータを扱うプロジェクトで deny ルールを使用するのは、まさにこのためです。

出力形式

=== PERMISSION STATE ===

Layer 1 — VSCode user:       bypassPermissions      (allowDangerouslySkipPermissions: true)
Layer 2 — VSCode workspace:  (not set)
Layer 3 — CLI user:          bypassPermissions      (allow: ["*"])
Layer 4 — CLI project:       (not set)              (allow: ["Edit(**)", "Bash(*)", ...])
Layer 5 — CLI project-local: bypassPermissions      NOT HONOURED — a project-layer bypass starts the session in Manual

Resolved defaultMode: default (Manual) — Layer 5's bypass overrides Layer 3 and is not honoured
Merged allow:         Edit(**), Write(**), Bash(*), ...
Merged deny:          (none)

=== RUNTIME ===

Check the status line (or the mode indicator). Expected here: [PROMPT] — the ignored Layer 5 bypass explains it.
Remove the bypass from Layer 5 and keep it in Layer 3 (or rely on auto mode) to get [BYPASS] / [AUTO].
Any other mismatch with the resolved mode is an in-session override — Shift+Tab cycles modes.

=== DIAGNOSIS ===

No layer drift detected. If you are still seeing prompts:
  1. Session is stale (started before settings were applied) — reload window + new session.
  2. VSCode extension bug — check extension version and file an issue.
  3. Tool was previously denied in this session — that denial is remembered. New session clears it.

いずれかのレイヤーに不一致がある場合は、「No layer drift detected」の行を、具体的な問題を示す内容に置き換えてください。

メモ

  • このスキルは読み取り専用です。設定を変更することはありません。
  • $CLAUDE_PROJECT_DIR が設定されていない場合は、git rev-parse --show-toplevel にフォールバックしてください。
  • プラットフォームに応じて、VSCode のユーザーパスを取得するため、macOS、Linux、Windows を判別してください。

コメント