[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71F66VARVJCKC79GS6PHB7B":3,"skill-same:01M71F66VARVJCKC79GS6PHB7B":86},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":56,"commitSha":57,"skillDirectory":58,"forksCount":13,"repositoryHtmlUrl":59,"repositoryHomepageUrl":6,"ownerHtmlUrl":60,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":61,"install":62,"resources":75},"01M71F66VARVJCKC79GS6PHB7B","github-issues",null,"Create, manage, triage, and close GitHub issues. Search existing issues, add labels, assign people, and link to PRs. Works with gh CLI or falls back to git + GitHub REST API via curl.","gjbvsjjvgm-sketch\u002Fhermes-sovereign-unified-v13.6","gjbvsjjvgm-sketch","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F278511911?v=4","01M71F3JXKZQ70H2KCHHTXKZDA","01M71F3JY8A79Z3NZBW08TF4JD",0,"MIT","https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch\u002Fhermes-sovereign-unified-v13.6\u002Fblob\u002Fmain\u002F.hermes\u002Fskills\u002Fgithub\u002Fgithub-issues\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"github","github issues","issues","labels","cli","people","close","add","project","bug-tracking","back","bug","gh cli","project-management","api","search","git","create","auth","workflow","2026-11-10 10:12:30",false,"---\nname: github-issues\ndescription: Create, manage, triage, and close GitHub issues. Search existing issues, add labels, assign people, and link to PRs. Works with gh CLI or falls back to git + GitHub REST API via curl.\nversion: 1.1.0\nauthor: YOUSEF SHTIWE\nlicense: MIT\nmetadata:\n  hermes:\n    tags: [GitHub, Issues, Project-Management, Bug-Tracking, Triage]\n    related_skills: [github-auth, github-pr-workflow]\n---\n\n# GitHub Issues Management\n\nCreate, search, triage, and manage GitHub issues. Each section shows `gh` first, then the `curl` fallback.\n\n## Prerequisites\n\n- Authenticated with GitHub (see `github-auth` skill)\n- Inside a git repo with a GitHub remote, or specify the repo explicitly\n\n### Setup\n\n```bash\nif command -v gh &>\u002Fdev\u002Fnull && gh auth status &>\u002Fdev\u002Fnull; then\n  AUTH=\"gh\"\nelse\n  AUTH=\"git\"\n  if [ -z \"$GITHUB_TOKEN\" ]; then\n    if [ -f ~\u002F.hermes\u002F.env ] && grep -q \"^GITHUB_TOKEN=\" ~\u002F.hermes\u002F.env; then\n      GITHUB_TOKEN=$(grep \"^GITHUB_TOKEN=\" ~\u002F.hermes\u002F.env | head -1 | cut -d= -f2 | tr -d '\\n\\r')\n    elif grep -q \"github.com\" ~\u002F.git-credentials 2>\u002Fdev\u002Fnull; then\n      GITHUB_TOKEN=$(grep \"github.com\" ~\u002F.git-credentials 2>\u002Fdev\u002Fnull | head -1 | sed 's|https:\u002F\u002F[^:]*:\\([^@]*\\)@.*|\\1|')\n    fi\n  fi\nfi\n\nREMOTE_URL=$(git remote get-url origin)\nOWNER_REPO=$(echo \"$REMOTE_URL\" | sed -E 's|.*github\\.com[:\u002F]||; s|\\.git$||')\nOWNER=$(echo \"$OWNER_REPO\" | cut -d\u002F -f1)\nREPO=$(echo \"$OWNER_REPO\" | cut -d\u002F -f2)\n```\n\n---\n\n## 1. Viewing Issues\n\n**With gh:**\n\n```bash\ngh issue list\ngh issue list --state open --label \"bug\"\ngh issue list --assignee @me\ngh issue list --search \"authentication error\" --state all\ngh issue view 42\n```\n\n**With curl:**\n\n```bash\n# List open issues\ncurl -s \\\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\n  \"https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues?state=open&per_page=20\" \\\n  | python3 -c \"\nimport sys, json\nfor i in json.load(sys.stdin):\n    if 'pull_request' not in i:  # GitHub API returns PRs in \u002Fissues too\n        labels = ', '.join(l['name'] for l in i['labels'])\n        print(f\\\"#{i['number']:5}  {i['state']:6}  {labels:30}  {i['title']}\\\")\"\n\n# Filter by label\ncurl -s \\\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\n  \"https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues?state=open&labels=bug&per_page=20\" \\\n  | python3 -c \"\nimport sys, json\nfor i in json.load(sys.stdin):\n    if 'pull_request' not in i:\n        print(f\\\"#{i['number']}  {i['title']}\\\")\"\n\n# View a specific issue\ncurl -s \\\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F42 \\\n  | python3 -c \"\nimport sys, json\ni = json.load(sys.stdin)\nlabels = ', '.join(l['name'] for l in i['labels'])\nassignees = ', '.join(a['login'] for a in i['assignees'])\nprint(f\\\"#{i['number']}: {i['title']}\\\")\nprint(f\\\"State: {i['state']}  Labels: {labels}  Assignees: {assignees}\\\")\nprint(f\\\"Author: {i['user']['login']}  Created: {i['created_at']}\\\")\nprint(f\\\"\\n{i['body']}\\\")\"\n\n# Search issues\ncurl -s \\\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\n  \"https:\u002F\u002Fapi.github.com\u002Fsearch\u002Fissues?q=authentication+error+repo:$OWNER\u002F$REPO\" \\\n  | python3 -c \"\nimport sys, json\nfor i in json.load(sys.stdin)['items']:\n    print(f\\\"#{i['number']}  {i['state']:6}  {i['title']}\\\")\"\n```\n\n## 2. Creating Issues\n\n**With gh:**\n\n```bash\ngh issue create \\\n  --title \"Login redirect ignores ?next= parameter\" \\\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 (should go to \u002Fsettings)\n\n## Expected Behavior\nRespect the ?next= query parameter.\" \\\n  --label \"bug,backend\" \\\n  --assignee \"username\"\n```\n\n**With curl:**\n\n```bash\ncurl -s -X POST \\\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues \\\n  -d '{\n    \"title\": \"Login redirect ignores ?next= parameter\",\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.\",\n    \"labels\": [\"bug\", \"backend\"],\n    \"assignees\": [\"username\"]\n  }'\n```\n\n### Bug Report Template\n\n```\n## Bug Description\n\u003CWhat's happening>\n\n## Steps to Reproduce\n1. \u003Cstep>\n2. \u003Cstep>\n\n## Expected Behavior\n\u003CWhat should happen>\n\n## Actual Behavior\n\u003CWhat actually happens>\n\n## Environment\n- OS: \u003Cos>\n- Version: \u003Cversion>\n```\n\n### Feature Request Template\n\n```\n## Feature Description\n\u003CWhat you want>\n\n## Motivation\n\u003CWhy this would be useful>\n\n## Proposed Solution\n\u003CHow it could work>\n\n## Alternatives Considered\n\u003COther approaches>\n```\n\n## 3. Managing Issues\n\n### Add\u002FRemove Labels\n\n**With gh:**\n\n```bash\ngh issue edit 42 --add-label \"priority:high,bug\"\ngh issue edit 42 --remove-label \"needs-triage\"\n```\n\n**With curl:**\n\n```bash\n# Add labels\ncurl -s -X POST \\\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F42\u002Flabels \\\n  -d '{\"labels\": [\"priority:high\", \"bug\"]}'\n\n# Remove a label\ncurl -s -X DELETE \\\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F42\u002Flabels\u002Fneeds-triage\n\n# List available labels in the repo\ncurl -s \\\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Flabels \\\n  | python3 -c \"\nimport sys, json\nfor l in json.load(sys.stdin):\n    print(f\\\"  {l['name']:30}  {l.get('description', '')}\\\")\"\n```\n\n### Assignment\n\n**With gh:**\n\n```bash\ngh issue edit 42 --add-assignee username\ngh issue edit 42 --add-assignee @me\n```\n\n**With curl:**\n\n```bash\ncurl -s -X POST \\\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F42\u002Fassignees \\\n  -d '{\"assignees\": [\"username\"]}'\n```\n\n### Commenting\n\n**With gh:**\n\n```bash\ngh issue comment 42 --body \"Investigated — root cause is in auth middleware. Working on a fix.\"\n```\n\n**With curl:**\n\n```bash\ncurl -s -X POST \\\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F42\u002Fcomments \\\n  -d '{\"body\": \"Investigated — root cause is in auth middleware. Working on a fix.\"}'\n```\n\n### Closing and Reopening\n\n**With gh:**\n\n```bash\ngh issue close 42\ngh issue close 42 --reason \"not planned\"\ngh issue reopen 42\n```\n\n**With curl:**\n\n```bash\n# Close\ncurl -s -X PATCH \\\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F42 \\\n  -d '{\"state\": \"closed\", \"state_reason\": \"completed\"}'\n\n# Reopen\ncurl -s -X PATCH \\\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F42 \\\n  -d '{\"state\": \"open\"}'\n```\n\n### Linking Issues to PRs\n\nIssues are automatically closed when a PR merges with the right keywords in the body:\n\n```\nCloses #42\nFixes #42\nResolves #42\n```\n\nTo create a branch from an issue:\n\n**With gh:**\n\n```bash\ngh issue develop 42 --checkout\n```\n\n**With git (manual equivalent):**\n\n```bash\ngit checkout main && git pull origin main\ngit checkout -b fix\u002Fissue-42-login-redirect\n```\n\n## 4. Issue Triage Workflow\n\nWhen asked to triage issues:\n\n1. **List untriaged issues:**\n\n```bash\n# With gh\ngh issue list --label \"needs-triage\" --state open\n\n# With curl\ncurl -s \\\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\n  \"https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues?labels=needs-triage&state=open\" \\\n  | python3 -c \"\nimport sys, json\nfor i in json.load(sys.stdin):\n    if 'pull_request' not in i:\n        print(f\\\"#{i['number']}  {i['title']}\\\")\"\n```\n\n2. **Read and categorize** each issue (view details, understand the bug\u002Ffeature)\n\n3. **Apply labels and priority** (see Managing Issues above)\n\n4. **Assign** if the owner is clear\n\n5. **Comment with triage notes** if needed\n\n## 5. Bulk Operations\n\nFor batch operations, combine API calls with shell scripting:\n\n**With gh:**\n\n```bash\n# Close all issues with a specific label\ngh issue list --label \"wontfix\" --json number --jq '.[].number' | \\\n  xargs -I {} gh issue close {} --reason \"not planned\"\n```\n\n**With curl:**\n\n```bash\n# List issue numbers with a label, then close each\ncurl -s \\\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\n  \"https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues?labels=wontfix&state=open\" \\\n  | python3 -c \"import sys,json; [print(i['number']) for i in json.load(sys.stdin)]\" \\\n  | while read num; do\n    curl -s -X PATCH \\\n      -H \"Authorization: token $GITHUB_TOKEN\" \\\n      https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F$num \\\n      -d '{\"state\": \"closed\", \"state_reason\": \"not_planned\"}'\n    echo \"Closed #$num\"\n  done\n```\n\n## Quick Reference Table\n\n| Action | gh | curl endpoint |\n|--------|-----|--------------|\n| List issues | `gh issue list` | `GET \u002Frepos\u002F{o}\u002F{r}\u002Fissues` |\n| View issue | `gh issue view N` | `GET \u002Frepos\u002F{o}\u002F{r}\u002Fissues\u002FN` |\n| Create issue | `gh issue create ...` | `POST \u002Frepos\u002F{o}\u002F{r}\u002Fissues` |\n| Add labels | `gh issue edit N --add-label ...` | `POST \u002Frepos\u002F{o}\u002F{r}\u002Fissues\u002FN\u002Flabels` |\n| Assign | `gh issue edit N --add-assignee ...` | `POST \u002Frepos\u002F{o}\u002F{r}\u002Fissues\u002FN\u002Fassignees` |\n| Comment | `gh issue comment N --body ...` | `POST \u002Frepos\u002F{o}\u002F{r}\u002Fissues\u002FN\u002Fcomments` |\n| Close | `gh issue close N` | `PATCH \u002Frepos\u002F{o}\u002F{r}\u002Fissues\u002FN` |\n| Search | `gh issue list --search \"...\"` | `GET \u002Fsearch\u002Fissues?q=...` |\n","# GitHub Issues Management\n\nCreate, search, triage, and manage GitHub issues. Each section shows `gh` first, then the `curl` fallback.\n\n## Prerequisites\n\n- Authenticated with GitHub (see `github-auth` skill)\n- Inside a git repo with a GitHub remote, or specify the repo explicitly\n\n### Setup\n\n```bash\nif command -v gh &>\u002Fdev\u002Fnull && gh auth status &>\u002Fdev\u002Fnull; then\n  AUTH=\"gh\"\nelse\n  AUTH=\"git\"\n  if [ -z \"$GITHUB_TOKEN\" ]; then\n    if [ -f ~\u002F.hermes\u002F.env ] && grep -q \"^GITHUB_TOKEN=\" ~\u002F.hermes\u002F.env; then\n      GITHUB_TOKEN=$(grep \"^GITHUB_TOKEN=\" ~\u002F.hermes\u002F.env | head -1 | cut -d= -f2 | tr -d '\\n\\r')\n    elif grep -q \"github.com\" ~\u002F.git-credentials 2>\u002Fdev\u002Fnull; then\n      GITHUB_TOKEN=$(grep \"github.com\" ~\u002F.git-credentials 2>\u002Fdev\u002Fnull | head -1 | sed 's|https:\u002F\u002F[^:]*:\\([^@]*\\)@.*|\\1|')\n    fi\n  fi\nfi\n\nREMOTE_URL=$(git remote get-url origin)\nOWNER_REPO=$(echo \"$REMOTE_URL\" | sed -E 's|.*github\\.com[:\u002F]||; s|\\.git$||')\nOWNER=$(echo \"$OWNER_REPO\" | cut -d\u002F -f1)\nREPO=$(echo \"$OWNER_REPO\" | cut -d\u002F -f2)\n```\n\n---\n\n## 1. Viewing Issues\n\n**With gh:**\n\n```bash\ngh issue list\ngh issue list --state open --label \"bug\"\ngh issue list --assignee @me\ngh issue list --search \"authentication error\" --state all\ngh issue view 42\n```\n\n**With curl:**\n\n```bash\n# List open issues\ncurl -s \\\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\n  \"https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues?state=open&per_page=20\" \\\n  | python3 -c \"\nimport sys, json\nfor i in json.load(sys.stdin):\n    if 'pull_request' not in i:  # GitHub API returns PRs in \u002Fissues too\n        labels = ', '.join(l['name'] for l in i['labels'])\n        print(f\\\"#{i['number']:5}  {i['state']:6}  {labels:30}  {i['title']}\\\")\"\n\n# Filter by label\ncurl -s \\\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\n  \"https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues?state=open&labels=bug&per_page=20\" \\\n  | python3 -c \"\nimport sys, json\nfor i in json.load(sys.stdin):\n    if 'pull_request' not in i:\n        print(f\\\"#{i['number']}  {i['title']}\\\")\"\n\n# View a specific issue\ncurl -s \\\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F42 \\\n  | python3 -c \"\nimport sys, json\ni = json.load(sys.stdin)\nlabels = ', '.join(l['name'] for l in i['labels'])\nassignees = ', '.join(a['login'] for a in i['assignees'])\nprint(f\\\"#{i['number']}: {i['title']}\\\")\nprint(f\\\"State: {i['state']}  Labels: {labels}  Assignees: {assignees}\\\")\nprint(f\\\"Author: {i['user']['login']}  Created: {i['created_at']}\\\")\nprint(f\\\"\\n{i['body']}\\\")\"\n\n# Search issues\ncurl -s \\\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\n  \"https:\u002F\u002Fapi.github.com\u002Fsearch\u002Fissues?q=authentication+error+repo:$OWNER\u002F$REPO\" \\\n  | python3 -c \"\nimport sys, json\nfor i in json.load(sys.stdin)['items']:\n    print(f\\\"#{i['number']}  {i['state']:6}  {i['title']}\\\")\"\n```\n\n## 2. Creating Issues\n\n**With gh:**\n\n```bash\ngh issue create \\\n  --title \"Login redirect ignores ?next= parameter\" \\\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 (should go to \u002Fsettings)\n\n## Expected Behavior\nRespect the ?next= query parameter.\" \\\n  --label \"bug,backend\" \\\n  --assignee \"username\"\n```\n\n**With curl:**\n\n```bash\ncurl -s -X POST \\\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues \\\n  -d '{\n    \"title\": \"Login redirect ignores ?next= parameter\",\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.\",\n    \"labels\": [\"bug\", \"backend\"],\n    \"assignees\": [\"username\"]\n  }'\n```\n\n### Bug Report Template\n\n```\n## Bug Description\n\u003CWhat's happening>\n\n## Steps to Reproduce\n1. \u003Cstep>\n2. \u003Cstep>\n\n## Expected Behavior\n\u003CWhat should happen>\n\n## Actual Behavior\n\u003CWhat actually happens>\n\n## Environment\n- OS: \u003Cos>\n- Version: \u003Cversion>\n```\n\n### Feature Request Template\n\n```\n## Feature Description\n\u003CWhat you want>\n\n## Motivation\n\u003CWhy this would be useful>\n\n## Proposed Solution\n\u003CHow it could work>\n\n## Alternatives Considered\n\u003COther approaches>\n```\n\n## 3. Managing Issues\n\n### Add\u002FRemove Labels\n\n**With gh:**\n\n```bash\ngh issue edit 42 --add-label \"priority:high,bug\"\ngh issue edit 42 --remove-label \"needs-triage\"\n```\n\n**With curl:**\n\n```bash\n# Add labels\ncurl -s -X POST \\\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F42\u002Flabels \\\n  -d '{\"labels\": [\"priority:high\", \"bug\"]}'\n\n# Remove a label\ncurl -s -X DELETE \\\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F42\u002Flabels\u002Fneeds-triage\n\n# List available labels in the repo\ncurl -s \\\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Flabels \\\n  | python3 -c \"\nimport sys, json\nfor l in json.load(sys.stdin):\n    print(f\\\"  {l['name']:30}  {l.get('description', '')}\\\")\"\n```\n\n### Assignment\n\n**With gh:**\n\n```bash\ngh issue edit 42 --add-assignee username\ngh issue edit 42 --add-assignee @me\n```\n\n**With curl:**\n\n```bash\ncurl -s -X POST \\\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F42\u002Fassignees \\\n  -d '{\"assignees\": [\"username\"]}'\n```\n\n### Commenting\n\n**With gh:**\n\n```bash\ngh issue comment 42 --body \"Investigated — root cause is in auth middleware. Working on a fix.\"\n```\n\n**With curl:**\n\n```bash\ncurl -s -X POST \\\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F42\u002Fcomments \\\n  -d '{\"body\": \"Investigated — root cause is in auth middleware. Working on a fix.\"}'\n```\n\n### Closing and Reopening\n\n**With gh:**\n\n```bash\ngh issue close 42\ngh issue close 42 --reason \"not planned\"\ngh issue reopen 42\n```\n\n**With curl:**\n\n```bash\n# Close\ncurl -s -X PATCH \\\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F42 \\\n  -d '{\"state\": \"closed\", \"state_reason\": \"completed\"}'\n\n# Reopen\ncurl -s -X PATCH \\\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\n  https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F42 \\\n  -d '{\"state\": \"open\"}'\n```\n\n### Linking Issues to PRs\n\nIssues are automatically closed when a PR merges with the right keywords in the body:\n\n```\nCloses #42\nFixes #42\nResolves #42\n```\n\nTo create a branch from an issue:\n\n**With gh:**\n\n```bash\ngh issue develop 42 --checkout\n```\n\n**With git (manual equivalent):**\n\n```bash\ngit checkout main && git pull origin main\ngit checkout -b fix\u002Fissue-42-login-redirect\n```\n\n## 4. Issue Triage Workflow\n\nWhen asked to triage issues:\n\n1. **List untriaged issues:**\n\n```bash\n# With gh\ngh issue list --label \"needs-triage\" --state open\n\n# With curl\ncurl -s \\\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\n  \"https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues?labels=needs-triage&state=open\" \\\n  | python3 -c \"\nimport sys, json\nfor i in json.load(sys.stdin):\n    if 'pull_request' not in i:\n        print(f\\\"#{i['number']}  {i['title']}\\\")\"\n```\n\n2. **Read and categorize** each issue (view details, understand the bug\u002Ffeature)\n\n3. **Apply labels and priority** (see Managing Issues above)\n\n4. **Assign** if the owner is clear\n\n5. **Comment with triage notes** if needed\n\n## 5. Bulk Operations\n\nFor batch operations, combine API calls with shell scripting:\n\n**With gh:**\n\n```bash\n# Close all issues with a specific label\ngh issue list --label \"wontfix\" --json number --jq '.[].number' | \\\n  xargs -I {} gh issue close {} --reason \"not planned\"\n```\n\n**With curl:**\n\n```bash\n# List issue numbers with a label, then close each\ncurl -s \\\n  -H \"Authorization: token $GITHUB_TOKEN\" \\\n  \"https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues?labels=wontfix&state=open\" \\\n  | python3 -c \"import sys,json; [print(i['number']) for i in json.load(sys.stdin)]\" \\\n  | while read num; do\n    curl -s -X PATCH \\\n      -H \"Authorization: token $GITHUB_TOKEN\" \\\n      https:\u002F\u002Fapi.github.com\u002Frepos\u002F$OWNER\u002F$REPO\u002Fissues\u002F$num \\\n      -d '{\"state\": \"closed\", \"state_reason\": \"not_planned\"}'\n    echo \"Closed #$num\"\n  done\n```\n\n## Quick Reference Table\n\n| Action | gh | curl endpoint |\n|--------|-----|--------------|\n| List issues | `gh issue list` | `GET \u002Frepos\u002F{o}\u002F{r}\u002Fissues` |\n| View issue | `gh issue view N` | `GET \u002Frepos\u002F{o}\u002F{r}\u002Fissues\u002FN` |\n| Create issue | `gh issue create ...` | `POST \u002Frepos\u002F{o}\u002F{r}\u002Fissues` |\n| Add labels | `gh issue edit N --add-label ...` | `POST \u002Frepos\u002F{o}\u002F{r}\u002Fissues\u002FN\u002Flabels` |\n| Assign | `gh issue edit N --add-assignee ...` | `POST \u002Frepos\u002F{o}\u002F{r}\u002Fissues\u002FN\u002Fassignees` |\n| Comment | `gh issue comment N --body ...` | `POST \u002Frepos\u002F{o}\u002F{r}\u002Fissues\u002FN\u002Fcomments` |\n| Close | `gh issue close N` | `PATCH \u002Frepos\u002F{o}\u002F{r}\u002Fissues\u002FN` |\n| Search | `gh issue list --search \"...\"` | `GET \u002Fsearch\u002Fissues?q=...` |\n",{"name":5,"author":43,"license":14,"version":44,"metadata":45,"description":7},"YOUSEF SHTIWE","1.1.0",{"hermes":46},{"tags":47,"related_skills":53},[48,49,50,51,52],"GitHub","Issues","Project-Management","Bug-Tracking","Triage",[54,55],"github-auth","github-pr-workflow","main","93bbc269671fbb340afa15b36a8766f15dc30df2",".hermes\u002Fskills\u002Fgithub\u002Fgithub-issues","https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch\u002Fhermes-sovereign-unified-v13.6","https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch","2026-04-27 02:51:28",{"source":8,"skillName":5,"commands":63,"prompt":73,"zipAvailable":74},[64,67,70],{"tool":65,"command":66},"npx","npx skills add gjbvsjjvgm-sketch\u002Fhermes-sovereign-unified-v13.6 --skill github-issues",{"tool":68,"command":69},"bunx","bunx skills add gjbvsjjvgm-sketch\u002Fhermes-sovereign-unified-v13.6 --skill github-issues",{"tool":71,"command":72},"pnpm","pnpm dlx skills add gjbvsjjvgm-sketch\u002Fhermes-sovereign-unified-v13.6 --skill github-issues","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch\u002Fhermes-sovereign-unified-v13.6\u002Fblob\u002Fmain\u002F.hermes\u002Fskills\u002Fgithub\u002Fgithub-issues\u002FSKILL.md",true,[76,82],{"path":77,"resourceType":78,"resourceTypeDesc":79,"sizeBytes":80,"sourceHtmlUrl":81},"templates\u002Fbug-report.md","REFERENCE","参考文档",469,"https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch\u002Fhermes-sovereign-unified-v13.6\u002Fblob\u002Fmain\u002F.hermes\u002Fskills\u002Fgithub\u002Fgithub-issues\u002Ftemplates\u002Fbug-report.md",{"path":83,"resourceType":78,"resourceTypeDesc":79,"sizeBytes":84,"sourceHtmlUrl":85},"templates\u002Ffeature-request.md",598,"https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch\u002Fhermes-sovereign-unified-v13.6\u002Fblob\u002Fmain\u002F.hermes\u002Fskills\u002Fgithub\u002Fgithub-issues\u002Ftemplates\u002Ffeature-request.md",[87,129,157,172,191,212],{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":109,"publishedAt":38},"01M71G6TJ2RAQ1J0PV3K6D9GQA","writing-plans","Use when you have a spec or requirements for a multi-step task. Creates comprehensive implementation plans with bite-sized tasks, exact file paths, and complete code examples.","https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch\u002Fhermes-sovereign-unified-v13.6\u002Fblob\u002Fmain\u002Fhermes_sovereign_data\u002Fskills\u002Fsoftware-development\u002Fwriting-plans\u002FSKILL.md",[93,98,101,106],{"categoryNo":94,"categoryName":95,"taxonomyType":96,"taxonomyTypeDesc":97},"01JBSEEDCAT000000000000015","视觉设计","SCENARIO","使用场景",{"categoryNo":99,"categoryName":100,"taxonomyType":96,"taxonomyTypeDesc":97},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":102,"categoryName":103,"taxonomyType":104,"taxonomyTypeDesc":105},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",{"categoryNo":107,"categoryName":108,"taxonomyType":104,"taxonomyTypeDesc":105},"01JBSEEDCAT000000000000036","内容创作者",[110,111,112,113,114,37,115,116,117,118,119,120,121,122,123,124,125,126,127,128],"writing","writing plans","plans","design","review","documentation","tasks","development","code","planning","code-review","subagent","superpowers","paths","test-driven-development","you","for","test-driven","when",{"skillNo":130,"name":124,"nameZh":6,"description":131,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":132,"categories":133,"keywords":142,"publishedAt":38},"01M71G6R81013R3T7W5VP56GCB","Use when implementing any feature or bugfix, before writing implementation code. Enforces RED-GREEN-REFACTOR cycle with test-first approach.","https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch\u002Fhermes-sovereign-unified-v13.6\u002Fblob\u002Fmain\u002Fhermes_sovereign_data\u002Fskills\u002Fsoftware-development\u002Ftest-driven-development\u002FSKILL.md",[134,137,140,141],{"categoryNo":135,"categoryName":136,"taxonomyType":96,"taxonomyTypeDesc":97},"01JBSEEDCAT000000000000007","代码审查",{"categoryNo":138,"categoryName":139,"taxonomyType":96,"taxonomyTypeDesc":97},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":99,"categoryName":100,"taxonomyType":96,"taxonomyTypeDesc":97},{"categoryNo":107,"categoryName":108,"taxonomyType":104,"taxonomyTypeDesc":105},[143,144,117,145,146,110,147,118,148,121,122,149,150,151,152,153,154,155,156,128],"test","test driven development","driven","testing","debugging","refactor","red-green-refactor","cycle","green","systematic","bugfix","implementing","systematic-debugging","test-first",{"skillNo":158,"name":155,"nameZh":6,"description":159,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":160,"categories":161,"keywords":163,"publishedAt":38},"01M71G6N0Y546JZEDF25E2PMCE","Use when encountering any bug, test failure, or unexpected behavior. 4-phase root cause investigation — NO fixes without understanding the problem first.","https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch\u002Fhermes-sovereign-unified-v13.6\u002Fblob\u002Fmain\u002Fhermes_sovereign_data\u002Fskills\u002Fsoftware-development\u002Fsystematic-debugging\u002FSKILL.md",[162],{"categoryNo":138,"categoryName":139,"taxonomyType":96,"taxonomyTypeDesc":97},[164,147,152,110,143,117,121,165,122,29,166,167,112,168,124,169,127,170,171,128],"systematic debugging","use","root-cause","problem-solving","problem","fixes","phase","root cause",{"skillNo":173,"name":174,"nameZh":6,"description":175,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":176,"categories":177,"keywords":184,"publishedAt":38},"01M71G6J0DXEGY48GH4KVW2SJH","subagent-driven-development","Use when executing implementation plans with independent tasks. Dispatches fresh delegate_task per task with two-stage review (spec compliance then code quality).","https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch\u002Fhermes-sovereign-unified-v13.6\u002Fblob\u002Fmain\u002Fhermes_sovereign_data\u002Fskills\u002Fsoftware-development\u002Fsubagent-driven-development\u002FSKILL.md",[178,179,180,181],{"categoryNo":99,"categoryName":100,"taxonomyType":96,"taxonomyTypeDesc":97},{"categoryNo":102,"categoryName":103,"taxonomyType":104,"taxonomyTypeDesc":105},{"categoryNo":107,"categoryName":108,"taxonomyType":104,"taxonomyTypeDesc":105},{"categoryNo":182,"categoryName":183,"taxonomyType":104,"taxonomyTypeDesc":105},"01JBSEEDCAT000000000000037","律师与法务",[117,185,121,145,110,114,37,186,116,118,187,120,188,189,122,112,190,124,127,128],"subagent driven development","code quality","delegation","parallel","delegate","fresh",{"skillNo":192,"name":193,"nameZh":6,"description":194,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":195,"categories":196,"keywords":199,"publishedAt":38},"01M71G6EFFBQX6634E6XHB09Y1","requesting-code-review","Pre-commit verification pipeline — static security scan, baseline-aware quality gates, independent reviewer subagent, and auto-fix loop. Use after code changes and before committing, pushing, or opening a PR.","https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch\u002Fhermes-sovereign-unified-v13.6\u002Fblob\u002Fmain\u002Fhermes_sovereign_data\u002Fskills\u002Fsoftware-development\u002Frequesting-code-review\u002FSKILL.md",[197,198],{"categoryNo":135,"categoryName":136,"taxonomyType":96,"taxonomyTypeDesc":97},{"categoryNo":102,"categoryName":103,"taxonomyType":104,"taxonomyTypeDesc":105},[200,114,118,201,110,202,120,203,204,205,206,121,207,208,209,122,124,210,211,127],"code review","requesting code review","commit","verification","security scan","pipeline","loop","reviewer","fix","auto","static","auto-fix",{"skillNo":213,"name":214,"nameZh":6,"description":215,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":216,"categories":217,"keywords":218,"publishedAt":38},"01M71G6CM8ANSWVFXCN9AAD58Y","plan","Plan mode for Hermes — inspect context, write a markdown plan into the active workspace's `.hermes\u002Fplans\u002F` directory, and do not execute the work.","https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch\u002Fhermes-sovereign-unified-v13.6\u002Fblob\u002Fmain\u002Fhermes_sovereign_data\u002Fskills\u002Fsoftware-development\u002Fplan\u002FSKILL.md",[],[214,110,219,37,117,119,220,121,221,222,223,224,225,226,112,227,228,229,126,230],"directory","markdown","workspace","work","write","implementation","do","active","plan mode","inspect","mode","plan-mode"]