Skip to main content

Local-first AI memory engine for Copilot CLI and Claude Code.

Project description

AI Memory Engine

Local-first memory engine for GitHub Copilot CLI and Claude Code.

What it does

  • stores reusable memory from conversations
  • keeps Markdown as the source of truth
  • builds derived indexes for retrieval
  • exposes a shared local MCP server for both agents

Architecture

Claude Code / Copilot CLI
        ↓
Local MCP stdio server
        ↓
AI Memory Engine (Python)
   ├─ Conversation ingest
   ├─ Memory extraction
   ├─ Markdown memory store
   ├─ Incremental sync pipeline
   ├─ Retrieval / ranking
   └─ Event emission
        ↓
   ├─ LanceDB
   ├─ Kuzu
   └─ DuckDB

Install

python -m pip install -e .

Publish and install from PyPI

Once the package is published to PyPI, users can install or run it without cloning this repository.

Install the CLI from PyPI

python -m pip install omoide-ai

Run the MCP server with uvx

uvx --from omoide-ai omoide-ai-mcp

MCP config for a published package

For clients that launch a local stdio MCP server, point them at uvx instead of a repository-local virtualenv:

{
  "mcpServers": {
    "omoide-ai": {
      "type": "local",
      "command": "uvx",
      "args": ["--from", "omoide-ai", "omoide-ai-mcp"],
      "timeout": 60000
    }
  }
}

Maintainer release flow

  1. Create a GitHub release or run the Publish PyPI workflow manually.
  2. Add a repository secret named PYPI_API_TOKEN.
  3. The workflow builds the package with uv build and uploads it to PyPI.
  4. If the same version has already been published, the workflow skips the existing files instead of failing. To publish a new release, update version in pyproject.toml first.

Project layout

Markdown under knowledge/ is the source of truth. Derived state is written under .ai-memory-engine/. Daily interaction journals are appended under journal/.

You do not need to pre-create fixed folders. The engine places memories into generic folders based on their role, for example:

knowledge/
  decisions/
  constraints/
  reference/
  work-context/tasks/
  work-context/open-questions/
  user-profile/preferences/
  user-profile/products/
journal/
  2026-06-30.md

Rules are generic rather than technical:

  1. decision memories go to knowledge/decisions/
  2. constraint memories go to knowledge/constraints/
  3. fact memories go to knowledge/reference/
  4. task-context memories go to knowledge/work-context/tasks/
  5. open-question memories go to knowledge/work-context/open-questions/
  6. user-profile tags or user_ subjects go to knowledge/user-profile/...

If you want to hint a custom nested folder, pass a slash-delimited category such as vendors/schick.

CLI examples

omoide-ai sync
omoide-ai rebuild
omoide-ai search "What runtime did we choose?"
omoide-ai prepare-turn --session-id demo --message "このプロジェクトは Python で実装したい"
omoide-ai finalize-turn --turn-token <token> --assistant-message "了解。Python で進めます。"

Each finalize-turn call still promotes reusable memory into knowledge/, and now also appends the full exchange to that day's Markdown journal in journal/YYYY-MM-DD.md.

For MCP usage, the effective project root now resolves in this order:

  1. AI_MEMORY_ENGINE_PROJECT_ROOT
  2. CLAUDE_PROJECT_DIR
  3. a project root discovered from the request's project_path or cwd
  4. the request's cwd
  5. the MCP server process context as a final fallback

MCP setup

Claude Code

This repository includes .mcp.json for repository-local development. After publishing to PyPI, you can switch the command to the uvx example above.

GitHub Copilot CLI

This repository includes .github/mcp.json for repository-local development. After publishing to PyPI, you can switch the command to the uvx example above.

Repository-scoped instructions are included in:

  • CLAUDE.md
  • .github/copilot-instructions.md

Optional AI-assisted extraction

The engine includes an optional refinement step for memory extraction. It stays offline-first by default and does nothing unless you configure a local command.

Set AI_MEMORY_ENGINE_ASSIST_COMMAND to a local command that:

  1. reads JSON from stdin
  2. returns JSON on stdout
  3. outputs a candidates array with refined memory candidates

Example shape:

{
  "candidates": [
    {
      "memory_id": "implementation-runtime",
      "title": "Implementation Runtime",
      "kind": "decision",
      "summary": "The implementation runtime is python.",
      "subject": "implementation_runtime",
      "value": "python",
      "category": "project/implementation",
      "tags": ["python", "runtime"],
      "details": ["Refined by local model"],
      "confidence": 0.98,
      "importance_score": 0.99
    }
  ]
}

Use AI_MEMORY_ENGINE_ASSIST_TIMEOUT_SECONDS to control the subprocess timeout.

Notes

  • DuckDB, LanceDB, and Kuzu are required runtime dependencies.
  • Markdown remains the source of truth even though vector and graph stores are always persisted.

Resetting memory state

Use the following command to clear saved Markdown memories and derived local state before a fresh verification run:

omoide-ai reset --yes

This resets knowledge/ memories, DuckDB analytics, the index manifest, pending turns, and derived vector/graph state.

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

omoide_ai-0.1.1.tar.gz (34.9 kB view details)

Uploaded Source

Built Distribution

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

omoide_ai-0.1.1-py3-none-any.whl (35.2 kB view details)

Uploaded Python 3

File details

Details for the file omoide_ai-0.1.1.tar.gz.

File metadata

  • Download URL: omoide_ai-0.1.1.tar.gz
  • Upload date:
  • Size: 34.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for omoide_ai-0.1.1.tar.gz
Algorithm Hash digest
SHA256 140376c26f7e572291cc1fb4e3a85b5723b384dd5d3c2ae5134aba4e6449fe83
MD5 0d91e988862db305eac94de2f979acba
BLAKE2b-256 31ffb81afeee5f3c2f3e979ed0203cf2fedfd88021f98339b2273f72c5839da6

See more details on using hashes here.

File details

Details for the file omoide_ai-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: omoide_ai-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 35.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for omoide_ai-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9758b26f342b4ead424bb1a563d611c8ed076878ce188958d0fe648fca6b55d9
MD5 d68e9e371751272023f1f7caadc9c0da
BLAKE2b-256 7c2a61bb31a621a2e95c3188f917c9663add3de6c9dec669032e041d717a8dfc

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