Jira: Triage
Read-only. Run from this skill's directory:
python3 ../jira/scripts/jira_tool.py triage [--project PAY] [--parent_issue_types Story,Bug,Task]
(First-time setup, once per environment: pip install -r ../jira/requirements.txt.)
Why this exists
In a common team workflow, a PM creates parent issues (Story/Bug/Task/Epic)
from business asks, and developers/designers create subtasks under them
labeled Frontend/Backend (or similar). A parent story often doesn't say
by itself whether it needs frontend, backend, or both -- that only becomes
explicit once subtasks exist. This tool surfaces exactly that gap: which
stories already have labeled subtasks (so the answer is a known fact), and
which don't yet (so the answer has to be inferred or flagged as unclear).
What the tool returns (fact, not judgment)
triage does two Jira searches and groups the results -- pure bookkeeping,
no inference:
- Parent issues (
--parent_issue_types, default Story,Bug,Task) in the
project, each with description, components, status.
- Subtasks (
issuetype = Sub-task) in the same project, each with its
labels and parent key -- fetched as their own search because a parent's
embedded subtasks field is a stub that does not include labels.
Each returned story has:
subtasks: the matched subtask stubs (key, summary, status, labels).
has_frontend_subtask / has_backend_subtask: true only if a subtask's
labels actually contains "frontend"/"backend" (case-insensitive
substring match) -- a fact, not a guess.
needs_triage: true when subtasks is empty -- meaning nobody has
broken this story into Frontend/Backend/Design work yet.
Your job: reasoning over what the tool returns
- If a story has subtasks (
needs_triage: false): answer
frontend/backend questions directly from has_frontend_subtask /
has_backend_subtask -- these are already known facts, don't re-infer
them from the description.
- If a story has no subtasks yet (
needs_triage: true): infer whether
it needs frontend, backend, and/or design work from its description.
- If
description is empty or too vague to tell, fall back to
summary (the title) and judge whether the title alone gives enough
signal (e.g. "Fix login page styling" clearly implies frontend).
- If neither the description nor the title gives enough information to
infer anything useful, say so explicitly to the user -- e.g. "PAY-142
has no subtasks and its description/title don't give enough detail to
suggest what work it needs; it needs a human look." Never invent a
frontend/backend/design verdict when there isn't enough signal for one.
- Always caveat inferred verdicts as inferred (e.g. "likely needs
frontend, based on the description") -- never state them with the same
confidence as a
has_frontend_subtask/has_backend_subtask fact.
- "Design/Figma ready?" isn't part of this tool's output (Figma link
fields are instance-specific custom fields) -- run
list_fields (via
the jira skill's CLI, python3 ../jira/scripts/jira_tool.py list_fields) to find the field id, then search --fields <id> per
story, or read it from description if the link is embedded in text.
Project scope
--project is required by the underlying Jira client, one way or another:
- If
JIRA_DEFAULT_PROJECT is set, omitting --project uses it automatically.
- Otherwise, resolve the project yourself before calling this -- e.g. from
an issue key already mentioned in the conversation, from a quick
jira-my-work call to see what project keys appear, or by asking the
user. Never guess a project key.
- If the tool's result has
"error" because no project could be resolved,
ask the user which project to triage instead of retrying blindly.
Example
"Which stories still need frontend or backend, and which need review because they have no subtasks?"
Run triage --project PAY (or without --project if JIRA_DEFAULT_PROJECT
is set). For each story: if needs_triage is false, report
has_frontend_subtask/has_backend_subtask as fact. If needs_triage is
true, read description (falling back to summary) and give an inferred,
clearly-caveated verdict -- or say there isn't enough information if there
isn't.
If the result contains "error", tell the user what went wrong in plain
language instead of retrying silently or fabricating a result.
See ../jira/README.md for architecture details and the full
environment-variable table.
1---2name: jira-triage3description: Groups unresolved Jira stories/bugs/tasks with their labeled subtasks to determine which ones need frontend work, backend work, or design/Figma readiness, and which ones haven't been broken into subtasks yet and need manual triage. Use for "which tasks have no subtasks yet", "which need frontend vs backend", "which stories still need triage".4---56# Jira: Triage78**Read-only.** Run from this skill's directory:910```bash11python3 ../jira/scripts/jira_tool.py triage [--project PAY] [--parent_issue_types Story,Bug,Task]12```1314(First-time setup, once per environment: `pip install -r ../jira/requirements.txt`.)1516## Why this exists1718In a common team workflow, a PM creates parent issues (Story/Bug/Task/Epic)19from business asks, and developers/designers create subtasks under them20labeled `Frontend`/`Backend` (or similar). A parent story often doesn't say21by itself whether it needs frontend, backend, or both -- that only becomes22explicit once subtasks exist. This tool surfaces exactly that gap: which23stories already have labeled subtasks (so the answer is a known fact), and24which don't yet (so the answer has to be inferred or flagged as unclear).2526## What the tool returns (fact, not judgment)2728`triage` does two Jira searches and groups the results -- pure bookkeeping,29no inference:30311. Parent issues (`--parent_issue_types`, default `Story,Bug,Task`) in the32 project, each with `description`, `components`, `status`.332. Subtasks (`issuetype = Sub-task`) in the same project, each with its34 `labels` and parent key -- fetched as their own search because a parent's35 embedded `subtasks` field is a stub that does **not** include labels.3637Each returned story has:3839- `subtasks`: the matched subtask stubs (`key`, `summary`, `status`, `labels`).40- `has_frontend_subtask` / `has_backend_subtask`: `true` only if a subtask's41 `labels` actually contains "frontend"/"backend" (case-insensitive42 substring match) -- a fact, not a guess.43- `needs_triage`: `true` when `subtasks` is empty -- meaning nobody has44 broken this story into Frontend/Backend/Design work yet.4546## Your job: reasoning over what the tool returns4748- **If a story has subtasks** (`needs_triage: false`): answer49 frontend/backend questions directly from `has_frontend_subtask` /50 `has_backend_subtask` -- these are already known facts, don't re-infer51 them from the description.52- **If a story has no subtasks yet** (`needs_triage: true`): infer whether53 it needs frontend, backend, and/or design work from its `description`.54 - If `description` is empty or too vague to tell, fall back to55 `summary` (the title) and judge whether the title alone gives enough56 signal (e.g. "Fix login page styling" clearly implies frontend).57 - If neither the description nor the title gives enough information to58 infer anything useful, say so explicitly to the user -- e.g. "PAY-14259 has no subtasks and its description/title don't give enough detail to60 suggest what work it needs; it needs a human look." Never invent a61 frontend/backend/design verdict when there isn't enough signal for one.62 - Always caveat inferred verdicts as inferred (e.g. "likely needs63 frontend, based on the description") -- never state them with the same64 confidence as a `has_frontend_subtask`/`has_backend_subtask` fact.65- **"Design/Figma ready?"** isn't part of this tool's output (Figma link66 fields are instance-specific custom fields) -- run `list_fields` (via67 the `jira` skill's CLI, `python3 ../jira/scripts/jira_tool.py68 list_fields`) to find the field id, then `search --fields <id>` per69 story, or read it from `description` if the link is embedded in text.7071## Project scope7273`--project` is required by the underlying Jira client, one way or another:7475- If `JIRA_DEFAULT_PROJECT` is set, omitting `--project` uses it automatically.76- Otherwise, resolve the project yourself before calling this -- e.g. from77 an issue key already mentioned in the conversation, from a quick78 `jira-my-work` call to see what project keys appear, or by asking the79 user. Never guess a project key.80- If the tool's result has `"error"` because no project could be resolved,81 ask the user which project to triage instead of retrying blindly.8283## Example8485**"Which stories still need frontend or backend, and which need review because they have no subtasks?"**86Run `triage --project PAY` (or without `--project` if `JIRA_DEFAULT_PROJECT`87is set). For each story: if `needs_triage` is `false`, report88`has_frontend_subtask`/`has_backend_subtask` as fact. If `needs_triage` is89`true`, read `description` (falling back to `summary`) and give an inferred,90clearly-caveated verdict -- or say there isn't enough information if there91isn't.9293If the result contains `"error"`, tell the user what went wrong in plain94language instead of retrying silently or fabricating a result.9596See `../jira/README.md` for architecture details and the full97environment-variable table.