AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified Apache-2.0 Self-run

Github Issues

skill-shikanime-labs-skills-github-issues · by shikanime-labs

Create, triage, label, assign GitHub issues via gh or REST.

No reviews yet
0 installs
29 views
0.0% view→install

Install

$ agentstack add skill-shikanime-labs-skills-github-issues

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access Used
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets Used
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-shikanime-labs-skills-github-issues)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
3mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Github Issues? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

GitHub Issues Management

Create, search, triage, and manage GitHub issues. Each section shows gh first, then the curl fallback.

Prerequisites

  • Authenticated with GitHub (see github-auth skill)
  • Inside a git repo with a GitHub remote, or specify the repo explicitly

Setup

if command -v gh &>/dev/null && gh auth status &>/dev/null; then
  AUTH="gh"
else
  AUTH="git"
  if [ -z "$GITHUB_TOKEN" ]; then
    if [ -f ~/.hermes/.env ] && grep -q "^GITHUB_TOKEN=" ~/.hermes/.env; then
      GITHUB_TOKEN=$(grep "^GITHUB_TOKEN=" ~/.hermes/.env | head -1 | cut -d=
        -f2 | tr -d '\n\r')
    elif grep -q "github.com" ~/.git-credentials 2>/dev/null; then
      GITHUB_TOKEN=$(grep "github.com" ~/.git-credentials 2>/dev/null | head -1
        | sed 's|https://[^:]*:\([^@]*\)@.*|\1|')
    fi
  fi
fi

REMOTE_URL=$(git remote get-url origin)
OWNER_REPO=$(echo "$REMOTE_URL" | sed -E 's|.*github\.com[:/]||; s|\.git$||')
OWNER=$(echo "$OWNER_REPO" | cut -d/ -f1)
REPO=$(echo "$OWNER_REPO" | cut -d/ -f2)

1. Viewing Issues

With gh:

gh issue list
gh issue list --state open --label "bug"
gh issue list --assignee @me
gh issue list --search "authentication error" --state all
gh issue view 42

With curl:

# List open issues
curl -s \
  -H "Authorization: token $GITHUB_TOKEN" \
  "https://api.github.com/repos/$OWNER/$REPO/issues?state=open&per_page=20" \
  | python3 -c "
import sys, json
for i in json.load(sys.stdin):
    if 'pull_request' not in i:  # GitHub API returns PRs in /issues too
        labels = ', '.join(l['name'] for l in i['labels'])
        print(f\"#{i['number']:5}  {i['state']:6}  {labels:30}  {i['title']}\")"

# Filter by label
curl -s \
  -H "Authorization: token $GITHUB_TOKEN" \

      "https://api.github.com/repos/$OWNER/$REPO/issues?state=open&labels=bug&per_page=20" \
  | python3 -c "
import sys, json
for i in json.load(sys.stdin):
    if 'pull_request' not in i:
        print(f\"#{i['number']}  {i['title']}\")"

# View a specific issue
curl -s \
  -H "Authorization: token $GITHUB_TOKEN" \
  https://api.github.com/repos/$OWNER/$REPO/issues/42 \
  | python3 -c "
import sys, json
i = json.load(sys.stdin)
labels = ', '.join(l['name'] for l in i['labels'])
assignees = ', '.join(a['login'] for a in i['assignees'])
print(f\"#{i['number']}: {i['title']}\")
print(f\"State: {i['state']}  Labels: {labels}  Assignees: {assignees}\")
print(f\"Author: {i['user']['login']}  Created: {i['created_at']}\")
print(f\"\n{i['body']}\")"

# Search issues
curl -s \
  -H "Authorization: token $GITHUB_TOKEN" \

      "https://api.github.com/search/issues?q=authentication+error+repo:$OWNER/$REPO" \
  | python3 -c "
import sys, json
for i in json.load(sys.stdin)['items']:
    print(f\"#{i['number']}  {i['state']:6}  {i['title']}\")"

2. Creating Issues

With gh:

gh issue create \
  --title "Login redirect ignores ?next= parameter" \
  --body "## Description
After logging in, users always land on /dashboard.

## Steps to Reproduce
1. Navigate to /settings while logged out
2. Get redirected to /login?next=/settings
3. Log in
4. Actual: redirected to /dashboard (should go to /settings)

## Expected Behavior
Respect the ?next= query parameter." \
  --label "bug,backend" \
  --assignee "username"

With curl:

curl -s -X POST \
  -H "Authorization: token $GITHUB_TOKEN" \
  https://api.github.com/repos/$OWNER/$REPO/issues \
  -d '{
    "title": "Login redirect ignores ?next= parameter",
    "body": "## Description\nAfter logging in, users always land on
      /dashboard.\n\n## Steps to Reproduce\n1. Navigate to /settings while
        logged out\n2. Get redirected to /login?next=/settings\n3. Log in\n4. Actual: redirected to /dashboard\n\n## Expected Behavior\nRespect the ?next= query parameter.",
    "labels": ["bug", "backend"],
    "assignees": ["username"]
  }'

Bug Report Template

## Bug Description

## Steps to Reproduce
1. 
2. 

## Expected Behavior

## Actual Behavior

## Environment
- OS: 
- Version: 

Feature Request Template

## Feature Description

## Motivation

## Proposed Solution

## Alternatives Considered

3. Managing Issues

Add/Remove Labels

With gh:

gh issue edit 42 --add-label "priority:high,bug"
gh issue edit 42 --remove-label "needs-triage"

With curl:

# Add labels
curl -s -X POST \
  -H "Authorization: token $GITHUB_TOKEN" \
  https://api.github.com/repos/$OWNER/$REPO/issues/42/labels \
  -d '{"labels": ["priority:high", "bug"]}'

# Remove a label
curl -s -X DELETE \
  -H "Authorization: token $GITHUB_TOKEN" \
  https://api.github.com/repos/$OWNER/$REPO/issues/42/labels/needs-triage

# List available labels in the repo
curl -s \
  -H "Authorization: token $GITHUB_TOKEN" \
  https://api.github.com/repos/$OWNER/$REPO/labels \
  | python3 -c "
import sys, json
for l in json.load(sys.stdin):
    print(f\"  {l['name']:30}  {l.get('description', '')}\")"

Assignment

With gh:

gh issue edit 42 --add-assignee username
gh issue edit 42 --add-assignee @me

With curl:

curl -s -X POST \
  -H "Authorization: token $GITHUB_TOKEN" \
  https://api.github.com/repos/$OWNER/$REPO/issues/42/assignees \
  -d '{"assignees": ["username"]}'

Commenting

With gh:

gh issue comment 42 --body "Investigated — root cause is in auth middleware.
  Working on a fix."

With curl:

curl -s -X POST \
  -H "Authorization: token $GITHUB_TOKEN" \
  https://api.github.com/repos/$OWNER/$REPO/issues/42/comments \
  -d '{"body": "Investigated — root cause is in auth middleware. Working on a
    fix."}'

Closing and Reopening

With gh:

gh issue close 42
gh issue close 42 --reason "not planned"
gh issue reopen 42

With curl:

# Close
curl -s -X PATCH \
  -H "Authorization: token $GITHUB_TOKEN" \
  https://api.github.com/repos/$OWNER/$REPO/issues/42 \
  -d '{"state": "closed", "state_reason": "completed"}'

# Reopen
curl -s -X PATCH \
  -H "Authorization: token $GITHUB_TOKEN" \
  https://api.github.com/repos/$OWNER/$REPO/issues/42 \
  -d '{"state": "open"}'

Linking Issues to PRs

Issues are automatically closed when a PR merges with the right keywords in the body:

Closes #42
Fixes #42
Resolves #42

To create a branch from an issue:

With gh:

gh issue develop 42 --checkout

With git (manual equivalent):

git checkout main && git pull origin main
git checkout -b fix/issue-42-login-redirect

4. Issue Triage Workflow

When asked to triage issues or update an issue "taking inspiration from other issues", do the work end-to-end with gh; do not stop at suggesting commands. First inspect the target issue, recent/similar issues, available labels, and milestones so labels/milestone/assignee follow repository conventions.

Useful inspection commands:

gh issue view 42 --json
  number,title,body,labels,milestone,assignees,author,state
gh issue list --state open --limit 30 --json
  number,title,labels,milestone,assignees
gh issue list --state all --search "keyword from target issue" --limit 20 --json
  number,title,body,labels,milestone,assignees
gh label list --limit 200 --json name,description
gh api repos/{owner}/{repo}/milestones --paginate --jq '.[] |
  [.title,.state,.open_issues,.due_on] | @tsv'

For substantial body rewrites, write the body to a temporary Markdown file and use --body-file; this avoids shell quoting damage and keeps French accents/backticks intact:

gh issue edit 42 \
  --title "🐛 [BUG] - Titre en français" \
  --body-file /tmp/issue-42-body.md \
  --add-label "bug,tech,CI/CD" \
  --milestone "MCO" \
  --add-assignee "@me"

Use --add-assignee, not --assignee. After editing, verify with JSON output and report the actual resulting labels, milestone, and assignees:

gh issue view 42 --json number,title,body,labels,milestone,assignees,state,url \
  --jq

      '{number,title,state,url,labels:[.labels[].name],milestone:(.milestone.title//null),assignees:[.assignees[].login]}'

When asked to triage issues:

  1. List untriaged issues:
# With gh
gh issue list --label "needs-triage" --state open

# With curl
curl -s \
  -H "Authorization: token $GITHUB_TOKEN" \

      "https://api.github.com/repos/$OWNER/$REPO/issues?labels=needs-triage&state=open" \
  | python3 -c "
import sys, json
for i in json.load(sys.stdin):
    if 'pull_request' not in i:
        print(f\"#{i['number']}  {i['title']}\")"
  1. Read and categorize each issue (view details, understand the bug/feature)
  1. Apply labels and priority (see Managing Issues above)
  1. Assign if the owner is clear
  1. Comment with triage notes if needed

5. Bulk Operations

For batch operations, combine API calls with shell scripting:

With gh:

# Close all issues with a specific label
gh issue list --label "wontfix" --json number --jq '.[].number' | \
  xargs -I {} gh issue close {} --reason "not planned"

With curl:

# List issue numbers with a label, then close each
curl -s \
  -H "Authorization: token $GITHUB_TOKEN" \
  "https://api.github.com/repos/$OWNER/$REPO/issues?labels=wontfix&state=open" \
  | python3 -c "import sys,json; [print(i['number']) for i in json.load(sys.stdin)]" \
  | while read num; do
    curl -s -X PATCH \
      -H "Authorization: token $GITHUB_TOKEN" \
      https://api.github.com/repos/$OWNER/$REPO/issues/$num \
      -d '{"state": "closed", "state_reason": "not_planned"}'
    echo "Closed #$num"
  done

Quick Reference Table

| Action | gh | curl endpoint | | ------------ | ------------------------------------ | ---------------------------------------- | | List issues | gh issue list | GET /repos/{o}/{r}/issues | | View issue | gh issue view N | GET /repos/{o}/{r}/issues/N | | Create issue | gh issue create ... | POST /repos/{o}/{r}/issues | | Add labels | gh issue edit N --add-label ... | POST /repos/{o}/{r}/issues/N/labels | | Assign | gh issue edit N --add-assignee ... | POST /repos/{o}/{r}/issues/N/assignees | | Comment | gh issue comment N --body ... | POST /repos/{o}/{r}/issues/N/comments | | Close | gh issue close N | PATCH /repos/{o}/{r}/issues/N | | Search | gh issue list --search "..." | GET /search/issues?q=... |

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.