GitHub

list-issues

github.com
InstallationInstalls just this skill for your agent
Side effectread
Authnone
Needsnavigate · evaluate
Summary

List a GitHub repository's issues (open, closed or all) with author, labels and comment counts.

Params
{"full_name":"string 'owner/repo' (e.g. 'facebook/react'). Or pass owner and repo separately.","owner":"string optional","repo":"string optional","state":"string optional: open (default) | closed | all","per_page":"int optional (default 20, max 50)"}
Returns
{"count":"int","state":"string","results":"array of { number, title, state, author, comments, labels, url, createdAt, isPullRequest }"}
SKILL.md36 lines

Intent

List a GitHub repository's issues via the public REST API (api.github.com). Pass full_name as 'owner/repo' (e.g. 'facebook/react') or owner and repo separately, plus state (open | closed | all, default open). Returns {count, state, results:[{number, title, state, author, comments, labels, url, createdAt, isPullRequest}]}. Note: the GitHub issues endpoint also returns pull requests; each item carries isPullRequest so you can filter them out. Read-only, no auth needed for public repos.

Execute

  1. navigate → https://github.com
  2. evaluate the Extractor below with params. It does the in-page work and returns the JSON in returns.

Extractor

( async (root, params) => { let full = String((params && params.full_name) || '').trim().replace(/^https?://github.com//, '').replace(//$/, ''); if (!full && params && params.owner && params.repo) full = params.owner + '/' + params.repo; full = full.split('/').slice(0, 2).join('/'); if (!/^[^/]+/[^/]+$/.test(full)) throw new Error('missing full_name (owner/repo)'); let state = String((params && params.state) || 'open').trim(); if (['open', 'closed', 'all'].indexOf(state) < 0) state = 'open'; let per = parseInt(String((params && params.per_page) || '20'), 10) || 20; if (per > 50) per = 50; const H = { 'accept': 'application/vnd.github+json', 'x-github-api-version': '2022-11-28' }; const r = await fetch('https://api.github.com/repos/' + full + '/issues?state=' + state + '&per_page=' + per, { headers: H }); if (r.status === 404) return { error: 'repo not found: ' + full, count: 0, results: [] }; if (r.status === 403) return { error: 'rate limited. Try again in a minute.', count: 0, results: [] }; const d = await r.json(); const results = (Array.isArray(d) ? d : []).map(x => ({ number: x.number, title: x.title, state: x.state, author: (x.user && x.user.login) || null, comments: x.comments, labels: (x.labels || []).map(l => l.name), url: x.html_url, createdAt: x.created_at, isPullRequest: !!x.pull_request })); return { count: results.length, state, results }; } )

Success assertion

{
  "expr": "typeof result === 'object' && Array.isArray(result.results)",
  "type": "value"
}