Integrations
Aider
Persistent cross-session memory for Aider. Decisions from last week's session are available in today's — without re-pasting context.
Why Waystone + Aider
Aider is excellent at coding against your repository, but each session starts cold. Architectural decisions, rejected approaches, and implementation constraints live in your head, not Aider's. Waystone fixes this:
- Retrieves only what's relevant to the current file or task — not a flat dump of everything
- Persists rejected approaches so Aider doesn't re-suggest them the next session
- Accumulates project-specific decisions (naming conventions, API choices, architecture) across months of work
- Runs locally — no data leaves your machine unless you opt into the hosted API
1. Install Waystone
# CLI in early access — request at unbidden.ai
Verify the install:
waystone --version
2. Add to your Aider MCP config
Create or edit ~/.aider/mcp.json (global) or .aider/mcp.json in your project root:
{
"mcpServers": {
"waystone": {
"command": "waystone",
"args": ["mcp-serve"],
"env": {
"WAYSTONE_PROJECT": "my-project"
}
}
}
}
Replace my-project with the name for this project's memory store. Then launch Aider pointing at the config:
aider --mcp-config ~/.aider/mcp.json
Or add it to your .aider.conf.yml so it applies to every session in the project:
mcp-config: .aider/mcp.json
Once connected, you'll see waystone_query, waystone_extract, waystone_stats, and waystone_list_projects in the available tools.
3. Set your system prompt
Tell Aider to use Waystone memory at session start and end. Add this to your --system-prompt or create a .aider/system_prompt.md:
## Memory (Waystone)
At the start of each session, call waystone_query with a brief description of
the current task or the file you're about to edit. This retrieves relevant
decisions, constraints, and architectural context from prior sessions.
After completing significant work — a feature, a refactor, a tricky bug fix —
call waystone_extract with a summary of what was changed and why. Focus on
decisions that would save time if you had to re-explain them next session.
Do not duplicate memory into comments or NOTES.md. Use waystone_extract instead.
4. Initialize the project
Before the first session, initialize the Waystone project:
waystone init my-project
If you have an existing NOTES.md or architecture document, seed it now:
waystone extract my-project NOTES.md
Verify the import:
waystone show my-project
How it works in practice
Once configured, Aider sessions follow this pattern automatically:
- Session start: Aider calls
waystone_querywith the current task. Waystone returns the 10–25 most relevant facts — naming conventions, prior decisions about the file being edited, rejected approaches. - During the session: You edit files, Aider applies changes.
waystone_querymay be called again as the scope evolves. - Session end: Aider calls
waystone_extractwith a summary of what changed and why. Waystone extracts structured facts, detects which supersede prior decisions, and updates the graph.
Hosted API (optional)
By default, Waystone runs locally — memory is a SQLite file in ~/.waystone/. For cross-machine access:
{
"mcpServers": {
"waystone": {
"command": "waystone",
"args": ["mcp-serve"],
"env": {
"WAYSTONE_PROJECT": "my-project",
"WAYSTONE_API_KEY": "your-api-key",
"WAYSTONE_REMOTE_URL": "https://api.waystone.unbidden.ai"
}
}
}
}
Get an API key from the Pro or Team plan. Local mode is free and has no rate limits.
Troubleshooting
Tools don't appear after adding the config
Make sure waystone is on your PATH. Run which waystone in a terminal — if not found, reinstall with # CLI in early access — request at unbidden.ai and confirm your Python bin directory is in PATH. Double-check the --mcp-config path is correct.
waystone_query returns empty results
The project may not be initialized or may be empty. Run waystone list to check. If empty, run waystone init my-project and optionally seed it with waystone extract my-project NOTES.md.
How do I use different projects per repository?
Create a .aider/mcp.json in each project root with a different WAYSTONE_PROJECT value. The local config overrides the global one. Alternatively, pass project= explicitly when calling the tools.