TL;DR: Собрали CLI, который гоняет ревью кода на локальной LLM (Ollama): никаких API-ключей в облаке, код не уходит из машины, один diff – одна команда. В статье – зачем это нужно, как устроено и как попробовать за пять минут.
Проблема
Ревью кода вручную отнимает время, а статический анализ (линтеры, SAST) ловит только то, что зашито в правила. Контекст проекта, типичные баги и «запахи» кода они не видят. Облачные AI-ревью (типа CodeRabbit) удобны, но код уходит в чужое API – для внутренних репозиториев или строгого комплаенса это не всегда ок.
Хотелось чего-то среднего: умное ревью с контекстом, но полностью локально, без облака и без привязки к PR.
Почему Ollama
Ollama даёт запускать открытые LLM (Llama, Qwen, CodeLlama и др.) на своей машине одной командой. Плюсы для ревью:
-
код никуда не уходит;
-
нет лимитов и подписок;
-
можно выбрать модель под задачу (например, qwen3-coder для кода);
-
подходит для воздушных и онпрем-сред.
Мы решили сделать инструмент, который берёт git diff, при необходимости подтягивает контекст из репозитория (RAG) и отправляет всё в Ollama. На выходе – структурированный отчёт: что не так, насколько серьёзно, что поменять (с готовыми правками, где возможно).
Как устроено
Схема простая:
-
Сбор изменений – читаем
git diff(или весь scope, если нужно). -
Контекст – при необходимости загружаем файлы проекта, чанкуем, строим эмбеддинги (через модель из Ollama) и по запросу подмешиваем релевантные куски в промпт.
-
Промпт – отправляем в Ollama diff + контекст + системный промпт с правилами (безопасность, производительность, стиль).
-
Ответ – парсим структурированный отчёт: файл, строка, severity, описание, рекомендация, при возможности – патч (auto-fix).
Всё это упаковано в одну команду в терминале, без веб-интерфейса и без интеграции с GitHub/GitLab (хотя при желании вывод можно пушить в CI).
Установка и первый запуск
Нужны Python 3.11+ и запущенная Ollama с хотя бы одной моделью (например, qwen3-coder:7b или codellama).
# Установка (pip)
pip install git+https://github.com/URLbug/CodeFox-CLI.git@main
# или через uv
uv tool install git+https://github.com/URLbug/CodeFox-CLI.git@main
В каталоге проекта:
codefox --command init # создаст .codefox.yml, .codefoxenv и .codefoxignore
codefox --command scan # ревью по текущему git diff
При первом init создаётся конфиг по умолчанию. Для Ollama его нужно явно указать.
Конфиг под Ollama
В .codefox.yml задаём провайдер и модель:
provider: ollama
model:
name: qwen3-coder:7b # или codellama, deepseek-coder и т.д.
base_url: http://localhost:11434
temperature: 0.2
max_tokens: 4000
embedding: BAAI/bge-small-en-v1.5 # для RAG, если нужен контекст по файлам
review:
severity: high
suggest_fixes: true
diff_only: true
baseline:
enable: true
ruler:
security: true
performance: true
style: true
-
diff_only: true — анализируем только изменения (удобно для повседневного ревью).
-
baseline.enable: true — не ругаемся на старый долг, только на новое.
-
ruler — включаем/выключаем категории (безопасность, перф, стиль).
Список доступных моделей в вашей Ollama:
codefox --command list
Пример вывода
После codefox --command scan в терминале появляется что-то вроде:
─── CodeFox Audit Report ───
- Location: assets/js/script.js : Line 84
- Issue: Visual Glitch from Global Style Mutation
- Severity: Medium
- Confidence: High
- Regression Risk: Applying `transition: all 0.3s` globally affects every element's animation behavior, potentially breaking existing transitions or
causing unwanted visual side-effects.
- Evidence:
When toggling dark mode, the code applies a global transition style (`document.querySelectorAll("*")`) which overrides component-specific animations
unpredictably.
- Auto-Fix:
// Apply transition only where necessary instead of globally
// document.querySelectorAll("*").forEach(function(el){
// el.style.transition="all 0.3s";
// });
- Senior Tip:
Target styles precisely using CSS classes rather than blanket selectors. Prefer declarative CSS over imperative JavaScript styling for maintainability.
─── CodeFox Audit Report ───
...
Пример использования:
То есть не просто «здесь плохо», а конкретное место, риск, доказательство и совет, как поправить. Для части замечаний даётся готовый фрагмент кода (auto-fix).
Что в итоге
-
Локально – весь анализ на вашей машине, Ollama + Python.
-
Без облака – не нужны API-ключи Gemini/OpenAI, код не уходит из репо.
-
Один diff – одна команда — привычный workflow: правишь код, делаешь
codefox --command scan, смотришь отчёт. -
Гибко – та же тулза умеет работать с Gemini и OpenRouter (через
.codefox.yml), если захочешь сравнить качество или снять нагрузку с железа.
Проект открыт: CodeFox-CLI. Документация по всем опциям – в WIKI репозитория. Если зайдёте, поставьте звезду и напишите в комментариях, на каких моделях в Ollama вам зашло ревью сильнее всего. Мы буем очень благодарны :-)
Автор: CodeFoxAI


