Skip to main content
Glama

adrkit

Память решений для планов, созданных людьми и агентами — записи архитектурных решений, которые машиночитаемы, проверяемы в CI и понятны агентам, не покидая git.

npm version CI ADRs ARB queue License: Apache 2.0

Большинство ADR-инструментов — это шаблон Markdown и генератор статических сайтов. Это фиксирует решение, но не заставляет решение работать. adrkit рассматривает запись как типизированные данные с телом Markdown и добавляет одно поле — affects, — чтобы инструмент мог ответить на вопрос «какие решения управляют этим pull request?» и поместить ответ туда, где принимается следующее решение.

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

CLI публикуется как @adrkit/cli и предоставляет бинарный файл adr. Публикуемые артефакты рассчитаны на Node 22+:

npx @adrkit/cli lint                 # validate the corpus in docs/adr
npx @adrkit/cli explain src/payments/api.ts   # which decisions govern this file?

Или добавьте его в проект (в репозиториях, ориентированных на Bun, можно использовать bun add -D @adrkit/cli / bunx):

npm i -D @adrkit/cli

Чистая библиотека устанавливается отдельно: npm i @adrkit/core @adrkit/evaluator.

См. руководство по быстрому старту и полный справочник команд.

Related MCP server: agentic-os-mcp

Выберите отправную точку

Если вы хотите...

Начните здесь

Примечания

Проверить или проинспектировать корпус ADR

@adrkit/cli

npx @adrkit/cli ... на Node 22+

Создать собственный инструментарий

@adrkit/core

Чистые API парсера, валидатора, сопоставителя и очереди

Запускать детерминированные проверки предложений

@adrkit/evaluator

Проход 0 — это текущая поставляемая поверхность оценщика

Передавать предыдущие решения кодинг-агентам

@adrkit/mcp

Локальный MCP-сервер stdio, доступный только для чтения

Запускать adrkit из OCI-образа

Использование контейнера

Согласованный мультиархитектурный образ, начиная с первого релиза, содержащего ADR-0032

Комментировать управляющие решения в pull request

Использование в CI

GitHub Action из этого репозитория

Добавить память решений в Spec Kit

@adrkit/spec-kit

Публикуется отдельно для Spec Kit >=0.13.0,<0.16.0

Добавить память решений в Copilot, Claude Code или opencode

adrkit agent plugin

Установите из этого репозитория или маркетплейса

Использование контейнера

Начиная с первого согласованного релиза, содержащего ADR-0032, релизы публикуются как мультиархитектурный OCI-образ в ghcr.io/mbeacom/adrkit. В автоматизации закрепляйте неизменяемый тег vX.Y.Z; vX и latest перемещаются только после завершения этого согласованного релиза:

docker run --rm --read-only --network none \
  -v "$PWD:/workspace:ro" \
  ghcr.io/mbeacom/adrkit:vX.Y.Z lint

docker run --rm --read-only --network none -i \
  -v "$PWD:/workspace:ro" \
  ghcr.io/mbeacom/adrkit:vX.Y.Z mcp

Команда MCP держит stdin открытым, поскольку MCP использует stdio. Её монтирование репозитория доступно только для чтения, что соответствует контракту сервера; в конфигурации MCP-клиента используйте абсолютный путь на хосте. Для команд CLI, которые намеренно выполняют запись (new или migrate без --dry-run), опустите --read-only и суффикс :ro у монтирования. Образ запускается от непривилегированного пользователя node; на хосте с другим UID/GID добавьте --user "$(id -u):$(id -g)". На хостах с SELinux добавьте соответствующую метку bind-mount (например, :Z).

Образ по умолчанию трактует нераспознанный селектор как подкоманду adr. Явные селекторы — cli/adr/adrkit, mcp/adrkit-mcp, ci/adrkit-ci и queue-action/adrkit-queue-action. --help по умолчанию описывает эти селекторы; cli --help открывает справочник команд CLI. Контейнер также резервирует -h, container-help и --container-help; остальные подкоманды справки CLI, например help lint, проходят без изменений.

Соберите тот же исходный код локально с помощью Docker или Podman. Целевые образы конкретного назначения cli, mcp, ci и queue-action изолированы для локальной политики и проверки SBOM; реестр публикует только универсальный целевой образ adrkit:

docker build -f Containerfile -t adrkit:local .
docker build -f Containerfile --target mcp -t adrkit-mcp:local .
docker run --rm --read-only --network none -i \
  -v "$PWD:/workspace:ro" \
  adrkit-mcp:local

Две точки входа CI сохраняют существующий контракт среды выполнения GitHub Actions: они ожидают GITHUB_WORKSPACE, полезную нагрузку события и окружение репозитория, значения INPUT_* и токен. Для размещённых GitHub Actions Actions на основе репозитория остаются более простым интерфейсом: mbeacom/adrkit/packages/ci@v0 и mbeacom/adrkit/packages/ci/queue@v0. Публикация и восстановление контейнера описаны в docs/RELEASING.md.

Как это выглядит

adr queue выводит очередь ревью как детерминированную проекцию корпуса, доступную только для чтения — побайтово идентичную для одинаковых входных данных:

# ARB Queue — 2026-07-25

Corpus fingerprint: `96e7f3185c5bb89bd1c87e10a28dcbef66703f381d3f14ea486ceaf29903cb00`
7 item(s) | 0 corpus finding(s) | 0 item(s) with findings

## Queue Items

| # | ID | Title | Tier | SLA State | Deadline | Approvals | Objections |
|---|----|-------|------|-----------|----------|-----------|------------|
| 1 | `0005` | Gate proposals with a deterministic-first evaluator … | arb | within-sla | 2027-01-18 | 0/- | 0 |
| 2 | `0015` | Validate descriptors against Backstage field formats … | arb | within-sla | 2027-01-25 | 0/- | 0 |

В CI Action @adrkit/ci комментирует управляющие решения в PR, которых они касаются, — только чтение, только комментарии, без базы данных, без утверждений. См. Использование в CI.

Для агентов: MCP-сервер

Самый отличительный инструмент: @adrkit/mcp — это локальный только для чтения-сервер Model Context Protocol, который позволяет агенту получить предыдущие решения — включая отклонённые и заменённые — прежде чем предлагать то, что уже пробовали. Никаких записей, ни HTTP/аутентификации, ни доступа к модели, эмбеддингам или сети, ни постоянного индекса. Он предоставляет ровно четыре инструмента:

Инструмент

Назначение

search_decisions

Поиск с фильтрацией по всему корпусу

get_decision

Получить одну запись по идентификатору

get_decision_context(files[])

Решения, управляющие набором файлов

list_superseded

Кладбище — что уже было отклонено

Запустите его против корпуса репозитория:

npx @adrkit/mcp             # or the adrkit-mcp bin
adrkit-mcp --cwd /path/to/repo --dir docs/adr

--cwd (переменная окружения ADRKIT_MCP_CWD) должен быть корнем рабочего дерева Git; --dir (переменная окружения ADRKIT_MCP_DIR, по умолчанию docs/adr) разрешается внутри него. stdout несёт только кадры JSON-RPC; диагностика идёт в stderr; кладбище включено по умолчанию. Полные контракты инструментов см. в руководстве по настройке MCP и packages/mcp/README.md.

Для рабочих процессов на основе спецификаций: расширение Spec Kit

Spec Kit ведёт вас от specify к plan, затем к tasks и implement. Чего он не делает — так это не проверяет только что созданный план на соответствие уже принятым вами решениям и не фиксирует новые решения, которые этот план содержит, — поэтому каждая функция начинается с пустого контекста и заново пересматривает решённые вопросы.

@adrkit/spec-kit замыкает этот цикл:

Команда

Назначение

Запись

/speckit.adrkit.context

Подтянуть управляющие решения — включая отклонённые и заменённые — в контекст до планирования

нет

/speckit.adrkit.check

Проверить созданный план на соответствие управляющим им решениям

нет

/speckit.adrkit.draft

Создать каркас черновика ADR из артефакта плана

одна новая запись

Плюс один хук after_plan, который предлагает запустить проверку. Он опционален по построению, и хуки могут вызывать только команды, которые не выполняют запись, — draft намеренно недоступен из любого хука, потому что хук фазы планирования, создающий записи без запроса, фабриковал бы память решений, а не фиксировал её.

Привязан к Spec Kit >=0.13.0,<0.16.0 и протестирован на 0.13.0, 0.14.4 и 0.15.1. Он доступен в каталоге сообщества Spec Kit; настройку см. в README пакета.

Для любого кодинг-агента: плагин

Spec Kit — это один из рабочих процессов. Место, где планы теперь реально пишутся, — внутри кодинг-агента, который понятия не имеет о существовании вашего корпуса решений.

packages/adapters/agent-plugin упаковывает тот же цикл в переносимые компоненты агента — устанавливаемые в GitHub Copilot CLI, Claude Code, opencode и во всё, на что нацелен APM:

copilot plugin marketplace add mbeacom/adrkit && copilot plugin install adrkit@adrkit
/plugin marketplace add mbeacom/adrkit        # Claude Code, then /plugin install adrkit@adrkit
apm install mbeacom/adrkit/packages/adapters/agent-plugin --target opencode

Каждый компонент вызывает CLI adr через оболочку, поэтому установите и его, если ещё не сделали этого, — npm i -g @adrkit/cli или добавьте @adrkit/cli в проект. Компоненты ищут его в $ADRKIT_CLI, затем в ./node_modules/.bin/adr, затем в PATH.

Компонент

Назначение

Запись

decision-memory skill

Обучение циклу «контекст → проверка → черновик», контракту кодов выхода и правилам, которые сохраняют честность записи

нет

decision-backfill skill

Аудит кода, документации, планов и истории на предмет обоснованных кандидатов в ADR, не рассматривая реализацию как ратификацию

нет

decision-checker agent

Сверяет план или diff с корпусом, по одному вердикту на решение

нет

/adr-context [paths...]

Загружает решения, управляющие путями, которые вы собираетесь изменить

нет

/adr-check [paths...]

Проверяет изменение или план на соответствие им

нет

/adr-draft <title-or-candidate-key>

Создаёт один ADR на основе текущего решения или выбранной передачи от backfill

одна новая запись

/adr-queue

Очередь ревью — вопросы, которые ещё открыты

нет

/adr-backfill [paths...]

Формирует реестр покрытия и дедуплицированный отчёт о кандидатах в ADR по унаследованной кодовой базе или корпусу документации

нет

Он намеренно поставляется без конфигурации MCP: Copilot CLI запускает MCP-серверы плагина вне рабочей области и вне любого Git-репозитория, поэтому сервер adrkit завершает работу во время initialize. MCP вместо этого настраивается отдельно для каждого проекта — см. README плагина для настройки под конкретный хост и ADR-0028. Расширение backfill утверждено документом ADR-0034.

Статус: уже сегодня устанавливается из этого репозитория и версионируется независимо от npm-пакетов. Он делает цикл context -> check -> backfill -> draft доступным внутри текущих хостов кодинг-агентов.

Рабочий процесс backfill доступен только для чтения, пока человек не выберет кандидата. См. руководство: маршрутизация источников, пороги доказательств, обработка статусов и передача /adr-backfill → /adr-draft.

Независимо версионируется согласно ADR-0007. Исходный рабочий процесс context/check/draft/queue находится на ступени 1 ADR-0014 — покрытие модульными и контрактными тестами плюс проверка мейнтейнером на установленных хостах. Дополнение backfill в v0.2.0 прошло контрактную и статическую валидацию на хостах и имеет свежий функциональный прогон синтетического потребителя Copilot, подтверждающий сверку кандидатов и отсутствие операций записи. Для плагина не существует постоянного прогона на эталонном репозитории или внешней валидации.

Проблема

Ваша организация принимает решение. Через шесть месяцев никто его не помнит, решение оспаривается заново, а код расходится с тем, о чём договорились. Теперь агенты тоже пишут планы — быстрее, чем кто-либо успевает их рецензировать, и без памяти о том, что уже было решено и отклонено.

Идея

Рассматривайте запись о решении как типизированные данные с markdown-телом и дайте ей одно поле, которое меняет всё, — affects, объявляющее, чем управляет это решение:

---
id: "0042"
title: Use server-side rendering for authenticated routes
status: accepted
reversibility: one-way-door
blastRadius: cross-team
affects:
  - type: path
    pattern: "apps/web/app/\\(authed\\)/**"   # ( and ) are glob syntax — escape them
  - type: package
    pattern: "next@>=16"
---

Теперь инструмент может ответить на вопрос «какие решения управляют этим pull request?» — и поместить ответ туда, где на самом деле принимается следующее решение.

Что он делает

  • adr lint — проверяет записи, находит циклы замещения, обнаруживает решения, которые молча противоречат друг другу. Предупреждает, когда markdown в каталоге корпуса не обнаруживается, поэтому случай «проверено 0 записей» никогда не проходит молча.

  • adr migrate --from madr — принимает существующий корпус MADR на месте, аддитивно, не ломая ваши текущие инструменты. Читает статус, дату и deciders из frontmatter MADR 3.x, пунктов * Status: MADR 2.x и разделов ## Status Nygard. --rename также переименовывает каждый файл в <id>-<slug>.md.

  • adr explain <path> — выводит все решения, управляющие файлом, и объясняет, почему. Решения достигают файла в двух направлениях, и вывод держит их раздельно: сработал собственный шаблон affects записи (via path: src/**), либо сам файл объявил это решение маркером @adr 0012 в комментарии (declared by src/sync.ts:3). Маркеры позволяют affects оставаться узким — только определяющие файлы, — а окружающий код подключается по одной строке, на любом языке, без изменения схемы. Только записи со статусом accepted сообщаются как управляющие; совпавшие предложения и записи со статусами superseded/rejected/deprecated перечисляются отдельно.

  • adr check <files...> — проверяет изменённые записи и перечисляет решения, управляющие набором изменённых файлов, включая входящие объявления @adr. Чтение маркеров ограничено 3000 файлов / 16 параллельных чтений, 64 объявлениями на файл и 10 000 объявлений на пакет; все эти ограничения выводятся в --json; утверждения маркеров и предупреждения сканирования никогда не влияют на код возврата.

  • adr evaluate <proposal> --snapshot <bundle.json> --date YYYY-MM-DD — выполняет детерминированный, не использующий модели Pass 0 над ADR-предложением и неизменяемым автономным пакетом-снимком. Применяет одиннадцать правил рубрики, при доказанных триггерах эскалирует на одного указанного активного человека (или явный unresolved) и возвращает подробный Pass0Report плюс совместимый со схемой evaluationPatch. Он не читает ни модель, ни сеть, ни часы или (в библиотеке) файловую систему и маршрутизирует — он никогда не одобряет, не сохраняет и не пишет.

  • adr queue — выводит очередь операций ARB: предназначенную только для чтения, детерминированную проекцию метаданных review корпуса (уровни, состояние SLA, одобрения, возражения) в виде Markdown или JSON QueueReport v1; а также Action для управляемых задач.

  • CI-комментарий — GitHub Action @adrkit/ci показывает управляющие решения на PR, которые их затрагивают или явно объявляют; совпадения шаблонов отображаются как via, а утверждения маркеров, созданные в PR, — как declared by. Комментарий также различает файлы маркеров, которые не удалось проверить, объявления маркеров, пропущенные из-за предельного лимита безопасности, и утверждения, которые он прочитал, но не смог привязать. Всё это носит рекомендательный характер: такие комментарии никогда не приводят к сбою задания. Он работает только со стандартным GITHUB_TOKEN и деградирует (не вызывая сбоя задания) на токене форка с правами только на чтение.

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

Он никогда ничего не одобряет. Он маршрутизирует, а решают люди.

Используйте оба CI Action с их плавающего мажорного тега (см. Использование в CI):

permissions:
  contents: read
  pull-requests: write

steps:
  - uses: actions/checkout@v4
  - uses: mbeacom/adrkit/packages/ci@v0

Почему не просто MADR — или «Structured MADR»?

frontmatter adrkit — это строгое надмножество MADR, так что это не «вместо MADR» — вы можете перенять существующий корпус на месте с помощью adr migrate --from madr. Различие в том, что происходит после появления записи.

Шаблон — включая более структурированный вариант MADR — стандартизирует то, как вы пишете решение. Он не позволяет:

  • принудительно применять его в CI — adrkit разрешает affects и комментирует управляющие решения на PR, которые изменяют файлы, находящиеся под их управлением;

  • отвечать на вопрос «какие решения управляют этим PR?» — для этого нужен чистый воспроизводимый сопоставитель по типизированным полям affects (ADR-0009), а не проза;

  • давать агенту доступ к «кладбищу» — MCP-сервер только для чтения показывает записи rejected/superseded/deprecated, чтобы агент перестал предлагать их заново.

Схема, которую можно передать шаблону, резолверу, агенту и CI-задаче, — это иной артефакт, чем соглашение о заголовках. В этом вся суть.

Статус проекта

adrkit всё ещё не достиг версии 1.0, но некоторые поверхности уже готовы к использованию. Эта таблица — краткая версия:

Состояние

Поверхность

Что это означает

Доступно сейчас

@adrkit/core, @adrkit/cli, @adrkit/evaluator, @adrkit/mcp

Опубликовано в npm для Node 22+

Доступно сейчас

@adrkit/spec-kit

Опубликовано отдельно для текущих выпусков Spec Kit

Доступно сейчас

adr queue и GitHub Action для управляющих решений

Отчёты очереди и комментарии к PR — часть поставляемого рабочего процесса

Доступно сейчас

плагин агента adrkit

Устанавливается из этого репозитория или маркетплейса; вызывает adr как внешнюю команду

В разработке

Более поздние проходы оценщика

Проходы 1–3 и калибровка остаются проектными целями; Pass 0 — реализованная поверхность оценщика

В разработке

Пакеты каталогов

@adrkit/catalog-envelope и @adrkit/catalog-backstage существуют в рабочем пространстве с версией 0.0.0 и не выпущены

Запланировано

Дополнительные downstream-интеграции

Будущие интеграции будут строиться на текущем типизированном корпусе и модели извлечения только для чтения

Обязательства по дизайну

Они реализованы принудительно, а не являются благими пожеланиями. Каждое ссылается на запись, которая его определила.

Обязательство

Запись

Git — источник истины; каждая автоматическая запись открывает PR

0001, 0004

Схема — строгое надмножество MADR — миграции аддитивны

0002

Чистый клон без учётных данных собирается, тестируется и успешно проходит линтер

0007

Каждая интеграция — опциональный адаптер; ядро не зависит ни от одной из них

0007

Разрешение совпадений — чистая функция — воспроизводимо в CI

0009

Детерминированные проверки выполняются до любого вызова модели

0027

Bun — только зависимость для разработки; опубликованные артефакты работают на Node

0010

Парсеры детерминированы; модели предлагают, но никогда не выполняют разбор

0008

Собственное использование

Каждое решение в этом проекте управляется этим проектом. Первый коммит репозитория — это его собственный корпус решений — см. docs/adr/. Рубрика оценщика тоже версионируется здесь же. Опубликованный оценщик в настоящее время реализует только детерминированный Pass 0; более поздние проходы остаются задокументированными проектными целями, а не выпущенным поведением.

Лицензия

Apache-2.0 — см. LICENSE.

Исключение: содержимое schema/ дополнительно выпускается под лицензией CC0. Схема предназначена для того, чтобы стать общим контрактом; конкурирующие реализации должны иметь возможность принять её вообще без учёта лицензии.

Инструментарий

Собрано с помощью Bun — см. ADR-0010. Bun — только зависимость для разработки. Ничто из опубликованного этим проектом не требует его: CLI, GitHub Action и MCP-сервер ориентированы на Node и проходят дымовое тестирование на Node 22 и 24 в CI.

Вклад в проект

См. CONTRIBUTING.md, включая вводный раздел «Your first PR». Для вклада требуется DCO-подпись, и он должен собираться из чистого клона без настроенных учётных данных.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Read-only MCP server that exposes the agentic-os governance, SDLC, and Quality Engineering methodology to any MCP host. It never writes to your repository and never executes code — it serves the methodology, plans an install, and verifies it, handing any commands back to the host to run.
    7
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    A local, read-only MCP server that provides AI coding agents with structural evidence about a repository, including dependency analysis and impact assessment, while naming the boundary of every answer without any LLM calls.
    21 npm
    Apache 2.0