Bring existing knowledge in
Start from what the team has already written
Notion pages and a saved chat archive can be imported. Content that has not changed is skipped next time. Quick notes move into long-term memory every 15 minutes by default.
The pilot let a team's AI tools save and find the same background information, with a separate store for each client. The pilot was tested on a private server using separate sessions and access keys. ChatGPT is not connected yet.
CreditCo-built by our founder, as lead developer, with the partner agency's CTO.
One fact, two sessions
A fact saved in one session can be found in the next. It keeps its client space and its source.
remember · Writer session
Save this decision in Client A's space.
Stored with its source
recall · New session
It searches only the spaces this key may read.
recall · Reader session
The same fact, found from a different session.
Source kept with it
forget · History retained
Kept as history. Marked invalid.
The access rule: a fact belongs to Client A. A session with permission can find it; a key without access cannot. Withdrawing it later keeps the old record and marks it invalid.
When the team switched between AI tools, the background information did not come with them.
A digital agency used chat assistants, coding assistants and AI agents that do routine tasks. Client knowledge sat in pages in Notion, a shared workspace, and chat threads. The team wanted every tool to start from the same facts, without mixing one client's information with another's.
The problem
People pasted the same background into each new session, instead of starting from facts the team had already saved.
The same team worked with several clients, so each client's notes had to be kept apart.
Decisions were hidden in Notion pages and chats. The team needed to know who saved a fact, and when it stopped being true.
Four kinds of memory space
Personal, team, client and project memory are kept in separate files. An access key can only read or save where it has been given access.
| Space | This key can |
|---|---|
| PersonalOne person's notes | No access |
| TeamShared agency context | Read |
| Client AThis key's client | Read + save |
| Client BA different client's file | No access |
| ProjectThe launch work | Read |
The check happens before anything is read or saved, not after the result comes back.
Bring existing knowledge in
Notion pages and a saved chat archive can be imported. Content that has not changed is skipped next time. Quick notes move into long-term memory every 15 minutes by default.
Take the knowledge with you
The memory can be exported as plain text files (Markdown and JSON). The team can read and move its records without keeping this service running.
Control and safety
Every time a tool reads or saves something, the same service checks it. The tool's access key must allow that action in that space. Each client's memory is also kept in its own database file.
For technical readers
AI tools connect through MCP (Model Context Protocol), an open standard that lets AI tools use other software. The service checks permissions, picks the right memory file and records each save. Notion imports, chat imports and the timer that saves notes use the same service.
Dashed lines show supporting connections, or parts that are paused or not yet built.
| Layer | Technology | Why it was chosen |
|---|---|---|
| Connection | MCP Python SDK / FastMCP | A direct local link for one laptop, or a web connection (HTTP) for a team. |
| Memory | mnemosyne-memory / SQLite | Finds the most relevant facts first, keeps timestamps, and uses one database file per space. |
| Service | Python 3.12 / Pydantic / structlog | Handles permissions, records who saved what and makes repeated saves safe, all in one place. |
| Control data | SQLAlchemy 2 / SQLite | Stores users, access keys, the history of changes and import progress. Larger teams can use a Postgres database instead. |
| Operations | FastAPI / uvicorn | Status checks and a link that Notion calls when pages change. Memory commands only go through MCP. |
| Quick notes | In-process buffer / optional Redis | Short-term notes move into long-term memory on a timer. |
| Imports | Notion API / local chat archive | Fingerprints of content and saved progress stop unchanged content being imported again. |
| Optional extraction | Patterns or an OpenRouter model | Pulls facts out of text. Off by default; using an AI model adds cost and needs a person to check the results. |
| Access | Per-user bearer tokens / HMAC-SHA256 | The database stores one-way checks of access keys (hashes), rather than the keys themselves. Keys have read and save limits, can be cancelled and expire after 90 days by default. |
| Hosting | Linux / systemd / Tailscale or TLS proxy | Runs on the team's own server, with backup copies of the database; the recorded setup is for small teams. |
| Checks | pytest / ruff / mypy / GitHub Actions | The local check runs the same tests as the automatic checks on every code change. |
Our founder built the checks that refuse access unless it is allowed, and the tests for each space. The partner CTO moved the memory to one database file per space and added web routing. A test confirms that one client's key cannot save into another client's memory.
At first, the memory only searched the session a fact was saved in. The CTO used one fixed session inside each memory store and removed an unsorted backup search, so facts could be found and ranked across tools.
Our founder made the web service refuse to start without sign-in checks, unless someone deliberately turns them off. The Notion link refuses requests without its secret key (error 503), and each user only sees the spaces they may read.
Our founder changed the quick-note store to take a batch of notes in one step, and to put unfinished notes back after a failure. Three tests cover lost notes, duplicate saves and recovery.
The first live server closed its database connections after each session. The CTO found the problem, kept connections open and limited open memory stores to 64.
Is it a fit?
Conducted by Apurva · Not a sales call
Or write to care@brownmind.com