Install

Python 3.11+, or the image. One dependency set, no runtime downloads, nothing fetched the first time you run it.

From PyPI

# uv (recommended)
uv tool install ci-doctorr

# pip
pip install ci-doctorr

# or the self-contained image, for air-gapped runners
docker run --rm ci-doctor:latest --version

uv tool install gives you an isolated ci-doctor on your PATH without touching a project environment, which is what you usually want for a CLI.

On GitHub Actions

Don't. The action installs the analyzer itself, pinned to the ref you chose:

# GitHub Actions — nothing to install at all
- uses: ci-doctor/ci-doctor@master

It is a composite action rather than a Docker one, so the action version and the analyzer version cannot drift. Full reference on GitHub Actions.

Optional extras

There is no default LLM SDK in the base install — pick the extra for the provider you're using:

# openai backend (Ollama, vLLM, llama.cpp, most gateways, OpenAI itself)
pip install "ci-doctorr[openai]"

# anthropic backend (the Anthropic Messages API directly)
pip install "ci-doctorr[anthropic]"

# bedrock backend (Amazon Bedrock, AWS IAM auth); bedrock-mantle for its OpenAI-shaped models
pip install "ci-doctorr[bedrock]"

# a provider's own API: google (Gemini + Vertex), groq, mistral, cohere, xai, huggingface
pip install "ci-doctorr[google]"

# litellm backend (everything else — Vertex, Cohere, watsonx, ~100 providers)
# mutually exclusive with [openai]/[azure]/[bedrock-mantle] — see Configuration for why
pip install "ci-doctorr[litellm]"

litellm may pull tiktoken, which fetches its vocabulary at runtime — so it is unfit for a strict air gap. The backends, including which extras are mutually exclusive, are compared on Configuration.

Air-gapped? Build an image or a wheel bundle where there is internet and carry it in — see Local & air-gapped.

Installed? Run it on a real failure →