{"id":"eda92bbe-b9b8-40cd-acff-4dd446118049","shortId":"cKRquG","kind":"skill","title":"backlog-grooming-assistant","tagline":"Analyze backlog files (CSV or Markdown) to flag problematic items and generate a structured grooming agenda. No Jira API needed — works entirely with local exports. Use when preparing for sprint grooming, auditing accumulated tasks, or reviewing the backlog after a sprint. Trigge","description":"# Backlog Grooming Assistant\n\nThis skill reads a local backlog export (CSV or Markdown table), flags problematic items using a structured checklist, and produces a grooming session agenda with a scorecard. No external service connections required — works entirely from pasted or uploaded file contents.\n\n**Input:**\n- Backlog file contents: CSV (with column headers) or Markdown table — pasted directly or uploaded\n- Minimum required columns: item ID and title; additional columns (owner, priority, estimate, status, last-updated) enable more flags\n\n**Output:**\n- Markdown document with: Scorecard → Top Issues → Grooming Agenda → Skipped Checks\n\n---\n\n## Language Detection\n\nDetect the user's language from their message:\n- If Russian (or contains Cyrillic): respond in Russian\n- If English (or other Latin-script language): respond in English\n- If ambiguous: respond in the language of the trigger phrase used\n\nThe detected language applies to **all output text**: section headings, table column headers, field labels, agenda topic titles, error messages, and recommended actions. Translate every part of the output format template into the detected language — do not leave any section header or label in English when responding in Russian.\n\n---\n\n## Instructions\n\n### Step 1: Parse and Validate Input\n\n1. Accept backlog content from the user (pasted text or file contents)\n   - If content is empty: stop and return — \"Backlog is empty — no items to analyze. Paste CSV or Markdown table content.\"\n\n2. Detect format:\n   - CSV: first line contains comma-separated headers\n   - Markdown table: lines starting with `|` and separator row `|---|`\n   - If neither format detected: stop — \"Format not recognized. Supported: CSV with headers, Markdown table. Paste the file contents in chat.\"\n\n3. Parse rows: extract all items as a list of key-value pairs\n   - Identify available columns by name (case-insensitive matching)\n   - Map common synonyms: \"Task\" → title, \"Assignee\" → owner, \"SP\"/\"Points\" → estimate, \"Updated\"/\"Modified\" → last-updated\n   - If columns cannot be mapped automatically: ask user to specify column mapping for the ambiguous columns, then continue\n\n4. Validate row count:\n   - If 0 data rows (headers only): stop — \"Backlog is empty — no items to analyze.\"\n   - If all rows have status \"Done\" or \"Closed\": stop — \"All items are completed — no active tasks for grooming.\"\n\n### Step 2: Apply Flag Checklist\n\nFor each item, evaluate applicable flags (skip flags that require unavailable columns):\n\n| Flag | Condition | Required column(s) |\n|------|-----------|-------------------|\n| `NO_OWNER` | Owner/Assignee field is empty or missing | owner |\n| `NO_ESTIMATE` | Estimate/story points field is empty or zero | estimate |\n| `UNCLEAR_SCOPE` | Description/title is absent or fewer than 5 words | title, description |\n| `STALE` | Last-updated date is more than 14 days ago | last-updated |\n| `BLOCKED_NO_ETA` | Status contains \"blocked\" with no ETA/date mentioned | status, description |\n| `ALL_HIGH_PRIORITY` | Signal: more than 50% of all items marked High/Critical | priority (applied to entire backlog, not per item) |\n| `DUPLICATE_TITLE` | Title is ≥80% similar to another item in the backlog | title |\n\nCompile per-item flag list and a backlog-wide summary count for each flag type.\n\n**Edge Cases:**\n- Column missing for a flag: skip that flag for all items; record the skipped check in output\n- `STALE` check: if date format is ambiguous, skip and note in skipped checks\n- `ALL_HIGH_PRIORITY`: apply once to the whole backlog; annotate in scorecard, not per-item\n\n### Step 3: Identify Top Issues\n\n1. Sort flagged items by flag count (descending)\n2. Select top 10 items (or fewer if backlog is small)\n3. For each top item: collect ID, title, flags, and priority level\n\n### Step 4: Generate Grooming Agenda\n\nGroup top issues by flag type into agenda topics:\n\n- **No Owner** → agenda item: \"Assign owners to unowned tasks\"\n- **No Estimate** → \"Estimate unscored items\"\n- **Unclear Scope** → \"Clarify scope / rewrite descriptions\"\n- **Stale Items** → \"Review or close items with no recent activity\"\n- **Blocked Items** → \"Resolve blockers or set ETA\"\n- **Priority Inflation** → \"Re-prioritize — too many High/Critical items\"\n- **Possible Duplicates** → \"Review and merge duplicate candidates\"\n\nFor each agenda topic, list the affected item IDs and a recommended action.\n\n### Step 5: Produce Output\n\nWrite the full output in the format specified in the Output Format section below.\n\n---\n\n## Negative Cases\n\n- **Empty input or headers-only file:** Stop. Return \"Backlog is empty — no items to analyze.\"\n- **Unrecognized format:** Stop. Return \"Format not recognized. Supported: CSV with headers, Markdown table.\"\n- **All items Done/Closed:** Stop. Return \"All items are completed — no active tasks for grooming.\"\n- **Plain text list without structure:** Warn — \"Insufficient structure for flag analysis. Try adding columns: status, owner, priority.\" Produce minimal output based on titles only (UNCLEAR_SCOPE check only).\n\n---\n\n## Output Format\n\n```markdown\n# Grooming Report — [date]\n\n## Scorecard\n- Total items: N\n- Flagged items: N (X%)\n- No owner: N\n- No estimate: N\n- Stale (>14 days): N\n- Blocked without ETA: N\n- Possible duplicates: N\n- Priority inflation: YES / NO\n\n## Top Issues for Grooming\n\n| Item | Title | Flags | Priority |\n|------|-------|-------|----------|\n| [ID] | [Title] | NO_OWNER, NO_ESTIMATE | High |\n| ... | ... | ... | ... |\n\n## Grooming Agenda\n\n### 1. [Topic]\n**Items:** [ID1], [ID2]\n**Problem:** [description]\n**Recommended action:** [what to discuss / decide]\n\n### 2. ...\n\n## Skipped Checks\nThe following checks were not applied due to missing columns:\n- [Flag name]: requires column \"[column name]\"\n```\n\n**Field rules:**\n- Scorecard numbers must be accurate counts from the parsed data\n- Top Issues table: max 10 rows, sorted by flag count descending\n- Agenda topics: include only those with at least one affected item\n- Skipped Checks: list only checks that were actually skipped; omit section if none skipped","tags":["backlog","grooming","assistant","claude","skills","kit","kirkruglov","agent-skills","agentic-skills","ai-agents","ai-skills","awesome-list"],"capabilities":["skill","source-kirkruglov","skill-backlog-grooming-assistant","topic-agent-skills","topic-agentic-skills","topic-ai-agents","topic-ai-skills","topic-awesome-list","topic-claude","topic-claude-ai","topic-claude-ai-skills","topic-claude-code","topic-claude-cowork","topic-claude-memory","topic-claude-skills"],"categories":["claude-skills-kit"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/KirKruglov/claude-skills-kit/backlog-grooming-assistant","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add KirKruglov/claude-skills-kit","source_repo":"https://github.com/KirKruglov/claude-skills-kit","install_from":"skills.sh"}},"qualityScore":"0.453","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 7 github stars · SKILL.md body (6,050 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:13:36.093Z","embedding":null,"createdAt":"2026-05-18T13:21:13.253Z","updatedAt":"2026-05-18T19:13:36.093Z","lastSeenAt":"2026-05-18T19:13:36.093Z","tsv":"'0':363 '1':226,231,576,830 '10':587,878 '14':455,799 '2':263,395,584,843 '3':302,572,595 '4':358,608 '5':443,688 '50':479 '80':497 'absent':439 'accept':232 'accumul':37 'accur':868 'action':197,686,838 'activ':390,650,746 'actual':903 'ad':762 'addit':112 'affect':680,894 'agenda':20,73,132,190,611,619,623,676,829,885 'ago':457 'ambigu':165,354,548 'analysi':760 'analyz':5,256,375,722 'annot':564 'anoth':500 'api':23 'appli':178,396,486,558,851 'applic':403 'ask':346 'assign':625 'assigne':330 'assist':4,49 'audit':36 'automat':345 'avail':317 'backlog':2,6,42,47,55,91,233,250,369,489,504,515,563,592,716 'backlog-grooming-assist':1 'backlog-wid':514 'base':770 'block':461,466,651,802 'blocker':654 'candid':673 'cannot':342 'case':322,524,706 'case-insensit':321 'chat':301 'check':134,539,543,554,776,845,848,897,900 'checklist':67,398 'clarifi':637 'close':383,645 'collect':600 'column':96,107,113,186,318,341,350,355,410,414,525,763,855,859,860 'comma':271 'comma-separ':270 'common':326 'compil':506 'complet':388,744 'condit':412 'connect':80 'contain':148,269,465 'content':89,93,234,242,244,262,299 'continu':357 'count':361,518,582,869,883 'csv':8,57,94,258,266,291,731 'cyril':149 'data':364,873 'date':451,545,783 'day':456,800 'decid':842 'descend':583,884 'descript':446,472,640,836 'description/title':437 'detect':136,137,176,208,264,285 'direct':102 'discuss':841 'document':126 'done':381 'done/closed':738 'due':852 'duplic':493,668,672,807 'edg':523 'empti':246,252,371,421,431,707,718 'enabl':121 'english':154,163,219 'entir':26,83,488 'error':193 'estim':116,334,426,434,631,632,796,826 'estimate/story':427 'eta':463,657,804 'eta/date':469 'evalu':402 'everi':199 'export':29,56 'extern':78 'extract':305 'fewer':441,590 'field':188,419,429,862 'file':7,88,92,241,298,713 'first':267 'flag':12,61,123,397,404,406,411,510,521,529,532,578,581,603,616,759,788,819,856,882 'follow':847 'format':204,265,284,287,546,697,702,724,727,779 'full':693 'generat':16,609 'groom':3,19,35,48,71,131,393,610,749,781,816,828 'group':612 'head':184 'header':97,187,215,273,293,366,711,733 'headers-on':710 'high':474,556,827 'high/critical':484,665 'id':109,601,682,821 'id1':833 'id2':834 'identifi':316,573 'includ':887 'inflat':659,810 'input':90,230,708 'insensit':323 'instruct':224 'insuffici':756 'issu':130,575,614,814,875 'item':14,63,108,254,307,373,386,401,482,492,501,509,535,570,579,588,599,624,634,642,646,652,666,681,720,737,742,786,789,817,832,895 'jira':22 'key':313 'key-valu':312 'label':189,217 'languag':135,141,160,169,177,209 'last':119,338,449,459 'last-upd':118,337,448,458 'latin':158 'latin-script':157 'least':892 'leav':212 'level':606 'line':268,276 'list':310,511,678,752,898 'local':28,54 'mani':664 'map':325,344,351 'mark':483 'markdown':10,59,99,125,260,274,294,734,780 'match':324 'max':877 'mention':470 'merg':671 'messag':144,194 'minim':768 'minimum':105 'miss':423,526,854 'modifi':336 'must':866 'n':787,790,794,797,801,805,808 'name':320,857,861 'need':24 'negat':705 'neither':283 'none':908 'note':551 'number':865 'omit':905 'one':893 'output':124,181,203,541,690,694,701,769,778 'owner':114,331,417,424,622,626,765,793,824 'owner/assignee':418 'pair':315 'pars':227,303,872 'part':200 'past':85,101,238,257,296 'per':491,508,569 'per-item':507,568 'phrase':173 'plain':750 'point':333,428 'possibl':667,806 'prepar':32 'priorit':662 'prioriti':115,475,485,557,605,658,766,809,820 'problem':835 'problemat':13,62 'produc':69,689,767 're':661 're-priorit':660 'read':52 'recent':649 'recogn':289,729 'recommend':196,685,837 'record':536 'report':782 'requir':81,106,408,413,858 'resolv':653 'respond':150,161,166,221 'return':249,715,726,740 'review':40,643,669 'rewrit':639 'row':281,304,360,365,378,879 'rule':863 'russian':146,152,223 'scope':436,636,638,775 'scorecard':76,128,566,784,864 'script':159 'section':183,214,703,906 'select':585 'separ':272,280 'servic':79 'session':72 'set':656 'signal':476 'similar':498 'skill':51 'skill-backlog-grooming-assistant' 'skip':133,405,530,538,549,553,844,896,904,909 'small':594 'sort':577,880 'source-kirkruglov' 'sp':332 'specifi':349,698 'sprint':34,45 'stale':447,542,641,798 'start':277 'status':117,380,464,471,764 'step':225,394,571,607,687 'stop':247,286,368,384,714,725,739 'structur':18,66,754,757 'summari':517 'support':290,730 'synonym':327 'tabl':60,100,185,261,275,295,735,876 'task':38,328,391,629,747 'templat':205 'text':182,239,751 'titl':111,192,329,445,494,495,505,602,772,818,822 'top':129,574,586,598,613,813,874 'topic':191,620,677,831,886 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agents' 'topic-ai-skills' 'topic-awesome-list' 'topic-claude' 'topic-claude-ai' 'topic-claude-ai-skills' 'topic-claude-code' 'topic-claude-cowork' 'topic-claude-memory' 'topic-claude-skills' 'total':785 'translat':198 'tri':761 'trigg':46 'trigger':172 'type':522,617 'unavail':409 'unclear':435,635,774 'unown':628 'unrecogn':723 'unscor':633 'updat':120,335,339,450,460 'upload':87,104 'use':30,64,174 'user':139,237,347 'valid':229,359 'valu':314 'warn':755 'whole':562 'wide':516 'without':753,803 'word':444 'work':25,82 'write':691 'x':791 'yes':811 'zero':433","prices":[{"id":"15803e1e-f7e8-49a0-be41-df78ac520790","listingId":"eda92bbe-b9b8-40cd-acff-4dd446118049","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"KirKruglov","category":"claude-skills-kit","install_from":"skills.sh"},"createdAt":"2026-05-18T13:21:13.253Z"}],"sources":[{"listingId":"eda92bbe-b9b8-40cd-acff-4dd446118049","source":"github","sourceId":"KirKruglov/claude-skills-kit/backlog-grooming-assistant","sourceUrl":"https://github.com/KirKruglov/claude-skills-kit/tree/main/skills/backlog-grooming-assistant","isPrimary":false,"firstSeenAt":"2026-05-18T13:21:13.253Z","lastSeenAt":"2026-05-18T19:13:36.093Z"}],"details":{"listingId":"eda92bbe-b9b8-40cd-acff-4dd446118049","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"KirKruglov","slug":"backlog-grooming-assistant","github":{"repo":"KirKruglov/claude-skills-kit","stars":7,"topics":["agent-skills","agentic-skills","ai","ai-agents","ai-skills","awesome-list","claude","claude-ai","claude-ai-skills","claude-code","claude-cowork","claude-memory","claude-skills","memory-management","productivity","productivity-tools","project-management"],"license":"mit","html_url":"https://github.com/KirKruglov/claude-skills-kit","pushed_at":"2026-05-18T04:27:46Z","description":"40+ curated agent skills for Claude Cowork and Claude.ai — ready-to-use tools for non-technical users: project management, productivity, and AI workflow automation","skill_md_sha":"5f30c991e950ffbe5669c9fd55a39e49eb30ac25","skill_md_path":"skills/backlog-grooming-assistant/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/KirKruglov/claude-skills-kit/tree/main/skills/backlog-grooming-assistant"},"layout":"multi","source":"github","category":"claude-skills-kit","frontmatter":{"name":"backlog-grooming-assistant","description":"Analyze backlog files (CSV or Markdown) to flag problematic items and generate a structured grooming agenda. No Jira API needed — works entirely with local exports. Use when preparing for sprint grooming, auditing accumulated tasks, or reviewing the backlog after a sprint. Triggers: 'groom my backlog', 'backlog grooming assistant', 'подготовь повестку груминга', 'груминг-ассистент', 'проверь бэклог на проблемы'."},"skills_sh_url":"https://skills.sh/KirKruglov/claude-skills-kit/backlog-grooming-assistant"},"updatedAt":"2026-05-18T19:13:36.093Z"}}