Step 0 — Load configuration
Read ${CLAUDE_PLUGIN_ROOT}/config.yaml.
If it does not exist, tell the user to copy config.example.yaml to config.yaml and fill in their values. Stop here.
Extract:
issue_tracker — determines which adapter to load (jira, linear, github-issues)
Step 1 — Load adapter
Read the adapter file at ${CLAUDE_PLUGIN_ROOT}/skills/clarify-ticket/adapters/{issue_tracker}.md.
If the adapter does not exist, tell the user that {issue_tracker} is not yet supported and stop.
All tool-specific calls come from the adapter. Do not invent tool calls.
Step 2 — Parse argument
From $ARGUMENTS, extract the ticket key or URL:
- If the argument is a URL, use the adapter's URL-parsing rule to extract the ticket key.
- If the argument is a key (e.g.
PROJ-123), use it directly.
- If no argument was provided, ask the user for a ticket key.
Store the result as {key}.
Step 3 — Fetch ticket
Use the adapter's fetch ticket command to retrieve the full ticket for {key}.
Extract and store:
title — the ticket summary
description — the full body/description
acceptance_criteria — if present in the description (look for "Criterios de aceptación", "Acceptance Criteria", "AC", or checklist sections)
status — current status
type — story, bug, task, sub-task, etc.
assignee — who it is assigned to
labels — any labels or tags
linked_issues — any linked tickets (blocks, is blocked by, relates to)
comments — all comments on the ticket
Step 4 — Detect open questions
Scan the description, acceptance criteria, and comments for:
- Explicit questions — sentences ending in
? or starting with "Pregunta:", "Question:", "Duda:", "TBD", "Por definir"
- Conditional language — "debería", "quizás", "posiblemente", "should", "maybe", "possibly", "could be", "se podría"
- Undefined references — mentions of external documents, designs, or specs without links
- Ambiguous pronouns — "esto", "eso", "aquello", "this", "that" without clear antecedents
- Missing quantities or boundaries — "varios", "algunos", "many", "some", "etc.", "appropriate"
Step 5 — Analyze content
For each finding from Step 4, classify it:
- BLOCKER — Cannot start implementation without this answer. Examples: undefined business rules, missing API contract, unclear data model, no design link.
- NICE-TO-HAVE — Implementation can proceed but the answer would improve quality. Examples: edge case clarification, UX preference, performance target.
Step 6 — Check comments
Review all comments chronologically. Identify:
- Questions that were asked but never answered
- Answers that contradict the description
- Decisions made in comments that should be in the description
- Newer context that updates or overrides original requirements
Step 7 — Structural validations
Check the ticket for structural completeness:
- Description present and non-empty — flag if missing or too short (< 50 chars)
- Acceptance criteria present — flag if missing entirely
- AC are testable — each criterion should be verifiable (not vague like "should work well")
- Design link present — if the ticket references UI work, a design link should exist
- Dependencies documented — if the ticket mentions other services or teams, linked issues should exist
- Estimation present — flag if story points or estimate is missing
- Assignee present — flag if unassigned
- Type appropriate — flag if type does not match content (e.g., story without user-facing value, bug without reproduction steps)
Step 8 — Classify by audience
Group all findings by who can answer them:
- Product / PO — business rules, priorities, scope decisions
- Design / UX — visual behavior, states, interactions
- Tech Lead / Architecture — technical approach, data model, integrations
- QA — test scenarios, edge cases, environments
- DevOps / Infra — deployment, infrastructure, environments
- Other team — cross-team dependencies
Step 9 — Reformulate business blockers
For each BLOCKER finding, reformulate it as a clear, actionable question:
- Bad: "The description is vague about validation"
- Good: "What specific validation rules apply to the email field? (e.g., format, uniqueness, domain restriction)"
Each question must:
- State what is unclear
- Suggest possible answers or options when possible
- Reference the specific part of the ticket that triggered it
Step 10 — Display results
Read the format reference at references/actions-and-format.md.
Present the analysis using the format defined in the reference file.
Structure:
- Header — ticket key, title, status, type
- Summary — one-paragraph assessment (healthy, needs minor clarification, has blockers)
- Blockers — numbered list with audience tag
- Nice-to-have — numbered list with audience tag
- Structural issues — checklist of what passed and what failed
- Unanswered questions from comments — if any
- Contradictions — if any found between description and comments
Step 11 — Offer actions
Ask the user which action to take:
- Add as comment — post the analysis as a comment on the ticket using the adapter's comment command
- Edit ticket — update the ticket description to include the identified gaps using the adapter's edit command
- Copy to clipboard — just display, no action
- Refine and re-analyze — let the user provide additional context, then re-run from Step 4
1---2name: clarify-ticket3description: Use when analyzing a ticket for ambiguities, missing information, or unclear acceptance criteria. Use when user says 'clarify ticket', 'review ticket', 'analyze ticket', or passes a ticket key.4---56## Step 0 — Load configuration78Read `${CLAUDE_PLUGIN_ROOT}/config.yaml`.9If it does not exist, tell the user to copy `config.example.yaml` to `config.yaml` and fill in their values. Stop here.1011Extract:12- `issue_tracker` — determines which adapter to load (jira, linear, github-issues)1314## Step 1 — Load adapter1516Read the adapter file at `${CLAUDE_PLUGIN_ROOT}/skills/clarify-ticket/adapters/{issue_tracker}.md`.17If the adapter does not exist, tell the user that `{issue_tracker}` is not yet supported and stop.1819All tool-specific calls come from the adapter. Do not invent tool calls.2021## Step 2 — Parse argument2223From `$ARGUMENTS`, extract the ticket key or URL:24251. If the argument is a URL, use the adapter's URL-parsing rule to extract the ticket key.262. If the argument is a key (e.g. `PROJ-123`), use it directly.273. If no argument was provided, ask the user for a ticket key.2829Store the result as `{key}`.3031## Step 3 — Fetch ticket3233Use the adapter's **fetch ticket** command to retrieve the full ticket for `{key}`.3435Extract and store:36- `title` — the ticket summary37- `description` — the full body/description38- `acceptance_criteria` — if present in the description (look for "Criterios de aceptación", "Acceptance Criteria", "AC", or checklist sections)39- `status` — current status40- `type` — story, bug, task, sub-task, etc.41- `assignee` — who it is assigned to42- `labels` — any labels or tags43- `linked_issues` — any linked tickets (blocks, is blocked by, relates to)44- `comments` — all comments on the ticket4546## Step 4 — Detect open questions4748Scan the description, acceptance criteria, and comments for:49501. **Explicit questions** — sentences ending in `?` or starting with "Pregunta:", "Question:", "Duda:", "TBD", "Por definir"512. **Conditional language** — "debería", "quizás", "posiblemente", "should", "maybe", "possibly", "could be", "se podría"523. **Undefined references** — mentions of external documents, designs, or specs without links534. **Ambiguous pronouns** — "esto", "eso", "aquello", "this", "that" without clear antecedents545. **Missing quantities or boundaries** — "varios", "algunos", "many", "some", "etc.", "appropriate"5556## Step 5 — Analyze content5758For each finding from Step 4, classify it:5960- **BLOCKER** — Cannot start implementation without this answer. Examples: undefined business rules, missing API contract, unclear data model, no design link.61- **NICE-TO-HAVE** — Implementation can proceed but the answer would improve quality. Examples: edge case clarification, UX preference, performance target.6263## Step 6 — Check comments6465Review all comments chronologically. Identify:66- Questions that were asked but never answered67- Answers that contradict the description68- Decisions made in comments that should be in the description69- Newer context that updates or overrides original requirements7071## Step 7 — Structural validations7273Check the ticket for structural completeness:74751. **Description present and non-empty** — flag if missing or too short (< 50 chars)762. **Acceptance criteria present** — flag if missing entirely773. **AC are testable** — each criterion should be verifiable (not vague like "should work well")784. **Design link present** — if the ticket references UI work, a design link should exist795. **Dependencies documented** — if the ticket mentions other services or teams, linked issues should exist806. **Estimation present** — flag if story points or estimate is missing817. **Assignee present** — flag if unassigned828. **Type appropriate** — flag if type does not match content (e.g., story without user-facing value, bug without reproduction steps)8384## Step 8 — Classify by audience8586Group all findings by who can answer them:8788- **Product / PO** — business rules, priorities, scope decisions89- **Design / UX** — visual behavior, states, interactions90- **Tech Lead / Architecture** — technical approach, data model, integrations91- **QA** — test scenarios, edge cases, environments92- **DevOps / Infra** — deployment, infrastructure, environments93- **Other team** — cross-team dependencies9495## Step 9 — Reformulate business blockers9697For each BLOCKER finding, reformulate it as a clear, actionable question:9899- Bad: "The description is vague about validation"100- Good: "What specific validation rules apply to the email field? (e.g., format, uniqueness, domain restriction)"101102Each question must:1031. State what is unclear1042. Suggest possible answers or options when possible1053. Reference the specific part of the ticket that triggered it106107## Step 10 — Display results108109Read the format reference at [references/actions-and-format.md](references/actions-and-format.md).110111Present the analysis using the format defined in the reference file.112113Structure:1141. **Header** — ticket key, title, status, type1152. **Summary** — one-paragraph assessment (healthy, needs minor clarification, has blockers)1163. **Blockers** — numbered list with audience tag1174. **Nice-to-have** — numbered list with audience tag1185. **Structural issues** — checklist of what passed and what failed1196. **Unanswered questions from comments** — if any1207. **Contradictions** — if any found between description and comments121122## Step 11 — Offer actions123124Ask the user which action to take:1251261. **Add as comment** — post the analysis as a comment on the ticket using the adapter's comment command1272. **Edit ticket** — update the ticket description to include the identified gaps using the adapter's edit command1283. **Copy to clipboard** — just display, no action1294. **Refine and re-analyze** — let the user provide additional context, then re-run from Step 4