API VEGA

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_k5Сколько результатов возвращает recall
recall.bm25_weight0.7Соотношение BM25 и векторной составляющей (1.0 — чистый BM25)
recall.ppr_enabledtrueДиффузия графа в нескольких шагах, управляется намерением
recall.keyed_fact_boost0.35Насколько факты о пользователе выигрывают в персональных запросах
recall.rerankfalseВключённый cross-encoder (снижает качество; отключить)
embedding.modelparaphrase-multilingual-MiniLM-L12-v2Модель векторного представления
graph.extractorregexregex / spacy / llm:claude / llm:openai / llm:ollama / llm:codex
mcp.record_batch_asynctrueАсинхронные записи (fire-and-forget)
agent.apply_lessonstrueАгент учитывает уроки перед действием
dedup.enabletrueВсе четыре слоя дедупликации
decay.factor_per_day0.985half-life важности
chat.modelhaikuМодель по умолчанию для pmb-chat

Числа

Recall p50 / p95 warm35 мс / 110 мс
prepare(message) warm4–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.