Bubo — agentic AI code review for GitLab MRs and GitHub PRs, with the LLM of your choice.
Project description
Bubo 🦉
Agentic AI code review with the LLM of your choice. Bubo reviews your GitLab MRs and GitHub PRs with the model you run, and posts only the findings worth acting on as inline threads — no chatbot noise, no praise, no summaries.
- 🔒 Self-hosted — code, diffs, and review data stay on your infrastructure
- 🧠 Bring-your-own-LLM — Codex, Claude, or any model your CLI drives
- 🔀 GitLab & GitHub — one config, identical behavior on both
- 🎯 Inline findings only — with one "all good" ack on a clean change
- 🛡️ Governance, provenance & an auditable on-prem report
- 📊 OpenTelemetry metrics — cosign-signed releases with SBOMs
📖 Full documentation → mountainowl.github.io/bubo
Install
uv tool install bubo # or: pipx install bubo
bubo init # idempotent; seeds config + workspace + DB
bubo doctor # verify before the first poll
bubo-poller # one poll cycle — dry-run by default, posts nothing
Prefer a container? docker pull ghcr.io/mountainowl/bubo (multi-arch; the
review-agent CLI is BYO). Full walkthrough in
Install and configure.
Documentation
Everything lives on the docs site — this README is just the front door.
| Recipes | Copy-paste GitLab / GitHub / in-house-model setups. |
| Features | The full capability list. |
| Configuration | Every setting, per section, plus a quick-start config. |
| Operate | Deploy, schedule, grade outcomes, governance report. |
| Troubleshooting | Host / infra fixes (sandbox, AppArmor). |
| Metrics & telemetry | Emitted llm_review.* metrics and dashboards. |
Status
- GitLab & GitHub posting via polling — production path, at outcome-metric
parity. Set
[scm].provider = "github"(orBUBO_PROVIDER=github). - MCP server (
bubo-mcp) — read-only metrics + triggered reviews; stdio or HTTP. - Codex or Claude — Bubo runs the review through a wrapper around your agent CLI; Codex ships pre-wired.
- Webhook-driven triggering — not yet; polling is the only path.
Review execution sits outside CI/CD by design — run it as a poller beside your existing pipelines.
Security
config/env.tomlis gitignored and holds tokens. Do not print or commit real values.- Review-agent stdout is redacted (
GITLAB_TOKEN=,OPENAI_API_KEY=,glpat-…,sk-…, credentialed Git URLs) before it touches reports, logs, or the database. - The reviewer subprocess runs under a strict env allowlist — host secrets aren't handed wholesale to the LLM agent.
- Releases are cosign-signed via Sigstore keyless OIDC, with an SBOM on every release.
- Report vulnerabilities per SECURITY.md.
Community
Contributing · Security policy · Support · Code of conduct · License: MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bubo-0.24.2.tar.gz.
File metadata
- Download URL: bubo-0.24.2.tar.gz
- Upload date:
- Size: 405.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2462f8e5ce493477a8bd97b5735f912cc5fcfc3962ce8824413c8f85397a31c1
|
|
| MD5 |
2c9a7c72f92e37311265ed2333c61cad
|
|
| BLAKE2b-256 |
4042a1d1862cb2195cf1fff917342bcc1342ec0b28b69f2583ef7d0ac8cfa42b
|
Provenance
The following attestation bundles were made for bubo-0.24.2.tar.gz:
Publisher:
publish-pypi.yml on mountainowl/bubo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
bubo-0.24.2.tar.gz -
Subject digest:
2462f8e5ce493477a8bd97b5735f912cc5fcfc3962ce8824413c8f85397a31c1 - Sigstore transparency entry: 1857516286
- Sigstore integration time:
-
Permalink:
mountainowl/bubo@eb33a95c60f4f03589ae429f18bc6b79d497d639 -
Branch / Tag:
refs/tags/v0.24.2 - Owner: https://github.com/mountainowl
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@eb33a95c60f4f03589ae429f18bc6b79d497d639 -
Trigger Event:
push
-
Statement type:
File details
Details for the file bubo-0.24.2-py3-none-any.whl.
File metadata
- Download URL: bubo-0.24.2-py3-none-any.whl
- Upload date:
- Size: 207.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d48897bd15df40904a1df61f0b8cdd2dbfac0c3c62c24ade9157152072cb1195
|
|
| MD5 |
d0314f101354c6f816052bdc624ab411
|
|
| BLAKE2b-256 |
298ef3f3f1d093060201868f0d7ef23ff49e5b33b691292285a635a1839f1381
|
Provenance
The following attestation bundles were made for bubo-0.24.2-py3-none-any.whl:
Publisher:
publish-pypi.yml on mountainowl/bubo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
bubo-0.24.2-py3-none-any.whl -
Subject digest:
d48897bd15df40904a1df61f0b8cdd2dbfac0c3c62c24ade9157152072cb1195 - Sigstore transparency entry: 1857516442
- Sigstore integration time:
-
Permalink:
mountainowl/bubo@eb33a95c60f4f03589ae429f18bc6b79d497d639 -
Branch / Tag:
refs/tags/v0.24.2 - Owner: https://github.com/mountainowl
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@eb33a95c60f4f03589ae429f18bc6b79d497d639 -
Trigger Event:
push
-
Statement type: