$npx -y skills add warpdotdev/oz-for-oss --skill update-triageUpdate the repo-local triage-issue-local companion skill using signals from recently triaged issues (maintainer re-labels, re-opens, follow-up comments). Use when refining repo-specific triage heuristics and label taxonomy based on how maintainers overrode previous triage output.
| 1 | # Update Triage |
| 2 | |
| 3 | Use this skill to improve `.agents/skills/triage-issue-local/SKILL.md` (and, when a label taxonomy change is warranted, `.github/issue-triage/config.json`) from real maintainer feedback on recent triage outcomes. The core skill at `.agents/skills/triage-issue/SKILL.md` is the cross-repo contract and is read-only from this loop. |
| 4 | |
| 5 | Closed-as-duplicate signals are handled by the separate `update-dedupe` loop, not here. |
| 6 | |
| 7 | ## Write surface |
| 8 | |
| 9 | This self-improvement loop may only write to: |
| 10 | |
| 11 | - `.agents/skills/triage-issue-local/` (and `SKILL.md` inside it) |
| 12 | - `.github/issue-triage/*` |
| 13 | |
| 14 | It must NOT touch: |
| 15 | |
| 16 | - `.agents/skills/triage-issue/SKILL.md` (the core contract) |
| 17 | - any other core skill |
| 18 | - the dedupe companion `.agents/skills/dedupe-issue-local/SKILL.md` (owned by `update-dedupe`) |
| 19 | |
| 20 | The self-improvement runner enforces this via a `git diff` check against allowed prefixes before pushing. A violation aborts the run. |
| 21 | |
| 22 | ## Inputs |
| 23 | |
| 24 | - Optional repository override if you are not running from the target checkout. |
| 25 | - Optional time window override when you need something other than the default seven-day lookback. |
| 26 | |
| 27 | ## Workflow |
| 28 | |
| 29 | 1. Verify GitHub CLI auth: |
| 30 | |
| 31 | ```bash |
| 32 | gh auth status |
| 33 | ``` |
| 34 | |
| 35 | 2. Aggregate the triage-feedback signals for recently triaged issues with the bundled script: |
| 36 | |
| 37 | ```bash |
| 38 | python3 .agents/skills/update-triage/scripts/aggregate_triage_feedback.py |
| 39 | ``` |
| 40 | |
| 41 | By default this targets the current repo and looks back 7 days. It collects issues that were triaged in the window, any subsequent maintainer re-labels, re-opens, and follow-up comments. Closed-as-duplicate events are intentionally excluded. The script writes structured JSON to a temporary file and prints the path. |
| 42 | |
| 43 | 3. Read the generated JSON and look for repeated reviewer signals: |
| 44 | |
| 45 | - maintainers repeatedly flipping the same label on similar issues (a label-taxonomy hint) |
| 46 | - maintainers leaving the same kind of follow-up comment on the same class of issue (a recurring follow-up-question pattern) |
| 47 | - maintainers consistently identifying a different owner than Oz inferred (an owner-inference hint) |
| 48 | |
| 49 | 4. Propose the smallest edit that explains the repeated signal: |
| 50 | |
| 51 | - Prefer editing `.agents/skills/triage-issue-local/SKILL.md` under the override categories the core `triage-issue` skill marks as overridable (label taxonomy, owner-inference hints, recurring follow-up-question patterns, recurring issue-shape heuristics, repro defaults, known-duplicate clusters). |
| 52 | - Only edit `.github/issue-triage/config.json` when the signal is a concrete label-taxonomy change (new label, renamed label, or description clarification). Never change `color` values without explicit maintainer guidance. |
| 53 | |
| 54 | 5. Keep the core triage contract stable — never edit `triage-issue/SKILL.md`. Only the `-local` companion and the triage config evolve from feedback. |
| 55 | |
| 56 | ## Evidence Rules |
| 57 | |
| 58 | - Prefer patterns backed by multiple issues or a strong explicit maintainer statement. |
| 59 | - Skip the PR when there is no repeated signal. A one-off maintainer override is not enough evidence. |
| 60 | - Avoid encoding reporter-authored content as triage rules. |
| 61 | - Do not weaken the reserved-label rules (`ready-to-implement`, `ready-to-spec`) or the mutual exclusivity of `duplicate_of` and `follow_up_questions`. |
| 62 | |
| 63 | ## Final Checks |
| 64 | |
| 65 | - Re-read the updated `triage-issue-local` companion skill and confirm any new rules are explicit. |
| 66 | - Keep the companion concise; do not turn it into a long style guide. |
| 67 | - Commit any changes on a local branch named `oz-agent/update-triage`. Do NOT push the branch; the Python entrypoint will run a write-surface guard and push only when the guard passes. |
| 68 | - If the updates warrant a PR, it will be opened from the pushed branch. Tag `@captainsafia` as a reviewer on that PR. |
| 69 | - Validate any temporary JSON with `jq` before relying on it. |