「SDK execution error」でclaude-code-actionが落ちる原因と対処法
「SDK execution error」のログに出る圧縮コードは本当の原因ではありません。認証・残高・モデルID・引数の4系統の見分け方を、issueの報告からまとめます。
GitHub Actionsでanthropics/claude-code-actionを動かすと、API呼び出しが一度も走らないまま「SDK execution error」とexit code 1で止まることがあります。ログに並ぶのはJavaScriptの圧縮コードの断片です。そこだけを読むと、Agent SDKに同梱されたライブラリの不具合に見えます。
ところがissueのやり取りを追うと、実際の原因は報告ごとにばらばらでした。認証入力の取り違え、クレジット残高の不足、終了したモデルIDへの404、claude_argsに入れた--output-format jsonの4種類が、同じ見た目のログに化けています。
SDK execution errorのログの特徴
失敗したRunのログは、total_cost_usd: 0かつis_error: trueという組み合わせで終わります。subtypeはsuccessのままなのにis_errorがtrueという食い違った出力になり、その直後に圧縮済みJavaScriptの断片がエラーメッセージとして出ます。
実際のエラーログ例(issue #892より抜粋)
{
"type": "result",
"subtype": "success",
"is_error": true,
"duration_ms": 372,
"num_turns": 1,
"total_cost_usd": 0,
"permission_denials": []
}
SDK execution error: 14 | depsCount: ${Q},
15 | deps: ${$}}`};var Pj={keyword:"dependencies",type:"object",schemaType:"object",error:EB.error,code(X){...
error: Claude Code process exited with code 1
at $ (/home/runner/work/_actions/anthropics/claude-code-action/v1/base-action/node_modules/@anthropic-ai/claude-agent-sdk/sdk.mjs:19:7668)num_turns: 1が記録されるものの、Claude本体が応答を返す前に止まっています。多くの報告では、チェックアウトや権限設定までは正常に進み、Claude Codeの起動直後に失敗しています。
別の形もあります。issue #1026では、workflow_dispatchで動かしたRunでClaudeの作業がsubtype: successで完了したあとに、同じSDK execution errorが出たと報告されています。ログの見た目が同じでも、止まる場所が起動前とは限りません。
圧縮コードの断片はエラーの本文ではない
断片の中身は、JSON Schemaバリデーターのajvが持つdependenciesキーワードの検証コードです。このため初期のissueでは、@anthropic-ai/claude-agent-sdkに同梱されたajvの例外が原因だという見立てが広まりました。
実際、issue #852はSDKが0.2.9から0.2.15に上がった直後に起票され、issue #892はSDKが0.2.27に上がったコミットの直後に起票されています。ところが#892では、SDK 0.2.22・0.2.25・0.2.29のどれでも同じクラッシュが起きたという追加報告が出ました。特定バージョンの問題とは言い切れなくなったわけです。
同じ報告者は、対象リポジトリの.mcp.jsonに複数のMCPサーバー定義があり、enableAllProjectMcpServers: trueを設定していたことを疑いました。.mcp.jsonに多数のサーバーを並べる構成の注意点はMCPのツール定義がコンテキストを圧迫する理由で扱っています。
流れが変わったのは、2026年7月に#892へ届いた報告です。報告者は、断片は子プロセスが落ちた位置のソースコードを実行環境のBunが表示しているだけで、実際のエラーではないと述べています。ajvや認証処理の内部を読み解こうとして1日を費やした、とも書いています。
5か月分のスレッドを、見立てが動いた順に並べます。
issueスレッドの流れ
- 2026年1月22日#852が起票される
SDK 0.2.9から0.2.15への更新後にajvのエラーが出たと報告されました。
- 2026年1月23日認証入力の取り違えという見立て
詳細ログから
authentication_failedが見つかります。コラボレーターの返信は「他では再現しておらず、v1もmainも動いている」という1件です。 - 2026年2月2日#892が起票される
SDK 0.2.27以降で再現するとして起票されましたが、同じ日のうちに古いSDKでも落ちるという追加報告が付きました。
- 2026年2月4日〜7日版の固定が割れる
Claude Code本体を固定して
path_to_claude_code_executableで渡す方法が共有される一方、アクションのSHA固定では直らないという報告も出ました。 - 2026年3月4日〜10日原因が複数あると分かり始める
v1.0.68でも再現する報告が続き、3月10日には@betaで再実行してクレジット残高不足の本当のメッセージが出たという報告が付きます。 - 2026年5月〜7月モデルIDと引数の原因が出る
既定モデルが終了済みIDに解決されて404になったケース(5月)と、
--output-format jsonが原因だったケース(7月)が報告されました。
#852・#892とも、状態はopenのままでp1のラベルが付いています。#892にはコラボレーターのコメントがなく、根本原因の確定や修正版の告知はスレッドに書かれていません。
本当のエラーを表に出す手順
原因が複数あるなら、最初にやるのは設定をいじることではなく、隠れているエラーを読むことです。issueで報告された手段は3つあり、効く場面が違います。
ログから本当のエラーを取り出す順番
- 1
DEBUG_CLAUDE_AGENT_SDKを設定する
子プロセスの標準エラー出力は、この環境変数を設定したときだけ表示されると報告されています。起動直後に落ちるケースでも、最後のエラーメッセージが読めるようになります。
- 2
show_full_outputを一時的に有効にする
show_full_output: trueにすると、Claude Codeの出力JSON全体がログに出ます。issue #852では、これでAPI Error: 401とInvalid bearer tokenが見つかりました。ただし子プロセスが起動直後に死ぬケースでは出力が空になるため、この入力だけでは読めないという報告もあります。 - 3
@betaに切り替えて読めるメッセージを出す
旧来の
@betaでは、同じ失敗がJSONのresultに読める文言で返ったという報告が2件あります。ただし@betaは入力体系が異なり、promptやclaude_argsを使う自動化の構成では動かないとも報告されています。
- uses: anthropics/claude-code-action@v1
env:
DEBUG_CLAUDE_AGENT_SDK: "1"
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
show_full_output: true
prompt: "Review this PR"show_full_outputの公式の説明には、ツール実行結果を含むすべてのメッセージが出力され、シークレットが含まれうるうえ、ログが公開されると書かれています。公開リポジトリでは、原因を特定したらすぐ戻すのが前提です。DEBUG_CLAUDE_AGENT_SDKは報告者が子プロセスの起動オプションとして挙げたもので、action.ymlとusage.mdの入力一覧には載っていません。
報告された4つの原因と見分け方
ログに出てくる本当のメッセージで、原因を次のように振り分けられます。
出てきたメッセージ別の直し方
authentication_failed / Invalid bearer token
認証入力が合っていません。
anthropic_api_keyとclaude_code_oauth_tokenのどちらに何の値を入れたかを見直します。Credit balance is too low
APIクレジットの残高不足です。残高を追加すれば
v1でも動いたという報告があります。not_found_error / model: ...
既定モデルが終了済みのIDに解決されています。
claude_argsの--modelで提供中のIDを明示します。メッセージが出ない(--output-format)
claude_argsに--output-format jsonが入っていないかを調べます。外すだけで直ったという報告があります。
認証入力の取り違え
issue #852では、OAuthトークン用のシークレットをclaude_code_oauth_tokenで渡していた報告者が、詳細ログで401を見つけました。この報告者は、anthropic_api_keyに入れ替えると直ったと述べています。
別の報告者は、claude_code_oauth_tokenはドキュメントに載った正規の入力だと指摘し、単純な設定ミスで片付けるべきではないと反論しました。実際、action.ymlにはclaude_code_oauth_tokenがanthropic_api_keyの代替として定義されています。さらにOAuthトークンで認証していた報告者のなかには、SHA固定でも同じajvのエラーを見たという人もいます。認証方式の組み合わせによって起きる失敗が、設定ミスなのかアクション側の不具合なのかは、スレッドでは決着していません。
認証の選び方そのものはClaude CodeをGitHub Actionsに組み込むで扱っています。
クレジット残高
#892では、クレジットを追加したら直ったという報告と、十分な残高があっても同じクラッシュが出るという報告が並びました。2つは矛盾しません。残高不足が原因になるケースもあれば、別の原因のケースもあるだけです。
3月10日の報告が、その切り分けを示しています。@betaで再実行すると"result": "Credit balance is too low"が出て、残高を補充した後はv1も@betaも動いたそうです。同じ報告者は、アクションが壊れているのではなく、エラーメッセージが隠れていることが問題だと整理しています。
既定モデルの404
2026年5月の報告では、@betaに切り替えたところAPI Error: 404とnot_found_errorが読めました。メッセージの中身はmodel: claude-sonnet-4-20250514です。アクションが既定で選んだモデルIDが、すでに提供されていなかったと報告者は述べています。
対処は、claude_argsで提供中のモデルIDを固定することです。この報告者は--modelを足して@v1が正常に動くようになりました。引数の渡し方はGitHub ActionsのパラメータとCLI引数をClaude Codeで渡すにまとめています。model・max_turns・allowed_toolsといった個別の入力は、公式のusage.mdで非推奨と書かれており、claude_argsへの移行が案内されています。
claude_argsの--output-format
2026年7月の報告者は、API鍵・シークレット・モデルID・アクションのバージョンをすべて疑って潰したあと、原因がclaude_argsに入れていた--output-format jsonだと突き止めました。アクションのAgent SDKは、起動したclaudeコマンドとストリーム形式のJSONで通信します。出力形式を上書きすると、この通信が成り立たず、子プロセスがすぐ終了するという説明です。
この報告者は、--model・--max-turns・--allowedToolsは付けたままで問題がなかったと述べています。古いSDKのSHAに固定しても同様に落ちた、とも書かれています。SHA固定の話とは別系統の原因です。
JSON出力が欲しくてこのフラグを付けた場合も、代替は要りません。同じ報告者によると、SDKの実行出力ファイルにはtotal_cost_usdが最初から含まれるため、この文脈ではフラグを付けても得るものがありません。
「claude_argsを外したら動いた」という初期の報告も、この型に当てはまる可能性があります。ただし別の報告者は、modelやallowed_toolsを含まない最小構成でも落ちたと述べています。引数が原因のケースと、そうでないケースが混ざっているということです。
版の固定が効いた報告と効かなかった報告
2月前後のスレッドでは、版を固定する対処が割れました。
| 対処法 | 報告された結果 |
|---|---|
アクションのSHAを01e756bに固定 | 報告された結果2月初旬に動いたという報告と、同じSHAでも落ちたという報告が併存。2月23日に再び解決したという報告あり |
claude_argsを外して最小構成にする | 報告された結果直ったという報告と、最小構成でも落ちたという報告が併存 |
Claude Code本体を固定してpath_to_claude_code_executableで渡す | 報告された結果複数の報告者が同じ手順で解決したと報告 |
3つ目の方法では、npmで動作実績のあるバージョンを入れ、そのパスをアクションに渡します。
- name: Install Claude Code v2.1.18
run: |
sudo rm -f /usr/local/bin/claude
npm install -g @anthropic-ai/claude-code@2.1.18
CLAUDE_BIN=$(which claude)
echo "CLAUDE_PATH=$CLAUDE_BIN" >> $GITHUB_ENV
- name: Run Claude Code Action
uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
path_to_claude_code_executable: ${{ env.CLAUDE_PATH }}action.ymlでは、path_to_claude_code_executableを渡すと自動インストールを飛ばしてその実行ファイルを使う、と説明されています。同じ説明に、古いバージョンを使うとアクションが新しい機能を使い始めたときに問題が出うる、という警告も添えられています。通常は不要で、特定の問題を調べるときのための入力という位置づけです。
2月23日の報告では、アクションの更新でClaude Code本体がv2.1.49に上がったあと、SHA固定で再び解決しました。時期によって結果が違うのは、そのとき表に出ていた原因が違った可能性があります。
アクションのバージョンを古く固定する場合は、入力名の非互換にも注意が必要です。v1.0.51に固定してmodel・max_turns・allowed_toolsを渡した報告者は、そのバージョンでは無効な入力として扱われたと述べています。SDKのクラッシュを避けるつもりで版を下げると、別の問題に当たることがあります。
同じ終了コード・同じログでも原因が1つとは限らないという構図は、「process exited with code N」の対処でも出てきます。
発生環境とトリガーの幅
報告された環境はubuntu-latestが中心ですが、LinuxとmacOS armの両方で試して直らなかったという報告もあります。トリガーもpull_request・issue_commentの@claudeメンション・workflow_dispatchと幅があり、特定のトリガーに限った問題ではありません。
まとめ
「SDK execution error」の圧縮コードは読まず、DEBUG_CLAUDE_AGENT_SDKで本当のエラーを出してから、認証入力・残高・モデルID・claude_argsの順に当てはめます。どれにも当たらず、起動直後にだけ落ち続ける場合に、Claude Code本体の固定が選択肢になります。
Agent SDK全般のエラーはAgent SDKのエラー集にもあります。残高があるのに「Credit balance is too low」だけが返ることもあります。その切り分けはCredit balance is too lowの原因と回避策にあります。
参照した一次ソース
この記事の記述は、次の一次ソースと照合しています。更新時に参照先が変わった場合は一覧も更新します。