kagura-ai/kagura-code-reviewer

GitHub: kagura-ai/kagura-code-reviewer

一款基于 Ollama 的免费 AI 代码审查代理,通过多角度扫描与对抗式验证为 git diff 或 PR 生成带分级评级的报告,可直接作为 CI 门控使用。

Stars: 0 | Forks: 0

# kagura-code-reviewer [![PyPI](https://img.shields.io/pypi/v/kagura-code-reviewer.svg)](https://pypi.org/project/kagura-code-reviewer/) [![Python](https://img.shields.io/pypi/pyversions/kagura-code-reviewer.svg)](https://pypi.org/project/kagura-code-reviewer/) [![License: Apache-2.0](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/baaf0f221e224612.svg)](https://github.com/kagura-ai/kagura-code-reviewer/actions/workflows/ci.yml) [![codecov](https://codecov.io/gh/kagura-ai/kagura-code-reviewer/graph/badge.svg)](https://codecov.io/gh/kagura-ai/kagura-code-reviewer) **在您的 git diff 上进行专业级代码审查,无需消耗任何 Anthropic 费用。** 本地(或云端)的 Ollama 模型会并行启动多角度 finder,通过对抗式多数投票验证每一个发现,去重后返回带有 `green`(绿)/ `yellow`(黄)/ `red`(红)结论的排名 Markdown/JSON 报告,您可以用它来作为 CI 的门控。 专为 Claude Code 提供的免费、基于 Ollama 的代码审查工具。审查的“大脑”运行在 Ollama 模型(云端或本地)上,因此审查过程**完全不消耗 Anthropic 费用**。配套的 slash command(`/kagura-code-reviewer`)集成了 Kagura Memory:外部 Claude 会话会检索过往的规范和发现,将其作为上下文传递给 CLI,然后在审查完成后将持久化的知识写回。该 CLI 本身是一个独立工具——它不会直接调用 Kagura Memory。 ## 工作原理 ``` Claude Code (outer session) │ /kagura-code-reviewer slash command │ 1. Recalls past findings from Kagura Memory (trust_tier: trusted filter) │ 2. Writes assembled context to /tmp/kcr-ctx.md │ 3. Invokes CLI ──────────────────────────────────────────────────────┐ │ │ └── Presents report to user ←── 5. Writes durable knowledge back │ ▼ kagura-code-reviewer CLI │ git diff (base...HEAD) │ sandboxed repo tools │ read_file / grep / git ▼ Ollama (local or cloud) │ agentic review loop ▼ Markdown / JSON report exit 0 = clean exit 1 = blocking issues ``` ## 安装 ``` pip install kagura-code-reviewer ``` ### 系统前置条件 pip **不会**安装这些内容——您必须单独进行设置: - 正在运行的 **Ollama daemon**,且至少拉取了一个模型。 默认的云端别名使用 `qwen3-coder:480b-cloud`;默认的本地别名使用 `qwen2.5-coder:7b`。 拉取命令:`ollama pull qwen2.5-coder:7b` - **`claude` CLI** —— 仅在 `/kagura-code-reviewer` slash command 工作流中需要。 安装命令:`npm install -g @anthropic-ai/claude-code` ## 快速开始 ``` # 审查当前分支与 main 的对比(Markdown 输出到 stdout) kagura-code-reviewer --base main # 将报告以 JSON 格式写入文件 kagura-code-reviewer --base main --format json --out report.json # 使用本地模型别名(更快、更小) kagura-code-reviewer --local # 将审查限制在特定路径 kagura-code-reviewer --base main --paths src/foo.py --paths tests/test_foo.py # 通过 URL 审查 GitHub PR(开放或已关闭/已合并)——在 PR 仓库的 clone 中运行 kagura-code-reviewer --pr https://github.com/owner/repo/pull/123 # 将审查进度流式传输到 stderr(这样缓慢的本地运行就不会看起来像是卡住了) kagura-code-reviewer --base main -v ``` **进度 (`-v`/`--verbose`):** 将阶段进度(finder → 去重 → 针对每个候选者的验证 `i/N` → 最终计数)流式传输到 **stderr**,这样即使本地模型运行缓慢,也不会看起来像是卡住了。stdout / `--out`(md/json 报告)保持干净且管道安全,因此 `--format json --out` 不会受到影响。 **审查 GitHub PR (`--pr`):** 传入一个 PR URL,该工具会将该 PR 不可变的 head ref(`refs/pull//head`)拉取到一个隔离的 git worktree 中,像本地 diff 一样对其进行审查,并在之后进行清理(传入 `--keep` 可保留 worktree 以供调试)。它适用于**已打开和已关闭/已合并**的 PR——即使源分支被删除了——也同样适用于 fork 仓库的 PR。要求:**在该 PR 仓库的本地克隆中**运行(ref 是从其 `origin` 获取的——如果您的规范远程仓库使用了不同的名称,例如 `upstream`,请使用 `--pr-remote `),并且需要安装 `gh` 并完成认证(用于 PR 元数据和私有仓库认证)。`--pr` 不能与 `--base`/`--head`/`--repo` 组合使用;但可以与 `--cloud`、`--provider` 等参数搭配使用。(从无关的检出目录中审查任意 PR 是计划中的后续功能。) **退出代码:** - `0` —— 没有阻塞性问题(仅包含 INFO / LOW / MEDIUM 严重级别) - `1` —— 一个或多个 HIGH 或 CRITICAL 发现 - `2` —— git 错误(错误的 ref、不是 git 仓库等) ### 输出示例 ``` # Code Review ## [CRITICAL] 当 orders 为空时出现 IndexError(正确性) - **Where:** `orders.py:14` - **Why:** latest_order accesses ordered[-1] without verifying the list is non-empty, causing IndexError when orders is empty. - **Fix:** Guard the empty case before indexing. - **Seen by:** correctness-linescan, cross-file, removed-behavior ×5; votes: CONFIRMED 2; conf 1.00 ``` 每个发现都包含来源(`Seen by:` —— 表示哪些 finder 视角发现了它)、对抗式验证的 `votes` 以及 `conf` 分数,因此您可以使用 `--min-confidence` 过滤干扰信息。 ### 机器可读输出契约 `--format json` 会为下游自动化提供一个稳定且带版本的封装(无需抓取 Markdown)。为了向后兼容,`findings` 键保持在顶层;`schema_version` / `verdict` / `summary` 则是附加内容。 ``` { "schema_version": 1, "verdict": "green", // green = clean, yellow = non-blocking only, red = blocking finding "summary": { "total": 0, "blocking": 0, // findings with severity >= HIGH "by_severity": {}, // {"HIGH": 2, "LOW": 1, ...} "incomplete": false // true if the review did not finish (a "meta" finding is present) }, "findings": [ /* per-finding: dimension, severity, file, line, title, rationale, suggestion, angles, votes, merge_count, confidence */ ] } ``` **结论 ↔ 退出代码不变式:** `verdict == "red"` **当且仅当**退出代码为 `1`。 `green` 和 `yellow` 都会以 `0` 退出(使用 `verdict` 来区分完全无问题和警告性建议)。`summary.incomplete` 让执行器能够区分“审查未能运行”和“存在真正的阻塞性发现”。 ## Slash command / Kagura Memory 工作流 有两种方法可以将 `/kagura-code-reviewer` slash command 引入 Claude Code。 ### 选项 A —— 作为 Claude Code 插件安装(推荐) 在 Claude Code 内部添加 Kagura marketplace 并安装该插件: ``` /plugin marketplace add kagura-ai/kagura-code-reviewer /plugin install kagura-code-reviewer@kagura-code-reviewer ``` `/kagura-code-reviewer` 随后将出现在所有项目的技能列表中——无需在每个仓库中进行拷贝。(您仍然需要将 `kagura-code-reviewer` CLI 放在您的 `PATH` 中;可以使用 `pip install kagura-code-reviewer` 进行安装。) ### 选项 B —— 将内置命令拷贝到单个项目中 如果您安装了 PyPI 包,并且只想在单个仓库中使用该命令,请将内置命令拷贝到该项目的 `.claude/commands/` 目录中: ``` # 将内置的 slash command 复制到您的项目中,以便 Claude Code 可以运行 /kagura-code-reviewer mkdir -p .claude/commands cp "$(python -c "import kagura_code_reviewer, pathlib; print(pathlib.Path(kagura_code_reviewer.__file__).parent / 'commands' / 'kagura-code-reviewer.md')")" .claude/commands/ ``` 然后在 Claude Code 内部,运行: ``` /kagura-code-reviewer ``` 该命令将: 1. 从 Kagura Memory 检索此仓库锁定的审查策略和过往发现(过滤条件为 `trust_tier: trusted`,以防 prompt 注入)。 2. 通过 `--context-file` 将组合好的上下文传递给 CLI。 3. 展示报告。 4. 将新的持久化规范和常见模式写回 memory。 ### Memory 安全契约 Memory 是基础依据,而非权威。CLI 仅通过 `--context-file` 接收字符串,并且**无法重新验证其来源**,因此调用者需负责提供以下保证(纵深防御): 1. **使用 `trust_tier: "trusted"` 进行检索** —— 必需。它会排除外部/connector 导入的 memory(Slack/Discord 等),这些 memory 可能携带注入的指令(OWASP LLM01/LLM03)。CLI 假设调用者已经进行了过滤;它本身不会(也无法)进行检查。 2. **注入的 memory 是不受信任的、仅作参考的数据。** CLI 会将其包含在 `BEGIN/END UNTRUSTED MEMORY CONTEXT` 标记中,并且系统提示词严禁服从其中的任何内容。 3. **Memory 没有压制发现的权力。** 结论是根据通过 `submit_findings` 工具和对抗式验证阶段产生的发现计算出来的——绝不会根据描述性文本或 memory 得出。上下文可以为发现的理由提供依据,但不能移除发现或更改结论。 4. 对于自动化使用场景,仅允许 **owner 锁定**的 memory 影响门控决策;不要将 agent 编写的 `on_recall` memory 视为安全相关门控的可信来源(以避免自我中毒的反馈循环)。 ## 配置 模型别名和默认值在内置的 `config.toml` 中定义: ``` default_alias = "review-cloud" [models.review-cloud] ollama_model = "qwen3-coder:480b-cloud" base_url = "http://localhost:11434/v1" num_ctx = 32768 [models.review-local] ollama_model = "qwen2.5-coder:7b" base_url = "http://localhost:11434/v1" num_ctx = 16384 ``` **用户覆盖:** 创建 `~/.config/kagura-code-reviewer/config.toml`(或将 `KAGURA_CODE_REVIEW_CONFIG` 设置为其他路径)。只有您设置的键会覆盖默认值;其余一切均继承默认设置。 要添加自定义别名: ``` default_alias = "my-model" [models.my-model] ollama_model = "deepseek-r1:70b" base_url = "http://localhost:11434/v1" num_ctx = 65536 ``` ## 状态 / 范围 v0.1 是**同步的**:CLI 会阻塞直到 Ollama 审查循环完成(每次调用最多 `--timeout` 秒,最多 `--max-iters` 次 agent 迭代)。 以下功能**尚未实现**,且上文也未作此声明: - `--background` 模式(即发即忘的异步审查,带有一个状态轮询命令) - 与 `kagura-engineer` 或其他 kagura-* 工具共享 Memory 模式 - MCP server 模式 设计规范:[`docs/superpowers/specs/2026-06-06-kagura-code-review-design.md`](docs/superpowers/specs/2026-06-06-kagura-code-review-design.md) ## 贡献 欢迎提交 Issue 和 PR。有关开发设置和工作流,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md),以及 [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)。要报告安全问题,请遵循 [SECURITY.md](SECURITY.md)(请不要为漏洞公开创建 issue)。 ## 许可证 Apache-2.0 —— 见 [LICENSE](LICENSE) 和 [NOTICE](NOTICE)。
标签:AI, AI风险缓解, Claude Code, LLM评估, Ollama, SOC Prime, 代码审查, 开发工具, 自动化代码审查, 逆向工具