problems99 0.4.0

AI-native CLI for issue/PR context retrieval across Jira, GitLab, GitHub, and Bitbucket, with structured output for humans and AI agents.
Documentation

99problems

CI npm crates.io platforms License Info

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

npm install -g @mbe24/99problems
# or
cargo install problems99

Quick Start

# 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

# Scaffold the canonical Agent Skill
99problems skill init

Commands

99problems get [OPTIONS]               Fetch issue and pull request conversations
99problems skill init [OPTIONS]        Scaffold the canonical Agent Skill
99problems config <SUBCOMMAND>         Inspect and edit .99problems configuration
99problems completions <SHELL>         Generate shell completion scripts
99problems man [OPTIONS]               Generate man pages (stdout or files)

Global options:

-v, --verbose              Increase diagnostics (-v, -vv, -vvv)
-Q, --quiet                Show errors only
    --error-format <FMT>   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:

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 = "CPQ"
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 (testing-first, config-activated):

[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. Use telemetry.exclude_targets to suppress noisy span-target prefixes (prefix match). Equivalent config command:

99problems config set telemetry.exclude_targets h2,hyper,hyper_util,rustls

Build-time feature:

  • telemetry-otel controls whether OTEL support is compiled in.
  • Default builds include it.
  • Use --no-default-features for telemetry-free release binaries.

Man Pages

Generate and print root man page:

99problems man

Generate all pages to disk:

99problems man --output docs/man --section 1

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

99problems completions bash
99problems completions zsh
99problems completions powershell

Agent Skill Scaffold

Canonical editable skill sources live in templates/skills/99problems. Generate a standardized Agent Skills scaffold under .agents/skills/99problems with:

99problems skill init

Use user scope by overriding path:

99problems skill init --path ~/.agents/skills

Support this project

If 99problems saves you time, you can support ongoing maintenance via GitHub Sponsors or Ko-fi.

Contributing

See CONTRIBUTING.md.

License

See LICENSE.

Copyright (c) 2026 Mikael Beyene