Manki
Multi-stage, multi-agent AI code review for GitHub — self-hosted, provider-neutral.
A planner triages the change, one or two finders on different models review it, dedup removes repeats, and a judge filters the noise.
How it works
Multi-stage pipeline
Planner, Reviewer, Dedup, Judge. Each stage has a specific job; dedup removes repeats before the judge classifies what survives.
Bring your own model
Configure Claude today; multi-provider support coming soon. Your API key, your compute.
Open source, self-hosted
Runs as a GitHub Action in your repo. No SaaS dependency, no vendor lock-in, no subscription required.
The review pipeline
Planner
Triages the change: how many finders, at what effort
Reviewer
One or two finders on different models produce findings
Dedup
Filters findings that match previously-dismissed ones
Judge
Evaluates, filters, classifies findings by severity
Why Manki?
Self-hosted
Your code never leaves your CI runner. No data shared with third-party SaaS platforms.
Multi-stage
Planner + parallel finders + dedup + judge. Not a single LLM call — a coordinated review team.
Review memory
Learns from your feedback. Dismiss a finding and Manki won't raise it again. Add custom patterns to teach it what matters to your team.
Provider-neutral
Bring your own API key, swap models freely. No lock-in to a specific vendor.
Open source
Inspect, fork, customize. No black box — you can read every prompt and every line of code.
No subscription
Pay only for API usage. No per-seat fees, no monthly plans, no surprise invoices.
Get started in 3 steps
Install the GitHub App
Grant manki access to post review comments on your repositories.
Install manki-review →Add your API key
Set your Anthropic API key as a repository secret. OpenAI, Gemini, and OAuth alternatives are documented in the setup guide.
gh secret set ANTHROPIC_API_KEY --repo <owner>/<repo>
Add the workflow
Create .github/workflows/manki.yml in your repository:
name: Manki
run-name: 'Manki ${{ inputs.event }}.${{ inputs.action }} on #${{ inputs.pr }} (${{ inputs.delivery_id }})'
on:
workflow_dispatch:
inputs:
event: { type: string, required: true }
action: { type: string, required: true }
pr: { type: string, required: true }
head_sha: { type: string, required: false }
comment_id: { type: string, required: false }
review_id: { type: string, required: false }
delivery_id: { type: string, required: false }
permissions:
contents: read # read repo files and diffs
pull-requests: write # post review comments and approvals
issues: write # post progress comments on PRs
id-token: write # OIDC token for GitHub App identity
actions: read # verify workflow run is legitimate
jobs:
review:
timeout-minutes: 30
runs-on: ubuntu-latest
steps:
- uses: actions/setup-node@v7
with:
node-version: '24'
- name: Manki Review
uses: manki-review/manki@v7
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
# memory_repo_token: ${{ secrets.REVIEW_MEMORY_TOKEN }} # Only with your own memory repo in `memory.repo`
See it in action
Real reviews on real PRs — no staged demos.
FAQ
Does manki work without Claude?
How much does it cost to run?
Is my code sent to third parties?
How do I switch from a hosted review tool?
Does every comment start a workflow run?
Can I customize the review?
reviewers: in .manki.yml, pick the models for each stage including the second finder, and pin whether a second finder runs with planner.paired.