CLI for Stash — shared memory for AI coding agents
Project description
Knowledge bases for the agent era.
The one place your agents connect to all your data — GitHub, Drive, Gmail,
Notion, Slack and more — plus an agent-native Drive in Markdown and HTML
where their sessions, files, and pages all land.
When we tested this internally, we found that it sped up long-running instances of Claude Code by 49%.
How it works
- Sessions stream in automatically. A hook for your coding agent pushes every transcript — prompts, tool calls, artifacts — to a shared workspace.
- Files and sessions live side by side. Markdown, HTML, tables, PDFs. Humans and agents both write here; both sides see edits in real time.
- Agents query it like a filesystem. A CLI, MCP server, and virtual-filesystem shell expose the workspace to any agent. Semantic and keyword search across pages, sessions, and tables.
- Skills are the shareable slice. Bundle pages and sessions into one link. Publish to the world, share with collaborators, or fork a public Skill into your own workspace.
Why shared beats individual
When five engineers run Claude on the same repo, they generate valuable session transcripts. However, their coding agent can only access transcripts generated on the machine where the agent is currently running. As a result, engineering effort is duplicated and eng velocity is decreased. This is especially true as coding agents begin to run autonomously for significant periods of time.
With Stash, every agent on the repo has context about every session created from that repo. Here are some use cases:
- Code Faster / Don't Duplicate Work: "Has anyone else tried fixing the memory leak in our API gateway? What was attempted?"
- Look Organized During Standup: "What did I get done this week? What other work did I do that isn't tracked in Git?"
- Don't Be Blocked on Collaborators: "Why did Sam increase the timeout to 30s? The git history is unhelpful."
- Align With Your Team Faster: "Please add a feedback endpoint to our API" -> Claude: "FYI, Sam decided not to add a feedback endpoint since we want to encourage churned users to hop on a call directly"
"raw data from a given number of sources is collected, then compiled by an LLM into a .md knowledge base, then operated on by various CLIs by the LLM to do Q&A and to incrementally enhance it… I think there is room here for an incredible new product instead of a hacky collection of scripts."
— Andrej Karpathy, LLM Knowledge Bases
Stash is that product. The one place your agents connect to all your data, with an agent-native Drive they write it back into — not a stack of shell scripts wrapped around a folder of markdown.
Built for —
| Use case | What teams put in it |
|---|---|
| Engineering live docs | coding-agent plans, ADRs, and design notes that stay current |
| Company brain | the shared context every agent and teammate reads from |
| Research knowledge base | long-running PKBs with sources, transcripts, and tables |
| Ops playbooks | release runbooks and on-call procedures |
| Brand voice | editorial guidelines and copy standards agents write to |
| Personal knowledge management | notes, drafts, and scratch files for a single operator |
Quick Start
pip install stashai / uv tool install stashai
stash login
stash login walks you through account creation, picks a workspace, connects
your current repo when you want uploads, and wires up coding-agent plugins.
Use stash connect later when you are already authenticated and only need to
bind another repo to a workspace.
Prefer a one-liner?
bash -c "$(curl -fsSL https://joinstash.ai/install)"
The installer uses uv to install or update stashai, bootstrapping uv
when needed, and then runs stash login.
Use this when you don't already have a Python toolchain on your machine.
Then try it: ask your coding agent if it has access to Stash.
Agents can browse Stash with an app-level virtual filesystem shell:
stash vfs ls /
stash vfs "tree /workspaces -L 2"
stash vfs "find /workspaces -maxdepth 3 -type f | head -n 20"
stash vfs "rg \"database migration\" /workspaces"
Integrations
Stash supports the following coding agents:
- Claude Code
- Cursor
- Codex
- OpenCode
- Gemini CLI
- Openclaw
Stash supports opt in per-coding agent. stash login can auto-install hooks for Claude Code, Cursor, Codex, and OpenCode; Gemini CLI and Openclaw are available in plugins/ and are installed manually. Mix and match — different teammates can use different agents against the same shared brain.
CLI Reference
See here for a CLI reference.
Self-Hosted
Run Stash with prebuilt GHCR images:
To host locally:
git clone https://github.com/Fergana-Labs/stash.git
cd stash
cp .env.example .env
docker compose -f docker-compose.prod.yml -f docker-compose.local.yml pull
docker compose -f docker-compose.prod.yml -f docker-compose.local.yml up -d
curl http://localhost:3456/health
open http://localhost:3457/login
Docker Compose generates and persists the OAuth token encryption key when
INTEGRATIONS_ENCRYPTION_KEY is unset. Set it yourself only if you manage
deployment secrets outside Compose.
For a public domain with Caddy and HTTPS:
# Set PUBLIC_URL and CORS_ORIGINS in .env, then replace app.example.com in Caddyfile.
docker compose -f docker-compose.prod.yml pull
docker compose -f docker-compose.prod.yml up -d
curl https://app.example.com/health
docker-compose.prod.yml pins the image versions it was tested with. To
upgrade, pull the latest compose file and restart:
git pull
docker compose -f docker-compose.prod.yml -f docker-compose.local.yml pull
docker compose -f docker-compose.prod.yml -f docker-compose.local.yml up -d
Then install the CLI:
pip install stashai # or: uv tool install stashai
cd /path/to/the/repo/you/want/to/connect
stash config base_url http://localhost:3456
stash login
Use your public URL instead of http://localhost:3456 when connecting to a
domain-backed install:
stash config base_url https://app.example.com
Finally see it in action:
claude
> what did I get done last week? check stash.
Privacy
Stash is built for engineering teams working in private repos.
- LLM calls are optional and scoped. When an Anthropic API key is configured, the server uses it for ask-the-workspace answers and auto-generated session titles. No key means those features are unavailable — the rest of Stash works without any LLM.
- Permissioned workspaces. Only invited members can access a workspace. Public visibility is controlled by Skills.
- Transcripts are opt-in. If you don't want to share your agent transcripts, you can give your agent shared read access to the workspace's memory without uploading any of your own session data.
FAQ
What LLMs does Stash use? When an Anthropic API key is provided, the server calls Claude for ask-the-workspace (quality tier) and session title generation. Both are optional — without the key, Stash works but those features are disabled. There is no background page-writing agent.
Can I use this without Claude Code? Yes. You can use the CLI with anything, and Stash has native plugins for Cursor, Codex, Opencode, Gemini CLI, and more.
Contributing
Contributions are welcome. See CONTRIBUTING.md to get started.
Found a bug? Open an issue.
License
MIT — Copyright (c) 2026 Fergana Labs
Built by Fergana Labs.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file stashai-0.1.50.tar.gz.
File metadata
- Download URL: stashai-0.1.50.tar.gz
- Upload date:
- Size: 124.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0229d9427adbbf5a5041c82e974031dc62d8d786142d348b62c86739ad6a86a2
|
|
| MD5 |
4547fbdd144a604e86c4002761849c15
|
|
| BLAKE2b-256 |
4164a0036a000747832c650f7e303019a96e3367fdfee8c8c10b7b22b997ae85
|
Provenance
The following attestation bundles were made for stashai-0.1.50.tar.gz:
Publisher:
publish.yml on Fergana-Labs/stash
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
stashai-0.1.50.tar.gz -
Subject digest:
0229d9427adbbf5a5041c82e974031dc62d8d786142d348b62c86739ad6a86a2 - Sigstore transparency entry: 1793774991
- Sigstore integration time:
-
Permalink:
Fergana-Labs/stash@7eb7e1b2b091438763cf3d36953dce99c799952b -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Fergana-Labs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7eb7e1b2b091438763cf3d36953dce99c799952b -
Trigger Event:
push
-
Statement type:
File details
Details for the file stashai-0.1.50-py3-none-any.whl.
File metadata
- Download URL: stashai-0.1.50-py3-none-any.whl
- Upload date:
- Size: 147.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0df70c3adbd2616ec6539e1c8b01a34ab874b8ad9bb39ea7017a255cc52b9cd5
|
|
| MD5 |
438ac8a87f2e1eb0f39c1f76e4e99752
|
|
| BLAKE2b-256 |
1405049d0e5cbc50f41a4e35cbe5d22fbd098dd622f37690a4c3dba26d08bb67
|
Provenance
The following attestation bundles were made for stashai-0.1.50-py3-none-any.whl:
Publisher:
publish.yml on Fergana-Labs/stash
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
stashai-0.1.50-py3-none-any.whl -
Subject digest:
0df70c3adbd2616ec6539e1c8b01a34ab874b8ad9bb39ea7017a255cc52b9cd5 - Sigstore transparency entry: 1793775398
- Sigstore integration time:
-
Permalink:
Fergana-Labs/stash@7eb7e1b2b091438763cf3d36953dce99c799952b -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Fergana-Labs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7eb7e1b2b091438763cf3d36953dce99c799952b -
Trigger Event:
push
-
Statement type: