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日
根拠
実機で確認
エラー文字列
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.json の permissions.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.jsonのpermissions.defaultModeに移す