Claude Code のエラー

error: option '--permission-mode <mode>' argument '<value>' is invalid

結論

指定した権限モード名が存在しない状態。大文字小文字まで一致する必要があり、ask は候補に無い。

確認した版 Claude Code v2.1.259
確認日 2026年9月3日
文言の照合 Claude Code v2.1.259
最終更新 2026年9月3日
根拠 実機で確認

エラー文字列

Claude Code
error: option '--permission-mode <mode>' argument '<value>' is invalid

⚠️ 標準エラーに出て、終了コードは 1 です。 認証より前に弾かれるため、鍵の設定とは無関係です。

何が起きているか

--permission-mode に渡した値が、用意されている名前のどれとも一致していません。

正しい名前はメッセージ自体に全部書いてあります。

モード 何をするか
manual 都度たずねる
auto 自動で判断する
plan 変更せず、計画だけ立てる
acceptEdits ファイル編集を自動で許可する
dontAsk たずねない
bypassPermissions 権限確認を通さない

🔴 大文字小文字は区別されます

v2.1.238 で実測した結果です。綴りが合っていても、大文字小文字が違うと弾かれます。

渡した値 結果
acceptEdits 通る
acceptedits 弾かれる
plan 通る
ask 弾かれる(そういう名前は無い)

⚠️ ask は最もよくある間違いです。 「たずねる」モードの名前は manual です。

直し方

1. 名前をそのまま写す

メッセージの Allowed choices are の後ろが、その版で使える名前の全てです。 版によって増減するので、記事や記憶ではなくメッセージを見てください。

claude --permission-mode acceptEdits -p "..."

Windows(PowerShell)

claude --permission-mode acceptEdits -p "..."

2. 使える名前をその場で確認する

claude --permission-mode "" -p "x" 2>&1 | head -1

わざと不正な値を渡すと、その版で使える名前が一覧で出ます。 覚えておく必要はありません。

Windows(PowerShell)

claude --permission-mode "" -p "x" 2>&1 | Select-Object -First 1

3. 毎回指定したくない場合は設定に書く

settings.jsonpermissions.defaultMode に書けば、起動のたびに渡す必要がなくなります。

{
  "permissions": {
    "defaultMode": "acceptEdits"
  }
}

⚠️ 設定ファイルの JSON が壊れていると、警告なしに丸ごと捨てられます。 書いたのに効かない場合は、まず JSON として妥当かを確認してください。

Windows(PowerShell)

Get-Content "$env:USERPROFILE\.claude\settings.json" -Raw -Encoding utf8 | ConvertFrom-Json | Out-Null

macOS / Linux

python3 -c "import json,sys;json.load(open(sys.argv[1]))" ~/.claude/settings.json && echo OK

再発防止

  • 名前を記憶で書かない。 メッセージに出る一覧をその場で見る
  • ask は存在しない。都度たずねるのは manual
  • CI で使う値は、1回手元で通してから入れる。認証より前に弾かれるので、鍵が無くても検証できる
  • 毎回同じ値を渡しているなら settings.jsonpermissions.defaultMode に移す

この手順で直りませんでしたか?

環境を添えて報告いただければ、追加の原因を検証してこのページに反映します。

エラーを報告する