Vexic
Memory your agents can trust.
Vexic is a local-first memory core for long-running AI agents. It stores cleaned conversation history, stages candidate memories for review, and promotes durable facts, each one traceable to the messages it came from.
Status: v0.1.8. The current package is a Python 3.13 core with a SQLite reference service, public contract models, retrieval primitives, and conformance tests. It runs entirely on your machine: it reads and writes a local database and never exfiltrates data.
Local MCP works today. A hosted service is coming. See vexic.dev to learn more and join the waitlist. Hosted surfaces in this repository are internal-alpha adapter code, not a public service contract.
Install
pip install vexic
Or with uv:
uv add vexic
Quick Start
Installing the package puts the vexic command on your PATH. Run the local
read-only MCP server against a Vexic database:
# POSIX shells (bash/zsh)
vexic mcp-stdio --db-path ./memory.db --tenant-id local --session-id default
# PowerShell
vexic mcp-stdio --db-path .\memory.db --tenant-id local --session-id default
The server exposes two read-only tools to the agent: recall_conversation_history
(this session's transcript) and recall_user_memory (durable facts and
preferences). recall_user_memory embeds the query locally; install the
optional extra with pip install "vexic[local-embed]" to enable it. See
docs/usage.md
for MCP client setup, the transcript recorder, and smoke-test examples.
From a source checkout (no install), run the same server through uv:
uv run python scripts/vexic-mcp-stdio.py --db-path ./memory.db --tenant-id local --session-id default
Python Quickstart
Use the library directly from Python: append to a session transcript, then search it back.
import asyncio
from pydantic_ai.messages import ModelRequest, UserPromptPart
from vexic import (
AppendTranscriptRequest, LocalMemoryService, MemoryCapability, MemoryScope,
Principal, PrincipalType, RedactionContext, SearchTranscriptRequest, TrustBoundary,
)
from vexic.storage import single_message_adapter
scope = MemoryScope(
tenant_id="local", session_id="session-1",
principal=Principal(principal_id="me", principal_type=PrincipalType.HUMAN),
trust_boundary=TrustBoundary.LOCAL_TRUSTED,
capabilities={MemoryCapability.WRITE, MemoryCapability.SEARCH},
)
async def main() -> None:
service = LocalMemoryService(db_path="memory.db", tenant_id="local")
service.init_schema()
message = ModelRequest(parts=[UserPromptPart(content="I prefer tabs over spaces.")])
await service.append_transcript(AppendTranscriptRequest(
scope=scope,
messages_json=[single_message_adapter.dump_json(message).decode()],
redaction=RedactionContext(forbidden_values=()),
))
result = await service.search_transcript(SearchTranscriptRequest(scope=scope, query="tabs"))
print(result.hits[0].body)
asyncio.run(main())
Output: User: I prefer tabs over spaces. All environment variables the
package and its adapters read are listed in
docs/configuration.md.
Repository Map
src/vexic/- memory contract, local service, storage, retrieval, and hosted adapter code.tests/- executable conformance and reliability coverage.docs/usage.md- setup, MCP, recorder, operator tooling, hosted-alpha, and smoke-test examples.docs/architecture.mdanddocs/memory-service-contract.md- architecture and contract references.docs/adr/- accepted architecture decision records.AGENTS.md- contributor and maintainer workflow rules for coding agents (repo-root source of truth);docs/ai/README.mdindexes the supporting notes.
Vexic Console and the marketing website live in the private
PyroDonkey/vexic-website repository (open-core boundary); see
ADR 0012's addendum.
Package Boundary
The repository root remains uv-managed; do not add Node package files at the
root. Console and website ownership moved out of this repository entirely
(see Repository Map above). There is no in-repo Node package surface to
isolate anymore.
Contributing
Working from a source checkout? Clone the repository and run the test suite with uv:
uv run pytest
See CONTRIBUTING.md for setup and the branch workflow, SECURITY.md for reporting vulnerabilities, and CODE_OF_CONDUCT.md for community expectations.
License
Apache-2.0. See LICENSE.
Metadata
Release files for vexic 0.1.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| vexic-0.1.8.tar.gz | 264.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| vexic-0.1.8-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 564.1 kB
Release files / vexic-0.1.8.tar.gz
| Download URL | vexic-0.1.8.tar.gz |
|---|---|
| Size | 264.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fb45282d4b6d9c942d50ed1357d2c5cc9bb357ea9cbe994144c3642719f22a09
|
|
BLAKE2b-256 checksum How to use checksums |
d8ef81d91e0cb4375eac26eae364cfa8b89c4315d08a6ce38a16fdc426295316
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / vexic-0.1.8-py3-none-any.whl
| Download URL | vexic-0.1.8-py3-none-any.whl |
|---|---|
| Size | 299.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3b318cc1a2e1132d82b068105a1cb2b4448f4ce059cf13ec48dd62daadce5b26
|
|
BLAKE2b-256 checksum How to use checksums |
81d4272c5e481a982a02360bd2b7bcf741a7242721a98a2edec62dfdcc285afa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|