Skip to main content

qodo-cli

An unofficial, community CLI and agent to manage Qodo — the AI code reviewer and Qodo's other agents — from your terminal, in zero-dependency Python.

Unofficial. Not affiliated with, authorized, or endorsed by Qodo. The Qodo name and trademark belong to Qodo Ltd. Using the Qodo surface (rules, review) requires your own Qodo subscription and credentials.

What it does

qodo-cli runs Qodo's core jobs natively over the Python standard library — no third-party runtime dependencies. Each Qodo command cites qodo-ai/qodo-skills as its behavioral source of truth and reimplements the deterministic mechanics; it does not fork, vendor, or npx-install those skills (see docs/qodo-skills-sources.md).

Command What it does Needs
rules get "<query>" Semantic-search your org's Qodo coding rules, relevance-ranked with severity. ~/.qodo/config.json (or QODO_API_KEY)
review (alias pr) List, reply to, acknowledge, and resolve the Qodo bot's PR review comments. gh / glab, authenticated
config Manage the repo-level Qodo reviewer config (.pr_agent.toml + best_practices.md). a git repo
whoami learn explain overview doctor cli Agent-first introspection: identity, self-teaching prompt, docs, health checks. —

The CLI is agent-first: every command is self-describing, machine-readable (--json), and emits structured errors, so a coding agent can discover and drive it without a human in the loop.

Requirements

  • Python ≥ 3.12
  • uv (recommended for the dev workflow)
  • For qodo review: the gh (GitHub, incl. Enterprise) or glab (GitLab) CLI on your PATH, already authenticated.
  • For qodo rules: a Qodo API key in ~/.qodo/config.json ({"API_KEY": "..."}) or the QODO_API_KEY environment variable.

Install

The package is published to PyPI as qodo-cli; the installed console script is qodo (run commands as qodo …).

uv tool install qodo-cli      # or: pipx install qodo-cli
qodo --help

Run it ad-hoc without installing (note the script name differs from the package):

uvx --from qodo-cli qodo --help

From source (for development):

git clone https://github.com/agentculture/qodo-cli
cd qodo-cli
uv sync                       # install runtime + dev deps into .venv
uv run qodo --help

Quickstart

uv run qodo whoami                 # who am I? (identity from culture.yaml)
uv run qodo learn                  # structured self-teaching prompt (add --json)
uv run qodo doctor                 # health: agent-identity invariants + Qodo setup

uv run qodo rules get "how should errors be handled in the CLI layer?"
uv run qodo review list            # Qodo's comments on the PR for the current branch
uv run qodo config show            # is this repo's Qodo reviewer config in place?

(Outside the dev checkout, drop the uv run prefix and just call qodo ….)

Commands

qodo rules — surface your org's coding rules

Semantic-searches the Qodo rules API and prints the relevance-ranked rules with their severity (ERROR / WARNING / RECOMMENDATION). Reuses the API key already in ~/.qodo/config.json (or QODO_API_KEY) — it never prompts. Scope is auto-detected from your git origin; override or disable it explicitly. Cites qodo-get-rules.

qodo rules get "auth token storage"                       # auto-detected scope
qodo rules get "logging conventions" --top-k 5            # cap the result count
qodo rules get "naming" --scope agentculture/qodo-cli     # force a scope (repeatable)
qodo rules get "error handling" --no-scope --json         # disable scope; JSON out

qodo review (alias qodo pr) — triage the Qodo bot's PR comments

Drives your existing provider CLI (gh / glab) to find the open PR for the current branch, list the Qodo reviewer's comments (severity, type, description, and agent_prompt parsed from each body), and reply / acknowledge / resolve them. It reuses your provider-CLI auth — no new credentials. The fixing loop (read files, write a fix) stays with the calling agent. Cites qodo-pr-resolver.

qodo review list                       # all Qodo comments on the current branch's PR
qodo review list --kind inline         # hide the summary rollups
qodo review list --pr 42 --json        # explicit PR number, machine-readable

qodo review resolve 123456789                          # resolve one inline comment by id
qodo review resolve 123 456 --reply "Fixed in abc1234" --sign
qodo review resolve --all                              # every inline Qodo comment
qodo review resolve --all --severity LOW               # only LOW-severity comments
qodo review resolve 123 --no-resolve-thread            # +1 reaction only, skip GraphQL
  • --sign appends your culture.yaml nick signature to --reply (at most once).
  • Thread resolution uses GitHub's GraphQL resolveReviewThread; --no-resolve-thread posts the acknowledgement reaction only.
  • GitHub (incl. Enterprise via your gh host config) and GitLab are wired end-to-end. Azure / Bitbucket / Gerrit are recognized but raise a clear "not wired yet" error rather than misbehaving.

qodo config — manage the repo's Qodo reviewer config

Maintains the two files that make Qodo's reviews of this repo accurate: .pr_agent.toml (the Qodo Merge [pr_reviewer] config) and best_practices.md. A missing config is why Qodo falls back to inferred conventions and raises false positives. This is distinct from the client ~/.qodo/config.json that qodo rules reads.

qodo config show          # read-only snapshot of both files
qodo config validate      # exit 1 if the config is invalid/absent
qodo config init          # scaffold both files when absent (never clobbers)
qodo config init --force  # overwrite existing files

Agent-first introspection

Verb What it does
whoami Report this agent's nick, version, backend, and model from culture.yaml.
learn Print a structured self-teaching prompt (--json for a machine map).
explain <path> Markdown docs for any noun/verb path (e.g. explain rules).
overview Read-only descriptive snapshot of the agent (identity, verbs, artifacts).
doctor Check agent-identity invariants and Qodo setup; guides any fixes.
cli overview Describe the CLI surface itself.

doctor reports a rubric-shaped contract — {healthy, checks: [{id, passed, severity, message, remediation}]} — covering agent identity (the backend → prompt-file mapping, vendored skills) plus Qodo setup (reviewer config present, client credentials available). Advisory warning/info checks surface guidance without failing the command, so it's useful in any repo.

Conventions (stable contracts)

Every command honors these — tests and the agent-first rubric pin them:

  • --json everywhere. Every command (and argparse-level errors like an unknown verb) accepts --json and emits machine-readable output.
  • stdout / stderr split. Command results go to stdout; errors and diagnostics go to stderr. Never mixed, in text or JSON mode.
  • Structured errors. Every failure is {code, message, remediation}. Text mode renders error: <msg> then hint: <remediation>; no Python traceback ever leaks.
  • Exit codes: 0 success · 1 user error (bad flag/arg) · 2 environment error (missing ~/.qodo/config.json, gh absent, API error) · 3+ reserved.

Mesh identity

qodo-cli is also an AgentCulture mesh agent. culture.yaml declares its suffix (nick), backend, and model; the backend is colleague, so the resident prompt file is AGENTS.colleague.md (not CLAUDE.md). whoami and doctor parse culture.yaml with a hand-rolled reader — no YAML dependency — to keep the runtime dependency-free.

The repo also vendors the canonical guildmaster skill kit (cite-don't-import) under .claude/skills/; provenance and the re-sync procedure live in docs/skill-sources.md.

Development

uv sync                                   # install runtime + dev deps
uv run pytest -n auto                     # full test suite, parallel (xdist)
uv run pytest tests/test_cli.py::test_whoami_text   # a single test
uv run teken cli doctor . --strict        # the agent-first rubric gate CI enforces

Lint (CI runs each; all must pass — line length 100):

uv run black --check qodo tests
uv run isort --check-only qodo tests
uv run flake8 qodo tests
uv run bandit -c pyproject.toml -r qodo
markdownlint-cli2 "**/*.md" "#node_modules" "#.local" "#.claude/skills" "#.teken"

Version-bump on every PR (CI blocks merge otherwise), including docs/CI-only changes:

python3 .claude/skills/version-bump/scripts/bump.py patch   # or minor | major

CLAUDE.md is the authoritative contributor guide — architecture, the PR lane, SonarCloud gating, and how to add a new command.

Clone as a template

This runtime began as the agent-first scaffold cited from teken's afi-cli python-cli reference, and can be cloned to bootstrap a new agent CLI. The name qodo/qodo-cli is hard-coded in ~100 places; list every occurrence first and follow the rename procedure in CLAUDE.md:

git grep -nI -e 'qodo-cli' -e 'qodo' -e 'agentculture/qodo-cli'

License

MIT — see LICENSE.

Metadata

Release files for qodo-cli 0.11.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for qodo-cli 0.11.0
File Size Uploaded Provenance
qodo_cli-0.11.0.tar.gz 192.8 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for qodo-cli 0.11.0
File Interpreter ABI Platform
qodo_cli-0.11.0-py3-none-any.whl Python 3 none any Details

Total release size: 248.5 kB

Release files / qodo_cli-0.11.0.tar.gz

Download URL qodo_cli-0.11.0.tar.gz
Size 192.8 kB
Tags Source
SHA-256 checksum
How to use checksums
c37aaaf851ad31cebf369e5d0a8c98b1a8fad0c4c40a2c2eb6b0c3d0a1e3185d
BLAKE2b-256 checksum
How to use checksums
2c7c4c892b108a23b03c14a851d565369c35c79e19ee6a2329994c1b3d0217bf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / qodo_cli-0.11.0-py3-none-any.whl

Download URL qodo_cli-0.11.0-py3-none-any.whl
Size 55.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
099a10ac48b1606a8caab82ff20d23dbc5ecb736daca67631e8aaed8910beb60
BLAKE2b-256 checksum
How to use checksums
fe1c148c930c2b17168de52db65de4dff184d8ae5621caf163f456b8705a20f6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for qodo-cli 0.11.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page