con un clic
triage
// Triages new GitHub issues — classifies, reproduces bugs, attempts conservative fixes, and comments. Use when a new issue is opened and needs automated triage.
// Triages new GitHub issues — classifies, reproduces bugs, attempts conservative fixes, and comments. Use when a new issue is opened and needs automated triage.
Generic CI environment rules for GitHub Actions workflows. Use when operating in CI — covers security, CI monitoring, comment formatting, and investigating session logs from other runs.
Polls GitHub notifications and handles items that dedicated workflows miss — fork PR comments, cross-repo mentions, and stale unanswered items. Runs on a schedule.
Sets up tend — an autonomous junior maintainer for a GitHub repo, powered by Claude or OpenAI Codex — that reviews PRs, triages issues, and fixes CI. Creates config, generates workflows, configures secrets and branch protection via API, creates the bot account, and provisions the harness auth token (Claude OAuth or OpenAI API key). Use when setting up tend on a new repo or when asked to install/configure tend.
Investigates a specific tend GitHub Actions run by downloading its session-log artifacts and parsing the JSONL traces. Surfaces which skill tend loaded, what tools it called with what inputs, files it read or wrote, and where decisions went wrong. Use when asked to "debug a tend run", "investigate a tend run", "why did tend do X", "what did the bot do in CI", "look at the session logs", or to reconstruct tend's behavior step-by-step from a run ID, URL, or PR number.
Nightly code quality sweep — resolves bot PR conflicts, reviews recent commits, surveys existing code, checks resolved issues, and updates tend workflows.
Tend-specific guidance for tend CI workflows. Adds non-standard workflow inclusion for usage analysis and repo conventions on top of the generic tend-* skills.
| name | triage |
| description | Triages new GitHub issues — classifies, reproduces bugs, attempts conservative fixes, and comments. Use when a new issue is opened and needs automated triage. |
| argument-hint | [issue number] |
| metadata | {"internal":true} |
Triage a newly opened GitHub issue.
Issue to triage: $ARGUMENTS
Load /tend-ci-runner:running-in-ci first (CI environment rules, security). It will also prompt you to load any repo-specific skills (e.g., running-tend) — do so before proceeding.
Follow the AD FONTES principle throughout: reproduce before fixing, evidence before speculation, test before committing.
gh issue view $ARGUMENTS --json title,body,labels,author
Classify into one of:
Skip for questions and other.
# Search open issues for similar problems
gh issue list --state open --json number,title,labels --limit 50
# Check for existing fix branches and PRs
git branch -r --list 'origin/fix/*'
gh pr list --state open --json number,title,headRefName --limit 50
If a duplicate or existing fix is found, note it for the comment in step 7. Don't create a duplicate fix.
Feature requests only.
Search the codebase to check whether the requested feature already exists.
Record what you found (or didn't find) for use in step 7.
Bug reports only.
If the test passes (bug may already be fixed), note this for the comment.
If you cannot reproduce the bug (unclear steps, environment-specific, etc.), note what you tried and skip to step 7. Do NOT proceed to Step 6 without a failing test — a fix without reproduction evidence is not a conservative fix.
Bug reports only.
CRITICAL — gate check before proceeding:
You MUST have a failing test from Step 5 before writing any fix. If you skipped the test (couldn't write one, environment-specific bug, etc.), do NOT attempt a fix — go directly to Step 7 and use the "Reproduction test only" or "Could not reproduce" comment template.
Only attempt a fix if ALL of these conditions are met:
When the bug is about bot behavior (e.g., "bot didn't use links", "bot posted wrong format"), the root cause is often a skill/prompt compliance issue, not missing code. Before adding guidance to a skill:
If the proposed change removes coverage for the failing scenario instead of restoring the assertion, stop. Smell patterns: a newly-added early-return at the top of the test (let Ok(_) = X else { return };, if !path.exists() { return; }), a fresh #[ignore], a newly-inserted skipIf / pytest.skip keyed on the failing condition. The fix belongs in production code or test setup, not in a guard that makes the test bail when the bug fires.
Step 3's duplicate check catches identical fixes. It misses the same root cause class, different surface pattern: several failing tests share one underlying cause, and an outstanding PR fixes some of them but not the one being triaged. When the triage analysis itself names an existing PR as same-root-cause, that's the signal to wait for it to merge and re-run, or to mirror its approach for the remaining sites — not to open a parallel narrow workaround.
git checkout -b fix/issue-$ARGUMENTS
git add -A
git commit -m "fix: <description>
Closes #$ARGUMENTS
Co-Authored-By: Claude <noreply@anthropic.com>"
git push -u origin fix/issue-$ARGUMENTS
gh pr create --title "fix: <description>" --body "## Problem
[What the issue reported and the root cause]
## Solution
[What was fixed and why]
## Testing
[How the fix was verified — mention the reproduction test]
---
Closes #<issue-number> — automated triage"
Commit just the failing test on a reproduction branch and open a PR:
git checkout -b repro/issue-$ARGUMENTS
git add -A
git commit -m "test: add reproduction for #$ARGUMENTS
Co-Authored-By: Claude <noreply@anthropic.com>"
git push -u origin repro/issue-$ARGUMENTS
gh pr create --title "test: reproduction for #$ARGUMENTS" --body "## Context
Adds a failing test that reproduces #$ARGUMENTS. The fix is not yet included — this PR captures the reproduction so a maintainer can investigate.
---
Automated triage for #<issue-number>"
Note the PR number for the comment.
Recheck before posting. Triage can take several minutes. Before posting, re-fetch the conversation to check for new comments:
gh issue view $ARGUMENTS --json comments --jq '.comments | length'
If new comments appeared since you first read the issue, read them and adjust your response — someone may have answered, provided more context, or closed the issue. If your comment is now redundant, skip it.
Always comment via gh issue comment. Keep it brief, polite, and specific. A maintainer will always review — never claim the issue is fully resolved by automation alone.
Drop the "a maintainer will review" closer when author_association is OWNER, MEMBER, or COLLABORATOR — deferring to a maintainer reads as absurd when the reporter is one. Keep it otherwise, where it signals the action isn't authoritative.
gh api "repos/$GITHUB_REPOSITORY/issues/$ARGUMENTS" --jq '.author_association'
Stay within what you verified. State facts you found in the codebase — don't characterize something as "known" unless you find prior issues or documentation about it. Don't speculate beyond the code you read.
Choose the appropriate template:
Thanks for reporting this. I was able to reproduce the issue and identified the root cause: [one-sentence explanation].
I've opened #PR_NUMBER with a fix. A maintainer will review it shortly.
Thanks for reporting this. I was able to reproduce the issue — #PR_NUMBER adds a failing test that demonstrates the bug.
Root cause appears to be [brief explanation if known, or "still under investigation"]. A maintainer will take a closer look.
Thanks for reporting this. I tried to reproduce this but wasn't able to with the information provided.
Could you share [specific information needed — exact command, config file, OS, shell, etc.]? That would help narrow it down.
A maintainer will also take a look.
Thanks for reporting this. I looked into this and it appears the behavior described may already be fixed on the default branch (the relevant test passes).
Could you confirm which version you're running? If you're on an older release, updating should resolve this. A maintainer will confirm.
Thanks for the suggestion. It's possible that [existing feature — specific behavior, config/flag] already does what you're looking for: [brief description of how it works].
If that's not quite what you had in mind, could you clarify what additional behavior you're looking for? A maintainer will take a look either way.
Thanks for the suggestion. I searched the codebase and didn't find an existing implementation of this. [Optionally: the closest related functionality is X, which does Y.]
I'll leave it for a maintainer to evaluate and prioritize.
Thanks for reaching out. This looks like a usage question rather than a bug report.
[Brief answer if obvious from the codebase, or pointer to relevant docs/help text.]
A maintainer can provide more detail if needed.
Thanks for reporting this. This appears to be related to #EXISTING_ISSUE [and/or PR #EXISTING_PR]. I'll leave it to a maintainer to confirm and link them.
When the filer's author_association is OWNER, MEMBER, or COLLABORATOR, drop the deferral closer and the "I'll leave it for a maintainer to evaluate and prioritize" framing — the filer already has that authority. The opener can stay or go; lead with substance either way.
Searched the codebase — no existing implementation of [feature]. The closest related functionality is [X], which does [Y].
[If a PR was opened: opened #PR_NUMBER with an implementation.]