Skip to main content

Provenance-first memory core for long-running agents.

Project description

Vexic

Memory your agents can trust.

PyPI License: Apache 2.0 CI Python 3.13+

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.3. 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.md and docs/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.md indexes 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vexic-0.1.4.tar.gz (215.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vexic-0.1.4-py3-none-any.whl (249.5 kB view details)

Uploaded Python 3

File details

Details for the file vexic-0.1.4.tar.gz.

File metadata

  • Download URL: vexic-0.1.4.tar.gz
  • Upload date:
  • Size: 215.6 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

Hashes for vexic-0.1.4.tar.gz
Algorithm Hash digest
SHA256 5e9f5c5c11105e6d32d8dc78191d228a5889197c7827113a16eafc6ba4403a2b
MD5 55a7335c3b2a92b041d59571567125b9
BLAKE2b-256 b99bf5773e9e74f483bf584902f076d49a784462fa4938867cfc82434e442e4e

See more details on using hashes here.

File details

Details for the file vexic-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: vexic-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 249.5 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

Hashes for vexic-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 28d84fd4d97168076522b5fa9c4c6ac02452738a147432a1f567f53a92d3e030
MD5 9151d039d0edc4aca8551f177c440452
BLAKE2b-256 46fc50867a18b04983781cd51b246132ab43062f139970d5dd5f2ad78d711b15

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page