Дата публикации
coding

Contextual Commits: как превратить git‑историю в память для ИИ и команды

Что появилось / что изменилось

Появилось открытое текстовое соглашение для Git — Contextual Commits. Оно добавляет к привычным Conventional Commits ещё один слой: фиксирует не только что изменилось в коде, но и зачем.

Ключевые изменения:

  • В теле коммита появляется структурированный список строк‑действий: intent(...), decision(...), rejected(...), constraint(...), learned(...).
  • Каждая строка описывает то, чего нет в diff: мотивацию, альтернативы, ограничения, выводы.
  • Автор использует это как внутренний стандарт и обучает код‑агентов (например, Claude Code) коммитить по этому формату через skill.
  • Поверх этого стандарта есть утилита‑skill «recall»: она ищет по истории контекстуальных коммитов и возвращает краткий «branch brief» или результаты по фильтру (по scope или по паре action+scope).
  • В обычном рабочем процессе почти ничего не меняется: разработчик по‑прежнему говорит агенту «commit», но теперь тот автоматически генерирует содержательное тело коммита.

Цифр производительности, стоимости или лимитов контекста автор не приводит. Главное изменение — не в скорости, а в качестве и повторном использовании контекста разработки.

Как это работает

Базовая идея простая: ветка = сессия, история коммитов = ход рассуждений, а тело коммита — место, где можно формализовать «почему».

Структура примера:

feat(auth): implement Google OAuth provider

intent(auth): users need social login, starting with Google before GitHub and Apple
decision(oauth-library): passport.js over auth0-sdk — better multi-provider flexibility
rejected(oauth-library): auth0-sdk locks us into their session model
constraint(callback-routes): must follow /api/auth/callback/:provider pattern
learned(passport-google): requires explicit offline_access scope for refresh tokens

Под капотом ничего магического:

  • Заголовок коммита остаётся в формате Conventional Commits (feat(scope): subject) и описывает WHAT.
  • Тело — это плоский список строк action(scope): описание. Каждое action — тип сигнала:
    • intent — намерение, бизнес‑контекст;
    • decision — сделанный выбор и причина;
    • rejected — рассмотренная и отброшенная альтернатива;
    • constraint — техническое или продуктовое ограничение;
    • learned — новое знание, которое всплыло в процессе.
  • Агенту задают эту мини‑спецификацию через skill: когда разработчик просит «commit», агент не только пишет заголовок, но и разворачивает свои рассуждения в теле по этим типам.
  • Skill «recall» поверх Git‑истории парсит такие коммиты и даёт:
    • краткое резюме ветки без аргументов;
    • поиск по scope (auth, billing и т.п.);
    • поиск по комбинации action+scope — например, все decision(oauth-library).

Важно: автор пробовал автоматизировать захват контекста через Git‑хуки и интеграции с Claude, но без структуры качество резко падало. Contextual Commits решают проблему не автоматизацией любой ценой, а предсказуемым форматом для того, что и так уже существует — истории коммитов.

Что это значит для вас

Если вы активно используете код‑агентов и Git, Contextual Commits могут заменить разрозненные заметки, wiki и хаотичные комментарии в PR.

Где это особенно полезно:

  • Долгие фичевые ветки. Ветка превращается в осмысленный лог решений. Через месяц можно понять, почему выбрали именно эту библиотеку, а не соседнюю.
  • Работа с ИИ‑ассистентами. Агенту не нужно каждый раз «заливать» весь контекст проекта. Он может сам дернуть recall, чтобы восстановить мотивацию прошлых изменений.
  • Онбординг в проект. Новому разработчику проще читать intent/decision/rejected, чем реконструировать замысел по diff и устаревшим документам.
  • Код‑ревью и откат решений. Легче увидеть, какие альтернативы уже рассматривали, и не повторять одни и те же дискуссии.

Где подход может не зайти:

  • Очень мелкие скрипты и pet‑проекты, где история не важна и всё держится в голове.
  • Команды, которые категорически против любых дополнительных требований к формату коммитов.
  • Проекты без ИИ‑ассистентов: выгода остаётся, но меньше, потому что никто автоматически не «вспоминает» этот контекст.

Практический совет по внедрению:

  1. Оставьте текущий стиль Conventional Commits, не ломайте заголовки.
  2. Добавьте один‑два action‑типа, с которых начнёте, например intent и decision.
  3. Попросите код‑агента генерировать тело коммита по этому шаблону и правьте только откровенные промахи.
  4. Когда накопится история, имеет смысл подключить утилиту‑поиск по коммитам по тем же тегам.

Технология не привязана к конкретному провайдеру ИИ и не требует VPN: это текстовый стандарт поверх Git. Инструменты вокруг него автор пока описывает как внутренние skills для агентов, но сам формат уже открыт и его можно реализовать в любом инструменте.

Место на рынке

Contextual Commits живут в том же пространстве, что и Conventional Commits, Git‑хуки, документация в Notion и встроенная память код‑агентов вроде Claude Code или GitHub Copilot.

Ключевое отличие от Conventional Commits — фокус не на релизном менеджменте и автогенерации changelog, а на структурированной фиксации причин изменений прямо в истории Git.

В отличие от Git‑хуков, которые просто запускают произвольные скрипты, Contextual Commits предлагают именно текстовый протокол: что писать в тело и как это потом читать. Хуки можно использовать как транспорт, но не как замену формату.

По сравнению с отдельными документами и wiki, формат выигрывает тем, что привязан к конкретному коммиту и ветке. Контекст не теряется в общей базе знаний и автоматически идёт вместе с кодом.

Сравнивать по скорости с GPT-4o, Claude 3.5 или другими моделями тут бессмысленно: Contextual Commits не конкурируют с ними, а служат источником более качественного контекста. Как именно это скажется на качестве ответов и скорости работы агентов, автор описывает на уровне опыта, без числовых бенчмарков.

В итоге Contextual Commits занимают нишу текстового стандарта поверх Git, который помогает и людям, и ИИ‑ассистентам восстанавливать ход мысли по истории коммитов, а не только по diff.


Читайте также

Contextual Commits: как превратить git‑историю в память для ИИ и команды — VogueTech | VogueTech