Comments on the lines you changed
Each finding sits on the changed line, with a severity, a confidence score and a suggested fix you can commit in one click.
Open source · Apache-2.0 · Written in Rust
Fixloop reviews every pull request, comments on the lines that changed and suggests the fix. It runs on your infrastructure, with the model you choose. Issue filing and test-gated fix pull requests come next.
cargo install --locked --git https://github.com/bwalia/fixloop fixloop-cli5 pub fn last(items: &[i32]) -> Option<i32> { 6 if items.is_empty() { return None; } 7+ Some(items[items.len()]) 8 }
app/users.py), 1 highHow it works
One agent carries a bug from the pull request where it appears to the change that closes it. Today it reviews and finds. Each next stage ships as its own release.
/fixloop review. AvailableFor developers
Fixloop looks for real defects: off-by-ones, injection, unhandled errors, broken team rules. It tells you where, why and how to fix it.
Each finding sits on the changed line, with a severity, a confidence score and a suggested fix you can commit in one click.
Run fixloop review in your repository. It checks your branch against main and prints findings. Nothing is posted.
Write team conventions as short Markdown files in .fixloop/rules. Every review checks against them.
Findings below your confidence or severity threshold are dropped. No style nits unless you ask for them.
For engineering leads
Fixloop gives every pull request the same first pass, whoever wrote it and whenever it lands. You choose the model, the limits and where it runs.
A pass, warn or fail check on every pull request, so problems are caught before a human reviewer spends time on them.
Token and dollar budgets per job and per day. Cost is recorded for every review.
Self-host it. Mark a repository local-only and its code is only ever sent to models you run.
Apache-2.0, vendor-neutral, any model provider. Built to become a CNCF project.
Bring your own model
Model names live in one config file. List a fallback, and if the first model is down or rate limited, the next one takes over. Run fully offline with Ollama and no code leaves your network.
# fixloop.yaml: a hosted model with a local fallback llm: providers: anthropic: { kind: anthropic, api_key_env: ANTHROPIC_API_KEY } ollama: { kind: openai_compatible, preset: ollama } models: claude: { provider: anthropic, model: "claude-sonnet-5-5" } local: { provider: ollama, model: "qwen3:30b-a3b" } routes: review: [claude, local] budgets: daily: { max_cost_usd: 50 }
Security
An AI reviewer reads untrusted input by definition. Fixloop is built on that assumption.
Keys and tokens in a diff are redacted before any model call, and a committed secret is reported as a critical finding.
Settings and rules are read from the base branch, never from the pull request.
Code, comments and PR text are passed to the model as data, never as instructions. Output is sanitised before it is posted.
The GitHub App you create reads code and writes reviews and checks. Nothing else. Only people with write access can run its commands.
Get started
cargo install --locked --git https://github.com/bwalia/fixloop fixloop-clifixloop --config fixloop.yaml llm testfixloop --config fixloop.yaml reviewfixloop github create-app --name my-fixloopRoadmap
Any provider, routing, fallback, budgets
GitHub App, inline reviews, check runs
GitHub Issues and Jira, with dedupe
Sandboxed, test-gated fix pull requests
Findings, costs and audit in one place
Helm, operator, signed images, SBOM
Free and open source. Self-hosted. Your model, your rules.
Off-by-one: index out of bounds
items.len()is one past the last index, so this panics on every non-empty slice.