Дата публикации
ai_products

Stash: открытый «мозг» для любых ИИ‑агентов вместо блокнотной памяти ChatGPT и Claude

Что нового

Stash — это открытый слой памяти для ИИ‑агентов, который пытается дать им не просто контекст, а постоянный «опыт жизни». Главные новшества:

  • Открытый исходный код и Apache 2.0: можно развернуть у себя, доработать, встроить в свои агенты.
  • MCP‑совместимость по умолчанию: Stash говорит на протоколе MCP, так что его можно подключить к Claude Desktop, Cursor, OpenCode, локальным LLM и любому другому MCP‑клиенту.
  • Хранение на PostgreSQL + pgvector: нормальная база, нормальный векторный поиск, без собственных закрытых форматов.
  • Иерархические пространства имён (namespaces): память раскладывается по «папкам» вида /users/alice, /projects/restaurant-saas, /self и их подпапкам, с рекурсивным чтением.
  • Полноценный когнитивный пайплайн из 9 стадий:
    1. Episodes — сырые события.
    2. Facts — сжатые факты.
    3. Relationships — связи между сущностями.
    4. Causal Links — причинно‑следственные пары.
    5. Patterns — абстрактные паттерны.
    6. Contradictions — поиск противоречий и пересчёт уверенности.
    7. Goal Inference — отслеживание прогресса по целям.
    8. Failure Patterns — выделение повторяющихся ошибок.
    9. Hypothesis Scan — автоматическая проверка гипотез на новом контенте.
  • 28 MCP‑инструментов: от простого remember/recall до работы с целями, неудачами, гипотезами, причинно‑следственными цепочками и противоречиями.
  • Автономный обучающий цикл: можно запустить агента, который каждые 5 минут сам вспоминает контекст, исследует тему, формирует выводы, консолидирует знания и «засыпает» до следующего запуска.
  • Self‑model агента: отдельный namespace /self с тремя файлами‑областями — capabilities, limits, preferences. Агент хранит знания о себе и опирается на них при планировании.
  • Поддержка любых источников моделей через OpenAI‑совместимый API: OpenRouter (сотни моделей, в том числе GPT, Claude, Gemini, Mistral), локальные движки вроде Ollama, vLLM, LM Studio, llama.cpp‑серверы, Groq и другие.
  • Чёткая работа с размерностью эмбеддингов: переменная STASH_VECTOR_DIM в .env задаёт размерность векторов для pgvector и не может меняться после инициализации базы.

Из конкретных чисел:

  • 28 MCP‑инструментов в комплекте.
  • 6 основных стадий пайплайна + 3 новых (Goals, Failures, Hypotheses) = 9 шагов обработки памяти.
  • Примеры конфигураций показывают работу с размерностями эмбеддингов 768 и 1536.

Как это работает

Stash сидит между вашим ИИ‑агентом и внешним миром. Агент общается с пользователем, сервисами, API. Stash наблюдает всё это, сохраняет и структурирует опыт.

Модель работы с памятью

  1. Episodes — сырые события.

    Каждый запрос пользователя, ответ агента, важное действие или результат — отдельный эпизод. Это «чёрновики» памяти, которые Stash складывает в Postgres и индексирует векторно через pgvector.

  2. Facts — сжатые факты.

    LLM‑«reasoner» периодически обрабатывает пачки эпизодов и превращает их в факты с уровнем уверенности. Это похоже на конспект бесконечной переписки.

  3. Relationships — граф сущностей.

    Из фактов Stash выделяет сущности и связи между ними. Получается граф: кто с кем связан, какие объекты встречаются в каких контекстах.

  4. Causal Links — причинно‑следственные связи.

    Stash строит пары вида «если X, то Y». Это позволяет агенту не просто помнить, что произошло, а понимать, что к чему привело.

  5. Patterns — абстракции.

    На основе фактов и связей Stash формирует более общие паттерны: типичные сценарии, устойчивые предпочтения, повторяющиеся шаги.

  6. Contradictions — самопроверка.

    Когда новые факты противоречат старым, Stash помечает конфликт и снижает уверенность в устаревших данных. Это защита от «зацементированных» ошибочных выводов.

  7. Goal Inference — цели.

    Stash автоматически отслеживает, какие факты относятся к активным целям, фиксирует прогресс и подсвечивает, где действия шли вразрез с целями.

  8. Failure Patterns — неудачи.

    Если агент повторяет ошибку, Stash видит, что сценарий уже приводил к провалу, и выносит это в отдельные факты. Агент получает шанс не наступать на те же грабли.

  9. Hypothesis Scan — гипотезы.

    Stash хранит открытые гипотезы и при появлении новых эпизодов автоматически проверяет, подтверждают они гипотезу или опровергают.

Всё это крутится на связке PostgreSQL + pgvector. Stash не тянет собственный проприетарный стор, а использует стандартную реляционную базу с векторным расширением.

Namespaces: память как файловая система

Stash делит память на пространства имён, похожие на дерево папок:

  • /users/alice — кто такой пользователь, его привычки и предпочтения.
  • /projects — все проекты.
  • /projects/restaurant-saas — конкретный проект: решения, фичи, цены.
  • /self — знания агента о самом себе.

Ключевые принципы:

  • Рекурсивное чтение: запрос к /projects автоматически захватывает /projects/stash, /projects/mobile-app и другие подпапки.
  • Точный запись: запись всегда идёт в один конкретный namespace, чтобы не смешивать, например, пользователя и проект.
  • Жёсткое разделение: пользовательская память не смешивается с памятью проекта, а self‑модель агента живёт отдельно в /self.

MCP‑интеграция

Stash реализует MCP‑сервер. Агент (Claude Desktop, Cursor, локальный клиент) подключается к нему как к обычному MCP‑инструменту и получает 28 команд:

  • Базовые: remember, recall, forget, init.
  • Работа с целями: goals.
  • Неудачи: failures.
  • Гипотезы: hypotheses.
  • Консолидация и запросы: consolidate, query_facts, relationships.
  • Причинно‑следственные связи: causal_links.
  • Противоречия: contradictions.
  • Пространства имён и контекст: namespaces, context, self-model.

Запуск MCP‑сервера выглядит так:

$ ./stash mcp execute --with-consolidation
$ ./stash mcp serve --port 8080 --with-consolidation

✓remember · recall · forget · init
✓goals · failures · hypotheses
✓consolidate · query_facts · relationships
✓causal links · contradictions
✓namespaces · context · self-model
$

Self‑model: память о самом агенте

По команде init Stash создаёт структуру /self с тремя зонами:

  • /self/capabilities — где агент силён.
  • /self/limits — где он регулярно ошибается.
  • /self/preferences — как ему удобнее работать: формат ответов, стиль, шаги планирования.

Агент может опрашивать эту память и адаптировать план: не брать на себя задачи, где он регулярно «падает», или менять стиль объяснений под пользователя.

Автономный обучающий цикл

Stash предлагает готовый сценарий фонового обучения агента:

  1. Orient — агент вспоминает контекст, активные цели, незакрытые гипотезы, прошлые провалы.
  2. Research — сам выбирает тему и ищет информацию в сети.
  3. Think — ищет противоречия и пробелы в знаниях.
  4. Invent — формирует новый паттерн, гипотезу или вывод.
  5. Consolidate — пропускает всё через пайплайн Stash.
  6. Reflect + Sleep — пишет резюме сессии, задаёт контекст на будущее и останавливается.

Этот цикл можно запускать по cron каждые 5 минут. Агент будет постепенно наращивать собственный «опыт» без участия человека.

Модели и инфраструктура

Stash не привязан к конкретному провайдеру. Он работает с любым сервисом, который поддерживает OpenAI‑совместимый API:

  • Через OpenRouter:

    • Один endpoint: https://openrouter.ai/api/v1.
    • Доступ к GPT, Claude, Gemini, Mistral и другим.
    • Можно выбрать одну модель для эмбеддингов и другую для рассуждений.
  • Локально через Ollama:

    • Например, эмбеддинги nomic-embed-text, reasoner qwen2.5:3b.
    • Память остаётся полностью локальной и офлайн.
  • Другие провайдеры: vLLM, LM Studio, llama.cpp‑серверы, Together AI, Groq — главное, чтобы API был в формате OpenAI.

Ключевой технический момент — переменная STASH_VECTOR_DIM: размерность эмбеддингов должна соответствовать выбранной embedding‑модели и задаётся один раз при инициализации базы.

Что это значит для вас

Когда Stash реально полезен

1. Долгие проекты с ИИ‑ассистентом

Если вы ведёте с агентом один и тот же проект неделями:

  • Разработка SaaS, мобильного приложения, внутреннего инструмента.
  • Исследовательский проект с длинной историей гипотез и проверок.
  • Продолжительные консультации (маркетинг, продукт, стратегия).

Stash позволяет агенту помнить:

  • контекст проекта;
  • принятые решения;
  • то, что уже пробовали и что не сработало;
  • текущие цели и прогресс по ним.

Вы не тратите первые 10–15 минут каждой сессии на пересказ истории.

2. Персональные ассистенты и рабочие агенты

Если вы строите персонального помощника, который должен помнить привычки и стиль работы:

  • Stash держит профиль пользователя в /users/<id>.
  • Ассистент помнит ваши предпочтения по инструментам, формату документов, расписанию.
  • Ошибки (например, «не предлагать больше Stripe») фиксируются как failure patterns.

3. Мульти‑модельные и локальные решения

Stash особенно полезен, если вы:

  • хотите менять модели под задачу (дешёвая для рутинных вещей, более мощная для сложных);
  • запускаете локальные LLM через Ollama или vLLM;
  • не хотите отдавать память пользователей в облако OpenAI или Anthropic.

Память у Stash модель‑агностична: вы можете сегодня использовать одну модель, завтра другую. История и знания останутся.

4. Автономные агенты, которые учатся на собственном опыте

Если вы экспериментируете с агентами, которые:

  • сами ходят в интернет;
  • сами формируют гипотезы;
  • сами проверяют их;
  • сами обновляют свои знания,

Stash даёт им структуру:

  • где хранить опыт;
  • как превращать его в знания;
  • как отслеживать цели и неудачи;
  • как не повторять старые ошибки.

Когда Stash не нужен

  • Разовые запросы к GPT/Claude. Если вы приходите раз в неделю спросить «что посмотреть вечером», Stash избыточен.
  • Короткие чаты без истории. Для FAQ‑бота на 3–4 вопроса проще использовать обычный RAG по базе знаний.
  • Жёсткие ограничения по инфраструктуре. Stash требует PostgreSQL и Docker (или альтернативной сборки). Если нет возможности поднять даже минимальный стек, он не подойдёт.

Вопрос доступа и VPN

Stash — это открытый проект, который вы запускаете у себя. Но для работы ему нужны модели:

  • через OpenRouter (https://openrouter.ai/api/v1);
  • или через другие внешние API (Groq, Together и т.д.);
  • или через локальные движки (Ollama, vLLM, LM Studio).

Если внешний провайдер заблокирован в России, придётся использовать VPN или полностью локальные модели. Локальный вариант (Ollama + Stash + pgvector) не требует выхода в интернет.

Место на рынке

Stash решает ту же боль, что и «память» в ChatGPT и Claude.ai, но по‑другому.

По сравнению с «памятью» ChatGPT и Claude.ai

Из таблицы в проекте:

  • Запоминает пользователя: ChatGPT — да, Claude.ai — да, Stash — да.
  • Работает с любыми моделями: ChatGPT — нет, Claude.ai — нет, Stash — да.
  • Работает с локальными/частными моделями: ChatGPT — нет, Claude.ai — нет, Stash — да.
  • Вы владеете данными: ChatGPT — нет, Claude.ai — нет, Stash — да.
  • Open source: ChatGPT — нет, Claude.ai — нет, Stash — да.
  • Фоновая консолидация памяти: ChatGPT — нет, Claude.ai — нет, Stash — да.
  • Отслеживание целей и намерений: ChatGPT — нет, Claude.ai — нет, Stash — да.
  • Обучение на неудачах: ChatGPT — нет, Claude.ai — нет, Stash — да.
  • Причинно‑следственное моделирование: ChatGPT — нет, Claude.ai — нет, Stash — да.
  • Self‑model агента: ChatGPT — нет, Claude.ai — нет, Stash — да.

ChatGPT и Claude.ai дают память внутри своих платформ. Stash делает похожую идею доступной для любых агентов и моделей, включая локальные.

По сравнению с классическим RAG

RAG (Retrieval Augmented Generation) — это:

  • индекс документов;
  • быстрый поиск по ним;
  • подмешивание найденных фрагментов в промпт.

RAG:

  • знает только то, что вы заранее написали в документах;
  • не учится на диалогах;
  • не отслеживает цели и причинно‑следственные связи;
  • не хранит противоречия и не исправляет убеждения.

Stash:

  • собирает знания из диалогов и действий агента;
  • строит поверх этого граф сущностей и причинно‑следственных связей;
  • отслеживает цели, неудачи и гипотезы;
  • даёт агенту непрерывный опыт.

RAG логичнее использовать как быстрый поиск по статическим базам знаний (документация, база статей). Stash — как долговременную память о взаимодействиях и решениях.

Ограничения и слабые места

  • Нужна инфраструктура: Postgres + pgvector + Docker или аналогичная сборка.
  • Размерность эмбеддингов (STASH_VECTOR_DIM) нельзя менять после первого запуска без полной пересоздачи базы.
  • Скорость и стоимость зависят от выбранных моделей (через OpenRouter или других провайдеров). Встроенных бенчмарков производительности Stash не даёт — вы сами выбираете баланс качество/цена.

Установка

Stash можно поднять в пару команд через Docker Compose.

Быстрый старт в 3 шага

  1. Клонировать репозиторий:
$ git clone https://github.com/alash3al/stash
$ cd stash
  1. Скопировать и настроить .env:
$ cp .env.example .env
# отредактируйте .env: API‑ключ, модели и STASH_VECTOR_DIM

Критично: установите STASH_VECTOR_DIM до первого запуска. pgvector фиксирует размерность, и изменить её потом нельзя без сброса базы.

  1. Запустить Docker Compose:
$ docker compose up

✓ postgres + pgvector ready
✓ stash migrations applied
✓ mcp server listening
✓ consolidation running in background
$

После этого Stash поднимает Postgres с pgvector, применяет миграции, запускает MCP‑сервер и фоновую консолидацию памяти.

Как запустить: конфигурации моделей

Stash использует единый OpenAI‑совместимый endpoint и разделяет модели для эмбеддингов и рассуждений.

Пример: OpenRouter (облако)

STASH_OPENAI_BASE_URL=https://openrouter.ai/api/v1
STASH_OPENAI_API_KEY=sk-or-...
STASH_EMBEDDING_MODEL=openai/text-embedding-3-small
STASH_REASONER_MODEL=anthropic/claude-3-haiku
STASH_VECTOR_DIM=1536

Здесь:

  • эмбеддинги — openai/text-embedding-3-small с размерностью 1536;
  • reasoner — anthropic/claude-3-haiku.

Пример: локальный Ollama

STASH_OPENAI_BASE_URL=http://localhost:11434/v1
STASH_EMBEDDING_MODEL=nomic-embed-text
STASH_REASONER_MODEL=qwen2.5:3b
STASH_VECTOR_DIM=768
  • эмбеддинги — nomic-embed-text с размерностью 768;
  • reasoner — qwen2.5:3b.

Пример: Groq

STASH_OPENAI_BASE_URL=https://api.groq.com/openai/v1
STASH_EMBEDDING_MODEL=openai/text-embedding-3-small
STASH_REASONER_MODEL=llama-3.1-8b-instant
STASH_VECTOR_DIM=1536

Везде одно правило: STASH_VECTOR_DIM должен совпадать с размерностью выбранной embedding‑модели.

Как подключить к агентам через MCP

Чтобы ваш агент начал пользоваться памятью Stash, достаточно подключить MCP‑сервер Stash.

Команды запуска:

stash · mcp stdio

$ ./stash mcp execute --with-consolidation
$ ./stash mcp serve --port 8080 --with-consolidation

✓remember · recall · forget · init
✓goals · failures · hypotheses
✓consolidate · query_facts · relationships
✓causal links · contradictions
✓namespaces · context · self-model
$

Дальше вы настраиваете в Claude Desktop, Cursor, OpenCode или своём агенте MCP‑endpoint Stash. Агент получает доступ ко всей когнитивной «начинке» Stash и начинает помнить вас между сессиями.


Stash по сути превращает ваш ИИ‑агент из «мозга без биографии» в систему, которая накапливает опыт. Если вы строите что‑то сложнее разового чат‑бота, это один из немногих сейчас способов дать агенту долговременную память, не завязанную на конкретную платформу вроде ChatGPT или Claude.ai.


Читайте также

🔗 Источник: https://alash3al.github.io/stash