agentsclimarketplace

Github open issues export

Skill GregoryKogan/opensource-skills/skills/github-open-issues-export

Cursor agent skills for open-source triage: fetch contribution docs from a public GitHub repo, and export open issues (including “good first issue”) to JSONL for offline or LLM review. Skills live under skills/; .cursor/skills symlinks there.

Install
npx -y skills add GregoryKogan/opensource-skills --skill github-open-issues-export

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Exports all open issues from a public github.com repository into JSON Lines files (title, labels, issue body, last comment, metadata): a full open-issues.jsonl plus open-issues-good-first-issue.jsonl filtered by the good first issue label, for LLM or offline triage. Use when the user asks to export, dump, or list open issues, wants a JSONL snapshot for analysis, good first issues, or provides a GitHub repo URL for issue data (not pull requests).

SKILL.md

4.9 KB, as published. Nobody here has run it

GitHub open issues export

Goal

Given a public GitHub repository (github.com only), list open issues (not pull requests), enrich each with the last comment when present, and write two .jsonl files under agent-artifacts/github-open-issues-export/<run-id>/: the full export and a good first issue subset. The subset is produced by filtering each fully built record (label name good first issue, case-insensitive on labels[].name); no extra GitHub API requests beyond those already needed for the full export.

When not to use

  • Private repositories, GitHub Enterprise, or hosts other than github.com (different auth or URLs).
  • Closed issues, PR-only exports, or Search API (q=) workflows—out of scope unless extended later.

Input: repository URL or owner/repo

Normalize like other skills in this repo:

  • https://github.com/org/repo
  • https://github.com/org/repo/
  • org/repo

Strip query strings. repo must be a single path segment (not a subdirectory URL).

Authentication and rate limits

The script picks credentials in this order (first hit wins):

  1. GITHUB_TOKEN or GH_TOKEN — personal access token (classic or fine-grained with Issues read / public_repo as appropriate). Sent as Authorization: Bearer <token>.
  2. GitHub CLI: if gh is installed and logged in, runs gh auth token (5s timeout) and uses that token.

If none of the above succeeds, requests are unauthenticated (typically 60 requests/hour per IP). Listing issues uses one request per 100 issues; each issue with comments uses one extra request. Large repos need auth—use gh auth login or set GITHUB_TOKEN / GH_TOKEN.

API behavior (REST)

  1. List open issues: GET /repos/{owner}/{repo}/issues?state=open&per_page=100 (no page=). Follow the response Link header rel="next" until absent. GitHub rejects offset page= pagination for large issue lists (422); cursor-style next URLs are required.
  2. Exclude PRs: skip any list item that includes a pull_request field (GitHub returns PRs in this endpoint).
  3. Last comment: if comments (count) is 0, set last_comment to null. Otherwise walk
    GET /repos/{owner}/{repo}/issues/{number}/comments?per_page=100
    using Link / rel="next" through all pages and keep the last comment on each page; the final one is the newest (comments are oldest-first within a page).

On 403 (rate limit) or 404, the script exits non-zero and prints a short message to stderr (fail fast).

Output layout (repository root)

agent-artifacts/github-open-issues-export/{owner}-{repo}-{YYYYMMDDTHHMMSSZ}/
  open-issues.jsonl
  open-issues-good-first-issue.jsonl
  README.txt

Use UTC in the run id. Create parent directories if missing.

open-issues.jsonl

One JSON object per line (UTF-8). Suggested fields:

FieldMeaning
issue_numberGitHub issue number
html_urlWeb URL for the issue
titleIssue title
labelsArray of { "name", "color" }
author{ "login", "html_url" } or null
created_at, updated_atISO 8601 timestamps from GitHub
comments_countInteger comments field
bodyOpening post / description (may be null)
last_commentnull, or { "login", "html_url", "created_at", "body" } for the latest comment

Very large issue bodies or comment bodies are not truncated by default (watch memory on huge threads).

open-issues-good-first-issue.jsonl

Same schema and line format as open-issues.jsonl, but only issues whose labels include a name equal to good first issue (case-insensitive). Written in the same pass as the full file (no additional API calls).

README.txt

One-line summary: upstream repo URL, total open-issue count, good_first_issue_open_exported count, UTC generation time.

Automation

Run from the repository root (stdlib only):

python skills/github-open-issues-export/scripts/export_open_issues.py "https://github.com/OWNER/REPO"
# or
python skills/github-open-issues-export/scripts/export_open_issues.py OWNER/REPO

The script prints the absolute path to the run directory on success.

If the script cannot be run, perform the same steps manually and keep the same output shape (including open-issues-good-first-issue.jsonl as a filter of the full records, with no extra API calls).

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.