https://github.com/mbe24/99problems
AI-native CLI tool for issue/PR context retrieval across Jira, GitLab, GitHub, and Bitbucket, with structured output for humans and AI agents plus a scaffold aligned with the Agent Skills standard.
https://github.com/mbe24/99problems
agent-skills agentic-engineering ai-agents ai-native bitbucket-cloud bitbucket-datacenter cli developer-tools github-api gitlab-api issue-tracking jira-api json jsonl llm ndjson pull-requests rag rust yaml
Last synced: 13 days ago
JSON representation
AI-native CLI tool for issue/PR context retrieval across Jira, GitLab, GitHub, and Bitbucket, with structured output for humans and AI agents plus a scaffold aligned with the Agent Skills standard.
- Host: GitHub
- URL: https://github.com/mbe24/99problems
- Owner: mbe24
- License: apache-2.0
- Created: 2026-03-02T17:11:17.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2026-03-09T21:24:07.000Z (about 2 months ago)
- Last Synced: 2026-03-09T22:49:33.388Z (about 2 months ago)
- Topics: agent-skills, agentic-engineering, ai-agents, ai-native, bitbucket-cloud, bitbucket-datacenter, cli, developer-tools, github-api, gitlab-api, issue-tracking, jira-api, json, jsonl, llm, ndjson, pull-requests, rag, rust, yaml
- Language: Rust
- Homepage:
- Size: 237 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# 99problems
[](https://github.com/mbe24/99problems/actions/workflows/ci.yml)
[](https://99problems.readthedocs.io/en/latest/)
[](https://www.npmjs.com/package/@mbe24/99problems)
[](https://crates.io/crates/problems99)

[](https://raw.githubusercontent.com/mbe24/99problems/main/LICENSE)
`99problems` is an AI-native CLI tool for issue and pull-request context retrieval across GitHub, GitLab, Jira, and Bitbucket.
It supports structured output for AI agents and direct human usage, with machine-readable formats (`json`, `yaml`, `jsonl`/`ndjson`) and a human-readable `text` format.
## Why This Tool
Software tasks often depend on decisions made in earlier issues and pull requests.
`99problems` helps recover that history in a consistent shape so current work can be grounded in prior context.
This is useful for Agentic Engineering workflows and for humans doing direct investigation in terminals or scripts.
## Installation
Install the CLI:
```bash
npm install -g @mbe24/99problems
# or
cargo install problems99
```
Initialize the canonical `99problems` Agent Skill scaffold:
```bash
# initialize the canonical 99problems skill in the current project
99problems skill init
# or use the global skill location (shared across projects)
99problems skill init --path ~/.agents/skills
```
## Quick Start
There are two primary ways to use `99problems`. Refer to Agentic Use for AI-assisted workflows, or Manual Use for direct CLI usage.
### Agentic Use
Now that the skill is installed, start your agent session.
Use it to retrieve cross-system context for concrete engineering tasks like topic mapping, bug triage, and progress estimation.
To map work related to a topic across issues and PRs (with explicit skill invocation):
```text
llm-prompt> Use $99problems find related issues and PRs for topic "architectural redesign"
```
To produce a bug-focused status overview for a repository (with implicit skill invocation):
```text
llm-prompt> Create an overview of open bugs and cross-reference them with active PRs in owner/repo.
```
To estimate delivery progress from linked tracker and PR state:
```text
llm-prompt> Estimate progress for topic "build modernization" based on linked issues and PR states.
```
### Manual Use
Use this when you run `99problems` directly in a terminal to fetch context from specific providers.
```bash
# Fetch one GitHub issue
99problems get --repo schemaorg/schemaorg --id 1842
# Fetch one PR with inline review comments
99problems get --repo github/gitignore --id 2402 --type pr --include-review-comments
# Search GitLab issues
99problems get --platform gitlab -q "repo:veloren/veloren is:issue state:closed terrain"
# Fetch Jira issue by key
99problems get --platform jira --id CLOUD-12817
# Fetch Bitbucket Cloud PR by ID
99problems get --platform bitbucket --deployment cloud --repo workspace/repo_slug --id 1 --type pr
# Fetch Bitbucket Data Center PR by ID
99problems get --platform bitbucket --deployment selfhosted --url https://bitbucket.mycompany.com --repo PROJECT/repo_slug --id 1
# Stream as JSON Lines for pipelines
99problems get -q "repo:github/gitignore is:issue state:open" --output-mode stream --format jsonl
```
## Commands
```text
99problems get [OPTIONS] Fetch issue and pull request conversations
99problems skill init [OPTIONS] Scaffold the canonical Agent Skill
99problems config Inspect and edit .99problems configuration
99problems completions Generate shell completion scripts
99problems man [OPTIONS] Generate man pages (stdout or files)
```
Global options:
```text
-v, --verbose Increase diagnostics (-v, -vv, -vvv)
-Q, --quiet Show errors only
--error-format Error output: text|json (default: text)
-h, --help Print help
-V, --version Print version
```
## Configuration
`99problems` uses instance-based TOML config from:
- `~/.99problems`
- `./.99problems`
Example:
```toml
default_instance = "work-gitlab"
[instances.github]
platform = "github"
repo = "owner/repo"
token = "ghp_your_token"
[instances.work-gitlab]
platform = "gitlab"
url = "https://gitlab.mycompany.com"
repo = "group/project"
token = "glpat_your_token"
[instances.work-jira]
platform = "jira"
url = "https://jira.mycompany.com"
repo = "project"
token = "atlassian_api_token"
account_email = "user@example.com"
[instances.bitbucket-cloud]
platform = "bitbucket"
deployment = "cloud"
repo = "workspace/repo_slug"
token = "username:app_password"
[instances.bitbucket-dc]
platform = "bitbucket"
deployment = "selfhosted"
url = "https://bitbucket.mycompany.com"
repo = "project/repo_slug"
token = "pat_or_bearer_token"
```
Bitbucket support is pull-request only; when `--type` is omitted, `99problems` defaults to PRs.
For Bitbucket Cloud, use an app-password, repository access token, or workspace-level access token (premium feature) in `token`.
Selection order: `--instance` -> single configured instance -> `default_instance`.
### Telemetry
```toml
[telemetry]
enabled = true
otlp_endpoint = "http://localhost:4318/v1/traces"
exclude_targets = ["h2", "hyper", "hyper_util", "rustls"]
```
Telemetry is best-effort and traces `99problems get` without changing normal command behavior or exit codes. For quick local OpenTelemetry backend setup, use Grafana LGTM (Docker image: [`grafana/otel-lgtm`](https://hub.docker.com/r/grafana/otel-lgtm)).
Use `telemetry.exclude_targets` to suppress noisy span-target prefixes (prefix match). Equivalent config command:
```bash
99problems config set telemetry.exclude_targets h2,hyper,hyper_util,rustls
```
Note that telemetry export requires a build with the telemetry-otel feature enabled:
- `telemetry-otel` controls whether OTEL support is compiled in.
- Default builds include it.
- Use `--no-default-features` for telemetry-free release binaries.
## Output Modes
`get` supports two orthogonal controls:
- `--format`: `json`, `yaml`, `jsonl`, `ndjson` (alias of `jsonl`), `text`
- `--output-mode`: `auto`, `batch`, `stream` (or `--stream`)
Payload controls:
- `--no-comments`: skip issue/PR comments
- `--include-review-comments`: include inline review comments (for PRs)
- `--no-links`: skip linked-issue/PR metadata
Defaults:
- TTY stdout: `--format text`, `--output-mode auto` (resolved to streaming)
- piped stdout / file output: `--format jsonl`, `--output-mode auto` (resolved to streaming)
Use `--output-mode batch` when you want all-or-nothing output at the end.
## Shell Completions
```bash
99problems completions bash
99problems completions zsh
99problems completions powershell
```
## Documentation
Project documentation is available at [99problems.readthedocs.io](https://99problems.readthedocs.io/).
Public docs source lives in [`docs/`](docs/). Internal-only notes belong in [`docs/internal/`](docs/internal/) and are excluded from the published site.
### Man Pages
Generate and print root man page:
```bash
99problems man
```
Generate all pages to disk:
```bash
99problems man --output docs/man --section 1
```
## Support this project
If 99problems saves you time, you can support ongoing maintenance via [GitHub Sponsors](https://github.com/sponsors/mbe24) or [Ko-fi](https://ko-fi.com/mbe24).
## Contributing
See [CONTRIBUTING.md](CONTRIBUTING.md).
## License
See [LICENSE](LICENSE).
Copyright (c) 2026 Mikael Beyene