[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DCESJ8Z3MQ6SZ9DRGAEP71":3,"skill-same:01M6DCESJ8Z3MQ6SZ9DRGAEP71":86},{"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":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":64,"commitSha":65,"skillDirectory":66,"forksCount":67,"repositoryHtmlUrl":68,"repositoryHomepageUrl":6,"ownerHtmlUrl":69,"ownerBlogUrl":6,"ownerDescription":70,"updatedAt":71,"install":72,"resources":85},"01M6DCESJ8Z3MQ6SZ9DRGAEP71","github-issues",null,"Create, triage, label, assign GitHub issues via gh or REST.","zapabob\u002FSkills","zapabob","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F130830376?v=4","01M6DBMYZAGRTFQDSQYW3W764P","峯岸 亮","01M6DBMZ3GKDSJ01NZ9XTZD7JD",2,"MIT","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Farchive\u002Fskill-md-reviewed\u002Fsha256\u002F13\u002F134a8396e503ed57af3476fbc9478deb0d8c004d74e34fc9937418e6627a094f\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"github issues","issues","github","REST","project","bug-tracking","bug","management","tracking","hermes agent","hermes","project-management","gh","create","pr","windows","auth","workflow","triage","linux","2026-11-10 10:12:30",false,"---\r\nname: github-issues\r\ndescription: \"Create, triage, label, assign GitHub issues via gh or REST.\"\r\nversion: 1.1.0\r\nauthor: Hermes Agent\r\nlicense: MIT\r\nplatforms: [linux, macos, windows]\r\nmetadata:\r\n  hermes:\r\n    tags: [GitHub, Issues, Project-Management, Bug-Tracking, Triage]\r\n    related_skills: [github-auth, github-pr-workflow]\r\n---\r\n\r\n# GitHub Issues Management\r\n\r\nCreate, search, triage, and manage GitHub issues. Each section shows `gh` first, then the `curl` fallback.\r\n\r\n## Prerequisites\r\n\r\n- Authenticated with GitHub (see `github-auth` skill)\r\n- Inside a git repo with a GitHub remote, or specify the repo explicitly\r\n\r\n### Setup\r\n\r\n```bash\r\nif command -v gh &>\u002Fdev\u002Fnull && gh auth status &>\u002Fdev\u002Fnull; then\r\n  AUTH=\"gh\"\r\nelse\r\n  AUTH=\"git\"\r\n  if [ -z \"$GITHUB_TOKEN\" ]; then\r\n    if [ -f ~\u002F.hermes\u002F.env ] && grep -q \"^GITHUB_TOKEN=\" ~\u002F.hermes\u002F.env; then\r\n      GITHUB_TOKEN=$(grep \"^GITHUB_TOKEN=\" ~\u002F.hermes\u002F.env | head -1 | cut -d= -f2 | tr -d '\\n\\r')\r\n    elif grep -q \"github.com\" ~\u002F.git-credentials 2>\u002Fdev\u002Fnull; then\r\n      GITHUB_TOKEN=$(grep \"github.com\" ~\u002F.git-credentials 2>\u002Fdev\u002Fnull | head -1 | sed 's|https:\u002F\u002F[REDACTED]@]*\\)@.*|\\1|')\r\n    fi\r\n  fi\r\nfi\r\n\r\nREMOTE_URL=$(git remote get-url origin)\r\nOWNER_REPO=$(echo \"$REMOTE_URL\" | sed -E 's|.*github\\.com[:\u002F]||; s|\\.git$||')\r\nOWNER=$(echo \"$OWNER_REPO\" | cut -d\u002F -f1)\r\nREPO=$(echo \"$OWNER_REPO\" | cut -d\u002F -f2)\r\n```\r\n\r\n---\r\n\r\n## 1. Viewing Issues\r\n\r\n**With gh:**\r\n\r\n```bash\r\ngh issue list\r\ngh issue list --state open --label \"bug\"\r\ngh issue list --assignee @me\r\ngh issue list --search \"authentication error\" --state all\r\ngh issue view 42\r\n```\r\n\r\n**With curl:**\r\n\r\n```bash\r\n# List open issues\r\ncurl -s \\\r\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\r\n  \"https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues?state=open&per_page=20\" \\\r\n  | python3 -c \"\r\nimport sys, json\r\nfor i in json.load(sys.stdin):\r\n    if 'pull_request' not in i:  # GitHub API returns PRs in \u002Fissues too\r\n        labels = ', '.join(l['name'] for l in i['labels'])\r\n        print(f\\\"#{i['number']:5}  {i['state']:6}  {labels:30}  {i['title']}\\\")\"\r\n\r\n# Filter by label\r\ncurl -s \\\r\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\r\n  \"https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues?state=open&labels=bug&per_page=20\" \\\r\n  | python3 -c \"\r\nimport sys, json\r\nfor i in json.load(sys.stdin):\r\n    if 'pull_request' not in i:\r\n        print(f\\\"#{i['number']}  {i['title']}\\\")\"\r\n\r\n# View a specific issue\r\ncurl -s \\\r\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\r\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F42 \\\r\n  | python3 -c \"\r\nimport sys, json\r\ni = json.load(sys.stdin)\r\nlabels = ', '.join(l['name'] for l in i['labels'])\r\nassignees = ', '.join(a['login'] for a in i['assignees'])\r\nprint(f\\\"#{i['number']}: {i['title']}\\\")\r\nprint(f\\\"State: {i['state']}  Labels: {labels}  Assignees: {assignees}\\\")\r\nprint(f\\\"Author: {i['user']['login']}  Created: {i['created_at']}\\\")\r\nprint(f\\\"\\n{i['body']}\\\")\"\r\n\r\n# Search issues\r\ncurl -s \\\r\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\r\n  \"https:\u002F\u002Fapi.github.com\u002Fsearch\u002Fissues?q=authentication+error+repo:$OWNER\u002F$REPO\" \\\r\n  | python3 -c \"\r\nimport sys, json\r\nfor i in json.load(sys.stdin)['items']:\r\n    print(f\\\"#{i['number']}  {i['state']:6}  {i['title']}\\\")\"\r\n```\r\n\r\n## 2. Creating Issues\r\n\r\n**With gh:**\r\n\r\n```bash\r\ngh issue create \\\r\n  --title \"Login redirect ignores ?next= parameter\" \\\r\n  --body \"## Description\r\nAfter logging in, users always land on \u002Fdashboard.\r\n\r\n## Steps to Reproduce\r\n1. Navigate to \u002Fsettings while logged out\r\n2. Get redirected to \u002Flogin?next=\u002Fsettings\r\n3. Log in\r\n4. Actual: redirected to \u002Fdashboard (should go to \u002Fsettings)\r\n\r\n## Expected Behavior\r\nRespect the ?next= query parameter.\" \\\r\n  --label \"bug,backend\" \\\r\n  --assignee \"username\"\r\n```\r\n\r\n**With curl:**\r\n\r\n```bash\r\ncurl -s -X POST \\\r\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\r\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues \\\r\n  -d '{\r\n    \"title\": \"Login redirect ignores ?next= parameter\",\r\n    \"body\": \"## Description\\nAfter logging in, users always land on \u002Fdashboard.\\n\\n## Steps to Reproduce\\n1. Navigate to \u002Fsettings while logged out\\n2. Get redirected to \u002Flogin?next=\u002Fsettings\\n3. Log in\\n4. Actual: redirected to \u002Fdashboard\\n\\n## Expected Behavior\\nRespect the ?next= query parameter.\",\r\n    \"labels\": [\"bug\", \"backend\"],\r\n    \"assignees\": [\"username\"]\r\n  }'\r\n```\r\n\r\n### Bug Report Template\r\n\r\n```\r\n## Bug Description\r\n\u003CWhat's happening>\r\n\r\n## Steps to Reproduce\r\n1. \u003Cstep>\r\n2. \u003Cstep>\r\n\r\n## Expected Behavior\r\n\u003CWhat should happen>\r\n\r\n## Actual Behavior\r\n\u003CWhat actually happens>\r\n\r\n## Environment\r\n- OS: \u003Cos>\r\n- Version: \u003Cversion>\r\n```\r\n\r\n### Feature Request Template\r\n\r\n```\r\n## Feature Description\r\n\u003CWhat you want>\r\n\r\n## Motivation\r\n\u003CWhy this would be useful>\r\n\r\n## Proposed Solution\r\n\u003CHow it could work>\r\n\r\n## Alternatives Considered\r\n\u003COther approaches>\r\n```\r\n\r\n## 3. Managing Issues\r\n\r\n### Add\u002FRemove Labels\r\n\r\n**With gh:**\r\n\r\n```bash\r\ngh issue edit 42 --add-label \"priority:high,bug\"\r\ngh issue edit 42 --remove-label \"needs-triage\"\r\n```\r\n\r\n**With curl:**\r\n\r\n```bash\r\n# Add labels\r\ncurl -s -X POST \\\r\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\r\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F42\u002Flabels \\\r\n  -d '{\"labels\": [\"priority:high\", \"bug\"]}'\r\n\r\n# Remove a label\r\ncurl -s -X DELETE \\\r\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\r\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F42\u002Flabels\u002Fneeds-triage\r\n\r\n# List available labels in the repo\r\ncurl -s \\\r\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\r\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Flabels \\\r\n  | python3 -c \"\r\nimport sys, json\r\nfor l in json.load(sys.stdin):\r\n    print(f\\\"  {l['name']:30}  {l.get('description', '')}\\\")\"\r\n```\r\n\r\n### Assignment\r\n\r\n**With gh:**\r\n\r\n```bash\r\ngh issue edit 42 --add-assignee username\r\ngh issue edit 42 --add-assignee @me\r\n```\r\n\r\n**With curl:**\r\n\r\n```bash\r\ncurl -s -X POST \\\r\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\r\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F42\u002Fassignees \\\r\n  -d '{\"assignees\": [\"username\"]}'\r\n```\r\n\r\n### Commenting\r\n\r\n**With gh:**\r\n\r\n```bash\r\ngh issue comment 42 --body \"Investigated — root cause is in auth middleware. Working on a fix.\"\r\n```\r\n\r\n**With curl:**\r\n\r\n```bash\r\ncurl -s -X POST \\\r\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\r\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F42\u002Fcomments \\\r\n  -d '{\"body\": \"Investigated — root cause is in auth middleware. Working on a fix.\"}'\r\n```\r\n\r\n### Closing and Reopening\r\n\r\n**With gh:**\r\n\r\n```bash\r\ngh issue close 42\r\ngh issue close 42 --reason \"not planned\"\r\ngh issue reopen 42\r\n```\r\n\r\n**With curl:**\r\n\r\n```bash\r\n# Close\r\ncurl -s -X PATCH \\\r\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\r\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F42 \\\r\n  -d '{\"state\": \"closed\", \"state_reason\": \"completed\"}'\r\n\r\n# Reopen\r\ncurl -s -X PATCH \\\r\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\r\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F42 \\\r\n  -d '{\"state\": \"open\"}'\r\n```\r\n\r\n### Linking Issues to PRs\r\n\r\nIssues are automatically closed when a PR merges with the right keywords in the body:\r\n\r\n```\r\nCloses #42\r\nFixes #42\r\nResolves #42\r\n```\r\n\r\nTo create a branch from an issue:\r\n\r\n**With gh:**\r\n\r\n```bash\r\ngh issue develop 42 --checkout\r\n```\r\n\r\n**With git (manual equivalent):**\r\n\r\n```bash\r\ngit checkout main && git pull origin main\r\ngit checkout -b fix\u002Fissue-42-login-redirect\r\n```\r\n\r\n## 4. Issue Triage Workflow\r\n\r\nWhen asked to triage issues:\r\n\r\n1. **List untriaged issues:**\r\n\r\n```bash\r\n# With gh\r\ngh issue list --label \"needs-triage\" --state open\r\n\r\n# With curl\r\ncurl -s \\\r\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\r\n  \"https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues?labels=needs-triage&state=open\" \\\r\n  | python3 -c \"\r\nimport sys, json\r\nfor i in json.load(sys.stdin):\r\n    if 'pull_request' not in i:\r\n        print(f\\\"#{i['number']}  {i['title']}\\\")\"\r\n```\r\n\r\n2. **Read and categorize** each issue (view details, understand the bug\u002Ffeature)\r\n\r\n3. **Apply labels and priority** (see Managing Issues above)\r\n\r\n4. **Assign** if the owner is clear\r\n\r\n5. **Comment with triage notes** if needed\r\n\r\n## 5. Bulk Operations\r\n\r\nFor batch operations, combine API calls with shell scripting:\r\n\r\n**With gh:**\r\n\r\n```bash\r\n# Close all issues with a specific label\r\ngh issue list --label \"wontfix\" --json number --jq '.[].number' | \\\r\n  xargs -I {} gh issue close {} --reason \"not planned\"\r\n```\r\n\r\n**With curl:**\r\n\r\n```bash\r\n# List issue numbers with a label, then close each\r\ncurl -s \\\r\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\r\n  \"https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues?labels=wontfix&state=open\" \\\r\n  | python3 -c \"import sys,json; [print(i['number']) for i in json.load(sys.stdin)]\" \\\r\n  | while read num; do\r\n    curl -s -X PATCH \\\r\n      -H \"Authorization: token $GITHUB_TOKEN\" \\\r\n      https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F$num \\\r\n      -d '{\"state\": \"closed\", \"state_reason\": \"not_planned\"}'\r\n    echo \"Closed #$num\"\r\n  done\r\n```\r\n\r\n## Quick Reference Table\r\n\r\n| Action | gh | curl endpoint |\r\n|--------|-----|--------------|\r\n| List issues | `gh issue list` | `GET \u002Frepos\u002F{o}\u002F{r}\u002Fissues` |\r\n| View issue | `gh issue view N` | `GET \u002Frepos\u002F{o}\u002F{r}\u002Fissues\u002FN` |\r\n| Create issue | `gh issue create ...` | `POST \u002Frepos\u002F{o}\u002F{r}\u002Fissues` |\r\n| Add labels | `gh issue edit N --add-label ...` | `POST \u002Frepos\u002F{o}\u002F{r}\u002Fissues\u002FN\u002Flabels` |\r\n| Assign | `gh issue edit N --add-assignee ...` | `POST \u002Frepos\u002F{o}\u002F{r}\u002Fissues\u002FN\u002Fassignees` |\r\n| Comment | `gh issue comment N --body ...` | `POST \u002Frepos\u002F{o}\u002F{r}\u002Fissues\u002FN\u002Fcomments` |\r\n| Close | `gh issue close N` | `PATCH \u002Frepos\u002F{o}\u002F{r}\u002Fissues\u002FN` |\r\n| Search | `gh issue list --search \"...\"` | `GET \u002Fsearch\u002Fissues?q=...` |\r\n","# GitHub Issues Management\r\n\r\nCreate, search, triage, and manage GitHub issues. Each section shows `gh` first, then the `curl` fallback.\r\n\r\n## Prerequisites\r\n\r\n- Authenticated with GitHub (see `github-auth` skill)\r\n- Inside a git repo with a GitHub remote, or specify the repo explicitly\r\n\r\n### Setup\r\n\r\n```bash\r\nif command -v gh &>\u002Fdev\u002Fnull && gh auth status &>\u002Fdev\u002Fnull; then\r\n  AUTH=\"gh\"\r\nelse\r\n  AUTH=\"git\"\r\n  if [ -z \"$GITHUB_TOKEN\" ]; then\r\n    if [ -f ~\u002F.hermes\u002F.env ] && grep -q \"^GITHUB_TOKEN=\" ~\u002F.hermes\u002F.env; then\r\n      GITHUB_TOKEN=$(grep \"^GITHUB_TOKEN=\" ~\u002F.hermes\u002F.env | head -1 | cut -d= -f2 | tr -d '\\n\\r')\r\n    elif grep -q \"github.com\" ~\u002F.git-credentials 2>\u002Fdev\u002Fnull; then\r\n      GITHUB_TOKEN=$(grep \"github.com\" ~\u002F.git-credentials 2>\u002Fdev\u002Fnull | head -1 | sed 's|https:\u002F\u002F[REDACTED]@]*\\)@.*|\\1|')\r\n    fi\r\n  fi\r\nfi\r\n\r\nREMOTE_URL=$(git remote get-url origin)\r\nOWNER_REPO=$(echo \"$REMOTE_URL\" | sed -E 's|.*github\\.com[:\u002F]||; s|\\.git$||')\r\nOWNER=$(echo \"$OWNER_REPO\" | cut -d\u002F -f1)\r\nREPO=$(echo \"$OWNER_REPO\" | cut -d\u002F -f2)\r\n```\r\n\r\n---\r\n\r\n## 1. Viewing Issues\r\n\r\n**With gh:**\r\n\r\n```bash\r\ngh issue list\r\ngh issue list --state open --label \"bug\"\r\ngh issue list --assignee @me\r\ngh issue list --search \"authentication error\" --state all\r\ngh issue view 42\r\n```\r\n\r\n**With curl:**\r\n\r\n```bash\r\n# List open issues\r\ncurl -s \\\r\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\r\n  \"https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues?state=open&per_page=20\" \\\r\n  | python3 -c \"\r\nimport sys, json\r\nfor i in json.load(sys.stdin):\r\n    if 'pull_request' not in i:  # GitHub API returns PRs in \u002Fissues too\r\n        labels = ', '.join(l['name'] for l in i['labels'])\r\n        print(f\\\"#{i['number']:5}  {i['state']:6}  {labels:30}  {i['title']}\\\")\"\r\n\r\n# Filter by label\r\ncurl -s \\\r\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\r\n  \"https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues?state=open&labels=bug&per_page=20\" \\\r\n  | python3 -c \"\r\nimport sys, json\r\nfor i in json.load(sys.stdin):\r\n    if 'pull_request' not in i:\r\n        print(f\\\"#{i['number']}  {i['title']}\\\")\"\r\n\r\n# View a specific issue\r\ncurl -s \\\r\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\r\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F42 \\\r\n  | python3 -c \"\r\nimport sys, json\r\ni = json.load(sys.stdin)\r\nlabels = ', '.join(l['name'] for l in i['labels'])\r\nassignees = ', '.join(a['login'] for a in i['assignees'])\r\nprint(f\\\"#{i['number']}: {i['title']}\\\")\r\nprint(f\\\"State: {i['state']}  Labels: {labels}  Assignees: {assignees}\\\")\r\nprint(f\\\"Author: {i['user']['login']}  Created: {i['created_at']}\\\")\r\nprint(f\\\"\\n{i['body']}\\\")\"\r\n\r\n# Search issues\r\ncurl -s \\\r\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\r\n  \"https:\u002F\u002Fapi.github.com\u002Fsearch\u002Fissues?q=authentication+error+repo:$OWNER\u002F$REPO\" \\\r\n  | python3 -c \"\r\nimport sys, json\r\nfor i in json.load(sys.stdin)['items']:\r\n    print(f\\\"#{i['number']}  {i['state']:6}  {i['title']}\\\")\"\r\n```\r\n\r\n## 2. Creating Issues\r\n\r\n**With gh:**\r\n\r\n```bash\r\ngh issue create \\\r\n  --title \"Login redirect ignores ?next= parameter\" \\\r\n  --body \"## Description\r\nAfter logging in, users always land on \u002Fdashboard.\r\n\r\n## Steps to Reproduce\r\n1. Navigate to \u002Fsettings while logged out\r\n2. Get redirected to \u002Flogin?next=\u002Fsettings\r\n3. Log in\r\n4. Actual: redirected to \u002Fdashboard (should go to \u002Fsettings)\r\n\r\n## Expected Behavior\r\nRespect the ?next= query parameter.\" \\\r\n  --label \"bug,backend\" \\\r\n  --assignee \"username\"\r\n```\r\n\r\n**With curl:**\r\n\r\n```bash\r\ncurl -s -X POST \\\r\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\r\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues \\\r\n  -d '{\r\n    \"title\": \"Login redirect ignores ?next= parameter\",\r\n    \"body\": \"## Description\\nAfter logging in, users always land on \u002Fdashboard.\\n\\n## Steps to Reproduce\\n1. Navigate to \u002Fsettings while logged out\\n2. Get redirected to \u002Flogin?next=\u002Fsettings\\n3. Log in\\n4. Actual: redirected to \u002Fdashboard\\n\\n## Expected Behavior\\nRespect the ?next= query parameter.\",\r\n    \"labels\": [\"bug\", \"backend\"],\r\n    \"assignees\": [\"username\"]\r\n  }'\r\n```\r\n\r\n### Bug Report Template\r\n\r\n```\r\n## Bug Description\r\n\u003CWhat's happening>\r\n\r\n## Steps to Reproduce\r\n1. \u003Cstep>\r\n2. \u003Cstep>\r\n\r\n## Expected Behavior\r\n\u003CWhat should happen>\r\n\r\n## Actual Behavior\r\n\u003CWhat actually happens>\r\n\r\n## Environment\r\n- OS: \u003Cos>\r\n- Version: \u003Cversion>\r\n```\r\n\r\n### Feature Request Template\r\n\r\n```\r\n## Feature Description\r\n\u003CWhat you want>\r\n\r\n## Motivation\r\n\u003CWhy this would be useful>\r\n\r\n## Proposed Solution\r\n\u003CHow it could work>\r\n\r\n## Alternatives Considered\r\n\u003COther approaches>\r\n```\r\n\r\n## 3. Managing Issues\r\n\r\n### Add\u002FRemove Labels\r\n\r\n**With gh:**\r\n\r\n```bash\r\ngh issue edit 42 --add-label \"priority:high,bug\"\r\ngh issue edit 42 --remove-label \"needs-triage\"\r\n```\r\n\r\n**With curl:**\r\n\r\n```bash\r\n# Add labels\r\ncurl -s -X POST \\\r\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\r\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F42\u002Flabels \\\r\n  -d '{\"labels\": [\"priority:high\", \"bug\"]}'\r\n\r\n# Remove a label\r\ncurl -s -X DELETE \\\r\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\r\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F42\u002Flabels\u002Fneeds-triage\r\n\r\n# List available labels in the repo\r\ncurl -s \\\r\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\r\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Flabels \\\r\n  | python3 -c \"\r\nimport sys, json\r\nfor l in json.load(sys.stdin):\r\n    print(f\\\"  {l['name']:30}  {l.get('description', '')}\\\")\"\r\n```\r\n\r\n### Assignment\r\n\r\n**With gh:**\r\n\r\n```bash\r\ngh issue edit 42 --add-assignee username\r\ngh issue edit 42 --add-assignee @me\r\n```\r\n\r\n**With curl:**\r\n\r\n```bash\r\ncurl -s -X POST \\\r\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\r\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F42\u002Fassignees \\\r\n  -d '{\"assignees\": [\"username\"]}'\r\n```\r\n\r\n### Commenting\r\n\r\n**With gh:**\r\n\r\n```bash\r\ngh issue comment 42 --body \"Investigated — root cause is in auth middleware. Working on a fix.\"\r\n```\r\n\r\n**With curl:**\r\n\r\n```bash\r\ncurl -s -X POST \\\r\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\r\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F42\u002Fcomments \\\r\n  -d '{\"body\": \"Investigated — root cause is in auth middleware. Working on a fix.\"}'\r\n```\r\n\r\n### Closing and Reopening\r\n\r\n**With gh:**\r\n\r\n```bash\r\ngh issue close 42\r\ngh issue close 42 --reason \"not planned\"\r\ngh issue reopen 42\r\n```\r\n\r\n**With curl:**\r\n\r\n```bash\r\n# Close\r\ncurl -s -X PATCH \\\r\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\r\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F42 \\\r\n  -d '{\"state\": \"closed\", \"state_reason\": \"completed\"}'\r\n\r\n# Reopen\r\ncurl -s -X PATCH \\\r\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\r\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F42 \\\r\n  -d '{\"state\": \"open\"}'\r\n```\r\n\r\n### Linking Issues to PRs\r\n\r\nIssues are automatically closed when a PR merges with the right keywords in the body:\r\n\r\n```\r\nCloses #42\r\nFixes #42\r\nResolves #42\r\n```\r\n\r\nTo create a branch from an issue:\r\n\r\n**With gh:**\r\n\r\n```bash\r\ngh issue develop 42 --checkout\r\n```\r\n\r\n**With git (manual equivalent):**\r\n\r\n```bash\r\ngit checkout main && git pull origin main\r\ngit checkout -b fix\u002Fissue-42-login-redirect\r\n```\r\n\r\n## 4. Issue Triage Workflow\r\n\r\nWhen asked to triage issues:\r\n\r\n1. **List untriaged issues:**\r\n\r\n```bash\r\n# With gh\r\ngh issue list --label \"needs-triage\" --state open\r\n\r\n# With curl\r\ncurl -s \\\r\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\r\n  \"https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues?labels=needs-triage&state=open\" \\\r\n  | python3 -c \"\r\nimport sys, json\r\nfor i in json.load(sys.stdin):\r\n    if 'pull_request' not in i:\r\n        print(f\\\"#{i['number']}  {i['title']}\\\")\"\r\n```\r\n\r\n2. **Read and categorize** each issue (view details, understand the bug\u002Ffeature)\r\n\r\n3. **Apply labels and priority** (see Managing Issues above)\r\n\r\n4. **Assign** if the owner is clear\r\n\r\n5. **Comment with triage notes** if needed\r\n\r\n## 5. Bulk Operations\r\n\r\nFor batch operations, combine API calls with shell scripting:\r\n\r\n**With gh:**\r\n\r\n```bash\r\n# Close all issues with a specific label\r\ngh issue list --label \"wontfix\" --json number --jq '.[].number' | \\\r\n  xargs -I {} gh issue close {} --reason \"not planned\"\r\n```\r\n\r\n**With curl:**\r\n\r\n```bash\r\n# List issue numbers with a label, then close each\r\ncurl -s \\\r\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\r\n  \"https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues?labels=wontfix&state=open\" \\\r\n  | python3 -c \"import sys,json; [print(i['number']) for i in json.load(sys.stdin)]\" \\\r\n  | while read num; do\r\n    curl -s -X PATCH \\\r\n      -H \"Authorization: token $GITHUB_TOKEN\" \\\r\n      https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F$num \\\r\n      -d '{\"state\": \"closed\", \"state_reason\": \"not_planned\"}'\r\n    echo \"Closed #$num\"\r\n  done\r\n```\r\n\r\n## Quick Reference Table\r\n\r\n| Action | gh | curl endpoint |\r\n|--------|-----|--------------|\r\n| List issues | `gh issue list` | `GET \u002Frepos\u002F{o}\u002F{r}\u002Fissues` |\r\n| View issue | `gh issue view N` | `GET \u002Frepos\u002F{o}\u002F{r}\u002Fissues\u002FN` |\r\n| Create issue | `gh issue create ...` | `POST \u002Frepos\u002F{o}\u002F{r}\u002Fissues` |\r\n| Add labels | `gh issue edit N --add-label ...` | `POST \u002Frepos\u002F{o}\u002F{r}\u002Fissues\u002FN\u002Flabels` |\r\n| Assign | `gh issue edit N --add-assignee ...` | `POST \u002Frepos\u002F{o}\u002F{r}\u002Fissues\u002FN\u002Fassignees` |\r\n| Comment | `gh issue comment N --body ...` | `POST \u002Frepos\u002F{o}\u002F{r}\u002Fissues\u002FN\u002Fcomments` |\r\n| Close | `gh issue close N` | `PATCH \u002Frepos\u002F{o}\u002F{r}\u002Fissues\u002FN` |\r\n| Search | `gh issue list --search \"...\"` | `GET \u002Fsearch\u002Fissues?q=...` |\r\n",{"name":5,"author":49,"license":15,"version":50,"metadata":51,"platforms":62,"description":7},"Hermes Agent","1.1.0",{"hermes":52},{"tags":53,"related_skills":59},[54,55,56,57,58],"GitHub","Issues","Project-Management","Bug-Tracking","Triage",[60,61],"github-auth","github-pr-workflow",[43,63,39],"macos","main","0d1434f89f4bc6b07e9d272accd8c1013768820f","archive\u002Fskill-md-reviewed\u002Fsha256\u002F13\u002F134a8396e503ed57af3476fbc9478deb0d8c004d74e34fc9937418e6627a094f",0,"https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills","https:\u002F\u002Fgithub.com\u002Fzapabob","The Open University of JAPAN　2019-now\r\n\r\nTokyo University of Science　2007-2010","2026-10-26 16:29:01",{"source":8,"skillName":5,"commands":73,"prompt":83,"zipAvailable":84},[74,77,80],{"tool":75,"command":76},"npx","npx skills add zapabob\u002FSkills --skill github-issues",{"tool":78,"command":79},"bunx","bunx skills add zapabob\u002FSkills --skill github-issues",{"tool":81,"command":82},"pnpm","pnpm dlx skills add zapabob\u002FSkills --skill github-issues","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Farchive\u002Fskill-md-reviewed\u002Fsha256\u002F13\u002F134a8396e503ed57af3476fbc9478deb0d8c004d74e34fc9937418e6627a094f\u002FSKILL.md",true,[],[87,115,149,176,203,220],{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":102,"publishedAt":44},"01M6GJTE1GESGGF9K028Y7753E","xurl","X\u002FTwitter via xurl CLI: post, search, DM, media, v2 API.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fxurl\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[93,96,97],{"categoryNo":94,"categoryName":95,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":98,"categoryName":99,"taxonomyType":100,"taxonomyTypeDesc":101},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[89,103,63,104,26,43,39,105,106,107,108,109,110,34,33,111,64,112,113,114],"openclaw","cli","official","search","https","social-media","api","Media","twitter","social","via","post",{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":132,"publishedAt":44},"01M6GJT8S1PXQ8WPXT1HSNBWH2","writing-plans","Write implementation plans: bite-sized tasks, paths, code.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fwriting-plans\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[121,124,127,128,129],{"categoryNo":122,"categoryName":123,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":125,"categoryName":126,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":98,"categoryName":99,"taxonomyType":100,"taxonomyTypeDesc":101},{"categoryNo":130,"categoryName":131,"taxonomyType":100,"taxonomyTypeDesc":101},"01JBSEEDCAT000000000000036","内容创作者",[133,134,135,136,63,137,43,41,39,138,139,140,141,142,143,144,145,146,147,148],"writing","writing plans","plans","design","review","documentation","tasks","development","code","planning","code-review","subagent","write","superpowers","paths","test-driven-development",{"skillNo":150,"name":151,"nameZh":6,"description":152,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":153,"categories":154,"keywords":158,"publishedAt":44},"01M6GJST0H5X7WHBJ3BZK0DVKH","whisper","OpenAI's general-purpose speech recognition model. Supports 99 languages, transcription, translation to English, and language identification. Six model sizes from tiny (39M params) to large (1550M params). Use for speech-to-text, podcast transcription, or multilingual audio processing. Best for robust, multilingual ASR.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fwhisper\u002Fvariants\u002Fhermes-agent-optional\u002FSKILL.md",[155],{"categoryNo":156,"categoryName":157,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",[151,63,43,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175],"openai","speech","multimodal","Transformers","ASR","Audio","text","model","speech recognition","use","general","multilingual","translation","english","identification","processing","Audio Processing",{"skillNo":177,"name":178,"nameZh":6,"description":179,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":180,"categories":181,"keywords":185,"publishedAt":44},"01M6GJSMRQ8EETZTYMG72P70EA","weights-and-biases","W&B: log ML experiments, sweeps, model registry, dashboards.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fweights-and-biases\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[182],{"categoryNo":183,"categoryName":184,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000013","分析与可视化",[186,63,187,188,39,189,190,191,192,193,194,166,195,196,197,198,199,200,201,202],"weights and biases","tensorflow","experiments","pytorch","visualization","registry","real-time","tuning","dashboards","experiment","log","time","Experiment Tracking","Model Registry","Hyperparameter Tuning","WandB","Real-Time Visualization",{"skillNo":204,"name":205,"nameZh":6,"description":206,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":207,"categories":208,"keywords":210,"publishedAt":44},"01M6GJS19KDPRY112JTR326S06","watchers","Poll RSS, JSON APIs, and GitHub with watermark dedup.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fwatchers\u002Fvariants\u002Fhermes-agent-optional\u002FSKILL.md",[209],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[205,63,211,26,43,212,213,214,215,216,217,34,33,218,219],"terminal","automation","http","monitoring","cron","json","rss","devops","with",{"skillNo":221,"name":222,"nameZh":6,"description":223,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":224,"categories":225,"keywords":228,"publishedAt":44},"01M6GJRHJD2A6Q830SWF9W48BC","serving-llms-vllm","vLLM: high-throughput LLM serving, OpenAI API, quantization.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fvllm\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[226,227],{"categoryNo":94,"categoryName":95,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":98,"categoryName":99,"taxonomyType":100,"taxonomyTypeDesc":101},[229,230,231,43,232,159,233,234,235,162,236,109,237,238,239,240,241,242,243,244],"llms","vLLM","serving llms vllm","research","openai api","tensor","Inference Serving","Production","llm serving","High Throughput","PagedAttention","Continuous Batching","Quantization","Tensor Parallelism","high-throughput","throughput"]