CodeDebrief — детерминированные workflow-карты кода для агентов

· 2 мин чтения
code-intelligence mcp ai-agents workflow static-analysis cli
📂 Исходный код на GitHub

Локальный статический анализатор: строит детерминированные workflow-флоучарты (entrypoints, решения, ветки, вызовы, исходники) до ответа агента и отдаёт их через MCP. Работает без ключа LLM.

CodeDebrief — детерминированные workflow-карты кода для агентов

CodeDebrief превращает локальную кодовую базу в детерминированные workflow-флоучарты, которые кодинг-агенты могут смотреть, рендерить, расширять, переводить и объяснять. Он статически строит карту точек входа, решений, ветвей, внутренних вызовов, возвратов, исключений и исходов до того, как агент начнёт отвечать, поэтому визуальное объяснение опирается на переиспользуемые артефакты, а не на свежую реконструкцию «на лету».

Анализатор, артефакты, вьюер и MCP-сервер работают локально и не требуют ключа LLM-провайдера. Важно, чем CodeDebrief не является: это не генератор документации, не поиск багов, не универсальная графовая БД и не сервис обогащения через LLM. Это слой навигации по workflow для понимания того, как код-пути на самом деле связаны.

Статус: pre-1.0 alpha. Модель версионируется, но схема и MCP-payload могут меняться до 1.0. Актуальный релиз — v0.17.0.

Зачем это существует

Агент может реконструировать workflow из сырого исходника, но эта реконструкция обычно зависит от того, какие поиски он выполнит, какие файлы выберет и в какой контекст успеет прочитать. Повторять этот процесс медленно, а менее очевидные ветки или межфайловые пути могут выпасть.

CodeDebrief создаёт переиспользуемый слой навигации до того, как агент что-то объяснит:

  • entrypoints, решения, ветви, вызовы, исходы и source-диапазоны;
  • доменные понятия — статусы, роли, разрешения, enum и feature flags;
  • контекст затронутых workflow для файлов, символов, потоков и путей зависимостей;
  • канонические визуальные срезы со стабильными хешами диаграмм;
  • опциональные языковые лейблы как presentation layer поверх фактов анализатора.

Быстрый старт

Требуется Python 3.10+. Установка через uv:

uv tool install codedebrief
codedebrief setup claude

Вместо claude подставьте codex, gemini или cursor. Чтобы анализировать только выбранные папки, их передают через --source:

codedebrief setup claude --source backend/ frontend/

Для воркспейса из нескольких репозиториев заведите отдельную папку под конфиг и артефакты и укажите --source на репозитории:

mkdir pipeline-map
cd pipeline-map
codedebrief setup claude --source ../ingest-service ../transform-service ../warehouse-ui

Объём имеет значение: анализировать весь репозиторий или много больших папок заметно увеличивает время setup, update и ответов MCP (больше файлов для хеширования, парсинга, линковки и поиска). Лучше выбирать минимальные корни, в которых всё ещё содержатся нужные агентам workflow.

Ответы MCP ограничены token_budget. Если агент передал явный бюджет, CodeDebrief его соблюдает. Для широких запросов agent_context, идущих с дефолтным бюджетом, CodeDebrief автоматически повышает эффективный бюджет на больших проектах, чтобы первый срез поместился без принудительного повтора.

После setup можно задавать обычные вопросы:

Show me the checkout workflow.
Which branches handle a failed payment?
What workflows are affected by this file?
Where is this status handled?
Expand this workflow one level deeper.

Ручная навигация:

codedebrief view

По умолчанию конфиг и артефакты лежат в codedebrief-out/:

codedebrief-out/
├── codedebrief.toml       опциональный конфиг проекта, создаётся setup
├── codedebrief.html        локальный интерактивный вьюер всего проекта
├── codedebrief.md          обозримые Mermaid-флоучарты
├── codedebrief.json        каноническая модель для MCP, CI, скриптов и вьюера
├── codedebrief.hash.json   sidecar-хеш модели для быстрых MCP cold start
└── codedebrief.errors.jsonl сохранённая диагностика CLI/MCP при ошибках

Файлы, нужные провайдеру, лежат там, где клиент их ожидает: .mcp.json, AGENTS.md, CLAUDE.md, GEMINI.md, .cursor/rules/codedebrief.mdc и каталоги агентских скиллов.

Для явного обновления во время разработки:

codedebrief update
codedebrief validate --check-sync

Удаление из проекта:

codedebrief clear

Где это вписывается

CodeDebrief не заменяет поддерживаемую документацию проекта. Документация должна фиксировать архитектуру, намерения, инварианты, конвенции, эксплуатационные знания и «почему» важных решений.

CodeDebrief закрывает более быструю и узкую задачу: инспектируя workflow, зашитый в текущий исходник, во время брейншторма, отладки, планирования изменений или ревью влияния. Он полезен, чтобы:

  • визуализировать один сфокусированный фрагмент workflow по запросу;
  • проследить решения и внутренние вызовы между файлами;
  • посмотреть workflow, затронутые файлом, символом или планируемым изменением;
  • дать агенту общий структурный срез для немедленного анализа.

Документация объясняет систему во времени. CodeDebrief даёт визуальный срез текущего исходника, когда нужно о нём рассуждать. Любое объяснение агента или языковые лейблы — это presentation layer поверх сгенерированного анализатором флоучарта, а не его источник.

MCP-поверхность

Основные MCP-инструменты:

Инструмент Назначение
agent_context Точка входа по умолчанию для вопросов на естественном языке и контекста изменённого кода
expand_slice Расширение или углубление workflow-среза по стабильным хендлам
workflow_path Детерминированный путь между потоками, символами или понятиями
snapshot_slice Детерминированный визуальный снапшот среза
explain_flow Объяснение одного потока с шагами, решениями, вызовами и source-якорями
explain_node Объяснение одного узла флоучарта с локальным контекстом рёбер и исходников
explain_edge Объяснение одного смоделированного ребра с контекстом исходника
validate_artifacts Проверка валидности модели и опциональной синхронизации JSON/Markdown
update_codedebrief Обновление JSON, Markdown и HTML из локальных исходников

CLI остаётся компактным: setup, update, view, validate, doctor, clear и mcp.

Поддерживаемые языки

Анализатор извлекает control flow для 11 языковых идентификаторов:

Язык Покрытие
Python (.py) AST-анализатор: функции, методы, решения, циклы, вызовы, возвраты, исключения, тесты, сбор enum, импорт-зависимости
TypeScript / TSX (.ts, .tsx) Tree-sitter: детект Next.js/React entrypoint, решения, циклы, вызовы, возвраты, arrow-функции, тесты, enum, импорты
JavaScript / JSX (.js, .jsx, .mjs, .cjs) Tree-sitter: решения, циклы, вызовы, возвраты, тесты, импорты
Go (.go) Profile-driven tree-sitter: функции, методы, решения, циклы, вызовы, возвраты, тесты, импорты
Java (.java) Profile-driven tree-sitter: методы, решения, циклы, вызовы, возвраты, исключения, тесты, импорты, Spring route-аннотации
C# (.cs) Profile-driven tree-sitter: методы, решения, циклы, вызовы, возвраты, исключения, тесты
PHP (.php) Profile-driven tree-sitter: функции, методы, решения, циклы, вызовы, возвраты, исключения, тесты
C (.c, .h) Profile-driven tree-sitter: функции, решения, циклы, вызовы, возвраты, тесты
C++ (.cc, .cpp, .cxx, .hh, .hpp, .hxx, .ipp, .tpp) Profile-driven tree-sitter: функции, методы, решения, циклы, вызовы, возвраты, исключения, тесты
Rust (.rs) Profile-driven tree-sitter: функции, решения, циклы, match-обработка, возвраты, тесты
Ruby (.rb) Profile-driven tree-sitter: методы, решения, циклы, вызовы, возвраты, тесты

Сгенерированные модели содержат metadata.language_capabilities с feature flags и заметками о ограничениях для каждого языка. Агенты должны опираться на этот контракт при объяснении глубины анализа.

Доменная логика

CodeDebrief извлекает и агрегирует доменные понятия:

  • члены enum;
  • статусы и состояния жизненного цикла;
  • роли и разрешения;
  • feature flags;
  • обработанные значения и решения, ветвящиеся по ним.

agent_context включает релевантную доменную логику внутрь workflow_slice со ссылками на потоки, узлы, source-диапазоны, снапшоты и таргеты вьюера. Сопоставление значений использует смоделированные факты кода, включая суффикс-матчи вроде PAID для Status.PAID.

Конфигурация

CodeDebrief работает без конфига. Новые прогоны setup создают codedebrief-out/codedebrief.toml только когда дефолтов недостаточно.

[codedebrief]
source_roots = ["."]
exclude = []
exclude_dirs = []
include_public_functions = true
max_call_depth = 4
output_dir = "codedebrief-out"
self_exclude = true

[codedebrief.entrypoints]
include = []
exclude = []

[codedebrief.scopes]
backend = ["backend/**", "services/**"]
frontend = ["frontend/**", "web/**"]
edge = ["edge/**", "workers/**"]

Дефолты вычищают типовые каталоги VCS, зависимостей, кешей и сборки: .git, node_modules, virtualenv, .next, .turbo, .svelte-kit, .nx, .pytest_cache, .mypy_cache, .ruff_cache, .pyre, .dart_tool, dist, build, out, target, obj, coverage, vendor, Pods и codedebrief-out.

Ограничения

CodeDebrief не исполняет код, не наблюдает за runtime, не выполняет полное символьное выполнение, не доказывает бизнес-корректность и не восстановливает глубокое состояние фреймворка. Это статическая модель исходников, управляющих потоков, выбранных конвенций фреймворка и разрешимых внутренних вызовов.

Важные практические ограничения:

  • динамический dispatch может остаться неразрешённым;
  • глубина возможностей зависит от фронтенда анализатора;
  • сгенерированные или неподдерживаемые файлы могут пропускаться;
  • большие срезы ограничены token-бюджетом и сообщают о пропусках;
  • первый отображаемый срез — сжатая сводка и может быть расширен MCP-инструментами.

Частые вопросы

Зачем это вместо репозиторий-суммаризации? Суммаризация — проза под один запрос и один контекст. CodeDebrief держит переиспользуемую структурную модель: ограниченные флоучарты, source-якоря, пропуски и хендлы расширения для последующих вопросов.

Это инструмент ревью кода? Нет. CodeDebrief — для понимания кода и навигации по workflow. Он не выдаёт возможные дефекты как продуктовый вывод.

Нужен ли ключ LLM? Нет. Анализатор, артефакты, Mermaid-диаграммы, вьюер и MCP-сервер локальные и детерминированные.

Чем отличается от call graph? Call graph показывает отношения символов. CodeDebrief моделирует workflow-срезы с entrypoint-ми, решениями, ветками, упорядоченными шагами, source-диапазонами, доменными понятиями, визуальными таргетами и инструментами расширения для агентов.

Можно использовать только как ручной вьюер? Да, через codedebrief view. MCP — основная поверхность для агентов, но вьюер остаётся официальной поверхностью для ручного исследования.

Лицензия

Apache License 2.0.

Источник: https://github.com/ferdinandobons/CodeDebrief