[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71SXDKERV9SFPTZ2D0R8AJ7":3,"skill-same:01M71SXDKERV9SFPTZ2D0R8AJ7":72},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":47,"repositoryHtmlUrl":48,"repositoryHomepageUrl":6,"ownerHtmlUrl":49,"ownerBlogUrl":50,"ownerDescription":6,"updatedAt":51,"install":52,"resources":65},"01M71SXDKERV9SFPTZ2D0R8AJ7","pr-comments",null,"Fetch unresolved GitHub PR review comments, analyze each for relevance, present categorized summary, ask which to fix, then apply minimal code changes. Trigger - any GitHub PR URL or request to review\u002Ffix PR comments.","Artawower\u002Fkaizen","Artawower","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F16963833?v=4","01M71SV5H0DRR8KXVGD4R51Z99","Art","01M71SV5J1B97T7349GGXQCYXT",2,"GPL-3.0","https:\u002F\u002Fgithub.com\u002FArtawower\u002Fkaizen\u002Fblob\u002Fmaster\u002Fdotfiles\u002Fdot_agents\u002Fskills\u002Fpr-comments\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"pr","pr comments","comments","fix","apply","for","fix pr","which","URL","trigger","github pr","minimal","review","fetch","ask","analyze","code","pr review","pr review comments","github pr review","2026-11-10 13:02:02",false,"---\nname: pr-comments\ndescription: Fetch unresolved GitHub PR review comments, analyze each for relevance, present categorized summary, ask which to fix, then apply minimal code changes. Trigger - any GitHub PR URL or request to review\u002Ffix PR comments.\n---\n\n## What I do\n\nProcess GitHub Pull Request review feedback end-to-end:\n1. Fetch unresolved review threads via a bundled Python script\n2. Classify each comment: actionable, question, outdated, nitpick, or invalid\n3. Present a structured summary grouped by category\n4. Ask which comments to fix\n5. Apply minimal targeted fixes\n6. Report results with diagnostics\n\n## When to use me\n\n- User shares a GitHub PR URL and wants to address review comments\n- User asks to \"fix PR review\", \"check PR comments\", \"handle review feedback\"\n- User wants a summary of what reviewers requested\n\n## WORKFLOW\n\n### STEP 1: Fetch unresolved threads\n\nRun the bundled script. It handles URL parsing, GraphQL query, and filters to unresolved only:\n\n```bash\npython3 ~\u002F.config\u002Fai\u002Fskills\u002Fpr-comments\u002Ffetch-pr-comments.py \u003CPR_REFERENCE>\n```\n\nSupported input formats:\n- `https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fpull\u002F123`\n- `owner\u002Frepo#123`\n- `owner\u002Frepo 123`\n- Just `123` (infers owner\u002Frepo from current git repo)\n\nThe script outputs JSON:\n```json\n{\n  \"pr_title\": \"Fix auth flow\",\n  \"pr_url\": \"https:\u002F\u002Fgithub.com\u002F...\",\n  \"total_threads\": 12,\n  \"unresolved_count\": 5,\n  \"unresolved_threads\": [\n    {\n      \"id\": \"PRRT_...\",\n      \"isOutdated\": false,\n      \"path\": \"src\u002Fauth.ts\",\n      \"line\": 42,\n      \"comments\": {\n        \"nodes\": [\n          {\n            \"author\": { \"login\": \"reviewer\" },\n            \"body\": \"Add null check here\",\n            \"url\": \"https:\u002F\u002Fgithub.com\u002F...\",\n            \"diffHunk\": \"@@ -40,6 +40,8 @@...\"\n          }\n        ]\n      }\n    }\n  ]\n}\n```\n\nIf `unresolved_count` is 0, tell the user and stop.\nIf the script fails with auth error, tell the user to run `gh auth login`.\n\n### STEP 2: Classify each unresolved comment\n\nFor each thread:\n\n1. **Actionable?** — requests a specific code change vs question\u002Fpraise\u002Fdiscussion\n2. **Outdated?** — check `isOutdated` flag AND compare `diffHunk` with current file content. If code already changed, mark as already-fixed\n3. **Relevant?** — real issue or bike-shedding?\n\nCategories:\n- **ACTIONABLE** — requires a code change\n- **QUESTION** — reviewer asks for clarification, no code change\n- **OUTDATED** — code already changed or references deleted code\n- **NITPICK** — style preference, not a real problem\n- **INVALID** — suggestion is incorrect or would introduce a bug\n\n### STEP 3: Present summary\n\n```\n## PR Review Summary: {PR_TITLE}\n**URL**: {PR_URL}\n**Unresolved threads**: {TOTAL} ({ACTIONABLE_COUNT} actionable)\n\n### Actionable\n\n#### [1] {FILE_PATH}:{LINE} — @{AUTHOR}\n> {COMMENT_BODY}\n**Assessment**: {why actionable — 1 sentence}\n\n### Questions (need response, not code)\n- [N] {FILE_PATH}:{LINE} — @{AUTHOR}: {short summary}\n\n### Can be dismissed\n- [N] {FILE_PATH}:{LINE} — {OUTDATED|NITPICK|INVALID}: {reason}\n```\n\n### STEP 4: Ask what to fix\n\n```\nWhich comments should I fix?\n- \"all\" — fix all actionable\n- Comma-separated numbers (e.g. \"1, 3, 5\") — specific ones\n- \"none\" — summary only\n```\n\nWait for user response. Do NOT proceed without explicit instruction.\n\n### STEP 5: Apply fixes\n\nFor each selected comment:\n1. Read the file from `path` field\n2. Study `diffHunk` for context\n3. Read the FULL comment thread (all replies) to understand complete discussion\n4. Make the minimal change addressing the reviewer's concern\n5. Run `lsp_diagnostics` on the changed file\n\nRules:\n- Minimal changes only — exactly what the reviewer asks\n- Never refactor surrounding code\n- Preserve file's existing code style\n- If fix is ambiguous — ask the user\n- If fix would break other code — warn and ask for confirmation\n\n### STEP 6: Report\n\n```\n## Fixes Applied\n\n| # | File | Line | Status | What changed |\n|---|------|------|--------|-------------|\n| 1 | src\u002Ffoo.ts | 42 | Fixed | Renamed variable per reviewer |\n| 3 | src\u002Fbar.ts | 15 | Fixed | Added null check |\n\n**Files changed**: {list}\n**Diagnostics**: {clean \u002F N warnings}\n```\n\nDo NOT commit. User reviews and commits manually.\n\n## Hard rules\n\n- NEVER resolve review threads on GitHub\n- NEVER push changes\n- NEVER modify files not mentioned in review comments\n- If `gh` is not authenticated — tell user to run `gh auth login` and stop\n- Answer in the same language the user uses\n","## What I do\n\nProcess GitHub Pull Request review feedback end-to-end:\n1. Fetch unresolved review threads via a bundled Python script\n2. Classify each comment: actionable, question, outdated, nitpick, or invalid\n3. Present a structured summary grouped by category\n4. Ask which comments to fix\n5. Apply minimal targeted fixes\n6. Report results with diagnostics\n\n## When to use me\n\n- User shares a GitHub PR URL and wants to address review comments\n- User asks to \"fix PR review\", \"check PR comments\", \"handle review feedback\"\n- User wants a summary of what reviewers requested\n\n## WORKFLOW\n\n### STEP 1: Fetch unresolved threads\n\nRun the bundled script. It handles URL parsing, GraphQL query, and filters to unresolved only:\n\n```bash\npython3 ~\u002F.config\u002Fai\u002Fskills\u002Fpr-comments\u002Ffetch-pr-comments.py \u003CPR_REFERENCE>\n```\n\nSupported input formats:\n- `https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fpull\u002F123`\n- `owner\u002Frepo#123`\n- `owner\u002Frepo 123`\n- Just `123` (infers owner\u002Frepo from current git repo)\n\nThe script outputs JSON:\n```json\n{\n  \"pr_title\": \"Fix auth flow\",\n  \"pr_url\": \"https:\u002F\u002Fgithub.com\u002F...\",\n  \"total_threads\": 12,\n  \"unresolved_count\": 5,\n  \"unresolved_threads\": [\n    {\n      \"id\": \"PRRT_...\",\n      \"isOutdated\": false,\n      \"path\": \"src\u002Fauth.ts\",\n      \"line\": 42,\n      \"comments\": {\n        \"nodes\": [\n          {\n            \"author\": { \"login\": \"reviewer\" },\n            \"body\": \"Add null check here\",\n            \"url\": \"https:\u002F\u002Fgithub.com\u002F...\",\n            \"diffHunk\": \"@@ -40,6 +40,8 @@...\"\n          }\n        ]\n      }\n    }\n  ]\n}\n```\n\nIf `unresolved_count` is 0, tell the user and stop.\nIf the script fails with auth error, tell the user to run `gh auth login`.\n\n### STEP 2: Classify each unresolved comment\n\nFor each thread:\n\n1. **Actionable?** — requests a specific code change vs question\u002Fpraise\u002Fdiscussion\n2. **Outdated?** — check `isOutdated` flag AND compare `diffHunk` with current file content. If code already changed, mark as already-fixed\n3. **Relevant?** — real issue or bike-shedding?\n\nCategories:\n- **ACTIONABLE** — requires a code change\n- **QUESTION** — reviewer asks for clarification, no code change\n- **OUTDATED** — code already changed or references deleted code\n- **NITPICK** — style preference, not a real problem\n- **INVALID** — suggestion is incorrect or would introduce a bug\n\n### STEP 3: Present summary\n\n```\n## PR Review Summary: {PR_TITLE}\n**URL**: {PR_URL}\n**Unresolved threads**: {TOTAL} ({ACTIONABLE_COUNT} actionable)\n\n### Actionable\n\n#### [1] {FILE_PATH}:{LINE} — @{AUTHOR}\n> {COMMENT_BODY}\n**Assessment**: {why actionable — 1 sentence}\n\n### Questions (need response, not code)\n- [N] {FILE_PATH}:{LINE} — @{AUTHOR}: {short summary}\n\n### Can be dismissed\n- [N] {FILE_PATH}:{LINE} — {OUTDATED|NITPICK|INVALID}: {reason}\n```\n\n### STEP 4: Ask what to fix\n\n```\nWhich comments should I fix?\n- \"all\" — fix all actionable\n- Comma-separated numbers (e.g. \"1, 3, 5\") — specific ones\n- \"none\" — summary only\n```\n\nWait for user response. Do NOT proceed without explicit instruction.\n\n### STEP 5: Apply fixes\n\nFor each selected comment:\n1. Read the file from `path` field\n2. Study `diffHunk` for context\n3. Read the FULL comment thread (all replies) to understand complete discussion\n4. Make the minimal change addressing the reviewer's concern\n5. Run `lsp_diagnostics` on the changed file\n\nRules:\n- Minimal changes only — exactly what the reviewer asks\n- Never refactor surrounding code\n- Preserve file's existing code style\n- If fix is ambiguous — ask the user\n- If fix would break other code — warn and ask for confirmation\n\n### STEP 6: Report\n\n```\n## Fixes Applied\n\n| # | File | Line | Status | What changed |\n|---|------|------|--------|-------------|\n| 1 | src\u002Ffoo.ts | 42 | Fixed | Renamed variable per reviewer |\n| 3 | src\u002Fbar.ts | 15 | Fixed | Added null check |\n\n**Files changed**: {list}\n**Diagnostics**: {clean \u002F N warnings}\n```\n\nDo NOT commit. User reviews and commits manually.\n\n## Hard rules\n\n- NEVER resolve review threads on GitHub\n- NEVER push changes\n- NEVER modify files not mentioned in review comments\n- If `gh` is not authenticated — tell user to run `gh auth login` and stop\n- Answer in the same language the user uses\n",{"name":5,"description":7},"master","cbded6c96796a063405af105d5b3209ab6219407","dotfiles\u002Fdot_agents\u002Fskills\u002Fpr-comments",0,"https:\u002F\u002Fgithub.com\u002FArtawower\u002Fkaizen","https:\u002F\u002Fgithub.com\u002FArtawower","workationmode.com","2026-11-10 19:23:03",{"source":8,"skillName":5,"commands":53,"prompt":63,"zipAvailable":64},[54,57,60],{"tool":55,"command":56},"npx","npx skills add Artawower\u002Fkaizen --skill pr-comments",{"tool":58,"command":59},"bunx","bunx skills add Artawower\u002Fkaizen --skill pr-comments",{"tool":61,"command":62},"pnpm","pnpm dlx skills add Artawower\u002Fkaizen --skill pr-comments","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FArtawower\u002Fkaizen\u002Fblob\u002Fmaster\u002Fdotfiles\u002Fdot_agents\u002Fskills\u002Fpr-comments\u002FSKILL.md",true,[66],{"path":67,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":70,"sourceHtmlUrl":71},"fetch-pr-comments.py","SCRIPT","脚本",3640,"https:\u002F\u002Fgithub.com\u002FArtawower\u002Fkaizen\u002Fblob\u002Fmaster\u002Fdotfiles\u002Fdot_agents\u002Fskills\u002Fpr-comments\u002Ffetch-pr-comments.py",[73,101,121,145,164,190],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":84,"publishedAt":39},"01M71SYJ1B45ZKM8J96AZ3TS0H","yt-analyze","Fetch YouTrack task + comments via MCP, critically analyze relevance and requirements, produce concise summary of what to implement, and build an implementation plan mapped to codebase. Trigger - YouTrack issue ID or request to \"analyze task\", \"plan task\", \"break down YT issue\".","https:\u002F\u002Fgithub.com\u002FArtawower\u002Fkaizen\u002Fblob\u002Fmaster\u002Fdotfiles\u002Fdot_agents\u002Fskills\u002Fyt-analyze\u002FSKILL.md",[79],{"categoryNo":80,"categoryName":81,"taxonomyType":82,"taxonomyTypeDesc":83},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[34,85,86,32,87,88,89,90,91,92,93,94,95,28,96,97,21,98,99,100],"yt analyze","yt","implementation plan","MCP","plan task","plan","request","break","issue","youtrack","down","produce","break down","requirements","implement","task",{"skillNo":102,"name":103,"nameZh":6,"description":104,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":105,"categories":106,"keywords":107,"publishedAt":39},"01M71SYF7RSTEXKDWPXJ08EVQG","youtrack-task","Analyzes a YouTrack issue, reviews comments and attachments, and proposes or creates actionable subtasks. Use when the user gives a YouTrack issue ID and wants synthesis, decomposition, or follow-up tasks.","https:\u002F\u002Fgithub.com\u002FArtawower\u002Fkaizen\u002Fblob\u002Fmaster\u002Fdotfiles\u002Fdot_agents\u002Fskills\u002Fyoutrack-task\u002FSKILL.md",[],[108,94,100,109,110,111,112,113,114,93,115,116,117,21,118,119,120],"youtrack task","id","reviews","attachments","decomposition","actionable","up","follow-up","use","when","tasks","Synthesis","user",{"skillNo":122,"name":123,"nameZh":6,"description":124,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":125,"categories":126,"keywords":127,"publishedAt":39},"01M71SYCE94601T6DA5G2GDKYA","youtrack-search","Searches YouTrack from natural language or native query syntax and returns a concise report with the most relevant issues. Use when the user wants to find issues, triage work, or translate a plain-language query into YouTrack search.","https:\u002F\u002Fgithub.com\u002FArtawower\u002Fkaizen\u002Fblob\u002Fmaster\u002Fdotfiles\u002Fdot_agents\u002Fskills\u002Fyoutrack-search\u002FSKILL.md",[],[128,129,94,130,131,132,133,134,116,117,135,136,137,138,139,140,141,142,143,144],"search","youtrack search","natural language","relevant","translate","issues","plain-language","query","with","work","concise","native","find","report","syntax","triage","plain",{"skillNo":146,"name":147,"nameZh":6,"description":148,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":149,"categories":150,"keywords":159,"publishedAt":39},"01M71SYAXN8EA6DDXEZWVY872S","writing-for-agents","Writing documents for agents. Use when creating or editing skills, or modifying AGENTS.md or CLAUDE.md.","https:\u002F\u002Fgithub.com\u002FArtawower\u002Fkaizen\u002Fblob\u002Fmaster\u002Fdotfiles\u002Fdot_agents\u002Fskills\u002Fwriting-for-agents\u002FSKILL.md",[151,154],{"categoryNo":152,"categoryName":153,"taxonomyType":82,"taxonomyTypeDesc":83},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":155,"categoryName":156,"taxonomyType":157,"taxonomyTypeDesc":158},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[160,24,161,162,116,163,117],"writing for agents","writing","editing","documents",{"skillNo":165,"name":166,"nameZh":6,"description":167,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":168,"categories":169,"keywords":173,"publishedAt":39},"01M71SY8ZKMWPF8ZAENT7MQE28","write-a-prd","Create a PRD through user interview, codebase exploration, and module design, then submit as a GitHub issue. Use when user wants to write a PRD, create a product requirements document, or plan a new feature.","https:\u002F\u002Fgithub.com\u002FArtawower\u002Fkaizen\u002Fblob\u002Fmaster\u002Fdotfiles\u002Fdot_agents\u002Fskills\u002Fwrite-a-prd\u002FSKILL.md",[170],{"categoryNo":171,"categoryName":172,"taxonomyType":157,"taxonomyTypeDesc":158},"01JBSEEDCAT000000000000031","产品经理",[174,175,176,177,178,179,180,181,182,183,184,116,185,117,186,187,98,188,189,90],"write","write a prd","prd","interview","as","exploration","feature","submit","design","module","new","document","user interview","codebase exploration","create","new feature",{"skillNo":191,"name":192,"nameZh":6,"description":193,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":194,"categories":195,"keywords":196,"publishedAt":39},"01M71SY6J9F119TJSMA2YBEP5P","vitest","Plan and write Vitest tests for changed code. Analyses git diff, checks existing tests, produces a concrete test plan using flat test structure (no describe\u002Fit blocks). Use when adding tests for new\u002Fchanged code, improving Vitest coverage, or asking what to test after a change.","https:\u002F\u002Fgithub.com\u002FArtawower\u002Fkaizen\u002Fblob\u002Fmaster\u002Fdotfiles\u002Fdot_agents\u002Fskills\u002Fvitest\u002FSKILL.md",[],[192,197,198,199,24,200,184,116,201,202,117,35,203,204,90,205,206,174,207,208],"coverage","test plan","diff","tests","Existing","adding tests","test","structure","change","flat","blocks","git"]