decision-graph
decision-graph
Английский · Tiếng Việt
Память решений для кодовых баз, над которыми работают ИИ-агенты.
Граф кода говорит вам, что делает код. decision-graph говорит вам, почему он такой — когда появилось бизнес-правило, кто его решил, какие альтернативы были отклонены и действует ли решение до сих пор.
git blame даёт вам сообщение коммита. Он не сообщает, что технический директор клиента попросил второй уровень одобрения на встрече, что отдельный модуль рассматривался и был отклонён как непригодный для слияния, или что порог был снижен шесть месяцев спустя кем-то другим.
Не зависит от языка и фреймворка. Работает в любом репозитории.
Почему
Боль острее всего, когда один базовый продукт расширяется для каждого клиента — но она проявляется везде, где накапливается бизнес-логика:
Агент «улучшает» правило, которое было намеренно написано так для одного арендатора.
Никто не помнит, является ли странная ветка ошибкой или требованием.
Один и тот же отклонённый подход предлагается снова каждые несколько месяцев.
Решения живут в тредах Slack, комментариях к тикетам и головах людей.
ИИ-агенты усугубляют это, потому что у них нет неявной памяти о последних шести месяцах встреч — но они будут следовать письменной записи, если она существует.
Related MCP server: MCP Memory Server
Принципы проектирования
Markdown — источник истины. Один
.md-файл на решение, в git, проверяемый в PR.SQLite — только индекс. Удалите
decisions/_index/и пересоберите в любое время.Агенты не могут выдумывать
decided_by. Агент может создать толькоdraft; продвижение доactiveтребует участия человека.Запись — побочный эффект кодирования, а не обязанность, о которой нужно помнить — хуки подсказывают в нужный момент.
Обнаружение читает git, а не события инструментов. Правки, сделанные с помощью
sed, heredoc,git applyили обычного редактора, обнаруживаются так же, как и вызовы инструментовEdit/Write.
Установка
Пока нет на PyPI — устанавливайте прямо с GitHub:
uv tool install "decision-graph[mcp] @ git+https://github.com/vietqtran/decision-graph"# pipx
pipx install "decision-graph[mcp] @ git+https://github.com/vietqtran/decision-graph"
# one-off, no install
uvx --from "git+https://github.com/vietqtran/decision-graph" decision-graph --help
# local development
git clone https://github.com/vietqtran/decision-graph && cd decision-graph
uv venv && uv pip install -e ".[mcp]"Требуется Python 3.10+ и сборка SQLite с FTS5 (стандартно на macOS, Debian/Ubuntu и официальных образах Python).
Быстрый старт
cd /path/to/your/repo
decision-graph init
decision-graph add --scope acme --module deals/approval \
--title "Second approval tier for deals over 500M" \
--file src/approval.py --tag override-base --stdin < body.md
# a human confirms who decided — the agent cannot do this step
decision-graph confirm acme-2026-08-26-second-approval-tier --by "Jane Doe (CTO, Acme)"
decision-graph search "two-tier approval" --scope acme
decision-graph history src/approval.py # every decision that touched this file
decision-graph overlay acme # how acme differs from base, and whyОсновная концепция: scope
scope — это ось, разделяющая контексты: клиент, линейка продуктов, команда или _base для решений, применимых везде.
Фильтрация по scope происходит до полнотекстового ранжирования, что предотвращает проникновение правил одного арендатора в ответы о другом. В репозитории, обслуживающем многих клиентов, это самое важное поле.
Структура
decisions/
_template.md
_base/ # applies to every scope
acme/2026-08-26-approval.md
viettel/2026-05-20-inventory.md
_index/decisions.db # generated — gitignored
.decision-graph.yml # per-repo watch/ignore patternsFrontmatter записи:
id: acme-2026-08-26-second-approval-tier
scope: acme
module: deals/approval
title: "Second approval tier for deals over 500M"
status: active # draft | active | superseded | deprecated
lifecycle_stage: maintenance # design | dev | uat | golive | maintenance
supersedes: acme-2026-03-12-single-tier
decided_by: "Jane Doe (CTO, Acme)"
requested_by: "John Smith (PM)"
decided_at: 2026-08-26
linked_files: [src/approval.py]
linked_commit: 8f3a2c1
session_id: abc-123 # agent session that produced the change
ticket: JIRA-482
tags: [approval, override-base]Тело следует decisions/_template.md: Контекст / Рассмотренные альтернативы / Решение / Влияние / Открытые риски.
Рассмотренные альтернативы важнее для агентов, чем для людей — именно это мешает агенту повторно предлагать уже отклонённый подход.
supersedes связывает записи в цепочку вместо их удаления, поэтому аудиторский след сохраняется.
Поиск
Сначала фильтры по метаданным (scope, module, status, lifecycle_stage, file, tag), затем ранжирование SQLite FTS5. Диакритика сворачивается, поэтому duyet don hang соответствует Duyệt đơn hàng.
decision-graph search "approval" # active decisions only, by default
decision-graph search --scope acme --status any
decision-graph search --file src/approval.py
decision-graph search "pricing" --tag override-base --jsonИнтеграция с агентами
Какой триггер использовать
Ситуация | Триггер |
Claude Code работает на той же машине, что и репозиторий | Хуки Claude Code — могут блокировать, самые сильные |
Claude Code работает в другом месте (SSH / VM / удалённо) | Git-хук — напоминает, не может блокировать |
Люди коммитят без агента | Git-хук + |
Установка обоих допустима; каждый замолкает, как только решение записано.
Хуки Claude Code
decision-graph hooks install --target /path/to/repoPostToolUse(Edit|Write|MultiEdit)записывает, какие файлы затронула сессия.Stopпроверяет git и эту запись. Если бизнес-релевантные файлы изменились и решение не было записано, он возвращаетdecision: "block"с инструкциями — агент должен действовать, а не завершать работу.
У агента есть ровно два способа выйти:
decision-graph skip --session <id> --reason "renamed variables only"
decision-graph add ... --session <id> # then ask the human, then confirmstop_hook_active учитывается, поэтому циклов не возникает.
Устанавливайте хуки там, где реально работает Claude Code, а не там, где живёт код. Если вы запускаете Claude Code на VM и только проксируете shell-команды на машину с репозиторием,
.claude/settings.jsonэтой машины никогда не читается — используйте git-хук.
Git-хук
decision-graph hooks install --git --target /path/to/repoУстанавливает .git/hooks/post-commit, вызывающий decision-graph remind. Он никогда не блокирует коммит. Поскольку агенты запускают git через свою оболочку и читают stdout, напоминание всё равно попадает в контекст агента.
Он остаётся молчаливым, как только решение связывается с этим коммитом.
MCP-сервер
Одна запись, объявленная один раз на уровне пользователя — сервер следует за репозиторием, открытым в сессии, поэтому нет пути, который нужно синхронизировать:
{
"mcpServers": {
"decision-graph": {
"command": "uvx",
"args": ["--from", "git+https://github.com/vietqtran/decision-graph",
"decision-graph-mcp"]
}
}
}Он спрашивает клиента, в каком каталоге работает сессия (MCP roots), и при отсутствии ответа использует рабочий каталог. Репозитории без каталога decisions/ пропускаются, а не угадываются. Добавьте --path /path/to/repo только для привязки сервера к одному репозиторию.
Инструменты: search_decisions, get_decision, get_decision_history, get_decision_chain, get_overlay_map, list_scopes, add_decision.
См. docs/MCP.md.
Фильтрация шума
Не каждый коммит — бизнес-решение. Опечатки и чистые рефакторинги не должны создавать записи.
По умолчанию игнорируются тесты, lock-файлы, node_modules, результаты сборки, отчёты о покрытии, ассеты и i18n-файлы. Сузьте дальше для каждого репозитория:
# .decision-graph.yml
watch:
- "src/domain/**"
- "app/services/**"Пустой watch означает, что учитывается всё, что не в ignore.
CI
decision-graph check --gitВыдаёт {"needs_decision": bool, "watched_files": [...], ...} — подключите к предупреждению в PR.
Документация
Разработка
uv venv && uv pip install -e ".[mcp]"
.venv/bin/python -m unittest discover -s testsНет зависимостей времени выполнения, кроме PyYAML; mcp — опциональный дополнительный пакет.
Аналоги
decision-graph — вариант ADR. ADR фиксируют архитектурные решения для людей; этот инструмент фиксирует бизнес-решения, для каждого арендатора, в форме, доступной для запросов агентов — с автоматическим захватом и человеческим подтверждением.
Лицензия
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Persistent memory for AI agents. Search and store durable facts, preferences and decisions.
Universal memory for AI agents and tools. Save, organize and search context anywhere.
Hosted persistent memory with semantic search, importance and TTL for AI agents.
Persistent memory for AI agents. Search, store, and recall across sessions.
Related MCP Servers
AlicenseNot gradedqualityCmaintenanceProvides persistent memory for AI coding assistants, storing and retrieving architectural decisions, patterns, and solutions across sessions using semantic search, while also offering git integration for commit messages and code expertise mapping.MIT- AlicenseNot gradedqualityDmaintenanceProvides long-term memory for AI coding agents, enabling them to remember, search, and organize information across sessions and platforms like Claude Code, ChatGPT, and Cursor.189MIT
- FlicenseNot gradedqualityDmaintenanceEnables storing, querying, and managing decision traces with semantic search using Voyage AI embeddings and ChromaDB. Supports outcome tracking and category filtering for software development decisions.
- AlicenseNot gradedqualityBmaintenanceProvides persistent, searchable memory and knowledge capture for AI-assisted development, enabling agents to retain decisions, bugs, and patterns across sessions and projects.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/vietqtran/decision-graph'
If you have feedback or need assistance with the MCP directory API, please join our Discord server