[BUG] Claude Code GitHub app crashes on large PR/issue comments within GitHub's character limit

Resolved 💬 3 comments Opened Feb 21, 2026 by dannaf Closed Mar 22, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

When Claude Code (the GitHub app) encounters a comment that is large but still
within GitHub's ~65,536 character limit, it crashes instead of processing it.
This affects:

  • Comments containing large pasted JSON codeblocks
  • Comments containing long debugging logs
  • Large content wrapped in <details> tags

@Claude crashes/errors out when invoked on issues or PRs
containing such comments — even when the content is collapsed in <details>
blocks.

Claude Code appears to have an internal size limit for
comment content that is smaller than GitHub's own limit, causing it to fail on
valid, postable comments.

What Should Happen?

Claude Code should be able to handle any comment that
GitHub itself accepts (i.e., anything within GitHub's character limit, ~65k
chars).

Error Messages/Logs

},
  "settingSources": [
    "user",
    "project",
    "local"
  ]
}
{
  "type": "system",
  "subtype": "init",
  "message": "Claude Code initialized",
  "model": "claude-sonnet-4-5-20250929"
}
{
  "type": "result",
  "subtype": "success",
  "is_error": true,
  "duration_ms": 301,
  "num_turns": 1,
  "total_cost_usd": 0.000327,
  "permission_denials": []
}
SDK execution error: 14 |     depsCount: ${X},
15 |     deps: ${Y}}`};var Tj={keyword:"dependencies",type:"object",schemaType:"object",error:IB.error,code(Q){let[X,Y]=xj(Q);jB(Q,X),RB(Q,Y)}};function xj({schema:Q}){let X={},Y={};for(let $ in Q){if($==="__proto__")continue;let W=Array.isArray(Q[$])?X:Y;W[$]=Q[$]}return[X,Y]}function jB(Q,X=Q.schema){let{gen:Y,data:$,it:W}=Q;if(Object.keys(X).length===0)return;let J=Y.let("missing");for(let G in X){let H=X[G];if(H.length===0)continue;let B=(0,W9.propertyInData)(Y,$,G,W.opts.ownProperties);if(Q.setParams({property:G,depsCount:H.length,deps:H.join(", ")}),W.allErrors)Y.if(B,()=>{for(let z of H)(0,W9.checkReportMissingProp)(Q,z)});else Y.if(h$._`${B} && (${(0,W9.checkMissingProp)(Q,H,J)})`),(0,W9.reportMissingProp)(Q,J),Y.else()}}IB.validatePropertyDeps=jB;function RB(Q,X=Q.schema){let{gen:Y,data:$,keyword:W,it:J}=Q,G=Y.name("valid");for(let H in X){if((0,_j.alwaysValidSchema)(J,X[H]))continue;Y.if((0,W9.propertyInData)(Y,$,H,J.opts.ownProperties),()=>{let B=Q.subschema({keyword:W,schemaProp:H},G);Q.mergeValidEvalu
16 | `))Q=Z0(Q);let $=`${new Date().toISOString()} [${X.toUpperCase()}] ${Q.trim()}
17 | `;if(YW()){d7($);return}hV().write($)}function WW(){return $W()??process.env.CLAUDE_CODE_DEBUG_LOGS_DIR??XW(U9(),"debug",`${o7()}.txt`)}var fV=k1(()=>{if(process.argv[2]==="--ripgrep")return;try{let Q=WW(),X=QW(Q),Y=XW(X,"latest");if(!$1().existsSync(X))$1().mkdirSync(X);if($1().existsSync(Y))try{$1().unlinkSync(Y)}catch{}$1().symlinkSync(Q,Y)}catch{}});var rV=!1;function F0(Q,X){let Y=performance.now();try{return X()}finally{performance.now()-Y>zQ}}var oV={cwd(){return process.cwd()},existsSync(Q){return F0(`existsSync(${Q})`,()=>f.existsSync(Q))},async stat(Q){return uV(Q)},async readdir(Q){return lV(Q,{withFileTypes:!0})},async unlink(Q){return mV(Q)},async rmdir(Q){return cV(Q)},async rm(Q,X){return pV(Q,X)},async mkdir(Q,X){await dV(Q,{recursive:!0,...X})},async readFile(Q,X){return JW(Q,{encoding:X.encoding})},async rename(Q,X){return iV(Q,X)},statSync(Q){return F0(`statSync(${Q})`,()=>f.statSync(Q))},lstatSync(Q){return F0(`lstatSync(${Q})`,()=>f.lstatSync(Q))},readFileSync(Q,X){return F0(`readFileSync
18 | `),N9}function N1(Q){let X=$q();if(!X)return;let $=`${new Date().toISOString()} ${Q}
19 | `;Qq(X,$)}function BW(Q,X){let Y={...Q};if(X){let $={sandbox:X};if(Y.settings)try{$={...L9(Y.settings),sandbox:X}}catch{}Y.settings=Z0($)}return Y}class Q4{options;process;processStdin;processStdout;ready=!1;abortController;exitError;exitListeners=[];processExitHandler;abortHandler;constructor(Q){this.options=Q;this.abortController=Q.abortController||D6(),this.initialize()}getDefaultExecutable(){return R6()?"bun":"node"}spawnLocalProcess(Q){let{command:X,args:Y,cwd:$,env:W,signal:J}=Q,G=W.DEBUG_CLAUDE_AGENT_SDK||this.options.stderr?"pipe":"ignore",H=Wq(X,Y,{cwd:$,stdio:["pipe","pipe",G],signal:J,env:W,windowsHide:!0});if(W.DEBUG_CLAUDE_AGENT_SDK||this.options.stderr)H.stderr.on("data",(z)=>{let K=z.toString();if(N1(K),this.options.stderr)this.options.stderr(K)});return{stdin:H.stdin,stdout:H.stdout,get killed(){return H.killed},get exitCode(){return H.exitCode},kill:H.kill.bind(H),on:H.on.bind(H),once:H.once.bind(H),off:H.off.bind(H)}}initialize(){try{let{additionalDirectories:Q=[],agent:X,betas:Y,cwd:$,execu

error: Claude Code process exited with code 1
      at Y (/home/runner/work/_actions/anthropics/claude-code-action/v1.0.53/node_modules/@anthropic-ai/claude-agent-sdk/sdk.mjs:19:7919)
      at emit (node:events:98:22)
      at #handleOnExit (node:child_process:520:14)

Error: Action failed with error: SDK execution error: Error: Claude Code process exited with code 1
Fetching issue comment 3938628122
Successfully fetched as issue comment
✅ Updated issue comment 3938628122 with job link
Error: Process completed with exit code 1.

Steps to Reproduce

  1. Create a GitHub issue or PR comment with a large JSON codeblock or log

output (e.g., >X chars, still under 65k)

  1. Invoke @Claude on that issue/PR
  2. Observe crash/error

Claude Model

Sonnet (default)

Is this a regression?

I don't know

Last Working Version

_No response_

Claude Code Version

2.1.50 (Claude Code)

Platform

Other

Operating System

Ubuntu/Debian Linux

Terminal/Shell

Other

Additional Information

No terminal -- this is about the GitHub App/connector, when typing @claude on GitHub.

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗