Stash
Memory server
First committed by alash3al
Published in alash3al/stash. Publisher page
772 GitHub stars
What it is
Stash — persistent memory layer for AI agents. Episodes, facts, and working context stored in Postgres. MCP server included. Self-hosted, single binary, no cloud required.
AutoGineer overview, from the brain’s own files
Stash functions as a cognitive middleware layer that bridges the gap between stateless LLMs and persistent knowledge requirements. By utilizing a Postgres database with pgvector, it captures raw agent interactions and processes them through a multi-stage consolidation pipeline. This pipeline transforms episodic data into structured facts, relationships, and patterns, allowing agents to maintain context across sessions. Stash is designed as a single-binary, self-hosted solution that integrates with any MCP-compatible agent, effectively eliminating the need for agents to restart their learning process with every new conversation.
How it works
Memory model: Hybrid
AutoGineer overview, from the brain’s own files
Stash operates as an MCP server that connects to your AI agent. It uses a Postgres database to store information. The system includes a background consolidation pipeline that processes new data in nine stages, converting raw observations into structured knowledge like facts, causal links, and goal tracking. It supports local embedding and reasoning models, such as those provided by Ollama, or can be configured with external OpenAI-compatible APIs.
| Folder | Role | Files |
|---|---|---|
| .github | agent-config | 1 |
| docs | docs | 4 |
| cmd | folder | 15 |
| internal | folder | 49 |
Requirements
Apps: Docker
Runtimes: Go
Databases: PostgreSQL
API keys (by name): STASH_OPENAI_API_KEY
Works with: Claude apps
Set it up
- Not scanned by AutoGineerThe author’s README also describes installing it with Docker Compose. Read its install section: AutoGineer did not scan that path. https://github.com/alash3al/stash/blob/d34ed430c4348ef741ef95146b488aea8616f4fb/README.md#mcp-client-setup
- Not scanned by AutoGineerThe author’s README also describes installing it with Docker Compose. Read its install section: AutoGineer did not scan that path. https://github.com/alash3al/stash/blob/d34ed430c4348ef741ef95146b488aea8616f4fb/README.md#quick-start
- Not scanned by AutoGineerThe author’s README also describes installing it from a clone of its repository. Read its install section: AutoGineer did not scan that path. https://github.com/alash3al/stash/blob/d34ed430c4348ef741ef95146b488aea8616f4fb/README.md#quick-start
First committed by alash3al. Published in alash3al/stash. Licence: Apache License 2.0.
Usage
AutoGineer overview, from the brain’s own files
- Providing long-term memory to AI agents
- Consolidating agent conversations into structured facts
- Tracking goals and patterns across multiple sessions
- Enabling local, private AI memory storage
- Integrating memory capabilities into MCP-compatible clients like Cursor or Claude Desktop
- “Remember that my preferred programming language is Go.”
- The agent stores this fact in the Stash memory layer, allowing it to recall this preference in future sessions.
- “What are the key project goals we discussed last week?”
- The agent queries the Stash memory layer to retrieve consolidated goal tracking information from previous interactions.
Documentation by alash3al
Stash
Your AI has amnesia. We fixed it.
Every LLM starts every conversation from zero. Stash gives your agent persistent memory — it remembers, recalls, consolidates, and learns across sessions. No more explaining yourself from scratch.
Open source. Self-hosted. Works with any MCP-compatible agent.
Don't want to self-host? usestash.io is the hosted cloud version — sign in with Google, copy one MCP URL, and you're done. Free to start.
Quick Start
git clone https://github.com/alash3al/stash.git
cd stash
cp .env.example .env # edit with your API key + model
docker compose upThat's it. Postgres + pgvector, migrations, MCP server with background consolidation — all in one command.
Next: Getting Started guide — connect your MCP client, run init / remember / recall, and verify everything works.
Fully local (no cloud API): Ollama setup guide — host Ollama + Docker Compose, private embeddings and reasoner.
Atlas Cloud
Atlas Cloud is a full-modal AI inference platform that gives developers a single AI API to access video generation, image generation, and LLM APIs. Instead of managing multiple vendor integrations, you connect once and get unified access to 300+ curated models across all modalities.
Check out Atlas Cloud's coding plan promotion: https://www.atlascloud.ai/console/coding-plan
Stash already supports Atlas Cloud through its OpenAI-compatible API. Set your .env like this:
STASH_OPENAI_API_KEY=your-atlas-cloud-api-key
STASH_OPENAI_BASE_URL=https://api.atlascloud.ai/v1
STASH_EMBEDDING_MODEL=text-embedding-3-small
STASH_REASONER_MODEL=deepseek-ai/DeepSeek-V3-0324
STASH_VECTOR_DIM=1536Atlas Cloud works well here because Stash only needs:
an embeddings model for vectorization
a chat-capable reasoning model for consolidation
an OpenAI-compatible base URL and API key
See Getting Started for a fuller configuration checklist.
MCP Client Setup
After docker compose up, Stash exposes an MCP server over SSE at:
http://localhost:8080/ssePoint any MCP-compatible client at that URL. Example configs:
Cursor — ~/.cursor/mcp.json
{
"mcpServers": {
"stash": {
"url": "http://localhost:8080/sse"
}
}
}Claude Desktop — claude_desktop_config.json
{
"mcpServers": {
"stash": {
"url": "http://localhost:8080/sse"
}
}
}OpenCode — ~/.config/opencode/config.json
{
"mcp": {
"stash": {
"type": "remote",
"url": "http://localhost:8080/sse",
"enabled": true
}
}
}Windsurf — ~/.codeium/windsurf/mcp_config.json
{
"mcpServers": {
"stash": {
"url": "http://localhost:8080/sse"
}
}
}Works with any agent that supports MCP over SSE — Claude Desktop, Cursor, Windsurf, Cline, Continue, OpenAI Agents, Ollama, OpenRouter, Atlas Cloud-backed setups, and more.
What It Does
Stash is a cognitive layer between your AI agent and the world. Episodes become facts. Facts become relationships. Relationships become patterns. Patterns become wisdom.
A 9-stage consolidation pipeline turns raw observations into structured knowledge — facts, relationships, causal links, patterns, contradictions, goal tracking, failure patterns, and hypothesis verification. Each stage only processes new data since the last run.
Stash Cloud (Beta — Free)
A hosted, multi-tenant version of Stash is available at usestash.io and is currently free while in beta.
The cloud version is written from scratch — it shares no code with this repository. It is designed from the ground up for scalability, multi-tenancy, and long-term sustainability as a product. Feature sets differ in both directions: some things available here aren't in the cloud, and vice versa.
Learn More
License
Apache 2.0
docs/LOCAL_OLLAMA.md
Local setup with Ollama (no cloud API)
Stash's landing page promises fully local, fully private memory. This guide closes the gap between marketing and .env — Ollama on your machine, Stash in Docker, zero outbound API keys.
Contributed by Sean Campbell · tested on Linux with Docker Compose.
What you need
Ollama running on the host (not inside the Stash container)
Docker Compose (Stash's default install path)
~2 GB disk for models + Postgres volume
Pull models before docker compose up:
ollama pull nomic-embed-text
ollama pull qwen2.5:3b| Role | Model | Why |
|---|---|---|
| Embeddings | nomic-embed-text | 768-dim vectors; matches STASH_VECTOR_DIM=768 |
| Reasoner | qwen2.5:3b (or llama3.2:3b) | Consolidation synthesis; small models work for dev |
Configure .env
Copy .env.example → .env and use the Ollama block below.
Stash runs in Docker; Ollama runs on the host. From inside the container, reach the host API at:
Linux:
http://host.docker.internal:11434/v1(Docker 20.10+) or your bridge IP, e.g.http://172.17.0.1:11434/v1macOS / Windows Docker Desktop:
http://host.docker.internal:11434/v1
# --- Ollama (fully local) ---
STASH_OPENAI_API_KEY=ollama # required field; Ollama ignores the value
STASH_OPENAI_BASE_URL=http://host.docker.internal:11434/v1
STASH_EMBEDDING_MODEL=nomic-embed-text
STASH_REASONER_MODEL=qwen2.5:3b
STASH_VECTOR_DIM=768 # ⚠ set once before first run — cannot change laterWarning:
STASH_VECTOR_DIMlocks at first init. If you already started Stash with1536, reset the Postgres volume or use a fresh database before switching to Ollama embeddings.
Launch
docker compose up --buildVerify:
curl -s -o /dev/null -w "%{http_code}\n" http://localhost:8080/sse
docker compose logs stash | tail -20Then follow Getting Started: connect MCP → init → remember → recall → consolidate.
Troubleshooting
connection refused to Ollama
Confirm Ollama is listening:
curl http://localhost:11434/api/tagsOn Linux, if
host.docker.internalfails, add todocker-compose.ymlunderstash:
extra_hosts:
- "host.docker.internal:host-gateway"Empty recall / embedding errors
Model names must match
ollama listexactlySTASH_VECTOR_DIMmust match the embedding model (768 fornomic-embed-text)
Consolidation slow or noisy
Smaller reasoners (
qwen2.5:3b,llama3.2:3b) are fine for dev; use a larger model only if synthesis quality matters
OpenRouter vs Ollama
| Ollama (this guide) | OpenRouter / cloud | |
|---|---|---|
| API key | Not required | Required |
| Privacy | Stays on your LAN | Leaves your network |
| Setup | Host Ollama + Docker bridge | .env API key only |
| Best for | Local dev, air-gapped, Willow-style fleets | Quick eval, largest models |
Both paths use the same MCP tools — Stash is model-agnostic by design.
Questions or fixes: open an issue on alash3al/stash.
78 files · 73 not served here
- .env.example (not served here)
- .github/workflows/release.yml (not served here)
- .gitignore (not served here)
- ATTRIBUTION.md
- Dockerfile (not served here)
- LICENSE
- README.md
- cmd/cli/causal.go (not served here)
- cmd/cli/cli_env.go (not served here)
- cmd/cli/commands.go (not served here)
- cmd/cli/consolidate.go (not served here)
- cmd/cli/context.go (not served here)
- cmd/cli/contradiction.go (not served here)
- cmd/cli/failure.go (not served here)
- cmd/cli/goal.go (not served here)
- cmd/cli/hypothesis.go (not served here)
- cmd/cli/main.go (not served here)
- cmd/cli/mcp.go (not served here)
- cmd/cli/mcp_prompts.tmpl (not served here)
- cmd/cli/namespace.go (not served here)
- cmd/cli/serve_all.go (not served here)
- cmd/cli/server.go (not served here)
- docker-compose.yml (not served here)
- docs/GETTING_STARTED.md
- docs/LOCAL_OLLAMA.md
- docs/index.html (not served here)
- docs/og-image.png (not served here)
- go.mod (not served here)
- go.sum (not served here)
- internal/bootstrap/bootstrap.go (not served here)
- internal/brain/brain.go (not served here)
- internal/brain/brain_test.go (not served here)
- internal/brain/causal.go (not served here)
- internal/brain/consolidate.go (not served here)
- internal/brain/consolidate_failure.go (not served here)
- internal/brain/consolidate_goal.go (not served here)
- internal/brain/consolidate_hypothesis.go (not served here)
- internal/brain/context.go (not served here)
- internal/brain/contradiction.go (not served here)
- internal/brain/decay.go (not served here)
- internal/brain/episode.go (not served here)
- internal/brain/fact.go (not served here)
- internal/brain/failure.go (not served here)
- internal/brain/goal.go (not served here)
- internal/brain/hypothesis.go (not served here)
- internal/brain/namespace.go (not served here)
- internal/brain/recall.go (not served here)
- internal/config/config.go (not served here)
- internal/db/db.go (not served here)
- internal/db/migrations/00001_enable_vector.sql (not served here)
- internal/db/migrations/00002_create_namespaces.sql (not served here)
- internal/db/migrations/00004_create_episodes.sql (not served here)
- internal/db/migrations/00005_create_facts.sql (not served here)
- internal/db/migrations/00006_create_fact_sources.sql (not served here)
- internal/db/migrations/00007_create_relationships.sql (not served here)
- internal/db/migrations/00008_create_patterns.sql (not served here)
- internal/db/migrations/00009_create_contexts.sql (not served here)
- internal/db/migrations/00010_create_consolidation_progress.sql (not served here)
- internal/db/migrations/00011_create_settings.sql (not served here)
- internal/db/migrations/00012_create_embedding_cache.sql (not served here)
- internal/db/migrations/00013_add_fact_structured_fields.sql (not served here)
- internal/db/migrations/00014_create_contradictions.sql (not served here)
- internal/db/migrations/00015_add_decay_checkpoint.sql (not served here)
- internal/db/migrations/00016_create_causal_links.sql (not served here)
- internal/db/migrations/00017_create_hypotheses.sql (not served here)
- internal/db/migrations/00018_create_goals.sql (not served here)
- internal/db/migrations/00019_create_failures.sql (not served here)
- internal/db/migrations/00020_add_consolidation_checkpoints.sql (not served here)
- internal/embedder/cache.go (not served here)
- internal/embedder/embedder.go (not served here)
- internal/embedder/openai.go (not served here)
- internal/models/models.go (not served here)
- internal/observability/metrics.go (not served here)
- internal/queries/consolidate.sql.tmpl (not served here)
- internal/queries/queries.go (not served here)
- internal/queries/recall.sql.tmpl (not served here)
- internal/reasoner/openai.go (not served here)
- internal/reasoner/reasoner.go (not served here)
Advantages
- Enables persistent memory across sessions, preventing agents from starting from zero. evidence: README.md
- Supports fully local operation with Ollama for private data handling. evidence: README.md
Limitations
- Requires self-hosting infrastructure including Postgres and Docker. evidence: README.md
Security
Risk level: No risk found
This brain runs
MCP servers (3)
README.md(stash):http://localhost:8080/sse· uses the networkREADME.md(stash):http://localhost:8080/sse· uses the networkREADME.md(stash):http://localhost:8080/sse· uses the network
Attribution and licence
- First committed by
alash3al
- Publisher
- Mohammed Al Ashaal (Community)
- Source
- alash3al/stash · commit d34ed43
- Licence
- Apache License 2.0 (files served here)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
- Contributors
- alash3al, rudi193-cmd, ali-h-abbas, lucaszhu-hue, truffle-dev
AutoGineer is not affiliated with or endorsed by alash3al.
Install from source
73 of its files are not served here, so there is no ZIP. alash3al/stash at d34ed43