[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6BT8B516VV66P8TJEWEF2D4":3,"skill-same:01M6BT8B516VV66P8TJEWEF2D4":51},{"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":24,"linkOnly":25,"markdownContent":26,"markdownBody":27,"frontMatter":28,"refName":29,"commitSha":30,"skillDirectory":31,"forksCount":32,"repositoryHtmlUrl":33,"repositoryHomepageUrl":6,"ownerHtmlUrl":34,"ownerBlogUrl":35,"ownerDescription":6,"updatedAt":36,"install":37,"resources":50},"01M6BT8B516VV66P8TJEWEF2D4","dev",null,"Development workflow for this repository. Run `make help` to see available targets.","whilp\u002Fworld","whilp","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F189851?v=4","01M6BT84FR1FVM3GDBQ6RB4JSP","Will Maier","01M6BT84MRQ5GDX80FPR2VGRQT",10,"MIT","https:\u002F\u002Fgithub.com\u002Fwhilp\u002Fworld\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fdev\u002FSKILL.md",[],[5,19,20,21,22,23],"workflow","development","run","help","repository","2026-11-10 10:12:30",false,"---\nname: dev\ndescription: Development workflow for this repository. Run `make help` to see available targets.\n---\n\n# dev\n\nDevelopment workflow utilities for branching, PR management, and review feedback.\n\n## Creating branches\n\nCreate a new branch off the latest default branch commit.\n\n### Workflow\n\n1. Fetch latest from remote\n2. Detect default branch (main or master)\n3. Create branch with descriptive name based on task\n4. Switch to new branch\n\n### Branch naming\n\nGenerate a short, kebab-case name from the task:\n- `add-user-auth` not `add-user-authentication-feature`\n- `fix-login-bug` not `fix-the-bug-in-the-login-flow`\n- `refactor-api` not `refactor-api-endpoints-for-better-performance`\n\nUse a prefix if the repo convention requires one (check existing branches).\n\n```bash\n# Fetch and get default branch\ngit fetch origin\ngit remote show origin | sed -n '\u002FHEAD branch\u002Fs\u002F.*: \u002F\u002Fp'\n\n# Create branch from latest default branch\ngit checkout -b \u003Cbranch-name> origin\u002Fmain\n\n# See existing branch naming patterns\ngit branch -r | head -20\n```\n\nIf branches use prefixes like `feature\u002F`, `fix\u002F`, or username prefixes like `wcm\u002F`, follow that pattern.\n\n## Review feedback\n\nAddress GitHub PR review comments and reply to reviewers.\n\n### Workflow\n\n1. **Get pending review comments** - fetch unresolved comments\n2. **Address each comment** - make code changes to resolve feedback\n3. **Commit with clear message** - reference what feedback was addressed\n4. **Reply to reviewer** - concise reply with commit SHA and explanation\n\n### Getting review comments\n\n```bash\n# All comments on a PR (includes replies)\ngh pr view \u003Cpr-number> --comments --json comments\n\n# Review comments (code-level feedback)\ngh api repos\u002F{owner}\u002F{repo}\u002Fpulls\u002F{pr}\u002Fcomments --jq '.[] | {id, path, line, body, user: .user.login, in_reply_to_id}'\n\n# Pending\u002Funresolved comments (no replies yet)\ngh api repos\u002F{owner}\u002F{repo}\u002Fpulls\u002F{pr}\u002Fcomments --jq '[.[] | select(.in_reply_to_id == null)] | .[] | {id, path, body: .body[0:100]}'\n```\n\n### Replying to comments\n\n```bash\n# Reply to a review comment\ngh api repos\u002F{owner}\u002F{repo}\u002Fpulls\u002F{pr}\u002Fcomments \\\n  --method POST \\\n  -f body=\"Fixed in abc1234 - renamed to run-test.js\" \\\n  -F in_reply_to=\u003Ccomment-id>\n```\n\n### Good reply format\n\nReplies should be:\n- **Concise** - one sentence is often enough\n- **Reference commit SHA** - so reviewer can verify\n- **Explain how** - brief description of the fix\n\nExamples:\n- `Fixed in abc1234 - renamed to run-test.js as suggested`\n- `Addressed in def5678 - now uses a single rule in cook.mk`\n- `Good catch, fixed in 789abcd - removed the duplicate import`\n\n### Complete example\n\n```bash\n# 1. Get pending comments on PR #269\ngh api repos\u002Fwhilp\u002Fworld\u002Fpulls\u002F269\u002Fcomments \\\n  --jq '.[] | select(.in_reply_to_id == null) | {id, path, body}'\n\n# Output:\n# {\"id\":2702089939,\"path\":\"lib\u002Fappscript\u002Frun-tests.js\",\"body\":\"run-tests.js should be run-test.js...\"}\n\n# 2. Make the fix and commit\ngit mv lib\u002Fappscript\u002Frun-tests.js lib\u002Fappscript\u002Frun-test.js\ngit commit -m \"appscript: rename run-tests.js to run-test.js\"\n# Commit SHA: abc1234\n\n# 3. Reply to the comment\ngh api repos\u002Fwhilp\u002Fworld\u002Fpulls\u002F269\u002Fcomments \\\n  --method POST \\\n  -f body=\"Fixed in abc1234 - renamed to run-test.js\" \\\n  -F in_reply_to=2702089939\n```\n\n### Batch processing\n\nFor multiple comments:\n\n```bash\n# Get all pending comments as JSON\ngh api repos\u002F{owner}\u002F{repo}\u002Fpulls\u002F{pr}\u002Fcomments \\\n  --jq '[.[] | select(.in_reply_to_id == null)] | group_by(.path) | .[] | {path: .[0].path, comments: [.[] | {id, body}]}'\n```\n\nThis groups comments by file for efficient processing.\n","# dev\n\nDevelopment workflow utilities for branching, PR management, and review feedback.\n\n## Creating branches\n\nCreate a new branch off the latest default branch commit.\n\n### Workflow\n\n1. Fetch latest from remote\n2. Detect default branch (main or master)\n3. Create branch with descriptive name based on task\n4. Switch to new branch\n\n### Branch naming\n\nGenerate a short, kebab-case name from the task:\n- `add-user-auth` not `add-user-authentication-feature`\n- `fix-login-bug` not `fix-the-bug-in-the-login-flow`\n- `refactor-api` not `refactor-api-endpoints-for-better-performance`\n\nUse a prefix if the repo convention requires one (check existing branches).\n\n```bash\n# Fetch and get default branch\ngit fetch origin\ngit remote show origin | sed -n '\u002FHEAD branch\u002Fs\u002F.*: \u002F\u002Fp'\n\n# Create branch from latest default branch\ngit checkout -b \u003Cbranch-name> origin\u002Fmain\n\n# See existing branch naming patterns\ngit branch -r | head -20\n```\n\nIf branches use prefixes like `feature\u002F`, `fix\u002F`, or username prefixes like `wcm\u002F`, follow that pattern.\n\n## Review feedback\n\nAddress GitHub PR review comments and reply to reviewers.\n\n### Workflow\n\n1. **Get pending review comments** - fetch unresolved comments\n2. **Address each comment** - make code changes to resolve feedback\n3. **Commit with clear message** - reference what feedback was addressed\n4. **Reply to reviewer** - concise reply with commit SHA and explanation\n\n### Getting review comments\n\n```bash\n# All comments on a PR (includes replies)\ngh pr view \u003Cpr-number> --comments --json comments\n\n# Review comments (code-level feedback)\ngh api repos\u002F{owner}\u002F{repo}\u002Fpulls\u002F{pr}\u002Fcomments --jq '.[] | {id, path, line, body, user: .user.login, in_reply_to_id}'\n\n# Pending\u002Funresolved comments (no replies yet)\ngh api repos\u002F{owner}\u002F{repo}\u002Fpulls\u002F{pr}\u002Fcomments --jq '[.[] | select(.in_reply_to_id == null)] | .[] | {id, path, body: .body[0:100]}'\n```\n\n### Replying to comments\n\n```bash\n# Reply to a review comment\ngh api repos\u002F{owner}\u002F{repo}\u002Fpulls\u002F{pr}\u002Fcomments \\\n  --method POST \\\n  -f body=\"Fixed in abc1234 - renamed to run-test.js\" \\\n  -F in_reply_to=\u003Ccomment-id>\n```\n\n### Good reply format\n\nReplies should be:\n- **Concise** - one sentence is often enough\n- **Reference commit SHA** - so reviewer can verify\n- **Explain how** - brief description of the fix\n\nExamples:\n- `Fixed in abc1234 - renamed to run-test.js as suggested`\n- `Addressed in def5678 - now uses a single rule in cook.mk`\n- `Good catch, fixed in 789abcd - removed the duplicate import`\n\n### Complete example\n\n```bash\n# 1. Get pending comments on PR #269\ngh api repos\u002Fwhilp\u002Fworld\u002Fpulls\u002F269\u002Fcomments \\\n  --jq '.[] | select(.in_reply_to_id == null) | {id, path, body}'\n\n# Output:\n# {\"id\":2702089939,\"path\":\"lib\u002Fappscript\u002Frun-tests.js\",\"body\":\"run-tests.js should be run-test.js...\"}\n\n# 2. Make the fix and commit\ngit mv lib\u002Fappscript\u002Frun-tests.js lib\u002Fappscript\u002Frun-test.js\ngit commit -m \"appscript: rename run-tests.js to run-test.js\"\n# Commit SHA: abc1234\n\n# 3. Reply to the comment\ngh api repos\u002Fwhilp\u002Fworld\u002Fpulls\u002F269\u002Fcomments \\\n  --method POST \\\n  -f body=\"Fixed in abc1234 - renamed to run-test.js\" \\\n  -F in_reply_to=2702089939\n```\n\n### Batch processing\n\nFor multiple comments:\n\n```bash\n# Get all pending comments as JSON\ngh api repos\u002F{owner}\u002F{repo}\u002Fpulls\u002F{pr}\u002Fcomments \\\n  --jq '[.[] | select(.in_reply_to_id == null)] | group_by(.path) | .[] | {path: .[0].path, comments: [.[] | {id, body}]}'\n```\n\nThis groups comments by file for efficient processing.\n",{"name":5,"description":7},"main","e5d89acbf522d779c29cb727c768f326e89ae54c",".claude\u002Fskills\u002Fdev",3,"https:\u002F\u002Fgithub.com\u002Fwhilp\u002Fworld","https:\u002F\u002Fgithub.com\u002Fwhilp","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fwhilp\u002F","2026-11-13 22:19:48",{"source":8,"skillName":5,"commands":38,"prompt":48,"zipAvailable":49},[39,42,45],{"tool":40,"command":41},"npx","npx skills add whilp\u002Fworld --skill dev",{"tool":43,"command":44},"bunx","bunx skills add whilp\u002Fworld --skill dev",{"tool":46,"command":47},"pnpm","pnpm dlx skills add whilp\u002Fworld --skill dev","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fwhilp\u002Fworld\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fdev\u002FSKILL.md",true,[],[52,64,74,100,108,120],{"skillNo":53,"name":54,"nameZh":6,"description":55,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":56,"categories":57,"keywords":58,"publishedAt":24},"01M6BT8VN2MXTN6DX2SRKDSP9R","screenshot","Take screenshots, screen recordings, scrolling captures, and OCR text recognition using CleanShot X. Use when user requests screenshots, captures, screen recording, OCR, text extraction, or image annotation.","https:\u002F\u002Fgithub.com\u002Fwhilp\u002Fworld\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fscreenshot\u002FSKILL.md",[],[54,59,60,61,62,63],"ocr","screen recording","extraction","screenshots","image",{"skillNo":65,"name":66,"nameZh":6,"description":67,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":68,"categories":69,"keywords":70,"publishedAt":24},"01M6BT8SKFXRKMZCW0BZ9NNQ8Q","nvim","Interact with Neovim configuration and build system","https:\u002F\u002Fgithub.com\u002Fwhilp\u002Fworld\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fnvim\u002FSKILL.md",[],[66,71,72,73],"neovim","plugin","plugin management",{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":93,"publishedAt":24},"01M6BT8QJZV0CE2XXEKMVDPH0F","meta","Guide for writing and improving Claude Code skills. Use when creating new skills, debugging why skills aren't activating, or improving skill descriptions and structure.","https:\u002F\u002Fgithub.com\u002Fwhilp\u002Fworld\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fmeta\u002FSKILL.md",[80,85,88],{"categoryNo":81,"categoryName":82,"taxonomyType":83,"taxonomyTypeDesc":84},"01JBSEEDCAT000000000000018","写作与文案","SCENARIO","使用场景",{"categoryNo":86,"categoryName":87,"taxonomyType":83,"taxonomyTypeDesc":84},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":89,"categoryName":90,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[94,95,96,97,98,99],"Meta","debugging","why","code","claude code skills","writing",{"skillNo":101,"name":102,"nameZh":6,"description":103,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":106,"publishedAt":24},"01M6BT8N5PZJ5VJQBNG28654HB","karabiner","Configure and manage Karabiner-Elements key remapping. Use when modifying karabiner.json, adding key remappings, creating complex modifications, managing profiles, setting variables, or troubleshooting keybinding issues.","https:\u002F\u002Fgithub.com\u002Fwhilp\u002Fworld\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fkarabiner\u002FSKILL.md",[],[102,107],"issues",{"skillNo":109,"name":110,"nameZh":6,"description":111,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":112,"categories":113,"keywords":114,"publishedAt":24},"01M6BT8JFG096T7J6A53CYTV5W","hammerspoon","Configure and manage Hammerspoon automation, app launching, and window switching. Use when working with ~\u002F.config\u002Fhammerspoon config files, adding keybindings, modifying the leader modal, or troubleshooting Hammerspoon functionality. Window management is handled by AeroSpace.","https:\u002F\u002Fgithub.com\u002Fwhilp\u002Fworld\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fhammerspoon\u002FSKILL.md",[],[110,115,116,117,118,119],"aerospace","modal","window management","config","automation",{"skillNo":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":126,"publishedAt":24},"01M6BT8GJQDPHYJEEGSFGT9ESZ","ghostty","Configure and manage Ghostty terminal emulator settings. Use when modifying ghostty config, validating configuration, checking window settings, themes, fonts, keybindings, or troubleshooting ghostty startup behavior.","https:\u002F\u002Fgithub.com\u002Fwhilp\u002Fworld\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fghostty\u002FSKILL.md",[],[122,127,128,118],"terminal","startup"]