Kodus is a self-hosted AI code reviewer. Its agent, Kody, reviews every pull request — flagging bugs, security issues, and quality problems and posting inline suggestions — so feedback is instant and consistent. Everything runs in your own infrastructure, so your code never leaves your network: a fit for private, regulated, and air-gapped environments.
This repository is the installer — everything needed to deploy the full Kodus stack (web, API, workers, webhooks, MCP manager, and data stores) via Docker Compose or Helm (Kubernetes / OpenShift). The product itself lives at kodustech/kodus-ai. Full docs: docs.kodus.io.
- Connect a Git repo (GitHub, GitLab, Bitbucket, Azure Repos) in the Kodus UI. Kodus registers a webhook on the provider.
- Open or update a pull request. The provider calls the
webhooksservice, which enqueues the job. - A worker runs the review with your LLM, and Kody posts its feedback back on
the PR — automatically, or on demand with
@kody start-review.
flowchart LR
user((User)) --> web[kodus-web]
web --> api[api]
web --> webhooks[webhooks]
api --> mcp[kodus-mcp-manager]
api --> rabbitmq[(rabbitmq)]
worker[worker] --> rabbitmq
api --> pg[(postgres)]
api --> mongo[(mongodb)]
mcp --> pg
webhooks --> pg
webhooks --> mongo
Pick one path. Docker Compose is the fastest way to try Kodus on a single VM; Helm is for Kubernetes / OpenShift.
- Docker Compose path: Docker, Docker Compose, Git
- Helm path: a Kubernetes or OpenShift cluster + Helm 3
cp .env.example .env
./scripts/generate-secrets.sh # mint secrets into .env
# edit .env (hosts, webhook URL, LLM key) — see docs/compose.md
./scripts/install.shFull guide: docs/compose.md (in-repo) · hosted walkthrough at docs.kodus.io.
Guided install with Claude Code — an interactive install that walks you through every option, generates secrets, and verifies the deployment at the end:
npx skills add kodustech/kodus-installer@kodus-installThen, inside Claude Code, run /kodus-install.
Charts live in charts/.
# Kubernetes (bundled data stores — one command, no operators, no clone):
helm install kodus oci://ghcr.io/kodustech/charts/kodus --version 0.2.0 \
-n kodus --create-namespace # + hosts — see charts/README.mdThe chart is signed; every release can be verified before you install it
(how). The chart version
fixes the Kodus release — 0.2.0 installs 2.1.27 — so helm rollback and
helm upgrade mean something.
Landing here from the GitHub package page? Ignore its
docker pullsnippet. That page renders any registry as if it held container images: it shows the cosign signature (sha256-…) as "Latest" and builds the command from it, so copying it fails withno matching manifest. A Helm chart is not a container image — use thehelm installabove. Why.
Each data store can run bundled (this chart brings it up), external (your
managed DB), or operator (CloudNativePG / RabbitMQ / Mongo operators for HA).
OpenShift uses -f values-openshift.yaml (Routes + SCC). Verify any deployment
with ./scripts/doctor-k8s.sh -n kodus. Full guide:
charts/README.md.
Once the stack is up:
- Open the web UI and create an account.
- Docker Compose:
http://localhost:3000 - Kubernetes / OpenShift: your Ingress / Route host.
- Docker Compose:
- Add an LLM key. Kodus is bring-your-own-key: no reviews run without one.
Either set it in the UI (Settings → BYOK) or set
API_OPEN_AI_API_KEYin your config (Anthropic / Claude keys go in the same slot — Kodus picks the SDK from the model id). - Connect a repository under Git Settings. Kodus registers the webhook for
you — this needs a public webhook URL the provider can reach
(
API_<provider>_CODE_MANAGEMENT_WEBHOOK, e.g.https://<your-host>/github/webhook). On Helm this is auto-derived from your webhooks Ingress/Route host; see charts/README.md. - Open a pull request. Kody reviews it automatically, or comment
@kody start-reviewto trigger a review by hand.
Full product docs live at docs.kodus.io (LLM-friendly index: llms.txt). Most useful for self-hosting:
- Architecture — services, networks & data flow
- Deploy — Production / VM · Local quickstart · in this repo: Docker Compose · Kubernetes / OpenShift
- Operations — Updating · Reverse proxy · Troubleshooting · MCP manager · Analytics worker
- Git providers — GitHub App · GitHub webhook · GitLab · Bitbucket · Azure DevOps · Forgejo
- LLM keys — BYOK (Bring Your Own Key)
Already have PostgreSQL / MongoDB or RabbitMQ? Disable the local containers and
point Kodus at your services. Example .env:
USE_LOCAL_DB=false
USE_LOCAL_RABBITMQ=false
API_PG_DB_HOST=your-postgres-host
API_PG_DB_PORT=5432
API_MG_DB_HOST=your-mongodb-host
API_MG_DB_PORT=27017
API_RABBITMQ_URI=amqp://user:pass@your-rabbitmq-host:5672/kodus-aiWhen set to false, the installer skips starting local services and their health
checks. (On Helm, use postgres.mode: external / mongodb.mode: external /
rabbitmq.mode: external instead — see charts/README.md.)
Start with the doctor script to pinpoint common setup issues:
- Docker Compose:
./scripts/doctor.sh - Kubernetes / OpenShift:
./scripts/doctor-k8s.sh -n <namespace>
For .env problems specifically, run the schema validator (also invoked by
doctor): ./scripts/validate-env.sh. It checks each variable against the upstream
schema (.env.example types + scripts/schema-vars.sh required list), flags type
mismatches and missing required values, and — when containers are running — diffs
your .env against what each container actually loaded, so you can spot stale
config that a recreate didn't pick up.
Common fixes:
- Docker daemon not running:
docker info - Ports already in use:
3000,3001,3101,3332,5432,27017,5672,15672,15692 .envmissing or invalid: copy.env.exampleand fill the required vars- RabbitMQ connection errors: ensure
API_RABBITMQ_URImatchesRABBITMQ_DEFAULT_USER,RABBITMQ_DEFAULT_PASS, and vhostkodus-ai - Database errors: confirm Postgres / Mongo credentials, then rerun
./scripts/setup-db.sh - Service crash or boot loop: check logs with
docker compose logs -f api(orworker,webhooks,rabbitmq) - Reviews never trigger: no LLM key set, or the repo webhook can't reach the
webhooksservice — see Your first review
- kodus-web — application frontend
- api — application API
- worker — background jobs (runs the reviews)
- worker-analytics — optional analytics ingestion (Compose:
analyticsprofile; Helm:services.worker-analytics.enabled=true) - webhooks — receives Git provider events and enqueues review jobs
- kodus-mcp-manager — provisions Model Context Protocol (MCP) servers per organization (optional; Compose:
API_MCP_SERVER_ENABLED=true, Helm:services.mcp-manager.enabled=true) - rabbitmq — message broker
- postgres — primary database (pgvector)
- mongodb — document store
- Credentials are managed through environment variables / Secrets (never inline in production)
- Inter-service traffic stays on dedicated internal networks; databases are not exposed
- Containers run isolated; on Kubernetes, non-root with dropped capabilities and NetworkPolicy
- For hardened / air-gapped setups, see the security notes in charts/README.md
Contributions are always welcome!
- Fork the project
- Create your feature branch (
git checkout -b feat/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feat/amazing-feature) - Open a pull request
Licensed under the MIT License — see LICENSE.
Email support@kodus.io or open an issue in this repository.
