Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
170 commits
Select commit Hold shift + click to select a range
d7e3cfb
chore: Update CHANGELOG.md
actions-user Feb 5, 2026
ef1e0ac
chore: Update CHANGELOG.md
actions-user Feb 6, 2026
2bc62d1
chore: Update CHANGELOG.md
actions-user Feb 6, 2026
e7f36bc
chore: Update CHANGELOG.md
actions-user Feb 7, 2026
85f2807
chore: Update CHANGELOG.md
actions-user Feb 7, 2026
19bb071
chore: Update CHANGELOG.md
actions-user Feb 10, 2026
be5d08f
chore: Update CHANGELOG.md
actions-user Feb 10, 2026
0b641a7
chore: Update CHANGELOG.md
actions-user Feb 11, 2026
bae1698
chore: Update CHANGELOG.md
actions-user Feb 11, 2026
675baff
chore: Update CHANGELOG.md
actions-user Feb 11, 2026
54f0b53
chore: Update CHANGELOG.md
actions-user Feb 11, 2026
9b64827
chore: Update CHANGELOG.md
actions-user Feb 11, 2026
7a7bed7
chore: Update CHANGELOG.md
actions-user Feb 11, 2026
e74abe5
chore: Update CHANGELOG.md
actions-user Feb 11, 2026
0a0135f
chore: Update CHANGELOG.md
actions-user Feb 11, 2026
6dcc7d8
ensure comments are not left if --comment is not present
fvolcic Feb 11, 2026
f2a9307
Merge pull request #25102 from anthropics/fvolcic/code-review-comment…
km-anthropic Feb 11, 2026
aca4801
chore: Update CHANGELOG.md
actions-user Feb 12, 2026
76a2154
chore: Update CHANGELOG.md
actions-user Feb 12, 2026
a170402
Add daily sweep to enforce issue lifecycle label timeouts
chrislloyd Feb 12, 2026
77df0af
chore: Update CHANGELOG.md
actions-user Feb 12, 2026
bac22cb
Merge pull request #25210 from anthropics/chrislloyd/sweep-lifecycle-…
chrislloyd Feb 12, 2026
0931fb7
chore: Update CHANGELOG.md
actions-user Feb 12, 2026
a939662
Unify issue lifecycle labeling and sweep into a single system (#25352)
chrislloyd Feb 12, 2026
2322133
chore: Update CHANGELOG.md
actions-user Feb 12, 2026
1b50583
chore: Update CHANGELOG.md
actions-user Feb 13, 2026
42c62d7
chore: Update CHANGELOG.md
actions-user Feb 13, 2026
a01a88d
chore: Update CHANGELOG.md
actions-user Feb 13, 2026
b374a30
chore: Update CHANGELOG.md
actions-user Feb 13, 2026
edfb543
Fix sweep script crashing on locked issues (#25649)
chrislloyd Feb 13, 2026
8c09097
Post a comment when lifecycle labels are applied to issues (#25665)
chrislloyd Feb 14, 2026
d787369
chore: Update CHANGELOG.md
actions-user Feb 16, 2026
32c7ff2
chore: Update CHANGELOG.md
actions-user Feb 17, 2026
4523c00
chore: Update CHANGELOG.md
actions-user Feb 17, 2026
1718a57
Fix issues being auto-closed despite human activity (#26360)
chrislloyd Feb 17, 2026
b757fc9
chore: Update CHANGELOG.md
actions-user Feb 18, 2026
b18f2e7
chore: Update CHANGELOG.md
actions-user Feb 19, 2026
0d996a7
chore: Update CHANGELOG.md
actions-user Feb 19, 2026
65dfa98
chore: Update CHANGELOG.md
actions-user Feb 20, 2026
3ad3231
chore: Update CHANGELOG.md
actions-user Feb 20, 2026
3592c8b
Use wrapper script for label operations in issue triage
OctavianGuzu Feb 23, 2026
76826f2
Merge pull request #27911 from anthropics/oct/use-label-script-for-tr…
OctavianGuzu Feb 23, 2026
6aecb15
chore: Update CHANGELOG.md
actions-user Feb 24, 2026
baf29b8
chore: Update CHANGELOG.md
actions-user Feb 24, 2026
8f0fe03
chore: Update CHANGELOG.md
actions-user Feb 24, 2026
3c917df
Add non-write users check workflow
OctavianGuzu Feb 24, 2026
05a2bde
chore: Update CHANGELOG.md
actions-user Feb 24, 2026
8799bb0
Merge pull request #28243 from anthropics/oct/non-write-users-check
OctavianGuzu Feb 24, 2026
6e7f65e
chore: Update CHANGELOG.md
actions-user Feb 25, 2026
a0128f4
chore: Update CHANGELOG.md
actions-user Feb 25, 2026
db3858a
chore: Update CHANGELOG.md
actions-user Feb 25, 2026
b2bab3b
Add gh.sh wrapper for gh CLI commands in workflows
OctavianGuzu Feb 25, 2026
ee4ff28
chore: Update CHANGELOG.md
actions-user Feb 25, 2026
ed58789
Merge pull request #28533 from anthropics/oct/gh-wrapper-script
OctavianGuzu Feb 25, 2026
23edca9
Remove unused id-token permission and migrate oncall-triage to gh.sh …
OctavianGuzu Feb 25, 2026
76c0cba
Merge pull request #28756 from anthropics/oct/cleanup-workflow-permis…
OctavianGuzu Feb 25, 2026
d6ab0ea
chore: Update CHANGELOG.md
actions-user Feb 26, 2026
0167340
chore: Update CHANGELOG.md
actions-user Feb 26, 2026
e67079b
Increase oncall-triage workflow timeouts
OctavianGuzu Feb 26, 2026
644d6eb
Merge pull request #28967 from anthropics/oct/increase-oncall-triage-…
OctavianGuzu Feb 26, 2026
7ec9125
chore: Update CHANGELOG.md
actions-user Feb 26, 2026
1f48d79
chore: Update CHANGELOG.md
actions-user Feb 27, 2026
35b5fe6
Remove oncall triage workflow and commands
claude Feb 28, 2026
a772bd6
Merge pull request #29462 from anthropics/claude/remove-oncall-label-…
bogini Feb 28, 2026
cd49568
chore: Update CHANGELOG.md
actions-user Feb 28, 2026
26a1334
Improve gh.sh wrapper: stricter validation and better error messages
OctavianGuzu Mar 2, 2026
38281cf
Merge pull request #30066 from anthropics/oct/gh-wrapper-improvements
OctavianGuzu Mar 2, 2026
9c63e98
chore: Update CHANGELOG.md
actions-user Mar 4, 2026
a833523
chore: Update CHANGELOG.md
actions-user Mar 4, 2026
0b3f7cb
chore: Update CHANGELOG.md
actions-user Mar 4, 2026
9582ad4
chore: Update CHANGELOG.md
actions-user Mar 5, 2026
da80366
chore: Update CHANGELOG.md
actions-user Mar 6, 2026
53a5f3e
chore: Update CHANGELOG.md
actions-user Mar 7, 2026
00553de
chore: Update CHANGELOG.md
actions-user Mar 10, 2026
540b61b
chore: Update CHANGELOG.md
actions-user Mar 10, 2026
f6dbf44
chore: Update CHANGELOG.md
actions-user Mar 10, 2026
45b5430
chore: Update CHANGELOG.md
actions-user Mar 11, 2026
6f049b6
chore: Update CHANGELOG.md
actions-user Mar 12, 2026
db8834b
feat(code-review): pass confirmed=true when posting inline comments
km-anthropic Mar 12, 2026
2dc1e69
Merge pull request #33472 from anthropics/kashyap/code-review-batch-o…
km-anthropic Mar 12, 2026
48b1c6c
chore: Update CHANGELOG.md
actions-user Mar 13, 2026
420a188
chore: Update CHANGELOG.md
actions-user Mar 14, 2026
079dc85
chore: Update CHANGELOG.md
actions-user Mar 17, 2026
a3d9426
chore: Update CHANGELOG.md
actions-user Mar 17, 2026
5e34f19
chore: Update CHANGELOG.md
actions-user Mar 18, 2026
1653669
chore: Update CHANGELOG.md
actions-user Mar 19, 2026
6aadfbd
chore: Update CHANGELOG.md
actions-user Mar 20, 2026
cada21c
chore: Update CHANGELOG.md
actions-user Mar 25, 2026
a542f1b
chore: Update CHANGELOG.md
actions-user Mar 25, 2026
a0d9b87
chore: Update CHANGELOG.md
actions-user Mar 26, 2026
f75b613
chore: Update CHANGELOG.md
actions-user Mar 26, 2026
2923bc8
chore: Update CHANGELOG.md
actions-user Mar 27, 2026
78a44f1
chore: Update CHANGELOG.md
actions-user Mar 29, 2026
e8f6f0b
Merge branch 'anthropics:main' into main
fvegiard Mar 30, 2026
2d5c1ba
chore: Update CHANGELOG.md
actions-user Mar 30, 2026
4411cba
Read issue number from workflow event in helper scripts (#40969)
OctavianGuzu Mar 31, 2026
66ab4ae
chore: Update CHANGELOG.md
actions-user Mar 31, 2026
b4fa5f8
chore: Update CHANGELOG.md
actions-user Apr 1, 2026
a50a919
chore: Update CHANGELOG.md
actions-user Apr 1, 2026
1e03cc7
chore: Update CHANGELOG.md
actions-user Apr 2, 2026
b543a25
chore: Update CHANGELOG.md
actions-user Apr 4, 2026
b9fbc77
chore: Update CHANGELOG.md
actions-user Apr 7, 2026
227817d
chore: Update CHANGELOG.md
actions-user Apr 8, 2026
22fdf68
chore: Update CHANGELOG.md
actions-user Apr 8, 2026
54c7be5
Tighten invalid-label rule and require a category label on new issues
bogini Apr 9, 2026
3c72545
Merge pull request #45798 from anthropics/inigo/triage-prompt-accuracy
bogini Apr 9, 2026
d2b2252
Add MDM deployment example templates (#45866)
ant-kurt Apr 9, 2026
c5600e0
chore: Update CHANGELOG.md
actions-user Apr 9, 2026
9772e13
chore: Update CHANGELOG.md
actions-user Apr 10, 2026
550aeec
chore: Update CHANGELOG.md
actions-user Apr 13, 2026
194736a
chore: Update CHANGELOG.md
actions-user Apr 14, 2026
5c18c78
chore: Update CHANGELOG.md
actions-user Apr 14, 2026
f348a16
chore: Update CHANGELOG.md
actions-user Apr 15, 2026
45ae2f5
chore: Update CHANGELOG.md
actions-user Apr 15, 2026
4fb8aa4
chore: Update CHANGELOG.md
actions-user Apr 15, 2026
5a7bf28
chore: Update CHANGELOG.md
actions-user Apr 16, 2026
bf77ee6
chore: Update CHANGELOG.md
actions-user Apr 16, 2026
2b53fac
chore: Update CHANGELOG.md
actions-user Apr 16, 2026
71366ec
chore: Update CHANGELOG.md
actions-user Apr 17, 2026
0385848
chore: Update CHANGELOG.md
actions-user Apr 18, 2026
ed5d836
Merge branch 'anthropics:main' into main
fvegiard Apr 20, 2026
fe53778
chore: Update CHANGELOG.md
actions-user Apr 20, 2026
2fa6771
chore: Update CHANGELOG.md
actions-user Apr 22, 2026
9afdfd7
chore: Update CHANGELOG.md
actions-user Apr 22, 2026
925200d
chore: Update CHANGELOG.md
actions-user Apr 23, 2026
a5fa36c
fix: point $schema at schemastore.org (URL was 404) (#52239)
dhollman Apr 23, 2026
ab3ce06
chore: Update CHANGELOG.md
actions-user Apr 23, 2026
c393344
chore: Update CHANGELOG.md
actions-user Apr 25, 2026
7e93645
chore: Update CHANGELOG.md
actions-user Apr 25, 2026
c128568
fix: yaml.github-actions.security.run-shell-injection.run-shell-injec…
orbisai0security Apr 27, 2026
1586204
chore: Update CHANGELOG.md
actions-user Apr 28, 2026
a609cfb
chore: Update CHANGELOG.md
actions-user Apr 28, 2026
e512ec9
chore: Update CHANGELOG.md
actions-user Apr 29, 2026
a243cad
chore: Update CHANGELOG.md
actions-user May 1, 2026
5bf1994
chore: Update CHANGELOG.md
actions-user May 1, 2026
9fce4e6
chore: Update CHANGELOG.md
actions-user May 4, 2026
5c0e4f9
chore: Update CHANGELOG.md
actions-user May 6, 2026
71135e4
chore: Update CHANGELOG.md
actions-user May 6, 2026
52b9f24
Pin GitHub Actions to commit SHAs
jportner-ant May 6, 2026
60348c9
chore: Update CHANGELOG.md
actions-user May 6, 2026
fb063cd
Update HackerOne links in SECURITY.md (#53949)
OctavianGuzu May 7, 2026
6cd790c
chore: Update CHANGELOG.md
actions-user May 7, 2026
2bd8547
chore: Update CHANGELOG.md
actions-user May 8, 2026
f7ef09f
Merge pull request #56784 from anthropics/devsec/pin-actions
jportner-ant May 8, 2026
33a87ad
chore: Update CHANGELOG.md
actions-user May 9, 2026
831608a
chore: Update CHANGELOG.md
actions-user May 9, 2026
fdfbc06
chore: Update CHANGELOG.md
actions-user May 11, 2026
6b070c3
chore: Update CHANGELOG.md
actions-user May 12, 2026
c571267
chore: Update CHANGELOG.md
actions-user May 13, 2026
d61bfb5
chore: Update CHANGELOG.md
actions-user May 14, 2026
8bdbb72
chore: Update CHANGELOG.md
actions-user May 15, 2026
2962ecd
chore: Update CHANGELOG.md and feed.xml
actions-user May 18, 2026
69d7070
chore: Update CHANGELOG.md and feed.xml
actions-user May 19, 2026
b7925a8
chore: Update CHANGELOG.md and feed.xml
actions-user May 19, 2026
cc898dc
chore: Update CHANGELOG.md and feed.xml
actions-user May 19, 2026
1573399
chore: Update CHANGELOG.md and feed.xml
actions-user May 21, 2026
15b5d57
chore: Update CHANGELOG.md and feed.xml
actions-user May 21, 2026
c6b849f
Remove changelog entry included in error
claude May 21, 2026
efea4c3
Merge pull request #61319 from anthropics/remove-changelog-entry
sid374 May 21, 2026
65d44eb
chore: Update CHANGELOG.md and feed.xml
actions-user May 21, 2026
2194e8e
chore: Update CHANGELOG.md and feed.xml
actions-user May 22, 2026
64e5382
chore: Update CHANGELOG.md and feed.xml
actions-user May 22, 2026
5ef2f06
Use workload identity federation for Claude auth in CI workflows (#61…
ashwin-ant May 22, 2026
39e853e
chore: Update CHANGELOG.md and feed.xml
actions-user May 23, 2026
441892e
Update security-guidance plugin
mhegazy May 26, 2026
ccadef7
Merge pull request #62586 from mhegazy/security-guidance-v2
mhegazy May 26, 2026
bf4a74d
Update docs
mhegazy May 26, 2026
d08288e
Merge pull request #62592 from mhegazy/readme-fix
mhegazy May 26, 2026
b733992
chore: Update CHANGELOG.md and feed.xml
actions-user May 27, 2026
4087798
Merge branch 'anthropics:main' into main
fvegiard May 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
"$schema": "https://json.schemastore.org/claude-code-marketplace.json",
"name": "claude-code-plugins",
"version": "1.0.0",
"description": "Bundled plugins for Claude Code including Agent SDK development tools, PR review toolkit, and commit workflows",
Expand Down
12 changes: 8 additions & 4 deletions .claude/commands/dedupe.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
allowed-tools: Bash(gh issue view:*), Bash(gh search:*), Bash(gh issue list:*), Bash(./scripts/comment-on-duplicates.sh:*)
allowed-tools: Bash(./scripts/gh.sh:*), Bash(./scripts/comment-on-duplicates.sh:*)
description: Find duplicate GitHub issues
---

Expand All @@ -13,11 +13,15 @@ To do this, follow these steps precisely:
4. Next, feed the results from #1 and #2 into another agent, so that it can filter out false positives, that are likely not actually duplicates of the original issue. If there are no duplicates remaining, do not proceed.
5. Finally, use the comment script to post duplicates:
```
./scripts/comment-on-duplicates.sh --base-issue <issue-number> --potential-duplicates <dup1> <dup2> <dup3>
./scripts/comment-on-duplicates.sh --potential-duplicates <dup1> <dup2> <dup3>
```

Notes (be sure to tell this to your agents, too):

- Use `gh` to interact with Github, rather than web fetch
- Do not use other tools, beyond `gh` and the comment script (eg. don't use other MCP servers, file edit, etc.)
- Use `./scripts/gh.sh` to interact with Github, rather than web fetch or raw `gh`. Examples:
- `./scripts/gh.sh issue view 123` — view an issue
- `./scripts/gh.sh issue view 123 --comments` — view with comments
- `./scripts/gh.sh issue list --state open --limit 20` — list issues
- `./scripts/gh.sh search issues "query" --limit 10` — search for issues
- Do not use other tools, beyond `./scripts/gh.sh` and the comment script (eg. don't use other MCP servers, file edit, etc.)
- Make a todo list first
40 changes: 0 additions & 40 deletions .claude/commands/oncall-triage.md

This file was deleted.

74 changes: 74 additions & 0 deletions .claude/commands/triage-issue.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
---
allowed-tools: Bash(./scripts/gh.sh:*),Bash(./scripts/edit-issue-labels.sh:*)
description: Triage GitHub issues by analyzing and applying labels
---

You're an issue triage assistant. Analyze the issue and manage labels.

IMPORTANT: Don't post any comments or messages to the issue. Your only actions are adding or removing labels.

Context:

$ARGUMENTS

TOOLS:
- `./scripts/gh.sh` — wrapper for `gh` CLI. Only supports these subcommands and flags:
- `./scripts/gh.sh label list` — fetch all available labels
- `./scripts/gh.sh label list --limit 100` — fetch with limit
Comment on lines +15 to +17
- `./scripts/gh.sh issue view 123` — read issue title, body, and labels
- `./scripts/gh.sh issue view 123 --comments` — read the conversation
- `./scripts/gh.sh issue list --state open --limit 20` — list issues
- `./scripts/gh.sh search issues "query"` — find similar or duplicate issues
- `./scripts/gh.sh search issues "query" --limit 10` — search with limit
- `./scripts/edit-issue-labels.sh --add-label LABEL --remove-label LABEL` — add or remove labels (issue number is read from the workflow event)

TASK:

1. Run `./scripts/gh.sh label list` to fetch the available labels. You may ONLY use labels from this list. Never invent new labels.
2. Run `./scripts/gh.sh issue view ISSUE_NUMBER` to read the issue details.
3. Run `./scripts/gh.sh issue view ISSUE_NUMBER --comments` to read the conversation.

**If EVENT is "issues" (new issue):**

4. First, check if this issue is actually about Claude Code.
- Look for Claude Code signals in the issue BODY: a `Claude Code Version` field or `claude --version` output, references to the `claude` CLI command, terminal sessions, the VS Code/JetBrains extensions, `CLAUDE.md` files, `.claude/` directories, MCP servers, Cowork, Remote Control, or the web UI at claude.ai/code. If ANY such signal is present, this IS a Claude Code issue — proceed to step 5.
- Only if NO Claude Code signals are present: check whether a different Anthropic product (claude.ai chat, Claude Desktop/Mobile apps, the raw Anthropic API/SDK, or account billing with no CLI involvement) is the *subject* of the complaint, not merely mentioned for context. If so, apply `invalid` and stop. If ambiguous, proceed to step 5 WITHOUT applying `invalid`.
- The body text is authoritative. If a form dropdown (e.g. Platform) contradicts evidence in the body, trust the body — dropdowns are often mis-selected.

5. Analyze and apply category labels:
- Type (bug, enhancement, question, etc.)
- Technical areas and platform
- Check for duplicates with `./scripts/gh.sh search issues`. Only mark as duplicate of OPEN issues.

6. Evaluate lifecycle labels:
- `needs-repro` (bugs only, 7 days): Bug reports without clear steps to reproduce. A good repro has specific, followable steps that someone else could use to see the same issue.
Do NOT apply if the user already provided error messages, logs, file paths, or a description of what they did. Don't require a specific format — narrative descriptions count.
For model behavior issues (e.g. "Claude does X when it should do Y"), don't require traditional repro steps — examples and patterns are sufficient.
- `needs-info` (bugs only, 7 days): The issue needs something from the community before it can progress — e.g. error messages, versions, environment details, or answers to follow-up questions. Don't apply to questions or enhancements.
Do NOT apply if the user already provided version, environment, and error details. If the issue just needs engineering investigation, that's not `needs-info`.

Issues with these labels are automatically closed after the timeout if there's no response.
The goal is to avoid issues lingering without a clear next step.

7. Apply all selected labels:
`./scripts/edit-issue-labels.sh --add-label "label1" --add-label "label2"`

**If EVENT is "issue_comment" (comment on existing issue):**

4. Evaluate lifecycle labels based on the full conversation:
- If the issue has `stale` or `autoclose`, remove the label — a new human comment means the issue is still active:
`./scripts/edit-issue-labels.sh --remove-label "stale" --remove-label "autoclose"`
- If the issue has `needs-repro` or `needs-info` and the missing information has now been provided, remove the label:
`./scripts/edit-issue-labels.sh --remove-label "needs-repro"`
Comment on lines +61 to +62
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Remove the matching lifecycle label

For a needs-info issue where the user supplies the requested information, the only concrete command shown here removes needs-repro instead, leaving needs-info in place and allowing the sweep to auto-close the issue despite the requested response being provided. The example should remove the actual satisfied label, or show both cases explicitly.

Useful? React with 👍 / 👎.

- If the issue doesn't have lifecycle labels but clearly needs them (e.g., a maintainer asked for repro steps or more details), add the appropriate label.
- Comments like "+1", "me too", "same here", or emoji reactions are NOT the missing information. Only remove `needs-repro` or `needs-info` when substantive details are actually provided.
- Do NOT add or remove category labels (bug, enhancement, etc.) on comment events.

GUIDELINES:
- ONLY use labels from `./scripts/gh.sh label list` — never create or guess label names
- DO NOT post any comments to the issue
- Be conservative with lifecycle labels — only apply when clearly warranted
- Only apply lifecycle labels (`needs-repro`, `needs-info`) to bugs — never to questions or enhancements
- When in doubt, don't apply a lifecycle label — false positives are worse than missing labels
- On new issues (EVENT "issues"), always apply exactly one of `bug`, `enhancement`, `question`, `invalid`, or `duplicate`. If unsure, pick the closest fit — an imperfect category label is better than none.
- On comment events, it's okay to make no changes if nothing applies.
2 changes: 1 addition & 1 deletion .github/workflows/auto-close-duplicates.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
uses: actions/checkout@v4

- name: Setup Bun
uses: oven-sh/setup-bun@v2
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 (sha-pinned)
with:
bun-version: latest

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/backfill-duplicate-comments.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:
uses: actions/checkout@v4

- name: Setup Bun
uses: oven-sh/setup-bun@v2
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 (sha-pinned)
with:
bun-version: latest

Expand Down
22 changes: 16 additions & 6 deletions .github/workflows/claude-dedupe-issues.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ jobs:
permissions:
contents: read
issues: write
# Required to mint the OIDC token exchanged for a Claude API access token (Workload Identity Federation)
id-token: write

steps:
Expand All @@ -27,21 +28,29 @@ jobs:
uses: anthropics/claude-code-action@v1
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CLAUDE_CODE_SCRIPT_CAPS: '{"comment-on-duplicates.sh":1}'
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
allowed_non_write_users: "*"
prompt: "/dedupe ${{ github.repository }}/issues/${{ github.event.issue.number || inputs.issue_number }}"
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
# Authenticate to the Claude API via Workload Identity Federation
# (the workflow's OIDC token is exchanged for a short-lived access
# token) instead of a static API key.
anthropic_federation_rule_id: ${{ vars.ANTHROPIC_FEDERATION_RULE_ID }}
anthropic_organization_id: ${{ vars.ANTHROPIC_ORGANIZATION_ID }}
anthropic_service_account_id: ${{ vars.ANTHROPIC_SERVICE_ACCOUNT_ID }}
anthropic_workspace_id: ${{ vars.ANTHROPIC_WORKSPACE_ID }}
claude_args: "--model claude-sonnet-4-5-20250929"

- name: Log duplicate comment event to Statsig
if: always()
env:
STATSIG_API_KEY: ${{ secrets.STATSIG_API_KEY }}
ISSUE_NUMBER: ${{ github.event.issue.number || inputs.issue_number }}
REPO: ${{ github.repository }}
TRIGGERED_BY: ${{ github.event_name }}
WORKFLOW_RUN_ID: ${{ github.run_id }}
run: |
ISSUE_NUMBER=${{ github.event.issue.number || inputs.issue_number }}
REPO=${{ github.repository }}

if [ -z "$STATSIG_API_KEY" ]; then
echo "STATSIG_API_KEY not found, skipping Statsig logging"
exit 0
Expand All @@ -51,7 +60,8 @@ jobs:
EVENT_PAYLOAD=$(jq -n \
--arg issue_number "$ISSUE_NUMBER" \
--arg repo "$REPO" \
--arg triggered_by "${{ github.event_name }}" \
--arg triggered_by "$TRIGGERED_BY" \
--arg workflow_run_id "$WORKFLOW_RUN_ID" \
'{
events: [{
eventName: "github_duplicate_comment_added",
Expand All @@ -60,7 +70,7 @@ jobs:
repository: $repo,
issue_number: ($issue_number | tonumber),
triggered_by: $triggered_by,
workflow_run_id: "${{ github.run_id }}"
workflow_run_id: $workflow_run_id
},
time: (now | floor | tostring)
}]
Expand Down
98 changes: 20 additions & 78 deletions .github/workflows/claude-issue-triage.yml
Original file line number Diff line number Diff line change
@@ -1,105 +1,47 @@
name: Claude Issue Triage
description: Automatically triage GitHub issues using Claude Code
on:
issues:
types: [opened]
issue_comment:
types: [created]

jobs:
triage-issue:
runs-on: ubuntu-latest
timeout-minutes: 10
if: >-
github.event_name == 'issues' ||
(github.event_name == 'issue_comment' && !github.event.issue.pull_request && github.event.comment.user.type != 'Bot')
concurrency:
group: issue-triage-${{ github.event.issue.number }}
cancel-in-progress: true
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Avoid cancelling the initial category triage

When a reporter adds a human comment shortly after opening an issue, this shared concurrency group cancels the still-running issues triage run and replaces it with the issue_comment run. The comment-mode prompt explicitly says not to add or remove category labels, so the issue can be left without the required bug/enhancement/question/invalid/duplicate label from the opened flow.

Useful? React with 👍 / 👎.

permissions:
contents: read
issues: write
# Required to mint the OIDC token exchanged for a Claude API access token (Workload Identity Federation)
id-token: write

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup GitHub MCP Server
run: |
mkdir -p /tmp/mcp-config
cat > /tmp/mcp-config/mcp-servers.json << 'EOF'
{
"mcpServers": {
"github": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"GITHUB_PERSONAL_ACCESS_TOKEN",
"ghcr.io/github/github-mcp-server:sha-7aced2b"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "${{ secrets.GITHUB_TOKEN }}"
}
}
}
}
EOF

- name: Run Claude Code for Issue Triage
timeout-minutes: 5
uses: anthropics/claude-code-action@v1
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_REPO: ${{ github.repository }}
CLAUDE_CODE_SCRIPT_CAPS: '{"edit-issue-labels.sh":2}'
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
allowed_non_write_users: "*"
prompt: |
You're an issue triage assistant for GitHub issues. Your task is to analyze the issue and select appropriate labels from the provided list.

IMPORTANT: Don't post any comments or messages to the issue. Your only action should be to apply labels.

Issue Information:
- REPO: ${{ github.repository }}
- ISSUE_NUMBER: ${{ github.event.issue.number }}

TASK OVERVIEW:

1. First, fetch the list of labels available in this repository by running: `gh label list`. Run exactly this command with nothing else.

2. Next, use the GitHub tools to get context about the issue:
- You have access to these tools:
- mcp__github__get_issue: Use this to retrieve the current issue's details including title, description, and existing labels
- mcp__github__get_issue_comments: Use this to read any discussion or additional context provided in the comments
- mcp__github__update_issue: Use this to apply labels to the issue (do not use this for commenting)
- mcp__github__search_issues: Use this to find similar issues that might provide context for proper categorization and to identify potential duplicate issues
- mcp__github__list_issues: Use this to understand patterns in how other issues are labeled
- Start by using mcp__github__get_issue to get the issue details

3. Analyze the issue content, considering:
- The issue title and description
- The type of issue (bug report, feature request, question, etc.)
- Technical areas mentioned
- Severity or priority indicators
- User impact
- Components affected

4. Select appropriate labels from the available labels list provided above:
- Choose labels that accurately reflect the issue's nature
- Be specific but comprehensive
- Select priority labels if you can determine urgency (high-priority, med-priority, or low-priority)
- Consider platform labels (android, ios) if applicable
- If you find similar issues using mcp__github__search_issues, consider using a "duplicate" label if appropriate. Only do so if the issue is a duplicate of another OPEN issue.

5. Apply the selected labels:
- Use mcp__github__update_issue to apply your selected labels
- DO NOT post any comments explaining your decision
- DO NOT communicate directly with users
- If no labels are clearly applicable, do not apply any labels

IMPORTANT GUIDELINES:
- Be thorough in your analysis
- Only select labels from the provided list above
- DO NOT post any comments to the issue
- Your ONLY action should be to apply labels using mcp__github__update_issue
- It's okay to not add any labels if none are clearly applicable
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
prompt: "/triage-issue REPO: ${{ github.repository }} ISSUE_NUMBER: ${{ github.event.issue.number }} EVENT: ${{ github.event_name }}"
# Authenticate to the Claude API via Workload Identity Federation
# (the workflow's OIDC token is exchanged for a short-lived access
# token) instead of a static API key.
anthropic_federation_rule_id: ${{ vars.ANTHROPIC_FEDERATION_RULE_ID }}
anthropic_organization_id: ${{ vars.ANTHROPIC_ORGANIZATION_ID }}
anthropic_service_account_id: ${{ vars.ANTHROPIC_SERVICE_ACCOUNT_ID }}
anthropic_workspace_id: ${{ vars.ANTHROPIC_WORKSPACE_ID }}
claude_args: |
--model claude-sonnet-4-5-20250929
--mcp-config /tmp/mcp-config/mcp-servers.json
--allowedTools "Bash(gh label list),mcp__github__get_issue,mcp__github__get_issue_comments,mcp__github__update_issue,mcp__github__search_issues,mcp__github__list_issues"
--model claude-opus-4-6
8 changes: 7 additions & 1 deletion .github/workflows/claude.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,12 @@ jobs:
id: claude
uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
# Authenticate to the Claude API via Workload Identity Federation
# (the workflow's OIDC token is exchanged for a short-lived access
# token) instead of a static API key.
anthropic_federation_rule_id: ${{ vars.ANTHROPIC_FEDERATION_RULE_ID }}
anthropic_organization_id: ${{ vars.ANTHROPIC_ORGANIZATION_ID }}
anthropic_service_account_id: ${{ vars.ANTHROPIC_SERVICE_ACCOUNT_ID }}
anthropic_workspace_id: ${{ vars.ANTHROPIC_WORKSPACE_ID }}
claude_args: "--model claude-sonnet-4-5-20250929"

Loading
Loading