Provenance-first memory core for long-running agents.
Project description
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.7. 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, 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.
Project details
Release history Release notifications | RSS feed
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 vexic-0.1.7.tar.gz.
File metadata
- Download URL: vexic-0.1.7.tar.gz
- Upload date:
- Size: 236.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5bbaf1fa4c2d1eb1b9b79f170d06aca36af8958472037dc6c1ad9bf82414194e
|
|
| MD5 |
2c3d6e25a0a914af3d9055732bb29ff4
|
|
| BLAKE2b-256 |
47fe6bde65f12162d8f23e262cd9deb572c64f481f858956f19eedfc93bc033b
|
File details
Details for the file vexic-0.1.7-py3-none-any.whl.
File metadata
- Download URL: vexic-0.1.7-py3-none-any.whl
- Upload date:
- Size: 270.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a56b50b95d9d649ac5cf7186b63366cc4202d47d2df79ba863da1ec596f810de
|
|
| MD5 |
4f754b30bb2b06afc1ebf6d07219feaa
|
|
| BLAKE2b-256 |
1c74d87f89e40bb962d9acf83b03f67ba04d11a22a7a8633622ed25488c32231
|