← Blog · 2026-10-30
Claude Code GitHub Action Not Working? @claude Not Responding: 16 Causes and Fixes
60-second test: open the repository's Actions tab right after you comment
@claude. No run at all means GitHub never started the workflow: check causes 3 to 6. A run that fails before Claude starts usually means the actor checks rejected it (causes 7 and 8) or the secret or permissions are missing (causes 9 and 10). A green run that posted nothing is almost always automation mode writing to the run log (causes 11 and 12).
The Claude Code GitHub Action (anthropics/claude-code-action) runs Claude Code inside your own GitHub Actions workflows. It has two modes, and it picks one from your workflow file:
| Interactive mode | Automation mode | |
|---|---|---|
| When | The workflow has no prompt input |
The workflow sets a prompt input |
| Starts on | The trigger phrase (@claude by default) in an issue or PR comment, a PR review, or the title or body of a newly opened issue |
Any GitHub event in on:, including a cron schedule, with no mention needed |
| Results go to | A comment on the triggering issue or PR, updated as Claude works | The workflow run log, unless the prompt tells Claude to post and it has a tool that can |
In both modes the action checks who triggered the run before Claude starts, and the run fails if either check rejects it. Keep this in mind: most "@claude does nothing" reports are a workflow that never started, or one that started in the mode you didn't expect.
Setup: 2 causes
/install-github-appexits or fails. The quick setup works only with github.com repositories: with a gitlab.com or bitbucket.org remote it prints a notice and exits (GitLab has its own CI/CD integration). It also needs the GitHub CLI installed and signed in withgh auth login, and you need admin access to the repository. If you don't run Claude Code locally, or the command keeps failing, use the manual setup instead: install the Claude GitHub App on the repository, add a secret, and copyexamples/claude.ymlfrom the action's repository into.github/workflows/.- Setup stopped halfway. Choosing Skip for now after the app install, or pressing Esc during setup, leaves you with only some pieces in place; the closing message lists what already happened (for example a pushed branch or a saved secret). Quick setup also only opens a pull request with the workflow files:
@claudeworks once you create and merge it. Run/install-github-appagain to finish the workflow and secret steps. If the repository already has aclaude.yml, the command offers Update workflow file with latest version.
@claude gets no response: 6 causes
- The Claude GitHub App isn't installed on this repository. An organization install can be limited to selected repositories, so check the app's repository access under GitHub Apps in the repository or organization settings.
- Workflows are disabled for the repository. Anthropic's troubleshooting list puts this right after the app install. Check the Actions settings for the repository (and the organization) and that the workflow file is in
.github/workflows/. - The comment doesn't contain the trigger phrase as a whole word.
@claudemust appear as a complete word:/claudeor@claude-botdon't count. If the workflow setstrigger_phrase, use that phrase instead. Also look at the workflow'sif:line, for examplecontains(github.event.comment.body, '@claude'), which stops the runner from starting at all on comments without the phrase. - The workflow doesn't listen to the event you used. The minimal
@claudeexample only triggerson: issue_commentandpull_request_review_comment(types: [created]). A mention in the title or body of a brand-new issue, or in a PR review, only reaches Claude if youron:block includes those events too. The action's examples directory has ready-made workflows for other scenarios.
The run starts, then fails before Claude does anything: 4 causes
- The commenter doesn't have write access. On issue and pull request events, the triggering user must have write access to the repository. To let specific users without write access trigger Claude, set
allowed_non_write_usersand pass your owngithub_tokeninput. Events that no user authors, such as ascheduletrigger, skip this check. - A bot triggered the run. On every event the action rejects bot actors unless they're listed in
allowed_bots; it's there to stop bots from triggering Claude in a loop. This catches scheduled runs too: GitHub attributes a scheduled run to a repository user, usually whoever last changed thecronschedule. If that was a bot (for example a dependency-update bot), add it toallowed_bots. - The secret is missing, or the input name doesn't match it. Add
ANTHROPIC_API_KEY(a Claude Console API key) orCLAUDE_CODE_OAUTH_TOKEN(a subscription token fromclaude setup-token, available on Pro, Max, Ultra, Team and Enterprise) as a repository secret, or as an organization-level Actions secret. Then pass it to the matching input:anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}orclaude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}. The stockclaude.ymlusesanthropic_api_key, so if you added an OAuth token instead, change that line. Never paste a key straight into the workflow file. - The job is missing
id-token: write. The default GitHub App authentication needs it, and so does workload identity federation (even when you pass your owngithub_token). The@claudeexample grantscontents: write,pull-requests: write,issues: write,id-token: writeandactions: read(so Claude can read CI results on PRs). A hand-writtenpermissions:block that dropsid-token: writebreaks authentication.
The run succeeds but Claude posts nothing or can't do the job: 4 causes
- The workflow has a
prompt, so it's in automation mode. With apromptinput, results go to the workflow run log by default, not to a comment. Open the run's log to read them, or tell Claude to post in the prompt and give it a tool that can. For the code review plugin, two lines matter:--commentin the prompt (without it Claude posts nothing and the review stays in the log) andclaude_args: '--allowedTools "mcp__github_inline_comment__create_inline_comment"'. Keep thatclaude_argsline even though the skill's ownallowed-toolsnames the same tool: the action only starts the inline-comment MCP server when--allowedToolsinclaude_argsnames it. Review workflows generated before v2.1.229 wrote reviews only to the run log; rerun/install-github-appand pick the update option, or add those two lines yourself. - A plain-text prompt has no tools. In automation mode, a plain-text prompt gives Claude no shell or GitHub API access until you grant the tools it needs, with
--allowedToolsinclaude_argsor apermissions.allowrule in thesettingsinput (a JSON string or a path to a settings file). The daily-report example allowsmcp__github__list_commitsandmcp__github__list_issues. A skill invocation is different: Claude can use the tools the skill'sallowed-toolsfrontmatter grants. For how allow rules are written, see our permissions guide. - The skill or plugin isn't found on the runner. For a skill in
.claude/skills/, runactions/checkoutbefore theanthropics/claude-code-actionstep so the files exist on the runner, then pass/skill-nameas theprompt. For a skill inside a plugin, install it with theplugin_marketplacesandpluginsinputs and call it as/plugin-name:skill-name. Thepluginsvalue isplugin-name@marketplace-name, and the marketplace name comes from the marketplace's own manifest, not its repository URL. Our plugin not installing guide covers marketplace names in more detail, and the skill not triggering guide covers skills that load but never run. - The review skipped this pull request. Claude skips draft and closed pull requests, ones it judges not to need a review (automated or trivial ones), and ones that already have a comment from Claude. On public repositories, GitHub withholds secrets from runs triggered by fork pull requests, so the example review runs only on pull requests from branches in the same repository.
Schedules, CI and auth: 2 causes
- A scheduled workflow never runs. GitHub runs scheduled workflows only from the default branch, so a
cronworkflow sitting on a feature branch never fires. In public repositories GitHub also disables the schedule after 60 days without repository activity. And remember cause 8: if a bot last edited thecronline, the run is attributed to that bot and rejected unless it's inallowed_bots. - CI doesn't run on Claude's commits, or authentication fails. GitHub doesn't trigger workflows on commits made with the default
GITHUB_TOKEN. If your workflow passesgithub_token: ${{ secrets.GITHUB_TOKEN }}, remove it so the action authenticates as the Claude GitHub App, or pass a custom app token, and check that your CI triggers include the events Claude's pushes produce, such aspushorpull_request. For authentication errors, test the same key or token locally withclaudebefore debugging the workflow. Aclaude setup-tokentoken lasts one year and is tied to the subscription of the person who generated it, so for a secret shared across an organization use a Console API key, or skip stored secrets entirely with workload identity federation (anthropic_federation_rule_idandanthropic_organization_id, plusid-token: write). On Amazon Bedrock, Google Cloud's Agent Platform or Microsoft Foundry (use_bedrock,use_vertex,use_foundry), follow the cloud provider page's troubleshooting section. Local sign-in problems are covered in our login not working guide and API errors in the API error guide.
Two upgrade traps
- Your workflow still says
anthropics/claude-code-action@beta. Change@betato@v1, remove themodeinput (v1 detects the mode itself), replacedirect_promptwithprompt, and move CLI options such asmax_turnsandmodelintoclaude_args(for exampleclaude_args: "--max-turns 5").custom_instructionsbecomes--append-system-prompt. - The app asked for new permissions and nobody approved them. When the Claude GitHub App requests a permission it didn't have before, GitHub asks the account owner (an organization owner for an organization install) to approve it, and the installation keeps its old permissions until they do. If your organization only allows the permissions the action uses, you can create a custom GitHub App with Contents, Issues and Pull requests instead; that covers the action only, not Code Review or web auto-fix.
Runs that go on too long cost GitHub Actions minutes plus API tokens (or subscription usage with an OAuth token). Cap them with --max-turns in claude_args, workflow timeouts and GitHub's concurrency controls, and keep CLAUDE.md short, since Claude reads it on every run. If the rules in that file seem ignored, see CLAUDE.md or .claude/rules not working. Calling claude -p yourself in a workflow step or script instead of using the action? See Claude Code headless mode not working.
Facts on this page come from Anthropic's Claude Code docs on Claude Code GitHub Actions and authentication. This guide isn't affiliated with Anthropic.
Made by Solo Stack Kits. Once @claude answers, give it a safer setup to work with. Start with our free Claude Code safety hooks, or get the Claude Code Power Config Pack with permission presets and 8 tested safety hooks, $6 with the launch code while it lasts.