AI Council — self-hosted платформа для команды разработчиков. Она сама разбирает репозитории в граф кода: стек, структуру, зависимости и циклы, вызовы, данные, архитектуру, DDD, паттерны, стиль, смеллы и качество по ISO 25010. Над графом лежит база знаний проекта — решения, заметки, диаграммы и журналы изменений; каждая запись привязана к месту в коде и к ветке и приходит агенту, когда он трогает нужный файл. Отдельно живут конвенции: правила трёх областей — к сущностям кода, к путям и ко всему проекту — с уровнями MUST/SHOULD, состояниями и проверкой перед правкой и по диффу. Вокруг этого собраны ревью с публикацией в MR, тикеты, задачи и компании с ролями и лицензией. Статический анализ кода модель не использует, но без модели остаётся только он: ревью, ревью знаний, AI-чат и рабочие пространства идут через хостовый воркер, бридж и вендорский CLI/OAuth. Модель живёт на хосте, а не в стеке Council.
Работать с Council можно двумя способами. На машине разработчика Claude Code подключается к нему через MCP и хуки: правила проекта приходят к каждому сообщению, контекст файла — на Read/Edit/Bash, а в конце — чек-лист. В рабочем пространстве задача идёт на VM в изолированном sysbox-контейнере, живёт днями и ведётся человеком из веб-интерфейса: от анализа и диффа до коммита, push и MR.
agent-memory-mcp — один Go-бинарник, который работает и как MCP-сервер, и как CLI. Он даёт агенту три вещи: типизированную долговременную память в SQLite, RAG-поиск по документам репозитория (docs, ADR, RFC, changelog, runbook, postmortem, CI, Helm, Terraform, K8s) и слой обслуживания знаний — консолидацию сессий, стюард-сканы, верификацию, канонический слой, временную модель и граф знаний. 50 MCP-инструментов, при группировке — 8; три хука Claude Code; сессионный трекер; два SQLite-файла и ноль внешних БД. MIT.
Это самый близкий к слою знаний Council из сравнённых проектов: у него есть доверие, канонический слой, очередь ревью, дрейф, верификация, временная валидность и обслуживание знаний. Но это банк знаний проекта, а не понимание кода: он не строит граф символов, не держит конвенции, не ревьюит дифф, не ведёт задачи на VM и не знает компаний и ролей.
| AI Council | agent-memory-mcp | |
|---|---|---|
| Кто читает код | Council сам: разбирает репозитории и строит граф. Модель при анализе не вызывается | Никто: графа кода нет. RAG индексирует документы и конфиги, память хранит знания о проекте, repo_read/repo_search читают файлы как текст. Символов, вызовов, зависимостей и архитектуры нет. Граф знаний — это триплы subj → rel → obj о предметной области, а не о коде |
| Когда | При создании проекта, при push в main (опрос), по кнопке, ночью; после правки файла агентом пересчитываются файл и зависимые | RAG-индекс — при index/index_documents, на старте (автоиндексация) и по watcher раз в 5 минут; память — в момент store_memory/инженерных инструментов, хуков и close_session; стюард — по политике manual/scheduled/event_driven, archive sweep — раз в час |
| Что извлекает | Слои L0–L10: стек, структура, зависимости и циклы, метрики и вызовы, данные (ORM, DDL), архитектура и запрещённые зависимости, паттерны, стиль, DDD, связь файлов по правкам, смеллы, качество ISO 25010, диаграммы | Память: тип (episodic/semantic/procedural/working), инженерный тип (decision/runbook/incident/postmortem/caveat/migration-note/procedure/dead_end), теги, контекст, importance, trust-метаданные, временные поля, слой осаждения, эмбеддинг. RAG: чанки документов с breadcrumbs и source type. Граф: триплы. Кода, его структуры и метрик нет |
| Чего нет | — | Графа кода, зависимостей, вызовов, архитектурных слоёв, DDD, паттернов, стиля, смеллов, ISO 25010 и диаграмм архитектуры. RAG видит документацию и конфиги, а не AST исходников |
| Языки | Python, PHP, TypeScript, JavaScript, Java, Kotlin, C#, C, C++ — с полным разбором слоёв | Язык кода не разбирается. RAG классифицирует типы документов и конфигов (Markdown, ADR, RFC, changelog, runbook, postmortem, CI, Helm, Terraform, K8s), а не языки программирования |
| Несколько репозиториев | Проект из нескольких репозиториев с общим графом | Один MCP_ROOT и allowlist MCP_ALLOW_DIRS; один банк и один индекс на корень. Общего графа между репозиториями нет |
| История | Рёбра версионируются после каждого прогона; architecture_as_of — архитектура на дату | Истории кода нет. У знаний есть временная модель: valid_from/valid_until, superseded_by, replaces, recall_as_of, knowledge_timeline |
| Поиск | Поиск по смыслу и regex, find_usages, find_path, граф зависимостей, похожие реализации; ask_question — выдержки из базы без пересказа моделью | Два поиска: recall памяти (центрированный косинус + trust + importance + freshness + sediment) и гибридный RAG (semantic + BM25, weighted fusion или RRF, опциональный реренкер, cap 1 чанк на документ). Плюс multihop по графу триплов. Поиска по символам кода нет |
| AI Council | agent-memory-mcp | |
|---|---|---|
| База знаний | Решения, заметки, диаграммы Mermaid, журналы изменений. Каждая запись привязана к коду и приходит агенту, когда он трогает нужный файл | Сильный банк знаний проекта: типизированная память, инженерные сущности (decision, runbook, incident, postmortem, caveat, migration-note, procedure, dead_end), граф триплов, канонический слой, project bank с 8 представлениями, очередь ревью. Записи не привязаны к позициям в коде; связь с кодом — через упоминания путей, которые проверяет drift scan |
| Актуальность | Запись держит место в коде на своей ветке и уходит на перепроверку, когда меняется код под ней, сама запись, появляется похожая или ветку сливают. Ревьюер обязан привести цитату; итог — пометка | Многослойная свежесть: last_verified_at и freshness_score, канонический слой, стюард-сканеры stale/expired working, drift scan по ссылкам на файлы (source_missing, source_changed, stale_unverified), verification_candidates, verify_entry, очередь ревью, временная валидность. Проверка идёт по файлам и структурным сигналам, а не по позициям в коде с цитатой ревьюера |
| Ветки | Знания и граф хранятся по веткам; агент видит свою ветку, родителя и слитое; при слиянии запись переезжает | Знаний по веткам нет: один банк на корень. Временная модель описывает версии знания, а не ветки git |
| Правила | Конвенции трёх областей: к сущностям кода, к путям (действуют и на ещё не созданный файл), ко всему проекту. MUST/SHOULD, состояния «черновик», «отставлено», «удалено». Проверка перед правкой и по диффу | Движка конвенций нет. Есть steward policy (пороги дублей/ stale/ canonical/working TTL) — это политика обслуживания знаний, а не правила кода. Уровней MUST/SHOULD, привязки к сущностям и путям, проверки диффа нет |
| Как доходит до агента | Хуки Claude Code: правила проекта к каждому сообщению, широкий канал перед действием, контекст файла на Read/Edit/Bash, чек-лист в конце; гейт «сначала база» | Три хука Claude Code: SessionStart → context-inject (recent knowledge и pending summaries в системный промпт), PreCompact → checkpoint (транскрипт, Jaccard-дедуп), SessionEnd → auto-capture (sessionclose extract → plan → apply). Плюс session tracker по MCP-вызовам. Гейта «сначала база» нет |
| MCP | Сервер: около 60 инструментов, профили, режимы, XML с бюджетом | 50 инструментов; при MCP_TOOL_GROUPING=true — 6 групп и 2 одиночных (8 вместо 50), при этом tools/call всегда принимает и группу, и legacy-имя. Есть HTTP /mcp, /health, /console |
| Перенос | Экспорт и импорт знаний пакетом, копирование между проектами | export даёт переносимый JSON только памяти; индекс пересобирается index. Пакета знаний с импортом нет. Бэкап — каталог целиком или sqlite3 .backup, потому что WAL |
| AI Council | agent-memory-mcp | |
|---|---|---|
| Требования | Трассировка тестов к требованиям по меткам: покрытие и разрывы; «без теста» — тристейт, а не requirements-менеджмент | — |
| Тикеты | Jira, GitHub Issues, Redmine: чтение, разбор в знания, совет по тикету из графа | — |
| Работа на своей машине | Агент — Claude Code разработчика; Council подаёт контекст и правила через MCP и хуки; ревью локального диффа, разбор диффа, проверка диффа на правила | Это единственный режим: solo stdio, MCP, CLI, хуки Claude Code, Homebrew-сервис на macOS. Shared HTTP — для доверенной команды, но без ролей |
| Рабочее пространство | Задачи на VM в sysbox-контейнере, живут днями; человек ведёт из чата; наставник; дифф → коммит → push → MR | Рабочего пространства нет. Есть жизненный цикл задачи: end_task, sweep_archive, archive sweep по tasks/archive, но задача не живёт на VM и не ведёт дифф к MR |
| PR | Ревью с публикацией в MR (GitHub, GitLab, Bitbucket) | — |
| Процесс | Машина состояний задачи: создана → анализ → в работе → MR → закрыта; содержимое шага задаёт человек | Процесса задачи нет. Есть петля знания: capture → sessionclose extract → plan → apply → review queue → steward/drift/verify → canonical → recall. Archive sweep закрывает задачи, но не ведёт их |
| AI Council | agent-memory-mcp | |
|---|---|---|
| Code review | Отдельный сервис: смотрит изменившееся, вердикт по каждому файлу, второй проход, публикация в MR без дублей; ревью знаний отдельно | ИИ-ревью кода нет. Есть ревью знаний: очередь review_queue_item, resolve_review_item, steward_inbox_resolve, verify_entry, конфликты, дрейф. Это проверка знаний, а не диффа |
| Модели | Модель обязательна: на хосте два процесса через OAuth вендора: AI-чат и шесть фоновых задач (ревью, ревью знаний, разбор тикетов и др.). Без модели остаётся только статический анализ кода. | LLM в консолидации нет: sessionclose и стюард — детерминированные эвристики. Эмбеддинги нужны для семантики: Jina → OpenAI → llama.cpp → Ollama, режим local-only выключает hosted. Опциональный triple extractor — единственный LLM-вызов, выключен по умолчанию. Реренкер Jina опционален и выключен |
| Агенты | Claude Code (хуки, MCP); MCP доступен любому клиенту | MCP-клиенты и Claude Code через три хука; CLI; HTTP JSON-RPC. Своего агентского runtime нет |
| Оценка | Телеметрия каждого вызова MCP и хука; повторный поиск агента — признак плохого первого ответа | 692 теста, 14 бенчмарков; в базе зафиксированы go build ./... и тесты девяти основных пакетов (2026-10-26). Eval-контур (make eval, make eval-recall) не запускался. Измеренные дефолты: mean-centering Hit@5 0.6232 → 0.7217; возрастной decay выключен (0.1942 против 0.7217); cap 1 чанк на документ R@5 0.5104 → 0.8676, nDCG 0.6184 → 0.8927; RRF не двигает Hit@5/MRR |
| Гарантии | Гейты тестов, ревью, конвенции | CI: build → make vet → go test -race ./... → make eval → GoReleaser deprecation gate; go vet с тегами eval и corpus; 692 теста; контракт TestDispatchTableCompleteness проверяет ровно 50 инструментов; MCP Registry через GitHub OIDC |
| AI Council | agent-memory-mcp | |
|---|---|---|
| Пользователи | Компании → участники → роли (можно на проект) → права. API-ключи компании. Данные разделены: запрос без компании отвергается. Лицензия и лимиты мест | Один пользователь, локально. Shared HTTP — один bearer-токен на инстанс, без пользователей, ролей, rate limit и mTLS. Компаний и лицензии нет |
| Интерфейс | Около 50 страниц: код, граф, ветки, качество, правила, ревью, знания, тикеты, задачи, MCP Live, администрирование, System Health | MCP 50 инструментов (8 в групповом режиме), CLI, три хука Claude Code, HTTP /mcp, /health, /console (статическая страница), project bank view с 8 представлениями. Своего UI нет |
| Мониторинг | Телеметрия каждого вызова MCP и хука без PII; около 22 правил Prometheus с тестами; System Health, трассировка | stats JSONL, memory_stats, steward_status, drift_scan, RetrievalPath и Degraded, логи. Prometheus и System Health нет |
| Самовосстановление | Сверка Temporal с базой, уборка осиротевших данных, удаление проекта пачками, ночной бэкап и проверка восстановления, ретенция телеметрии | WAL и foreign-write watcher (перезагрузка кэша по data_version), index_state=dirty и переиндексация, orphan cleanup, reconcile inbox, archive sweep, документированный backup/restore. Ночного бэкапа и проверки восстановления нет |
| Хранилище | Neo4j, Qdrant, PostgreSQL по сервисам, Temporal, NATS, Redis | Два SQLite-файла: memories.db (память, триплы, стюард) и vectors.db (чанки, индекс). Внешних БД нет; векторный поиск — линейный косинус по RAM-копии |
| Изоляция | Sysbox-контейнер на задачу, одноразовые учётные данные для push, ревьюер знаний только на чтение, проверка прав в одном шлюзе, защита от SSRF | PathGuard (root + allowlist, без .. и абсолютных путей), bearer на non-loopback, constant-time сравнение, redaction секретов, local-only эмбеддинги. Песочницы нет; Docker работает root; prompt injection через сохранённый контент не смоделирован |
| Поставка | Дистрибутив для self-hosted установки или SaaS; на машине разработчика — MCP и хуки | Go-бинарник, Docker Compose с Ollama sidecar и nginx TLS-прокси, Homebrew + launchd, GoReleaser, MCP Registry; MIT |
| Лицензия | Закрытая | MIT |
agent-memory-mcp — самый близкий к слою знаний Council из сравнённых проектов. У него есть то, чего нет у большинства локальных инструментов: доверие, канонический слой с provenance-гейтом, очередь ревью, стюард со сканерами и inbox, drift scan, верификация, временная валидность, осаждение и граф знаний. Но он не понимает код: графа символов нет, RAG читает документацию и конфиги, конвенций и ревью диффа нет, задач на VM и команды нет.
Где сильнее agent-memory-mcp:
resolve_review_item и steward_inbox_resolve;valid_from/valid_until, superseded_by, replaces, recall_as_of, knowledge_timeline;Где сильнее Council:
merge_knowledge/supersede_knowledge сохраняют историю. У agent-memory есть trust-метаданные и temporal validity, но привязки к позиции в коде и проверки против кода нет.architecture_as_of показывает архитектуру на дату, рёбра версионируются после каждого прогона; SonarQube забирается как внешний анализатор. agent-memory хранит знания, но не архитектуру проекта.Могут ли работать вместе. Да, и это разные слои. agent-memory-mcp — банк знаний проекта и RAG по документам для агента; Council — граф кода, конвенции, ревью и задачи. Оба являются MCP-серверами, поэтому один агент может подключить оба. Пересечение — знания и очередь ревью: agent-memory хранит решения, runbook'и и уроки сессий, Council — знания, привязанные к позициям в коде, и правила команды. Автоматической интеграции нет; практическая связка — agent-memory для «что мы знаем и что обсудили», Council для «где это в коде, какие правила действуют и что говорит ревью». Дублировать очередь ревью в двух системах не стоит: у каждой должен быть свой предмет.
На живом демо покажем работу платформы на реальном проекте, а не шаблонную презентацию.