99problems
AI-friendly access to GitHub issues.
Fetch GitHub issue conversations as structured JSON or YAML — ready for LLM pipelines, RAG, and bulk analysis. Uses the same search syntax as the GitHub web UI.
Installation
Or via cargo:
Pre-built binaries are available for Windows x64, Linux x64, Linux ARM64, macOS Intel, and macOS Apple Silicon. No runtime dependencies.
Usage
# Fetch all closed issues mentioning "Event" from a repo
# Fetch a single issue
# YAML output
# Pipe into jq
|
Output
Each result is a conversation object with the issue body and all comments:
Configuration
99problems reads TOML dotfiles so you don't have to repeat flags on every run.
| File | Purpose |
|---|---|
~/.99problems |
Global defaults (token, preferred repo, etc.) |
./.99problems |
Per-project overrides |
Example ~/.99problems:
= "ghp_your_personal_access_token"
Example ./.99problems in a project directory:
= "owner/my-repo"
= "closed"
Token is resolved in this order: --token flag → GITHUB_TOKEN env var → ./.99problems → ~/.99problems. Without a token the GitHub API rate limit is 60 requests/hour; with one it's 5,000/hour.
Options
Options:
-q, --query <QUERY> Full GitHub search query (web UI syntax)
--repo <REPO> Shorthand for "repo:owner/name"
--state <STATE> Shorthand for "state:open|closed"
--labels <LABELS> Comma-separated labels, e.g. "bug,help wanted"
--issue <ISSUE> Fetch a single issue by number (requires --repo)
--source <SOURCE> Data source [default: github-issues]
--format <FORMAT> Output format: json | yaml [default: json]
-o, --output <FILE> Write to file instead of stdout
--token <TOKEN> GitHub personal access token
-h, --help Print help
-V, --version Print version
Use cases
- LLM context / RAG — load issue history into a vector store or prompt
- Issue triage — process closed issues in bulk with Python or JavaScript
- Dataset generation — build labelled datasets from GitHub discussions
- Changelog automation — extract closed issues for release notes
Contributing
See CONTRIBUTING.md.
License
See LICENSE.