{"id":"fa054ab0-0f05-4148-9322-2db3bca8bf3b","shortId":"mwLkUz","kind":"skill","title":"wip","tagline":"Kanban board of active work — backlog items, own PRs, review requests, related PRs, assigned issues, and sketches","description":"# Work-in-Progress Dashboard\n\nProduce a Kanban board of all active work: backlog items, own PRs, review requests, related PRs by others, assigned issues, and active sketches. Output is an Obsidian Kanban plugin board file for interactive drag-to-reorder viewing.\n\nSources: Obsidian vault at `~/Documents/obsidian-vault/` and GitHub.\n\n**Note:** This skill template uses a single GitHub repo. Adapt the `--repo` flags to your own repositories. If you use external project management tools (Notion, Jira, Linear, etc.), add additional steps to query them.\n\n## Procedure\n\n### 0. Check previous board for completed items\n\nBefore gathering data, check whether a previous board exists for today:\n\n```\nRead: ~/Documents/obsidian-vault/wip-YYYY-MM-DD.md\n```\n\nIf it exists, scan the entire board for checked checkboxes (`- [x]`) that have a `#backlog` tag. For each such card:\n1. Extract the item's description text and source note `[[link]]`\n2. Read the source note and find the matching `- [ ] ... #backlog` line\n3. Change `- [ ]` to `- [x]` in the source note using Edit\n\nReport what was marked done. If no checked backlog items are found or the file doesn't exist, skip silently.\n\n### 1. Open backlog items\n\nSearch for unchecked `#backlog` checkboxes across the vault:\n\n```\nGrep: pattern=\"- \\[ \\].*#backlog\" path=\"~/Documents/obsidian-vault\" output_mode=\"content\"\n```\n\n**Deduplicate** results by normalising each item: strip the date prefix and any wiki-links, then compare the remaining description text. If the same item appears in multiple notes, keep only one card with the earliest date and the most recent source note.\n\nGroup by source note. Show the item text and date.\n\nWhile gathering backlog items, extract all `#service/*` and `#lib/*` tags — these define the user's **active focus areas** used to filter later sections.\n\n### 2. My PRs\n\nTwo sources — the vault and GitHub. Run these in parallel:\n\n**a) Vault PR notes** (`#pr` tag or `pr-` filename prefix):\n\n```\nGrep: pattern=\"#pr\\b\" path=\"~/Documents/obsidian-vault\" output_mode=\"files_with_matches\"\nGlob: pattern=\"pr-*.md\" path=\"~/Documents/obsidian-vault\"\n```\n\nFor each PR note, extract the PR number from the filename (`pr-NNNNN-*`) and check its status:\n\n```bash\ngh pr view <number> --repo <owner>/<repo> --json state,title,mergedAt,closedAt,updatedAt\n```\n\n**b) Open PRs on GitHub** (catches PRs with no vault note):\n\n```bash\ngh pr list --repo <owner>/<repo> --author @me --state open --json number,title,updatedAt,url\n```\n\nMerge both sources. For each PR, report:\n- PR number, title, current GitHub state (open/merged/closed)\n- Vault note link if one exists, or \"(no vault note)\" if it only came from GitHub\n- Flag merged/closed PRs that still appear in vault as stale\n\nAlso fetch changed files for each own open PR to augment focus areas:\n\n```bash\ngh pr diff <number> --repo <owner>/<repo> --name-only\n```\n\n### 3. Active sketches\n\nFind all notes tagged `#sketch`:\n\n```\nGrep: pattern=\"#sketch\" path=\"~/Documents/obsidian-vault\" output_mode=\"files_with_matches\"\n```\n\nList each with its title. Extract any `#service/*` or `#lib/*` tags and add to active focus areas.\n\n### 4. Build active focus areas\n\nAt this point you have a set of active focus areas derived from:\n- `#service/*` and `#lib/*` tags on `#backlog` items\n- `#service/*` and `#lib/*` tags on `#sketch` notes\n- File paths from own open PRs\n\nThis set is used to filter and tier sections 5–6.\n\n### 5. Review Requests\n\nFetch PRs requesting review from the user:\n\n```bash\ngh pr list --repo <owner>/<repo> --search \"review-requested:@me\" --state open --json number,title,author,updatedAt\n```\n\nFor each candidate, check which files it touches:\n\n```bash\ngh pr diff <number> --repo <owner>/<repo> --name-only\n```\n\nTier the results:\n- **Likely relevant** — PR touches paths that overlap active focus areas\n- **Other** — blanket CODEOWNERS requests in unrelated areas. Show as a count.\n\n### 6. Related PRs\n\nFetch recent PRs by others:\n\n```bash\ngh pr list --repo <owner>/<repo> --state merged --json number,title,author,mergedAt --limit 20\ngh pr list --repo <owner>/<repo> --state open --json number,title,author,updatedAt --limit 20\n```\n\nFilter out the user's own PRs. For each remaining candidate, check file overlap with active focus areas. Only include PRs whose changed files overlap.\n\nAdd a **one-line editorial summary** at the top of this section describing what work is happening in areas that overlap with yours.\n\nTo keep this fast: if the focus areas set is empty, skip this section entirely.\n\n### 7. Build Kanban board\n\nGenerate a Kanban board file in Obsidian Kanban plugin format. The file will be saved as `wip-YYYY-MM-DD.md`.\n\nThe board has H2 columns with `- [ ]` checkbox cards. Use `--` as field separator within cards. Wiki-links `[[note]]` for navigation, tags for searchability. Empty columns get a single `- [ ] None` card.\n\n**Template:**\n\n```markdown\n---\nkanban-plugin: basic\n---\n\n## Heads Up\n\n## Backlog\n- [ ] Description [[source-note]] @{YYYY-MM-DD} #backlog\n\n## My PRs\n- [ ] [#NNNNN](https://github.com/<owner>/<repo>/pull/NNNNN) Title -- state [[pr-nnnnn-description]]\n\n## Review Requests\n- [ ] [#NNNNN](https://github.com/<owner>/<repo>/pull/NNNNN) Title -- @author -- touches focus/area #review\n- [ ] N other blanket CODEOWNERS requests #review/other\n\n## Related PRs\n- [ ] Context: Active work near your focus -- one-line editorial summary\n- [ ] [#NNNNN](https://github.com/<owner>/<repo>/pull/NNNNN) Title -- @author -- merged YYYY-MM-DD\n\n## Sketches\n- [ ] [[note-name]] Title #sketch\n\n## Active\n\n\n%% kanban:settings\n{\"kanban-plugin\":\"basic\"}\n%%\n```\n\n**Card format rules:**\n- All cards are `- [ ]` single-line checkboxes (mandatory for Kanban plugin)\n- Use `--` as field separator (not `—`)\n- Wiki-links `[[note]]` for navigation, tags for searchability\n- `@{YYYY-MM-DD}` dates only on Backlog cards (date the item was added)\n- Empty columns get a single `- [ ] None` card\n- **Heads Up** is a drag-to-prioritise column — the user moves cards here from other columns in Obsidian. The skill leaves it empty unless there are notable items (imminent deadlines, etc.).\n- **Active column** is always the last column and starts empty. The user drags items they're currently working on here.\n\n### 8. Editorial observations (terminal only)\n\nAfter the board markdown, print a short \"Notes\" section in the terminal (not on the board) with observations. Possible triggers:\n- Merge conflicts / drift risk — related PRs that just merged into areas you have open PRs in\n- Review requests blocking others — especially those waiting several days\n- Stale own PRs — open with no update in 7+ days\n- Relevant work by others that changes assumptions\n\nIf nothing is notable, skip the Notes section.\n\n### 9. Save Kanban board\n\nAfter presenting the board in the terminal, ask the user whether they'd like to save it using `AskUserQuestion`. If the user declines, stop.\n\nIf the user accepts:\n\n**a) Write the Kanban file.** Write `~/Documents/obsidian-vault/wip-YYYY-MM-DD.md` with the full board content.\n\n**b) Link from the daily note.** If today's daily note doesn't contain `[[wip-YYYY-MM-DD]]`, append a `## WIP` section with the link.\n\n## Constraints\n\n- **Read-only during gathering.** Do not edit any vault notes while gathering data (steps 1–7). The only exception is step 0, which marks completed backlog items. Only write to the vault in step 9, and only if the user opts in.\n- **Fast.** Use parallel tool calls where possible. Limit diff checks to the 10 most recent PRs if there are many candidates.\n- **No verbosity.** One line per item. The user wants an at-a-glance dashboard, not prose.\n- **Kanban format compliance.** Generated file must have YAML frontmatter with `kanban-plugin: basic`, H2 headings for columns, `- [ ]` checkboxes for cards, and the settings block at the end.\n\n## Usage\n\n```\n/wip           # Generate Kanban board of active work\n```","tags":["wip","claude","code","obsidian","skills","phelps-sg","agent-memory","agent-skills","claude-code","llm"],"capabilities":["skill","source-phelps-sg","skill-wip","topic-agent-memory","topic-agent-skills","topic-claude-code","topic-llm","topic-obsidian"],"categories":["claude-code-obsidian-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/phelps-sg/claude-code-obsidian-skills/wip","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add phelps-sg/claude-code-obsidian-skills","source_repo":"https://github.com/phelps-sg/claude-code-obsidian-skills","install_from":"skills.sh"}},"qualityScore":"0.456","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 12 github stars · SKILL.md body (7,884 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-04-19T00:41:30.397Z","embedding":null,"createdAt":"2026-04-19T00:41:30.397Z","updatedAt":"2026-04-19T00:41:30.397Z","lastSeenAt":"2026-04-19T00:41:30.397Z","tsv":"'/documents/obsidian-vault':66,212,320,331,459 '/documents/obsidian-vault/wip-yyyy-mm-dd.md':123,1043 '/pull/nnnnn':770,781,808 '/wip':1186 '0':104,1098 '1':144,196,1091 '10':1131 '2':155,292 '20':619,632 '3':166,447 '4':482 '5':529,531 '6':530,598 '7':697,988,1092 '8':930 '9':1005,1111 'accept':1036 'across':205 'activ':5,30,45,284,448,479,484,495,584,648,796,822,910,1191 'ad':870 'adapt':78 'add':97,477,658 'addit':98 'also':426 'alway':913 'appear':241,421 'append':1068 'area':286,438,481,486,497,586,593,650,677,689,965 'ask':1016 'askuserquest':1027 'assign':15,42 'assumpt':996 'at-a-gl':1150 'augment':436 'author':377,556,616,629,783,810 'b':318,361,1049 'backlog':7,32,138,164,184,198,203,210,271,505,756,765,864,1102 'bash':350,372,439,541,566,606 'basic':753,828,1170 'blanket':588,789 'block':973,1181 'board':3,27,53,107,118,130,700,704,719,937,950,1008,1012,1047,1189 'build':483,698 'call':1123 'came':413 'candid':560,643,1139 'card':143,248,725,731,747,829,833,865,877,890,1177 'catch':366 'chang':167,428,655,995 'check':105,114,132,183,347,561,644,1128 'checkbox':133,204,724,838,1175 'closedat':359 'codeown':589,790 'column':722,742,872,886,894,911,916,1174 'compar':232 'complet':109,1101 'complianc':1159 'conflict':956 'constraint':1075 'contain':1062 'content':215,1048 'context':795 'count':597 'current':396,926 'd':1021 'daili':1053,1058 'dashboard':23,1154 'data':113,1089 'date':224,252,268,861,866 'day':979,989 'dd':764,815,860,1067 'deadlin':908 'declin':1031 'dedupl':216 'defin':280 'deriv':498 'describ':671 'descript':149,235,757,776 'diff':442,569,1127 'doesn':191,1060 'done':180 'drag':58,883,922 'drag-to-prioritis':882 'drag-to-reord':57 'drift':957 'earliest':251 'edit':175,1083 'editori':663,804,931 'empti':692,741,871,901,919 'end':1184 'entir':129,696 'especi':975 'etc':96,909 'except':1095 'exist':119,126,193,405 'extern':89 'extract':145,273,336,470 'fast':685,1119 'fetch':427,534,601 'field':728,845 'file':54,190,323,429,462,514,563,645,656,705,712,1041,1161 'filenam':313,342 'filter':289,525,633 'find':161,450 'flag':81,416 'focus':285,437,480,485,496,585,649,688,800 'focus/area':785 'format':710,830,1158 'found':187 'frontmatt':1165 'full':1046 'gather':112,270,1080,1088 'generat':701,1160,1187 'get':743,873 'gh':351,373,440,542,567,607,620 'github':68,76,300,365,397,415 'github.com':769,780,807 'glanc':1153 'glob':326 'grep':208,315,455 'group':259 'h2':721,1171 'happen':675 'head':754,878,1172 'immin':907 'includ':652 'interact':56 'issu':16,43 'item':8,33,110,147,185,199,221,240,265,272,506,868,906,923,1103,1145 'jira':94 'json':355,381,553,613,626 'kanban':2,26,51,699,703,708,751,823,826,841,1007,1040,1157,1168,1188 'kanban-plugin':750,825,1167 'keep':245,683 'last':915 'later':290 'leav':899 'lib':277,474,502,509 'like':577,1022 'limit':618,631,1126 'line':165,662,803,837,1143 'linear':95 'link':154,230,402,734,850,1050,1074 'list':375,465,544,609,622 'manag':91 'mandatori':839 'mani':1138 'mark':179,1100 'markdown':749,938 'match':163,325,464 'md':329 'merg':386,612,811,955,963 'merged/closed':417 'mergedat':358,617 'mm':763,814,859,1066 'mode':214,322,461 'move':889 'multipl':243 'must':1162 'n':787 'name':445,572,819 'name-on':444,571 'navig':737,853 'near':798 'nnnnn':345,768,775,779,806 'none':746,876 'normalis':219 'notabl':905,1000 'note':69,153,159,173,244,258,262,308,335,371,401,409,452,513,735,760,818,851,942,1003,1054,1059,1086 'note-nam':817 'noth':998 'notion':93 'number':339,382,394,554,614,627 'observ':932,952 'obsidian':50,63,707,896 'one':247,404,661,802,1142 'one-lin':660,801 'open':197,362,380,433,518,552,625,968,983 'open/merged/closed':399 'opt':1117 'other':41,605,974,993 'output':47,213,321,460 'overlap':583,646,657,679 'parallel':304,1121 'path':211,319,330,458,515,581 'pattern':209,316,327,456 'per':1144 'plugin':52,709,752,827,842,1169 'point':489 'possibl':953,1125 'pr':307,309,312,317,328,334,338,344,352,374,391,393,434,441,543,568,579,608,621,774 'pr-nnnnn':343 'pr-nnnnn-descript':773 'prefix':225,314 'present':1010 'previous':106,117 'print':939 'prioritis':885 'procedur':103 'produc':24 'progress':22 'project':90 'prose':1156 'prs':10,14,35,39,294,363,367,418,519,535,600,603,639,653,767,794,960,969,982,1134 'queri':101 're':925 'read':122,156,1077 'read-on':1076 'recent':256,602,1133 'relat':13,38,599,793,959 'relev':578,990 'remain':234,642 'reorder':60 'repo':77,80,354,376,443,545,570,610,623 'report':176,392 'repositori':85 'request':12,37,533,536,549,590,778,791,972 'result':217,576 'review':11,36,532,537,548,777,786,971 'review-request':547 'review/other':792 'risk':958 'rule':831 'run':301 'save':715,1006,1024 'scan':127 'search':200,546 'searchabl':740,856 'section':291,528,670,695,943,1004,1071 'separ':729,846 'servic':275,472,500,507 'set':493,521,690,824,1180 'sever':978 'short':941 'show':263,594 'silent':195 'singl':75,745,836,875 'single-lin':835 'sketch':18,46,449,454,457,512,816,821 'skill':71,898 'skill-wip' 'skip':194,693,1001 'sourc':62,152,158,172,257,261,296,388,759 'source-not':758 'source-phelps-sg' 'stale':425,980 'start':918 'state':356,379,398,551,611,624,772 'status':349 'step':99,1090,1097,1110 'still':420 'stop':1032 'strip':222 'summari':664,805 'tag':139,278,310,453,475,503,510,738,854 'templat':72,748 'termin':933,946,1015 'text':150,236,266 'tier':527,574 'titl':357,383,395,469,555,615,628,771,782,809,820 'today':121,1056 'tool':92,1122 'top':667 'topic-agent-memory' 'topic-agent-skills' 'topic-claude-code' 'topic-llm' 'topic-obsidian' 'touch':565,580,784 'trigger':954 'two':295 'uncheck':202 'unless':902 'unrel':592 'updat':986 'updatedat':360,384,557,630 'url':385 'usag':1185 'use':73,88,174,287,523,726,843,1026,1120 'user':282,540,636,888,921,1018,1030,1035,1116,1147 'vault':64,207,298,306,370,400,408,423,1085,1108 'verbos':1141 'view':61,353 'wait':977 'want':1148 'whether':115,1019 'whose':654 'wiki':229,733,849 'wiki-link':228,732,848 'wip':1,1064,1070 'wip-yyyy-mm-dd':1063 'wip-yyyy-mm-dd.md':717 'within':730 'work':6,20,31,673,797,927,991,1192 'work-in-progress':19 'write':1038,1042,1105 'x':134,169 'yaml':1164 'yyyi':762,813,858,1065 'yyyy-mm-dd':761,812,857","prices":[{"id":"e7752cb7-0746-496c-beb2-c5157c7cd63c","listingId":"fa054ab0-0f05-4148-9322-2db3bca8bf3b","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"phelps-sg","category":"claude-code-obsidian-skills","install_from":"skills.sh"},"createdAt":"2026-04-19T00:41:30.397Z"}],"sources":[{"listingId":"fa054ab0-0f05-4148-9322-2db3bca8bf3b","source":"github","sourceId":"phelps-sg/claude-code-obsidian-skills/wip","sourceUrl":"https://github.com/phelps-sg/claude-code-obsidian-skills/tree/main/skills/wip","isPrimary":false,"firstSeenAt":"2026-04-19T00:41:30.397Z","lastSeenAt":"2026-04-19T00:41:30.397Z"}],"details":{"listingId":"fa054ab0-0f05-4148-9322-2db3bca8bf3b","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"phelps-sg","slug":"wip","github":{"repo":"phelps-sg/claude-code-obsidian-skills","stars":12,"topics":["agent-memory","agent-skills","claude-code","llm","obsidian"],"license":null,"html_url":"https://github.com/phelps-sg/claude-code-obsidian-skills","pushed_at":"2026-03-02T08:39:40Z","description":"Claude Code skills that turn an Obsidian vault into a shared human/AI knowledge base","skill_md_sha":"9d5f6b01103c7e3601b1fb95fd0a1a5cf2eed18c","skill_md_path":"skills/wip/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/phelps-sg/claude-code-obsidian-skills/tree/main/skills/wip"},"layout":"multi","source":"github","category":"claude-code-obsidian-skills","frontmatter":{"name":"wip","description":"Kanban board of active work — backlog items, own PRs, review requests, related PRs, assigned issues, and sketches"},"skills_sh_url":"https://skills.sh/phelps-sg/claude-code-obsidian-skills/wip"},"updatedAt":"2026-04-19T00:41:30.397Z"}}