何のためのものか
claude -p(--print)で非対話実行する。スクリプトや CI/CD から呼ぶための入口で、対話でやっていたことを繰り返せる形に変えるのがここの本題。
触る
claude -p "Summarize this project"を実行するcat build-error.txt | claude -p 'concisely explain the root cause of this build error'のようにパイプで渡す- 終了コードを見る。成功時は 0、失敗時は 0 以外
パイプした stdin の上限は 10MB。 超えるとエラーを出して 0 以外で終了する。大きい入力はファイルに書き、プロンプトでそのパスを参照する。
入れる
止まらずに完走する形にする。ここを詰めないと、CI で黙って待ち続ける。
--allowedToolsで必要なツールだけ許す。 構文は permission rule syntax。Bash(git diff *)の***の前のスペースが重要**で、無いとgit diff-indexにも一致する- 基準を決めるなら permission mode を渡す。
--permission-mode acceptEditsはファイル書き込みと一般的なファイルシステムコマンドを自動承認するが、それ以外のシェルコマンドとネットワークリクエストには--allowedToolsかpermissions.allowが要る(無いと実行しようとした時点で run が中断する) - 速く軽くするなら
--bare。 hooks / skills / plugins / MCP サーバー / auto memory / CLAUDE.md の自動探索を飛ばす。OAuth 認証情報もキーチェーンも読まないので、Anthropic API ではANTHROPIC_API_KEYが要る - 挙動だけ足したいなら
--append-system-prompt
効かせる
- 結果を機械可読にする。
--output-format jsonで結果・セッション ID・メタデータが構造化 JSON になる。スキーマを固定したいなら--json-schemaを併用し、structured_outputフィールドを読む - 進捗が要るなら
--output-format stream-jsonに--verboseと--include-partial-messages。 最終行がresultメッセージ - subagent の中身を見たいなら
--forward-subagent-text。 既定では subagent のtool_useとtool_resultだけが流れる - 続きをやるなら
--continue/--resume <session-id>。 別ディレクトリから実行してよい
落とし穴
- 失敗が stdout に出る経路がある。 不正なフラグは実行開始前に stderr へ出るが、実行中の失敗(認証情報が無いなど)は結果として stdout に出力される。終了コードだけを見る検査だと、エラー文を成果物として保存してしまう
formatキーワードは強制されない。--json-schemaに"format": "email"を書いても注釈として扱われ、検証はされない-pと併用できないフラグがある。--bgは拒否される- バックグラウンド Bash タスクは終了の約 5 秒後に kill される。 一方バックグラウンドの subagent とワークフローは待たれる(既定で最大 10 分、
CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MSで変更) - ターミナル UI 専用のコマンドは使えない(
/loginなど)。逆に/model sonnetのように値を引数で取る形は動き、skill も/skill-nameをプロンプトに含めれば展開される