Stash
- title
- Stash
- type
- toolbox
- summary
- Память для агентов на Postgres: консолидация сырых эпизодов в факты, причинно-следственные связи и паттерны
- tags
- golang, ai-agents, memory, mcp, postgres, watchlist
- language
- Go
- license
- Apache-2.0
- created
- 2026-04-25
- updated
- 2026-04-25
- lang
- ru
- translation_of
- stash
- source_updated
- 2026-04-25
- translated
- 2026-09-01
- translator
- lllm/antigravity/gemini-3.7-flash-high
Stash - постоянный слой памяти для AI-агентов: единый бинарник на Go, бэкенд на Postgres + pgvector, MCP-сервер, независимость от конкретных моделей. Идея: эпизоды (сырые наблюдения) в фоновом режиме синтезируются в факты, связи, причинно-следственные цепочки, паттерны и противоречия, разложенные по иерархическим пространствам имён. Решает ту же задачу, что hippo-memory и mempalace, но с другой философией: Stash делает главный упор на конвейер консолидации.
Добавлен в watchlist - репозиторий создан 2026-04-24, за день до этой записи. За первые 24 часа вышло три релиза v0.x. Автор (Mohammed Al Ashaal) - опытный разработчик (247 публичных репозиториев, 557 подписчиков), но сам проект совсем свежий.
Девятиступенчатый конвейер консолидации
Это самая примечательная часть Stash. Фоновый процесс запускается по расписанию и поднимает сырые наблюдения вверх по лестнице абстракций:
| # | Этап | Что делает |
|---|---|---|
| 01 | Эпизоды | Append-only журнал сырых наблюдений по мере их поступления |
| 02 | Факты | LLM группирует связанные эпизоды в синтезированные убеждения с оценкой уверенности |
| 03 | Отношения | Рёбра сущностей, извлечённые из фактов (граф знаний) |
| 04 | Причинно-следственные связи | Пары "причина-следствие" между фактами |
| 05 | Паттерны | Абстракции более высокого порядка над несколькими фактами |
| 06 | Противоречия | Самокоррекция и снижение уверенности при конфликте убеждений |
| 07 | Вывод целей (NEW) | Факты автоматически отслеживаются на соответствие активным целям; выявляются прогресс и противоречия |
| 08 | Паттерны сбоев (NEW) | Обнаружение повторяющихся ошибок; извлечение паттернов неудач в виде новых фактов |
| 09 | Проверка гипотез (NEW) | Новые свидетельства пассивно подтверждают или опровергают открытые гипотезы |
В hippo-memory тоже есть шаг консолидации (hippo sleep объединяет эпизодическую память в семантические паттерны), но останавливается на этапе 5. Stash развивает ту же биологическую метафору памяти в сторону причинно-следственных рассуждений, обработки противоречий и отслеживания целей с гипотезами. Работают ли этапы 4-9 на самом деле так, как заявлено, - открытый вопрос: подобные обещания требуют проверки на реальной практике, а у репозитория возрастом в один день такого опыта ещё нет.
Иерархические пространства имён
Память устроена как файловая система. Пути иерархичны, чтение рекурсивно обходит поддеревья, запись всегда идёт по одному точному пути:
/ (everything)
├── /users/alice (who alice is, her preferences)
├── /projects (all projects)
│ ├── /projects/restaurant-saas
│ └── /projects/mobile-app
└── /self (agent self-knowledge)
├── /self/capabilities
├── /self/limits
└── /self/preferences
Пространство имён /self - самая необычная деталь. Вызов init создаёт его заготовку, а агент использует собственный слой памяти для ведения модели самого себя: что у него получается хорошо, с чем возникают трудности, как он предпочитает действовать. Это ближе к архитектуре автономных исследовательских агентов, чем к типичной памяти для "сохранения пользовательских предпочтений". Сравните с charlie-daemons (автономные AI-процессы, описанные в markdown) и более широким разделением agents-vs-daemons - если воспринимать цикл /self всерьёз, Stash находится ближе к концепции демонов.
Stash против RAG
На главной странице репозитория подробно объясняется, почему Stash - это не система RAG. RAG ищет по уже написанным документам; Stash создаёт знания из опыта самого агента. Разница подаётся как "библиотекарь" против "коллеги". На практике это означает, что Stash принимает структурированные логи вызовов инструментов и реплики диалогов, а не готовые корпуса текстов, и формирует структурированные факты, связи и гипотезы, а не чанки. В стеке могут уживаться оба подхода: RAG для документов, Stash для накопленного опыта.
Интеграция с MCP
Поддерживает MCP из коробки. Предоставляет 28 инструментов: remember/recall/forget, управление пространствами имён, запросы к фактам, обход связей, запросы к причинно-следственным цепочкам, разрешение противоречий, управление гипотезами и запуск консолидации. Подключить его к Claude Desktop, Cursor, OpenCode или любому другому MCP-клиенту можно двумя командами:
./stash mcp execute --with-consolidation
./stash mcp serve --port 8080 --with-consolidation
Бэкенд, независимый от моделей
Stash использует один OpenAI-совместимый провайдер и для эмбеддингов, и для рассуждений. В файле .env можно указать OpenRouter, Ollama, vLLM, Groq, LM Studio или любой другой совместимый эндпоинт. Сам автор запускает Stash локально с привязкой к 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
STASH_VECTOR_DIM фиксируется при первой инициализации - размерность в pgvector нельзя изменить без полного сброса базы данных. Значение по умолчанию - 1536 (OpenAI text-embedding-3-small); для Ollama с моделью nomic-embed-text нужно указать 768.
Настройка
Всё настраивается тремя командами через Docker Compose, который связывает воедино Postgres + pgvector + Stash + MCP-сервер + воркер консолидации:
git clone https://github.com/alash3al/stash
cd stash
cp .env.example .env # set API key, models, STASH_VECTOR_DIM
docker compose up
Автономный цикл
В Stash встроен цикл автономного исследования, рассчитанный на запуск по cron: каждые 5 минут агент ориентируется (вспоминает контекст, цели, прошлые ошибки), исследует выбранную им самим тему, выявляет противоречия в накопленных знаниях, формулирует гипотезу или паттерн, прогоняет конвейер консолидации, записывает итоги сессии и останавливается. Это самая радикальная интерпретация памяти агентов во всём каталоге toolbox на данный момент. Приносит ли она реальную пользу или приводит лишь к бесполезной активности - пока неизвестно.
Статус
- Создан: 2026-04-24
- Звёзд: 96 (на момент добавления, 2026-04-25)
- Релизы: v0.1.0, v0.1.1, v0.2.0 - все вышли 2026-04-25
- Открытых issues: 0, форков: 0
- Один автор (
alash3al) - Профиль автора: опытный Go-разработчик, Хургада, Египет, 247 публичных репозиториев, 557 подписчиков
- Apache-2.0
Сигналы для повторной проверки на 2026-07-25: дают ли этапы 4-9 (причинно-следственные связи, противоречия, цели, ошибки, гипотезы) полезный результат в реальной работе? Сделал ли кто-то, кроме автора, нетривиальную интеграцию? Стабилизировался ли API? Продолжился ли рост звёзд или остановился?
Репозиторий: https://github.com/alash3al/stash - 96 звёзд, Apache-2.0.