stashai 0.1.330__tar.gz → 0.1.332__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {stashai-0.1.330/stashai.egg-info → stashai-0.1.332}/PKG-INFO +45 -13
- {stashai-0.1.330 → stashai-0.1.332}/README.md +44 -12
- {stashai-0.1.330 → stashai-0.1.332}/pyproject.toml +1 -1
- {stashai-0.1.330 → stashai-0.1.332/stashai.egg-info}/PKG-INFO +45 -13
- {stashai-0.1.330 → stashai-0.1.332}/LICENSE +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/__init__.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/client.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/config.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/formatting.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/import_history.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/main.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/mcp_server.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/telemetry.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/tests/__init__.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/tests/test_agent_cli.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/tests/test_agent_detection.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/tests/test_app_vfs.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/tests/test_client_retry.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/tests/test_history_pagination.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/tests/test_hook_cli.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/tests/test_import_history.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/tests/test_install_codex.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/tests/test_install_gemini.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/tests/test_install_hermes.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/tests/test_install_hooks.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/tests/test_install_openclaw.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/tests/test_ls_cmd.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/tests/test_marketplace_autoupdate.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/tests/test_memory_recompute_poll.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/tests/test_mount_vfs.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/tests/test_root_help.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/tests/test_scope_config.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/tests/test_setup_complete_splash.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/tests/test_share_and_upload_helpers.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/tests/test_sharing_cli.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/tests/test_skill_client_permissions.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/tests/test_skills_install.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/tests/test_skills_installed.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/tests/test_skills_sync.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/tests/test_sources_cli.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/tests/test_streaming_toggle.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/tests/test_tools_cli.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/tests/test_update_file_and_folder.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/cli/tests/test_upload_status_helpers.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/setup.cfg +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/__init__.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/__init__.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/_do_session_upload.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/_do_upload.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/_session_watcher.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/agent_config.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/__init__.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/claude/scripts/adapt.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/claude/scripts/config.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/claude/scripts/on_prompt.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/claude/scripts/on_session_end.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/claude/scripts/on_session_start.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/claude/scripts/on_stop.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/claude/scripts/on_tool_use.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/codex/AGENTS.md +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/codex/README.md +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/codex/config.toml.snippet +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/codex/hooks.json +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/codex/scripts/adapt.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/codex/scripts/config.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/codex/scripts/on_prompt.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/codex/scripts/on_session_start.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/codex/scripts/on_stop.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/codex/scripts/on_tool_use.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/cursor/README.md +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/cursor/hooks.json +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/cursor/scripts/adapt.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/cursor/scripts/config.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/cursor/scripts/on_agent_response.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/cursor/scripts/on_prompt.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/cursor/scripts/on_session_end.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/cursor/scripts/on_session_start.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/cursor/scripts/on_tool_use.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/cursor/stash.mdc +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/gemini/GEMINI.md +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/gemini/README.md +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/gemini/scripts/adapt.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/gemini/scripts/config.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/gemini/scripts/on_prompt.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/gemini/scripts/on_session_end.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/gemini/scripts/on_session_start.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/gemini/scripts/on_stop.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/gemini/scripts/on_tool_use.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/gemini/settings.snippet.json +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/hermes/HERMES.md +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/hermes/README.md +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/hermes/config.snippet.yaml +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/hermes/scripts/adapt.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/hermes/scripts/config.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/hermes/scripts/on_prompt.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/hermes/scripts/on_session_end.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/hermes/scripts/on_session_start.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/hermes/scripts/on_stop.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/hermes/scripts/on_tool_use.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/openclaw/README.md +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/openclaw/dist/index.js +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/openclaw/index.ts +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/openclaw/openclaw.plugin.json +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/openclaw/package.json +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/openclaw/scripts/adapt.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/openclaw/scripts/config.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/openclaw/scripts/on_prompt.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/openclaw/scripts/on_session_end.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/openclaw/scripts/on_session_start.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/openclaw/scripts/on_stop.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/opencode/AGENTS.md +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/opencode/README.md +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/opencode/package.json +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/opencode/plugin.ts +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/opencode/scripts/adapt.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/opencode/scripts/config.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/opencode/scripts/on_prompt.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/opencode/scripts/on_session_end.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/opencode/scripts/on_session_start.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/opencode/scripts/on_tool_use.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/doctor.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/event.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/hooks.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/scope.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/session_upload.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/stash_client.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/state.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/summarize.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/transcript_upload.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/upload_status.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai.egg-info/SOURCES.txt +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai.egg-info/dependency_links.txt +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai.egg-info/entry_points.txt +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai.egg-info/requires.txt +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashai.egg-info/top_level.txt +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashvfs/__init__.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashvfs/client.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashvfs/model.py +0 -0
- {stashai-0.1.330 → stashai-0.1.332}/stashvfs/shell.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: stashai
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.332
|
|
4
4
|
Summary: CLI for Stash — shared memory for AI coding agents
|
|
5
5
|
Author: Fergana Labs
|
|
6
6
|
License: MIT
|
|
@@ -33,9 +33,9 @@ Dynamic: license-file
|
|
|
33
33
|
<h3 align="center">Knowledge bases for the agent era.</h3>
|
|
34
34
|
|
|
35
35
|
<p align="center">
|
|
36
|
-
The one place your agents connect to all your data — GitHub, Drive, Gmail, <br>
|
|
37
|
-
|
|
38
|
-
where their sessions, files, and pages all land.
|
|
36
|
+
The one place your agents connect to all your data — GitHub, Drive, Gmail, Notion, <br>
|
|
37
|
+
Slack, Linear, Jira, Asana, Granola and more — plus an agent-native Drive in <br>
|
|
38
|
+
Markdown and HTML where their sessions, files, and pages all land.
|
|
39
39
|
</p>
|
|
40
40
|
|
|
41
41
|
|
|
@@ -66,8 +66,10 @@ Dynamic: license-file
|
|
|
66
66
|
|
|
67
67
|
- **Sessions stream in automatically.** A hook for your coding agent pushes every transcript — prompts, tool calls, artifacts — into your Stash.
|
|
68
68
|
- **Files and sessions live side by side.** Markdown, HTML, tables, PDFs. You and your agents both write here; both sides see edits in real time.
|
|
69
|
-
- **Agents query it like a filesystem.** A CLI, MCP server, and virtual-filesystem shell expose your Stash to any agent.
|
|
70
|
-
- **
|
|
69
|
+
- **Agents query it like a filesystem.** A CLI, MCP server (~70 read/write tools), REST API, and virtual-filesystem shell expose your Stash to any agent. One search spans your pages, sessions, and every connected source at once.
|
|
70
|
+
- **There's an agent in the box too.** Chat with an agent that already has all of this — in the app, from Slack, or from Telegram. It's a real coding-agent CLI (Claude Code, Codex, or opencode) running on your own cloud VM, so it can read, write, and run things. Give it a cron and it becomes a scheduled agent.
|
|
71
|
+
- **Memory is a wiki an agent keeps for you.** A scheduled curator reads whatever is new since its last run — sessions, files, saves — and compiles it into linked pages: entities, concepts, and a running log. It writes only inside the reserved Memory folder, and never reads its own output.
|
|
72
|
+
- **Skills are the shareable slice.** A Skill is just a folder with a `SKILL.md` in it — put the pages, files, and tables that belong together in one folder and it becomes shareable as a unit. Publish it to the world, fork a public Skill into your own Stash, or `stash skills install` one into your agent — installed skills auto-update at session start, and `stash skills follow` auto-installs skills people share with you.
|
|
71
73
|
- **Bring your own MCP servers.** Register MCP servers once (Tools page or `stash tools add`); your cloud agent gets them automatically and `stash tools install` writes them into any local agent's `.mcp.json`.
|
|
72
74
|
|
|
73
75
|
## Why persistent beats per-session
|
|
@@ -105,9 +107,12 @@ uv tool install stashai
|
|
|
105
107
|
stash signin
|
|
106
108
|
```
|
|
107
109
|
|
|
108
|
-
`stash signin`
|
|
109
|
-
|
|
110
|
-
|
|
110
|
+
`stash signin` authenticates you in the browser, asks whether you want to
|
|
111
|
+
share your agent transcripts, then finds the coding agents installed on your
|
|
112
|
+
machine and installs hooks for the ones you pick. It offers to connect the
|
|
113
|
+
repo you're standing in and to import conversations you've already had. Use
|
|
114
|
+
`stash connect` later when you're already signed in and only need to bind
|
|
115
|
+
another repo.
|
|
111
116
|
|
|
112
117
|
<details>
|
|
113
118
|
<summary>Prefer a one-liner?</summary>
|
|
@@ -141,7 +146,31 @@ stash vfs "find / -maxdepth 3 -type f | head -n 20"
|
|
|
141
146
|
stash vfs "rg \"database migration\" /"
|
|
142
147
|
```
|
|
143
148
|
|
|
144
|
-
##
|
|
149
|
+
## Connected sources
|
|
150
|
+
|
|
151
|
+
Connect a source once and every agent you point at Stash can read and search it.
|
|
152
|
+
|
|
153
|
+
| Source | What lands in your Stash |
|
|
154
|
+
|---|---|
|
|
155
|
+
| **GitHub** | Repo contents, indexed for search — one repo, a pick-list, or every repo you can see |
|
|
156
|
+
| **Google Drive** | Your Drive, searchable by name and path; pick a folder to extract full contents (PDFs and scans included) |
|
|
157
|
+
| **Gmail** | Recent mail, with search federated live to Gmail. Multiple mailboxes supported |
|
|
158
|
+
| **Slack** | Messages from the channels you choose, filed as a transcript per channel per day |
|
|
159
|
+
| **Notion** | Pages and database rows as Markdown |
|
|
160
|
+
| **Linear** / **Jira** / **Asana** | Issues and tasks, indexed by team, project, or board section |
|
|
161
|
+
| **Granola** | Meeting notes and transcripts |
|
|
162
|
+
| **PostHog** | Dashboards, insights, feature flags, and experiments |
|
|
163
|
+
| **X** | Your bookmarks, posts, replies, and articles — with thread context and media archived |
|
|
164
|
+
| **Instagram** | Saved posts and reels, captured by the browser extension |
|
|
165
|
+
|
|
166
|
+
You can also drop in an **Obsidian vault**, and the **Chrome extension** adds a
|
|
167
|
+
web clipper, a bookmark importer, YouTube transcripts, and your ChatGPT and
|
|
168
|
+
Claude.ai conversations.
|
|
169
|
+
|
|
170
|
+
Slack and Linear push changes to Stash over webhooks; everything else syncs on a
|
|
171
|
+
schedule. Pick Slack's channels yourself — nothing is indexed until you do.
|
|
172
|
+
|
|
173
|
+
## Coding agents
|
|
145
174
|
|
|
146
175
|
Stash supports the following coding agents:
|
|
147
176
|
- **Claude Code**
|
|
@@ -219,14 +248,17 @@ claude
|
|
|
219
248
|
|
|
220
249
|
Stash is built for engineering teams working in private repos.
|
|
221
250
|
|
|
222
|
-
- **LLM calls are optional and scoped.**
|
|
223
|
-
- **Private by default.** Your Stash is yours alone.
|
|
251
|
+
- **LLM calls are optional and scoped.** An Anthropic key powers ask-the-stash, session titles, and OCR for scanned PDFs; the chat agent runs on Anthropic, OpenAI, or OpenRouter with your own key. Without any of them, the rest of Stash works — those features are simply unavailable.
|
|
252
|
+
- **Private by default.** Your Stash is yours alone. Content becomes public only when you make it so: publishing a Skill, creating a public link to a page, file, folder, or table, or posting to the pastebin.
|
|
224
253
|
- **Transcripts are opt-in.** If you don't want to upload your agent transcripts, you can give your agent *read* access to your Stash without uploading any of your own session data.
|
|
225
254
|
|
|
226
255
|
## FAQ
|
|
227
256
|
|
|
228
257
|
**What LLMs does Stash use?**
|
|
229
|
-
|
|
258
|
+
An Anthropic key covers ask-the-stash, session titles, and scanned-PDF OCR. The chat agent is separate and runs whichever harness you point it at — Claude Code, Codex, or opencode — against your own Anthropic, OpenAI, or OpenRouter credentials. Embeddings are a third, independent choice (OpenAI, HuggingFace, or a local model). All of it is optional; without any keys the rest of Stash works and those features are disabled.
|
|
259
|
+
|
|
260
|
+
**What writes to my Stash on its own?**
|
|
261
|
+
One thing by default: the Memory curator, a scheduled agent that compiles your Memory wiki from new sessions and files. It only writes inside the reserved Memory folder, and it only reads what's new since its last run. Beyond that, nothing runs unless you create it — any agent you give a cron to becomes a scheduled agent, and those have the same reach you do.
|
|
230
262
|
|
|
231
263
|
**Can I use this without Claude Code?**
|
|
232
264
|
Yes. You can use the CLI with anything, and Stash has native plugins for Cursor, Codex, Opencode, Gemini CLI, and more.
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
<h3 align="center">Knowledge bases for the agent era.</h3>
|
|
7
7
|
|
|
8
8
|
<p align="center">
|
|
9
|
-
The one place your agents connect to all your data — GitHub, Drive, Gmail, <br>
|
|
10
|
-
|
|
11
|
-
where their sessions, files, and pages all land.
|
|
9
|
+
The one place your agents connect to all your data — GitHub, Drive, Gmail, Notion, <br>
|
|
10
|
+
Slack, Linear, Jira, Asana, Granola and more — plus an agent-native Drive in <br>
|
|
11
|
+
Markdown and HTML where their sessions, files, and pages all land.
|
|
12
12
|
</p>
|
|
13
13
|
|
|
14
14
|
|
|
@@ -39,8 +39,10 @@
|
|
|
39
39
|
|
|
40
40
|
- **Sessions stream in automatically.** A hook for your coding agent pushes every transcript — prompts, tool calls, artifacts — into your Stash.
|
|
41
41
|
- **Files and sessions live side by side.** Markdown, HTML, tables, PDFs. You and your agents both write here; both sides see edits in real time.
|
|
42
|
-
- **Agents query it like a filesystem.** A CLI, MCP server, and virtual-filesystem shell expose your Stash to any agent.
|
|
43
|
-
- **
|
|
42
|
+
- **Agents query it like a filesystem.** A CLI, MCP server (~70 read/write tools), REST API, and virtual-filesystem shell expose your Stash to any agent. One search spans your pages, sessions, and every connected source at once.
|
|
43
|
+
- **There's an agent in the box too.** Chat with an agent that already has all of this — in the app, from Slack, or from Telegram. It's a real coding-agent CLI (Claude Code, Codex, or opencode) running on your own cloud VM, so it can read, write, and run things. Give it a cron and it becomes a scheduled agent.
|
|
44
|
+
- **Memory is a wiki an agent keeps for you.** A scheduled curator reads whatever is new since its last run — sessions, files, saves — and compiles it into linked pages: entities, concepts, and a running log. It writes only inside the reserved Memory folder, and never reads its own output.
|
|
45
|
+
- **Skills are the shareable slice.** A Skill is just a folder with a `SKILL.md` in it — put the pages, files, and tables that belong together in one folder and it becomes shareable as a unit. Publish it to the world, fork a public Skill into your own Stash, or `stash skills install` one into your agent — installed skills auto-update at session start, and `stash skills follow` auto-installs skills people share with you.
|
|
44
46
|
- **Bring your own MCP servers.** Register MCP servers once (Tools page or `stash tools add`); your cloud agent gets them automatically and `stash tools install` writes them into any local agent's `.mcp.json`.
|
|
45
47
|
|
|
46
48
|
## Why persistent beats per-session
|
|
@@ -78,9 +80,12 @@ uv tool install stashai
|
|
|
78
80
|
stash signin
|
|
79
81
|
```
|
|
80
82
|
|
|
81
|
-
`stash signin`
|
|
82
|
-
|
|
83
|
-
|
|
83
|
+
`stash signin` authenticates you in the browser, asks whether you want to
|
|
84
|
+
share your agent transcripts, then finds the coding agents installed on your
|
|
85
|
+
machine and installs hooks for the ones you pick. It offers to connect the
|
|
86
|
+
repo you're standing in and to import conversations you've already had. Use
|
|
87
|
+
`stash connect` later when you're already signed in and only need to bind
|
|
88
|
+
another repo.
|
|
84
89
|
|
|
85
90
|
<details>
|
|
86
91
|
<summary>Prefer a one-liner?</summary>
|
|
@@ -114,7 +119,31 @@ stash vfs "find / -maxdepth 3 -type f | head -n 20"
|
|
|
114
119
|
stash vfs "rg \"database migration\" /"
|
|
115
120
|
```
|
|
116
121
|
|
|
117
|
-
##
|
|
122
|
+
## Connected sources
|
|
123
|
+
|
|
124
|
+
Connect a source once and every agent you point at Stash can read and search it.
|
|
125
|
+
|
|
126
|
+
| Source | What lands in your Stash |
|
|
127
|
+
|---|---|
|
|
128
|
+
| **GitHub** | Repo contents, indexed for search — one repo, a pick-list, or every repo you can see |
|
|
129
|
+
| **Google Drive** | Your Drive, searchable by name and path; pick a folder to extract full contents (PDFs and scans included) |
|
|
130
|
+
| **Gmail** | Recent mail, with search federated live to Gmail. Multiple mailboxes supported |
|
|
131
|
+
| **Slack** | Messages from the channels you choose, filed as a transcript per channel per day |
|
|
132
|
+
| **Notion** | Pages and database rows as Markdown |
|
|
133
|
+
| **Linear** / **Jira** / **Asana** | Issues and tasks, indexed by team, project, or board section |
|
|
134
|
+
| **Granola** | Meeting notes and transcripts |
|
|
135
|
+
| **PostHog** | Dashboards, insights, feature flags, and experiments |
|
|
136
|
+
| **X** | Your bookmarks, posts, replies, and articles — with thread context and media archived |
|
|
137
|
+
| **Instagram** | Saved posts and reels, captured by the browser extension |
|
|
138
|
+
|
|
139
|
+
You can also drop in an **Obsidian vault**, and the **Chrome extension** adds a
|
|
140
|
+
web clipper, a bookmark importer, YouTube transcripts, and your ChatGPT and
|
|
141
|
+
Claude.ai conversations.
|
|
142
|
+
|
|
143
|
+
Slack and Linear push changes to Stash over webhooks; everything else syncs on a
|
|
144
|
+
schedule. Pick Slack's channels yourself — nothing is indexed until you do.
|
|
145
|
+
|
|
146
|
+
## Coding agents
|
|
118
147
|
|
|
119
148
|
Stash supports the following coding agents:
|
|
120
149
|
- **Claude Code**
|
|
@@ -192,14 +221,17 @@ claude
|
|
|
192
221
|
|
|
193
222
|
Stash is built for engineering teams working in private repos.
|
|
194
223
|
|
|
195
|
-
- **LLM calls are optional and scoped.**
|
|
196
|
-
- **Private by default.** Your Stash is yours alone.
|
|
224
|
+
- **LLM calls are optional and scoped.** An Anthropic key powers ask-the-stash, session titles, and OCR for scanned PDFs; the chat agent runs on Anthropic, OpenAI, or OpenRouter with your own key. Without any of them, the rest of Stash works — those features are simply unavailable.
|
|
225
|
+
- **Private by default.** Your Stash is yours alone. Content becomes public only when you make it so: publishing a Skill, creating a public link to a page, file, folder, or table, or posting to the pastebin.
|
|
197
226
|
- **Transcripts are opt-in.** If you don't want to upload your agent transcripts, you can give your agent *read* access to your Stash without uploading any of your own session data.
|
|
198
227
|
|
|
199
228
|
## FAQ
|
|
200
229
|
|
|
201
230
|
**What LLMs does Stash use?**
|
|
202
|
-
|
|
231
|
+
An Anthropic key covers ask-the-stash, session titles, and scanned-PDF OCR. The chat agent is separate and runs whichever harness you point it at — Claude Code, Codex, or opencode — against your own Anthropic, OpenAI, or OpenRouter credentials. Embeddings are a third, independent choice (OpenAI, HuggingFace, or a local model). All of it is optional; without any keys the rest of Stash works and those features are disabled.
|
|
232
|
+
|
|
233
|
+
**What writes to my Stash on its own?**
|
|
234
|
+
One thing by default: the Memory curator, a scheduled agent that compiles your Memory wiki from new sessions and files. It only writes inside the reserved Memory folder, and it only reads what's new since its last run. Beyond that, nothing runs unless you create it — any agent you give a cron to becomes a scheduled agent, and those have the same reach you do.
|
|
203
235
|
|
|
204
236
|
**Can I use this without Claude Code?**
|
|
205
237
|
Yes. You can use the CLI with anything, and Stash has native plugins for Cursor, Codex, Opencode, Gemini CLI, and more.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: stashai
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.332
|
|
4
4
|
Summary: CLI for Stash — shared memory for AI coding agents
|
|
5
5
|
Author: Fergana Labs
|
|
6
6
|
License: MIT
|
|
@@ -33,9 +33,9 @@ Dynamic: license-file
|
|
|
33
33
|
<h3 align="center">Knowledge bases for the agent era.</h3>
|
|
34
34
|
|
|
35
35
|
<p align="center">
|
|
36
|
-
The one place your agents connect to all your data — GitHub, Drive, Gmail, <br>
|
|
37
|
-
|
|
38
|
-
where their sessions, files, and pages all land.
|
|
36
|
+
The one place your agents connect to all your data — GitHub, Drive, Gmail, Notion, <br>
|
|
37
|
+
Slack, Linear, Jira, Asana, Granola and more — plus an agent-native Drive in <br>
|
|
38
|
+
Markdown and HTML where their sessions, files, and pages all land.
|
|
39
39
|
</p>
|
|
40
40
|
|
|
41
41
|
|
|
@@ -66,8 +66,10 @@ Dynamic: license-file
|
|
|
66
66
|
|
|
67
67
|
- **Sessions stream in automatically.** A hook for your coding agent pushes every transcript — prompts, tool calls, artifacts — into your Stash.
|
|
68
68
|
- **Files and sessions live side by side.** Markdown, HTML, tables, PDFs. You and your agents both write here; both sides see edits in real time.
|
|
69
|
-
- **Agents query it like a filesystem.** A CLI, MCP server, and virtual-filesystem shell expose your Stash to any agent.
|
|
70
|
-
- **
|
|
69
|
+
- **Agents query it like a filesystem.** A CLI, MCP server (~70 read/write tools), REST API, and virtual-filesystem shell expose your Stash to any agent. One search spans your pages, sessions, and every connected source at once.
|
|
70
|
+
- **There's an agent in the box too.** Chat with an agent that already has all of this — in the app, from Slack, or from Telegram. It's a real coding-agent CLI (Claude Code, Codex, or opencode) running on your own cloud VM, so it can read, write, and run things. Give it a cron and it becomes a scheduled agent.
|
|
71
|
+
- **Memory is a wiki an agent keeps for you.** A scheduled curator reads whatever is new since its last run — sessions, files, saves — and compiles it into linked pages: entities, concepts, and a running log. It writes only inside the reserved Memory folder, and never reads its own output.
|
|
72
|
+
- **Skills are the shareable slice.** A Skill is just a folder with a `SKILL.md` in it — put the pages, files, and tables that belong together in one folder and it becomes shareable as a unit. Publish it to the world, fork a public Skill into your own Stash, or `stash skills install` one into your agent — installed skills auto-update at session start, and `stash skills follow` auto-installs skills people share with you.
|
|
71
73
|
- **Bring your own MCP servers.** Register MCP servers once (Tools page or `stash tools add`); your cloud agent gets them automatically and `stash tools install` writes them into any local agent's `.mcp.json`.
|
|
72
74
|
|
|
73
75
|
## Why persistent beats per-session
|
|
@@ -105,9 +107,12 @@ uv tool install stashai
|
|
|
105
107
|
stash signin
|
|
106
108
|
```
|
|
107
109
|
|
|
108
|
-
`stash signin`
|
|
109
|
-
|
|
110
|
-
|
|
110
|
+
`stash signin` authenticates you in the browser, asks whether you want to
|
|
111
|
+
share your agent transcripts, then finds the coding agents installed on your
|
|
112
|
+
machine and installs hooks for the ones you pick. It offers to connect the
|
|
113
|
+
repo you're standing in and to import conversations you've already had. Use
|
|
114
|
+
`stash connect` later when you're already signed in and only need to bind
|
|
115
|
+
another repo.
|
|
111
116
|
|
|
112
117
|
<details>
|
|
113
118
|
<summary>Prefer a one-liner?</summary>
|
|
@@ -141,7 +146,31 @@ stash vfs "find / -maxdepth 3 -type f | head -n 20"
|
|
|
141
146
|
stash vfs "rg \"database migration\" /"
|
|
142
147
|
```
|
|
143
148
|
|
|
144
|
-
##
|
|
149
|
+
## Connected sources
|
|
150
|
+
|
|
151
|
+
Connect a source once and every agent you point at Stash can read and search it.
|
|
152
|
+
|
|
153
|
+
| Source | What lands in your Stash |
|
|
154
|
+
|---|---|
|
|
155
|
+
| **GitHub** | Repo contents, indexed for search — one repo, a pick-list, or every repo you can see |
|
|
156
|
+
| **Google Drive** | Your Drive, searchable by name and path; pick a folder to extract full contents (PDFs and scans included) |
|
|
157
|
+
| **Gmail** | Recent mail, with search federated live to Gmail. Multiple mailboxes supported |
|
|
158
|
+
| **Slack** | Messages from the channels you choose, filed as a transcript per channel per day |
|
|
159
|
+
| **Notion** | Pages and database rows as Markdown |
|
|
160
|
+
| **Linear** / **Jira** / **Asana** | Issues and tasks, indexed by team, project, or board section |
|
|
161
|
+
| **Granola** | Meeting notes and transcripts |
|
|
162
|
+
| **PostHog** | Dashboards, insights, feature flags, and experiments |
|
|
163
|
+
| **X** | Your bookmarks, posts, replies, and articles — with thread context and media archived |
|
|
164
|
+
| **Instagram** | Saved posts and reels, captured by the browser extension |
|
|
165
|
+
|
|
166
|
+
You can also drop in an **Obsidian vault**, and the **Chrome extension** adds a
|
|
167
|
+
web clipper, a bookmark importer, YouTube transcripts, and your ChatGPT and
|
|
168
|
+
Claude.ai conversations.
|
|
169
|
+
|
|
170
|
+
Slack and Linear push changes to Stash over webhooks; everything else syncs on a
|
|
171
|
+
schedule. Pick Slack's channels yourself — nothing is indexed until you do.
|
|
172
|
+
|
|
173
|
+
## Coding agents
|
|
145
174
|
|
|
146
175
|
Stash supports the following coding agents:
|
|
147
176
|
- **Claude Code**
|
|
@@ -219,14 +248,17 @@ claude
|
|
|
219
248
|
|
|
220
249
|
Stash is built for engineering teams working in private repos.
|
|
221
250
|
|
|
222
|
-
- **LLM calls are optional and scoped.**
|
|
223
|
-
- **Private by default.** Your Stash is yours alone.
|
|
251
|
+
- **LLM calls are optional and scoped.** An Anthropic key powers ask-the-stash, session titles, and OCR for scanned PDFs; the chat agent runs on Anthropic, OpenAI, or OpenRouter with your own key. Without any of them, the rest of Stash works — those features are simply unavailable.
|
|
252
|
+
- **Private by default.** Your Stash is yours alone. Content becomes public only when you make it so: publishing a Skill, creating a public link to a page, file, folder, or table, or posting to the pastebin.
|
|
224
253
|
- **Transcripts are opt-in.** If you don't want to upload your agent transcripts, you can give your agent *read* access to your Stash without uploading any of your own session data.
|
|
225
254
|
|
|
226
255
|
## FAQ
|
|
227
256
|
|
|
228
257
|
**What LLMs does Stash use?**
|
|
229
|
-
|
|
258
|
+
An Anthropic key covers ask-the-stash, session titles, and scanned-PDF OCR. The chat agent is separate and runs whichever harness you point it at — Claude Code, Codex, or opencode — against your own Anthropic, OpenAI, or OpenRouter credentials. Embeddings are a third, independent choice (OpenAI, HuggingFace, or a local model). All of it is optional; without any keys the rest of Stash works and those features are disabled.
|
|
259
|
+
|
|
260
|
+
**What writes to my Stash on its own?**
|
|
261
|
+
One thing by default: the Memory curator, a scheduled agent that compiles your Memory wiki from new sessions and files. It only writes inside the reserved Memory folder, and it only reads what's new since its last run. Beyond that, nothing runs unless you create it — any agent you give a cron to becomes a scheduled agent, and those have the same reach you do.
|
|
230
262
|
|
|
231
263
|
**Can I use this without Claude Code?**
|
|
232
264
|
Yes. You can use the CLI with anything, and Stash has native plugins for Cursor, Codex, Opencode, Gemini CLI, and more.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/claude/scripts/on_session_start.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/cursor/scripts/on_agent_response.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/cursor/scripts/on_session_start.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/gemini/scripts/on_session_start.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/hermes/scripts/on_session_start.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/openclaw/scripts/on_session_end.py
RENAMED
|
File without changes
|
{stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/openclaw/scripts/on_session_start.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/opencode/scripts/on_session_end.py
RENAMED
|
File without changes
|
{stashai-0.1.330 → stashai-0.1.332}/stashai/plugin/assets/opencode/scripts/on_session_start.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|