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.

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.

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.0.tar.gz (33.6 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.0-py3-none-any.whl (34.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: omoide_ai-0.1.0.tar.gz
  • Upload date:
  • Size: 33.6 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.0.tar.gz
Algorithm Hash digest
SHA256 a3b4834cb98a84960e9f235a27f8b531e9eba4c4ff64db9bf987593f2a61c178
MD5 55b492778e9175447c5bce3310adc6db
BLAKE2b-256 4a0c7f4388ac39174e28e07141aaeef6fbb3f512be86986dacb52085bc9265f2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: omoide_ai-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 34.6 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 366426f85c04bc7895514f662eacf3bfa3126cf42232bfcf4e3dc68fca02e620
MD5 8e3bd88efd6940c787257a3cfc88a499
BLAKE2b-256 dadaf8a93495e57496124cad940ddfb1a1d331a60a7fc67b6952c1b50ff46e99

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