Give your AI a memory — the fourth one stayed up. No API key required.
Project description
SwampCastle
Built on the foundations of MemPalace.
The fourth one stayed up.
Local, searchable memory for AI assistants.
What SwampCastle is
SwampCastle v4 stores verbatim memory in a collection backend and structured facts in a graph backend.
- Local mode: LanceDB + SQLite
- Server mode: PostgreSQL + pgvector
- Test mode: in-memory stores
The public architecture is:
CLI / MCP / Sync
↓
Castle
├── CatalogService
├── SearchService
├── VaultService
└── GraphService
↓
CollectionStore + GraphStore
The spatial model is still the same:
WING (project / person / domain)
└── ROOM (topic)
└── DRAWER (verbatim text chunk)
Install
pip install swampcastle
Requirements
- Python 3.11+
- first-run ONNX model download for the default embedder (~87 MB, cached locally)
Optional extras:
pip install 'swampcastle[server]' # FastAPI + uvicorn for sync server
pip install 'swampcastle[postgres]' # PostgreSQL + pgvector backend
pip install 'swampcastle[gpu]' # sentence-transformers embedder support
pip install 'swampcastle[chroma]' # legacy ChromaDB tooling for migration only
Quick start
Before doing anything else, SwampCastle will create a default global runtime config at ~/.swampcastle/config.json the first time you use the CLI. The default backend is Lance. If you want to change backend or storage settings, run:
swampcastle wizard
The wizard can also store your own identity in ~/.swampcastle/entity_registry.json so SwampCastle can recognize you by name or nickname during ingest.
1. Prepare a project
swampcastle project ~/projects/myapp --team dekoza sarah
project creates project-local mining config in .swampcastle.yaml. It does not ingest files by itself. If an older swampcastle.yaml exists, SwampCastle will migrate it to the hidden filename and tell you.
The optional team list lets ingest tag drawers with a best-effort contributor identity from git history.
2. Ingest files
swampcastle gather ~/projects/myapp
Conversation exports use the same command:
swampcastle gather ~/chat-exports --mode convos --wing myapp
3. Search
swampcastle seek "why did we switch auth providers"
swampcastle seek "pricing" --wing myapp --room billing
swampcastle seek "auth migration" --contributor dekoza
4. Inspect the castle
swampcastle survey
swampcastle brief --wing myapp
Use brief (alias: minstrel) when you want a human-readable wing summary. Use herald when you want the strict SwampCastle memory-use protocol for agent instructions.
MCP setup
Show the setup command:
swampcastle drawbridge
Run the server directly:
swampcastle drawbridge run
# or
swampcastle-mcp
Example Claude Code setup:
claude mcp add swampcastle -- swampcastle-mcp
Example Gemini CLI setup:
gemini mcp add swampcastle swampcastle-mcp --scope user
See docs/mcp.md.
Python API
Recommended entry point:
from swampcastle.castle import Castle
from swampcastle.models import AddDrawerCommand, SearchQuery
from swampcastle.settings import CastleSettings
from swampcastle.storage import factory_from_settings
settings = CastleSettings(_env_file=None)
factory = factory_from_settings(settings)
with Castle(settings, factory) as castle:
castle.vault.add_drawer(
AddDrawerCommand(
wing="myapp",
room="auth",
content="We switched providers because rotation and local testing got simpler.",
)
)
result = castle.search.search(SearchQuery(query="provider switch", wing="myapp"))
print(result.results)
For low-level backend access, see docs/python-api.md.
Sync
Hub:
pip install 'swampcastle[server]'
swampcastle serve --host 0.0.0.0 --port 7433
Client:
swampcastle sync --server http://homeserver:7433
SwampCastle sync now works against the configured collection backend. Version vectors are still stored locally alongside castle_path.
See docs/sync.md.
Legacy Chroma migration
SwampCastle can raise a legacy ChromaDB palace into the v4 local castle layout:
swampcastle raise --source-palace ~/.mempalace/palace
By default the target is your configured castle_path (usually ~/.swampcastle/castle).
You can override it:
swampcastle raise --source-palace ~/.mempalace/palace --target-castle /tmp/swampcastle/castle
swampcastle raise --source-palace ~/.mempalace/palace --dry-run
The source palace is left untouched. Drawer data is imported into LanceDB, and common sidecar files such as the knowledge graph and sync identity files are copied when present.
Current state of the CLI
The core ingest / search / MCP / sync path is working:
projectgather/mineseek/searchsurvey/statusdrawbridge/mcpserve/sync
Some maintenance commands are still being rebuilt and are intentionally thin right now:
reforge/reindexdistill/compress
The docs call that out explicitly where relevant instead of pretending those flows are complete.
Documentation
| Document | Contents |
|---|---|
| Getting started | First ingest, first search, MCP setup |
| Architecture | Castle, services, storage contracts, backends |
| CLI reference | Real command surface and aliases |
| Configuration | CastleSettings, env vars, backend selection |
| Mining | Project + conversation ingest |
| Searching | CLI and Python search flows |
| Knowledge graph | Graph service and direct stores |
| MCP server | Setup and tool catalog |
| Sync | Hub / spoke sync model |
| Hooks | Hook protocol and supported harnesses |
| Python API | Programmatic usage |
| AAAK dialect | Experimental compression layer |
| Migration | Moving from MemPalace |
| Changelog | Release history and notable changes |
| Notices | Security notes and release errata |
License
MIT — 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 swampcastle-4.1.0.tar.gz.
File metadata
- Download URL: swampcastle-4.1.0.tar.gz
- Upload date:
- Size: 603.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.10 {"installer":{"name":"uv","version":"0.10.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Manjaro Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
153b53a28b3d1b9e1500a01d965ba0110dca68df7a79f762cb9ec46ba500bc0b
|
|
| MD5 |
4071ed2588f9960acea82c3626797eaa
|
|
| BLAKE2b-256 |
70cca1de2e2eb7c6ff4572efdd497a7b1974b9df7e533ac5fb7d18ce4d8c48ee
|
File details
Details for the file swampcastle-4.1.0-py3-none-any.whl.
File metadata
- Download URL: swampcastle-4.1.0-py3-none-any.whl
- Upload date:
- Size: 171.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.10 {"installer":{"name":"uv","version":"0.10.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Manjaro Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
185522fcced055ab8a107c49a8979de5b886d7da5de3906a1461515863e332e4
|
|
| MD5 |
9131931bc11b739a18c16439643d1856
|
|
| BLAKE2b-256 |
18d3bb74ead26c9ca7027992b03bafd0cf9f2e3721c282d5566ee82bef36ae4a
|