A file-system inspired context store for AI agents
Project description
sayou
The persistent workspace for AI agents.
sayou gives AI agents persistent, structured, enterprise-controlled storage. Agents write files. Files accumulate. Knowledge compounds.
- Persistent file workspace — Versioned files organized in folders. Survives beyond any single conversation.
- Structured metadata — YAML frontmatter for queryable fields (
status: active,priority: high). Markdown body for context. - Hierarchical auto-indexing — Every write triggers index regeneration up the folder tree. Agents navigate thousands of files in 3-4 reads.
- Context-aware retrieval — Every read accepts a
token_budget. Returns summaries with pointers when content exceeds the budget. - Append-only version history — No destructive updates. Every change is a new version. Full audit trail and time-travel for free.
Quickstart: Python API
pip install sayou
import asyncio
from sayou import Workspace
async def main():
async with Workspace(org_id="my-org", user_id="alice") as ws:
# Write a file with YAML frontmatter
await ws.write("notes/hello.md", """\
---
status: active
tags: [demo, quickstart]
---
# Hello from sayou
This file is versioned and searchable.
""")
# Read it back
doc = await ws.read("notes/hello.md")
print(doc["content"])
# Search by frontmatter
results = await ws.search(filters={"status": "active"})
print(f"Found {results['total']} active files")
# List a folder
folder = await ws.list("notes/")
print(f"{folder['file_count']} files in notes/")
asyncio.run(main())
By default this creates a local SQLite database (./sayou.db) — zero config, nothing to install.
Quickstart: MCP Server
Add sayou to Claude Code or any MCP-compatible client:
{
"mcpServers": {
"sayou": {
"command": "sayou",
"env": {
"SAYOU_ORG_ID": "my-org",
"SAYOU_USER_ID": "alice"
}
}
}
}
That's it. The agent gets 8 tools: workspace_write, workspace_read, workspace_list, workspace_search, workspace_delete, workspace_history, workspace_glob, workspace_grep.
Quickstart: CLI Agent Example
Seed a workspace with sample data, then chat with it using an OpenAI-backed agent:
pip install sayou[examples]
python examples/seed_data.py # writes ~28 files across 5 folders
python examples/ask.py # natural language agent (needs OPENAI_API_KEY)
ask> what competitors have we analyzed?
[list_files] {"path": "competitors/", "recursive": false}
[read_file] {"path": "competitors/notion.md"}
We've analyzed 6 competitors: Notion, Linear, Airtable, Figma, Retool, and Vercel...
ask> add a competitor analysis for Shopify
[write_file] {"path": "competitors/shopify.md", "content": "---\ncompany: Shopify\n..."}
Wrote competitors/shopify.md (v1, 1,204 bytes)
See examples/seed_data.py and examples/ask.py for the full source.
API Reference
All methods are async. The Workspace class binds identity (org_id, user_id) once at construction.
| Method | Signature | Description |
|---|---|---|
write |
(path, content, *, source=None) |
Write or update a file. Returns version info. |
read |
(path, *, token_budget=4000, version=None) |
Read latest (or specific) version of a file. |
list |
(path="/", *, recursive=False) |
List files and subfolders with auto-generated index. |
search |
(*, query=None, filters=None) |
Search by full-text query and/or frontmatter filters. |
glob |
(pattern) |
Find files matching a glob pattern (**/*.md). |
grep |
(query, *, path_pattern=None, context_lines=2) |
Search file contents for a string, with context. |
delete |
(path, *, source=None) |
Soft-delete a file. Version history is preserved. |
history |
(path, *, limit=20) |
Get version history with timestamps and hashes. |
Storage Backends
| Backend | Config | Use case |
|---|---|---|
| SQLite + local disk (default) | No config needed | Local dev, single-machine agents, MCP server |
| MySQL + S3 | Set database_url, S3 credentials |
Production, multi-agent, shared workspaces |
# Local (default) — just works
async with Workspace() as ws: ...
# Production
async with Workspace(
database_url="mysql+aiomysql://user:pass@host/sayou",
s3_bucket="my-bucket",
s3_access_key_id="...",
s3_secret_access_key="...",
) as ws: ...
What sayou is NOT
- Not a vector database. Pinecone, Weaviate, and Chroma store embeddings for similarity search. sayou stores structured files that agents read, write, and reason over.
- Not a memory layer. Mem0 and similar tools store conversation snippets. sayou stores work product — research, client records, project documentation — that compounds over time.
- Not a sandbox. E2B provides ephemeral execution environments. sayou provides persistent storage that outlives any single execution.
- Not a filesystem. AgentFS intercepts syscalls to virtualize file operations. sayou is a knowledge workspace with versioning, indexing, and context-aware retrieval built in.
Philosophy
Read PHILOSOPHY.md for the founding vision and design principles.
Contributing
See CONTRIBUTING.md.
License
Apache 2.0 — See LICENSE
Project details
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 sayou-0.1.1.tar.gz.
File metadata
- Download URL: sayou-0.1.1.tar.gz
- Upload date:
- Size: 99.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6cfdd25314749b9929ac894dc22ac1ec7b01dfdc0b15eff5ebc881ad4aef26bd
|
|
| MD5 |
3fcb096d04d714db44a50d1ab72c8a25
|
|
| BLAKE2b-256 |
e8b36765b5c1a92b301eaf8410722080a7dfc2664243d53069ae7b8720739b3e
|
Provenance
The following attestation bundles were made for sayou-0.1.1.tar.gz:
Publisher:
publish.yml on pixell-global/sayou
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sayou-0.1.1.tar.gz -
Subject digest:
6cfdd25314749b9929ac894dc22ac1ec7b01dfdc0b15eff5ebc881ad4aef26bd - Sigstore transparency entry: 954079292
- Sigstore integration time:
-
Permalink:
pixell-global/sayou@e90d4e208ee18088d69429a09487c135685170f6 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/pixell-global
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e90d4e208ee18088d69429a09487c135685170f6 -
Trigger Event:
release
-
Statement type:
File details
Details for the file sayou-0.1.1-py3-none-any.whl.
File metadata
- Download URL: sayou-0.1.1-py3-none-any.whl
- Upload date:
- Size: 41.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
842a0bb17883b3ea276491f49fcd18b1ddad753351be88183ee47df70bc07084
|
|
| MD5 |
8bb514fb23c55bb7659023b5a1c77a58
|
|
| BLAKE2b-256 |
a40e43ed7531e47de34fe4dcfabe3c3322e42c7b9e4709583c027aaaaabdc93c
|
Provenance
The following attestation bundles were made for sayou-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on pixell-global/sayou
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sayou-0.1.1-py3-none-any.whl -
Subject digest:
842a0bb17883b3ea276491f49fcd18b1ddad753351be88183ee47df70bc07084 - Sigstore transparency entry: 954079578
- Sigstore integration time:
-
Permalink:
pixell-global/sayou@e90d4e208ee18088d69429a09487c135685170f6 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/pixell-global
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e90d4e208ee18088d69429a09487c135685170f6 -
Trigger Event:
release
-
Statement type: