Skip to content

trigger_phrase regex rejects valid mentions preceded by non-whitespace chars like ( or " #941

@thierrypdamiba

Description

@thierrypdamiba

Bug

The trigger phrase regex in src/github/validation/trigger.ts requires the trigger phrase to be preceded by either start-of-string or whitespace:

const regex = new RegExp(
  `(^|\\s)${escapeRegExp(triggerPhrase)}([\\s.,!?;:]|$)`,
);

The leading boundary (^|\\s) is too restrictive. Common patterns where users naturally write the trigger phrase after non-whitespace characters silently fail to trigger.

Reproduction

With default trigger_phrase: "@claude":

Comment Triggers? Expected?
@claude help yes yes
hey @claude help yes yes
(@claude) can you check? no yes
"@claude can you check?" no yes
>@claude can you check? no yes
cc:@claude no yes

The workflow if condition (GitHub's contains()) is case-insensitive and passes all these cases, so the workflow runs. But the action's internal trigger check rejects them silently, logging "No trigger found, skipping remaining steps" with exit code 0.

Environment

  • anthropics/claude-code-action@v1 (latest as of Feb 13, 2026)
  • claude_code_oauth_token auth
  • Tested on both issue_comment and pull_request event triggers

Actual logs

No trigger was met for @claude
Trigger result: false
No trigger found, skipping remaining steps

Suggested fix

Replace (^|\\s) with a negative lookbehind for word characters (to still prevent matching inside email addresses like user@claude.com):

const regex = new RegExp(
  `(?<=^|[^a-zA-Z0-9_])${escapeRegExp(triggerPhrase)}([\\s.,!?;:]|$)`,
  "i",  // also fix #910 while we're here
);

Or more conservatively, expand the leading boundary to include common punctuation:

const regex = new RegExp(
  `(^|[\\s(>"'/])${escapeRegExp(triggerPhrase)}([\\s.,!?;:)"']|$)`,
  "i",
);

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingp2Non-showstopper bug or popular feature request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions