PMB
Локальная память для вашего AI-агента, занимающегося кодированием.
SQLite — источник истины. Нет облака, нет ключей API, нет повторного объяснения.
Локальная память, наглядно визуализированная. Более 3 800 сущностей и 41 000 связей, фиксируемых автоматически по мере работы.
Сайт · Документация · Быстрый старт · Демо · Зачем PMB · Как это работает · FAQ
Ваш AI-агент забывает всё между сессиями. Поэтому вы заново объясняете одни и те же решения, уроки и ограничения. PMB запоминает их в одном локальном рабочем пространстве и возвращает через MCP — без облака, без API-ключей, без вызова LLM на чтении. И сообщает вам, когда память действительно работает на практике, а не выдаёт «+X%».
⭐ Заслужите звезду репозиторию, если PMB экономит повторное объяснение.
PMB даёт Claude Code, Cursor, Codex и другим агентам, поддерживаемым MCP, настоящую память: решения, принятые на прошлой неделе, уроки, которые вы им дали, личные факты, структура проекта, PDFs. Они выживают после перезапуска, после обновления модели, после смены агента — потому что они живут в локальном рабочем пространстве, которым вы владеете, где SQLite выступает долговременным источником истины, а рядом — восстанавливаемые индексы поиска. Никаких API-ключей. Никакой подписки. Никаких вызовов LLM на чтении. Только локальные файлы.
Quickstart
pip install pmb-ai # 1. установка
pmb setup # 2. определить вашего агента + связать MCP-entry
pmb warmup # 3. предзагрузить модель (первый recall мгновенный)
# 4. перезапустите агента и просто общайтесь — память работает автоматически
pmb stats # 5. посмотреть, что сохранено
pmb recall "auth decision" # 6. поиск памяти из терминала
pmb doctor # 7. проверить, что всё подключено
Вот и всё — ваш агент теперь помнит. Никаких учёток, ключей, ничего не покидает ваш компьютер.
Имя команды: CLI — это
pmb. Черезpipвы также получаете псевдоним
pmb-ai; черезnpm(npx pmb-ai setup) команда становитсяpmb-aiи
устанавливает сначала пакет Python, затем выполняет setup. Это одно и то же средство — используйте то, что вы получили в вашей установке.
Ссылки: pmbai.dev (сайт) · docs.pmbai.dev (документация) · Getting started · Deleting memories.
Демо
Как это ощущается — тот же запрос, но с памятью и без памяти:
▶ Нажмите, чтобы запустить двухминутную настройку
You: fix that LoadGuard pricing bug we hit last Tuesday
Agent: prepare(message="fix LoadGuard pricing bug")
↓ (6 ms)
→ project_context: 12 events about LoadGuard,
4 lessons (incl. "never lower NEGOTIATE/SKIP under 25%"),
3 decisions, 2 open goals
→ active_arcs: "LoadGuard verdict-policy refactor (started Tue)"
→ lessons: 1 directly matches "pricing"
→ recent_activity: 8 commits this week
Looking at src/engine/verdict-policy.ts (you opened it Tuesday
14:32, last changed Wednesday). The pricing bug is on line 142
where the bundle fallback tightened below the rate-floor. Per the
lesson you saved, we never drop the threshold under 25% - restoring
the guard there.
Агент не спрашивал. Он не гадал. Он прочитал свою память за 6 мс и появился уже информированным.
Зачем PMB
-
Локальный подход и нулевая настройка. SQLite держит устойчивую память; переиндексируемые поисковые индексы остаются локальными. Без учётной записи, без API-ключей, телеметрии и облака для доверия.
-
Реально используется. У Hooks для Claude Code / Codex внедряется нужная память до того, как модель подумает — вам никогда не придётся помнить вызвать инструмент.
-
Многоязычность, без настройки. Встраиватель покрывает 50+ языков; запрос на русском найдет факт на английском. Без конфигурации под язык.
-
MCP-native. Один
pmb connectсвязывает Claude Code, Cursor, Codex, Windsurf, Zed, VS Code и другие. -
Быстрый путь чтения. Recall примерно за 35 мс в тепле; записи записываются за менее чем за миллисекунду — без вызова LLM на запоминание.
-
Честное влияние. Панель управления показывает, какие уроки действительно изменили результат, а не просто увеличивают «X%».
-
Ваши данные — открыты.
pmb exportвыгружает всё в Markdown/JSON. Apache 2.0.
Посмотреть память
pmb dashboard запускает локальный веб-интерфейс на порту 8765
для всего того, что PMB запомнил — записано автоматически во время работы. Привязан только к 127.0.0.1, поэтому ничего не покидает ваш компьютер.
Карта — каждую сущность и связь в вашем проекте как живой граф.
Хронология — ваша память как журнал, новости в начале.
Девять вкладок: Map (граф сущностей, живой), Timeline (git-граф по проекту),
Overview, Entities, Arcs (наративные потоки), Lessons (правила с follow-rate, детекция «мертвых» уроков), Duplicates (встроенное слияние),
Performance (задержки по инструментам), Recall (отладка ранжирования).
Что можно сохранять
# Personal facts that change (time-travel: old values archived, never lost)
record_keyed_fact("user", "city", "Warsaw")
# Project structure - symbols, imports, .gitignore-aware
pmb index project .
# Why each file exists + the intent behind every commit (Haiku-summarised, local)
pmb track modules # one-line purpose per indexed file
pmb track changes # new commits: what changed and WHY
# PDFs (research papers, manuals, contracts)
pmb index pdf paper.pdf
pmb index pdf ~/docs --recurse
# Whatever your agent logs as it works: decisions, lessons, completed tasks, goals
PMB не зависит от содержания. Если это текст, который агент позже будет учитывать, PMB запоминает и возвращает его.
Что агент получает обратно
Единый MCP-вызов — prepare(message) — возвращает нужные данные нужного уровня детализации за 4–16 мс:
| Поле | Что это такое |
|---|---|
| project_context | Полный обзор проекта, если сообщение упоминает проект: ключевые факты, уроки (ПРАВИЛА к выполнению), решения, открытые задачи, связанные сущности, нарратив проекта |
| lessons | Процедурные правила, соответствующие запросу, каждое с surface_id, чтобы агент мог подтвердить следование правилу позже |
| recent_activity | Последние 24 часа решений/редактирований/завершённых задач для непрерывности сессии |
| open_goals | В процессе выполнения цели — чтобы агент знал, к чему вы стремитесь |
| active_arcs | Наративные арки, в которых проект в данный момент живёт |
Для всего остального есть recall(query) (гибридный поиск, 35 мс в тепле) и 27 других инструментов в docs/reference/COMMANDS.md.
Как это работает
flowchart LR
A[Your agent] -->|MCP stdio| B[PMB MCP server]
B --> C[Engine]
C -->|read 35 ms| R[Hybrid recall<br/>BM25 + vector + graph + rerank]
C -->|write under 1 ms| W[Async embed queue<br/>SQLite first, vectors later]
R --> D[(SQLite)]
R --> E[(LanceDB)]
W --> D
W --> E
style A fill:#dbeafe,color:#1e3a8a
style B fill:#ede9fe,color:#5b21b6
style C fill:#dcfce7,color:#14532d
- Хранение. Каждый долговременныйEvent хранится в SQLite — источник истины. Индексы в LanceDB рядом. Всё рабочее пространство держится на диске и может быть скопировано или экспортировано в любой момент.
- Recall. BM25 (лексикографический) + плотный вектор (семантика) + граф сущностей + опциональная перекодировка через cross-encoder — объединяется через Reciprocal-Rank-Fusion.
- Записи. Асинхронные записи. Инструмент MCP возвращается менее чем за миллисекунду; вставка в embed + LanceDB выполняются в фоновом потоке.
- Дедупликация. Четыре слоя: точное соответствие текста -> косинус >= 0.92 авто-слияние -> косинус 0.80–0.92 граница (проверка LLM позже) -> ручная проверка на панели управления. Старые значения архивируются, удаляются не полностью; полная история через
keyed_fact_as_of(t). - Многоязычность — без языковых пакетов. Встроенный эмбеддер (
paraphrase-multilingual-MiniLM-L12-v2) покрывает 50+ языков, поэтому запрос на русском находит зафиксированный факт на английском. Детекция намерений опирается на английские семантические якоря, которые работают межъязычно; холодный путь лексики строится на вашем трафике. recall остаётся сильным примерно по 11 языкам (top-3 ≈ 0.9 на оценке из 101 запроса; top-1 = 1.00 для en/fr/pt/ru). См. docs/contributing/adding-a-language.md.
Установка
Вышеприведённый Quickstart — это всё, что нужно большинству пользователей. Другие варианты:
# Из исходников
git clone https://github.com/oleksiijko/pmb.git && cd pmb
python -m venv .venv && source .venv/bin/activate
pip install -e .
pmb warmup # прогреть ~450 МБ embedder один раз
Подключите одного или нескольких агентов (все stdio — сервер запущен как дочерний процесс вашего агента; сетевых действий, портов и токенов нет):
pmb connect claude-code # также: codex · cursor · windsurf · gemini · vscode · zed · opencode · continue
Укажите несколько агентов на одну память:
pmb connect claude-code --workspace personal
pmb connect cursor --workspace personal # оба читают/пишут одну и ту же память
Деление одной памяти между машинами или командой? Это опциональный HTTP-режим с bearer-token авторизацией — см. [docs/guide/TEAM.md]. Не нужен для локального использования.
Запуск тестов? Используйте Python из виртуального окружения:
.venv/bin/python -m pytest
(или
.venv\Scripts\python.exe -m pytestна Windows). Голыйpytestвне виртуального окружения просто сообщает о недостающих пакетахnumpy/fastmcp/typer.
Чит-лист CLI
# Память
pmb stats показывать счётчики и инфо о хранении
pmb recall "query" поиск с полным отладочным выводом
pmb dashboard веб-UI на порту 8765 (граф, настройки, ошибки)
# Ввод данных
pmb index pdf paper.pdf извлечение + блоки + внедрение
pmb index pdf ~/docs --recurse полный каталог
pmb index project . сканировать кодовую базу
pmb track changes резюмировать intent коммитов (почему)
pmb track modules одноуровневое назначение каждого модуля
pmb import chatgpt ~/Downloads/export.json перенос существующей истории
# Continuity & efficiency (opt-in)
pmb resume save записать в .pmb/resume.md (зафиксируйте)
pmb resume install обновлять resume.md в конце каждого раунда
pmb health lessons-impact какие уроки реально влияют на результаты
pmb memory ledger Memory Delta для текущей сессии
# Поддержка
pmb regraph перестроить граф сущностей
pmb consolidate выполнить сонный проход (опционально)
pmb compact архивировать старые события
pmb dedupe устранить пограничные дубликаты
# Hooks (форсированная подача PMB на уровне протокола — без сотрудничества модели)
pmb hooks install claude-code подключить все хуки жизненного цикла
pmb hooks list показать установленное
pmb hooks capabilities окружной механизм, который поддерживает каждый агент
pmb hooks uninstall claude-code удалить их
pmb auto-context "fix bug in PMB" превью per-turn injection
pmb session-restore -m 180 превью восстановления после сжатия
pmb lesson-followcheck --dry-run превью выполнения следования
# Входящее памяти (запись — журнал действий агента)
pmb autowrite --dry-run превью автономной записи для этого раунда
pmb ambient-watch . автономная запись для хостов исключительно MCP (git-обсервер)
pmb forget-auto удалить память, которую слой ambient записал сам
# Конфигурация
pmb config list дефолтный набор ключей (25 ключей, которые вам важны)
pmb config list --pro каждый ключ, включая 80 продвинутых параметров
pmb config set recall.ppr_enabled true включить функцию
pmb connect --rules-only обновить CLAUDE.md только
Пошагово для каждого агента: docs/guide/usage.md. Полная справка: docs/reference/COMMANDS.md.
Hooks - память, которая не ждет, пока её спросит
Сложность памяти агента не в хранении — а в том, чтобы агент начал использовать сохранённое. Мягкие инструкции в файле правил иногда обходят стороной. Поэтому PMB подключает хуки на уровне протокола (pmb hooks install claude-code), чтобы снять зависимость от того, что модель сама вспомнит действовать:
-
UserPromptSubmit -> auto-recall. Каждое сообщение классифицируется (регекс, многоязычность, суб-мс) и соответствующая память — уроки, прошлые решения, попадания recall, обзор проекта — внедряются до того, как модель начнёт думать. Тривиальные сообщения ничего не внедряют.
-
PostToolUse -> ambient observe. Каждый инструмент, который агент использует, добавляется в лёгкий журнал действий (одна запись SQLite, без модели). Читаемые и
lsисключаются; правки, тесты и коммиты сохраняются. -
SessionStart -> session-restore. После свёртки контекста агент восстанавливает «где вы остановились» по тому, что зафиксировано в сессии, вместо того чтобы спрашивать повторно.
-
Stop -> follow-through + ambient auto-write. (a) Проверяет, какие уроки действительно повлияли на действия агента, и помечает их как выполненные — детерминированно. (b) Если агент не вызвал инструмент
record_*, он синтезирует одну запись активности по наблюдаемым действиям — чтобы реальная работа фиксировалась даже при молчании агента.
Просмотр любой из этих функций без агента: pmb auto-context "...", pmb session-restore -m 180, pmb lesson-followcheck --dry-run, pmb autowrite --dry-run.
Ambient memory - запись памяти
Автоматическое Recall устранило проблему чтения; ambient-memory делает то же самое для записи — память фиксирует работу агента, даже если он забыл вызвать record_batch:
-
Согласованно. Если агент уже вызвал инструмент
record_*в этот раунд, ambient остаётся молчаливым; он дополняет пропуск. -
Результат-ориентирован, а не объём. Раунд журнируется только если результаты действительно достигают порога качества (тесты пройдены, ошибка исправлена, развертывание выполнено), а не только по количеству файлов.
-
Честно + обратимо. Каждая запись ambient помечена
source=autowrite, отображается как авто в панели и может быть удалена командойpmb forget-auto. Включено по умолчанию; отключается черезpmb config set autowrite.enabled false. -
Работает на любом хосте. Claude Code (hooks), Codex (
pmb codex-notify), MCP-носители вроде Cursor/Zed/VS Code (git-обсервер,pmb ambient-watch .). Проверьте свой набор черезpmb hooks capabilities.
Синтез по умолчанию — шаблонный (мгновенный, без модели). Включить локальную/API/CLI-обобщённую модельную сводку можно через pmb config set autowrite.synthesizer llm:ollama или llm:openai (есть тайм-аут и запасной вариант — по шаблону).
Цикл самосовершенствования
Каждому surfaced-уроку присваивается surface_id. Факт выполнения поддерживается двумя способами: агент подтверждает через mark_lesson_followed(surface_id, True), и
Hook Stop выводит это из зафиксированной активности. Вкладка Lessons отображает, по каждому правилу: как часто оно показывалось, как часто выполнялось, ★ USEFUL (выполнено >= 2x), ? UNVERIFIED (появлялось, но не подтверждено), и 💀 DEAD только когда правило многократно игнорируется (>= 2). Вы увидите, какие правила помогают, и сможете исключить те, что не работают.
Настройки - 25 важных, 80 незначимых
PMB имеет 105 настраиваемых параметров. 25 ключевых для качества повседневного взаимодействия — это default-tier (pmb config list). Остальное — внутренние веса и экспериментальные флаги, скрытые за --pro, чтобы не перегружать интерфейс. Каждый pro-key доступен через pmb config get и изменяется через pmb config set — скрыты от списка, но не закрыты для продвинутых пользователей.
| Ключ | Значение по умолчанию | Что делает |
|---|---|---|
| recall.top_k | 5 | Сколько результатов возвращает recall |
| recall.bm25_weight | 0.7 | Соотношение BM25 и векторной составляющей (1.0 — чистый BM25) |
| recall.ppr_enabled | true | Диффузия графа в нескольких шагах, управляется намерением |
| recall.keyed_fact_boost | 0.35 | Насколько факты о пользователе выигрывают в персональных запросах |
| recall.rerank | false | Включённый cross-encoder (снижает качество; отключить) |
| embedding.model | paraphrase-multilingual-MiniLM-L12-v2 | Модель векторного представления |
| graph.extractor | regex | regex / spacy / llm:claude / llm:openai / llm:ollama / llm:codex |
| mcp.record_batch_async | true | Асинхронные записи (fire-and-forget) |
| agent.apply_lessons | true | Агент учитывает уроки перед действием |
| dedup.enable | true | Все четыре слоя дедупликации |
| decay.factor_per_day | 0.985 | half-life важности |
| chat.model | haiku | Модель по умолчанию для pmb-chat |
Числа
| Recall p50 / p95 warm | 35 мс / 110 мс |
| prepare(message) warm | 4–16 мс |
| record_batch_async | Конфиденциально |
-
По умолчанию 100% офлайн. Ни одного сетевого вызова из движка, ноль телеметрии — сервера PMB нет.
-
Рабочее пространство = каталог под
~/.pmb/<name>/. Скопируйте в Dropbox, добавьте в git, перенесите на USB-накопитель — как вам удобнее. -
Секреты автоматически редактируются в момент записи (ключи OpenAI / Anthropic / AWS / Stripe / GitHub; конфигурируемо).
-
Лицензия Apache 2.0. Фанаты и форки приветствуются.
FAQ
Взывает ли PMB к LLM? При чтении — никогда. При записи — по умолчанию тоже нет. По желанию: pmb consolidate может запустить локальный Ollama, Claude CLI, Anthropic или OpenAI — чтобы записать короткие размышления — по выбору.
А как насчёт цены? Бесплатно. Нет сервиса PMB.
Нужно ли агенту знать о PMB? После pmb connect правила автоматически добавляются к CLAUDE.md / AGENTS.md. Дефолт-профиль включает 10 основных MCP-инструментов (включая паттерн чтения prepare()); более широкие профили доступны для инференса и администрирования.
Замедлит ли агент работу? Инструменты возвращаются за множественные миллисекунды во всём, кроме recall (35–110 мс в тепле), что заметно быстрее восприятия человеком.
Может ли два агента делить одну память? Да — направьте их к одной рабочей памяти. SQLite WAL + тайм-аут на запись 10 секунд обеспечивают конкурирующие записи.
Можно ли удалить факт? pmb forget <ulid> архивирует его (исключается из recall, восстанавливаемо). Жёсткое удаление: pmb forget <ulid> --hard.
Под Windows? Да — протестировано на Windows 11, macOS 14, Ubuntu 22.04. Кириллица в путях и кодировке консоли поддерживаются.
PDF-ы / код / Markdown? pmb index pdf paper.pdf, pmb index project ., pmb import markdown ~/notes/, pmb import chatgpt path.json.
Холодный старт медленный. Первый recall загружает модель embedder (~3 с). Запустите pmb warmup один раз или пусть поток пред warmup работает в фоновом режиме.
Дорожная карта? См. docs/ROADMAP.md: резервирование litestream, опциональная облачная синхронизация (BYO-бакет), индексирование проекта tree-sitter, OCR изображений.
Вклад
Проблемы и пулл-запросы приветствуются. У нас один полнорабочий мантейнер; пожалуйста, откройте обсуждение перед крупным изменением, чтобы согласовать направление.
git clone https://github.com/oleksiijko/pmb.git && cd pmb
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest # полный набор тестов, ~4 минуты
pytest -k recall # быстрая подвыборка, ~12 с
Команды для разработки
bash scripts/test.sh # весь набор тестов (CI-эквивалент)
bash scripts/test.sh tests/recall # подмножество (любые args pytest)
bash scripts/codeql_local.sh # локальная CodeQL-генерация безопасности
bash scripts/install-dev-hooks.sh # pre-commit хук: ruff + CodeQL перед каждым коммит
scripts/codeql_local.sh автоматически устанавливает пакет CodeQL при первом запуске и запускает тот же набор тестов, который CI использует, чтобы локально поймать проблемы безопасности. Применение хуков через git commit --no-verify (или пропуск скана через SKIP_CODEQL=1).
Лицензия: Apache 2.0.