Local-first persistent memory MCP server for AI coding agents.
Runs on your machine from its package; the steps are below.
At most: creates or changes data: records, files, settings.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally
This server runs on your machine over stdio, but its source registry didn't list a distribution package. Check the source repository for setup instructions.
Phase 0.5 MVP: a small Rust MCP server that gives Claude Code persistent, project-scoped memory using SQLite FTS5.
AI coding agents lose important context when a session ends. Architecture decisions, failed approaches, project conventions, and bug-fix details often have to be explained again.
AgentOS provides a small local memory layer that coding agents can access through MCP. Memories are stored in SQLite and retrieved with FTS5 keyword search—without a cloud account, embedding API, or external database.
Phase 0.5 is intentionally narrow: save explicit project memories and retrieve them in future Claude Code sessions.
memory.remember and memory.search┌─────────────────────┐
│ Claude Code │
└──────────┬──────────┘
│
│ MCP JSON-RPC
│ newline-delimited stdio
▼
┌─────────────────────┐
│ AgentOS │
│ │
│ memory.remember │
│ memory.search │
└──────────┬──────────┘
│
│ rusqlite
▼
┌─────────────────────┐
│ SQLite + FTS5 │
│ │
│ Local persistence │
│ Keyword search │
└─────────────────────┘
SQLite is the source of truth. The FTS5 index is kept synchronized with the memories table through SQLite triggers.
AgentOS currently uses a Windows-first development workflow.
Install:
A separate SQLite installation is not required. AgentOS compiles and links bundled SQLite through rusqlite.
Open PowerShell:
git clone https://github.com/OfficialTanishSharma/agentos.git
Set-Location .\agentos
rustc --version
cargo --version
rustup show
The active host should normally be:
x86_64-pc-windows-msvc
If required, select it explicitly:
rustup default stable-x86_64-pc-windows-msvc
cargo test
cargo build --release
The release binary will be created at:
target\release\agentos.exe
Verify it:
Get-Item .\target\release\agentos.exe
Resolve the release binary to an absolute path:
$agentos = (Resolve-Path .\target\release\agentos.exe).Path
Register it as a project-scoped stdio MCP server:
claude mcp add --transport stdio --scope project agentos -- $agentos
Inspect the configuration and connection status:
claude mcp get agentos
claude mcp list
The expected status is:
✔ Connected
If the server is waiting for project approval, start Claude Code and approve the MCP configuration:
claude
Inside Claude Code, ask:
Call memory.remember with these values:
title: AgentOS storage decision
body: AgentOS Phase 0.5 uses bundled SQLite with FTS5 for local persistent keyword search.
tags: architecture, sqlite, phase-0.5
Ask:
Call memory.search with query "SQLite FTS5 storage" and limit 10.
Exit Claude Code, start a new session from the same project directory, and repeat the search. The saved memory should remain available.
On Windows, the default database is:
%USERPROFILE%\.agentos\agentos.db
Inspect it with PowerShell:
$db = "$env:USERPROFILE\.agentos\agentos.db"
Get-Item $db
Get-Item "$db-wal" -ErrorAction SilentlyContinue
Get-Item "$db-shm" -ErrorAction SilentlyContinue
Override the location for the current PowerShell session:
$env:AGENTOS_DB = "$PWD\agentos-test.db"
Remove the override:
Remove-Item Env:AGENTOS_DB
| Tool | Purpose | Required arguments |
|---|---|---|
memory.remember | Store a durable memory for the current project | title, body |
memory.search | Search current-project memories with SQLite FTS5 | query |
memory.rememberUse memory.remember for information that should survive future coding sessions:
Example arguments:
{
"title": "Use WAL mode for SQLite",
"body": "AgentOS uses SQLite WAL mode so readers are not blocked by normal write activity. A five-second busy timeout handles short lock contention.",
"tags": [
"architecture",
"sqlite",
"concurrency"
]
}
Example result:
Remembered 'Use WAL mode for SQLite' with ID 46a71d9cb5b748efbd66738758cb089a.
Arguments:
| Name | Type | Required | Description |
|---|---|---|---|
title | string | Yes | Short, searchable memory title |
body | string | Yes | Full memory content |
tags | string array | No | Searchable labels |
memory.searchmemory.search performs local FTS5 keyword search. Titles receive a higher BM25 ranking weight than memory bodies and tags.
Example arguments:
{
"query": "SQLite WAL concurrency",
"limit": 10
}
Example result:
1. Use WAL mode for SQLite
ID: 46a71d9cb5b748efbd66738758cb089a
Tags: architecture, sqlite, concurrency
Created: 2026-09-18T14:32:10.125Z
AgentOS uses SQLite WAL mode so readers are not blocked by normal write activity. A five-second busy timeout handles short lock contention.
Arguments:
| Name | Type | Required | Description |
|---|---|---|---|
query | string | Yes | Keywords to search for |
limit | integer | No | Number of results, from 1 to 50; defaults to 10 |
Search terms are quoted and joined with OR. This keeps the FTS query safe and favors useful partial matches, but it is not semantic search.
Claude Code starts AgentOS as a child process and communicates with it using newline-delimited JSON-RPC over stdin and stdout.
AgentOS implements the MCP methods required for this MVP:
initialize
ping
tools/list
tools/call
Protocol responses are written only to stdout. Startup information and diagnostic messages are written to stderr so they do not corrupt MCP framing.
When the process starts, AgentOS:
The default project key is the canonical working-directory path with Windows path separators converted to forward slashes. Every search filters by this key.
Because project isolation depends on the working directory, Claude Code should be started from the same project root when memories are saved and retrieved.
Phase 0.5 does not include:
These limitations are intentional. Phase 0.5 tests the smallest useful version of persistent coding-agent memory before introducing additional storage and retrieval systems.
cargo fmt
cargo fmt --check
cargo check
cargo clippy --all-targets --all-features -- -D warnings
cargo test
cargo test -- --nocapture
The current tests cover:
cargo build --release
Generate a SHA-256 checksum:
Get-FileHash .\target\release\agentos.exe -Algorithm SHA256 |
Format-List
Create a JSONL request file:
@'
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"manual-test","version":"1.0"}}}
{"jsonrpc":"2.0","method":"notifications/initialized","params":{}}
{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"memory.remember","arguments":{"title":"Manual test","body":"AgentOS stored this memory through MCP JSON-RPC.","tags":["test","mcp"]}}}
{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"memory.search","arguments":{"query":"manual MCP test","limit":10}}}
'@ | Set-Content .\requests.jsonl -Encoding utf8
Run it through AgentOS:
Get-Content .\requests.jsonl -Encoding utf8 |
.\target\release\agentos.exe --db "$PWD\manual-test.db"
The server should respond to request IDs 1, 2, 3, and 4. It should not respond to notifications/initialized.
Planned direction:
The local-first requirement remains: memory search should not require a hosted embedding API.
Planned direction:
Skill installation should remain explicit and reviewable.
Planned direction:
The roadmap may change based on Phase 0.5 usage and reported failure cases.
AgentOS is available under the MIT License.
Copyright (c) 2026 Tanish Sharma