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.
Installed? Run it on a real failure →