Skip to main content

omninode

OmniMemory

CI Python 3.12+ License: MIT ONEX 4.0 Linting: ruff Type checked: mypy Pre-commit

Memory persistence, recall, and semantic retrieval for the OmniNode platform. OmniMemory provides ONEX (OmniNode eXecution)-compliant nodes and handlers for storing agent context, indexing embeddings, querying intent graphs, and managing the full memory lifecycle across distributed omni agents.

Where This Fits

OmniMemory holds three distinct ownership roles in the ONEX platform:

  1. Domain owner for memory persistence and retrieval semantics. OmniMemory defines the authoritative models, protocols, and lifecycle rules for all memory operations: what a memory item is, how it is stored, how it is retrieved, and how it ages. These primitives do not move to other packages.

  2. Runtime plugin owner for memory nodes. PluginMemory (registered as the onex.domain_plugins entry point) is the kernel lifecycle hook for the memory domain. It wires message types, verifies handler imports, initializes the dispatch engine, and subscribes to Kafka topics at runtime.

  3. Storage integration owner for Qdrant, Memgraph, Valkey, and Kreuzberg adapters. The concrete adapter implementations for all memory-layer storage backends live in omnimemory. These adapters implement the domain protocols and are injected at runtime via the DI container.

What is migrating to omnimarket: The runnable ONEX node handler implementations (those with contract.yaml) are moving to omnimarket. Protocols, models, adapters, and the runtime plugin stay here. See OmniMemory → OmniMarket Node Migration Boundary.


What This Repo Owns

  • Domain models — all memory, crawl, persona, intent, and intelligence Pydantic models in src/omnimemory/models/
  • Protocol interfacesProtocolEmbeddingClient, ProtocolEmbeddingProvider, ProtocolIntentGraphAdapter, ProtocolSecretsProvider, and all base protocols in src/omnimemory/protocols/
  • Storage adapters — Qdrant, Memgraph, Valkey, and filesystem adapter implementations in handlers/adapters/ and nodes/*/adapters/
  • Runtime pluginPluginMemory in src/omnimemory/runtime/ registered as onex.domain_plugins
  • Memory-layer data services — Qdrant, Memgraph, Valkey, Kreuzberg (owned via docker-compose.yml)
  • Node handlers — 13 contract-carrying nodes in src/omnimemory/nodes/ (migrating to omnimarket)

What This Repo Does Not Own

Resource Owner
Kafka / Redpanda (platform event bus) omnibase_infra
PostgreSQL (platform relational DB) omnibase_infra
ONEX kernel, node execution, contracts omnibase_core
Protocol interfaces for platform boundaries omnibase_spi
Portable workflow packages and node runtime (post-migration) omnimarket
Dashboard projections and read-model surfaces omnidash

Architecture

Follows the ONEX Four-Node Architecture (EFFECT, COMPUTE, REDUCER, ORCHESTRATOR) applied to memory operations.

Node inventory

  • Effect nodesmemory_storage_effect, memory_retrieval_effect, agent_learning_retrieval_effect, intent_storage_effect, intent_query_effect, kreuzberg_parse_effect, persona_storage_effect
  • Compute nodessemantic_analyzer_compute, similarity_compute, persona_builder_compute
  • Reducer nodesnavigation_history_reducer, memory_consolidator_reducer (stub — no contract.yaml)
  • Orchestrator nodesmemory_lifecycle_orchestrator, agent_coordinator_orchestrator

node_persona_lifecycle_orchestrator and node_persona_retrieval_effect were decommissioned in an earlier cleanup pass; they never had a contract.yaml and are no longer present in the repository. node_filesystem_crawler_effect and node_intent_event_consumer_effect have since been removed as well, once their omnimarket counterparts became canonical.

Verified against src/omnimemory/nodes/ on 2026-08-26: 14 node directories, 13 with contract.yaml; node_memory_consolidator_reducer is the contract-less stub.

Memory evolution (planned phases)

The architecture plan (omni_home/docs/plans/2026-04-07-plan-omnimemory-architecture.md) describes five enhancement phases: surprise gating on the write path, activation decay for retrieval ranking, memory cube isolation for multi-agent boundaries, Hebbian association strengthening, and hybrid vector+FTS search. These are planned, not yet implemented.


Infrastructure Ownership

OmniMemory's docker-compose.yml owns the memory-layer data services:

Service Container Default Port Purpose
Qdrant omnimemory-qdrant 6333 (HTTP), 6334 (gRPC) Vector database for semantic memory
Memgraph omnimemory-memgraph 7687 (Bolt), 7444 (HTTP) Graph database for relationship/intent queries
Valkey omnimemory-valkey 6379 In-memory cache and session storage
Kreuzberg omnimemory-kreuzberg-parser 8090 Document text extraction service

Not owned here — these services are managed by other repositories:

Service Owner Repository Why
Kafka / Redpanda omnibase_infra Platform-wide event bus, shared by all services
PostgreSQL omnibase_infra Platform-wide relational database, shared by all services

See OmniMemory Memory Data Ownership for detailed service boundaries and adapter ownership.


Quick Start

Memory services only

git clone https://github.com/OmniNode-ai/omnimemory.git
cd omnimemory

# Start platform infra first (Kafka + PostgreSQL — owned by omnibase_infra)
infra-up

# Start memory data services
docker compose up -d

# Verify all services are healthy
docker compose ps

Default service ports (all configurable via .env):

  • Qdrant REST: localhost:6333
  • Memgraph Bolt: localhost:7687
  • Valkey: localhost:6379
  • Kreuzberg parser: localhost:8090

See Starting OmniMemory Services in the knowledge base for the full startup runbook including health checks and troubleshooting.

Install and run tests

uv sync --group dev
uv run pytest tests/ -m unit

For configuration options see OmniMemory Environment Variables.

Minimal usage example

import asyncio
from uuid import uuid4

from omnibase_core.container import ModelONEXContainer
from omnimemory.handlers.adapters.models import ModelIntentClassificationOutput
from omnimemory.handlers.handler_intent import HandlerIntent


async def main() -> None:
    container = ModelONEXContainer()
    handler = HandlerIntent(container)

    await handler.initialize(connection_uri="bolt://localhost:7687")

    result = await handler.store_intent(
        session_id="session_123",
        intent_data=ModelIntentClassificationOutput(
            intent_category="debugging",
            confidence=0.92,
            keywords=["error", "traceback"],
        ),
        correlation_id=str(uuid4()),
    )

    query_result = await handler.query_session(
        session_id="session_123",
        min_confidence=0.5,
    )

    await handler.shutdown()


asyncio.run(main())

Directory Structure

src/omnimemory/
├── audit/              # I/O audit logging
├── enums/              # Domain enumerations (memory types, operation types, lifecycle states)
├── errors/             # Structured error types
├── handlers/           # HandlerIntent, HandlerSubscription + adapters
├── models/             # Pydantic models (memory, crawl, persona, intent, intelligence)
├── nodes/              # EFFECT, COMPUTE, REDUCER, ORCHESTRATOR node implementations
│   └── <node>/
│       ├── adapters/   # Stays in omnimemory (protocol implementations)
│       └── handlers/   # Migrating to omnimarket
├── adapters/           # Shared utilities with adapter_* prefix (PII detection, retry, health, metrics)
├── protocols/          # Protocol interfaces (embedding, intent graph, secrets)
├── runtime/            # PluginMemory, DI container wiring, dispatch, introspection
└── tools/              # Contract linter and validators

Development and Test Commands

# Install all dependencies
uv sync --group dev

# Format and lint
uv run ruff format src/ tests/
uv run ruff check --fix src/ tests/

# Type checking
uv run mypy src/omnimemory/ --strict

# Run all tests
uv run pytest tests/ -v

# Unit tests only (no external services required)
uv run pytest tests/ -m unit

# Pre-commit validation
pre-commit run --all-files

Migration Status

Nodes are migrating to omnimarket. The migration preserves the protocol-adapter-handler split: handlers move, adapters stay.

See OmniMemory → OmniMarket Node Migration Boundary.


Documentation

OmniMemory's documentation lives in the OmniNode knowledge base. This README is the repository's landing page; everything below is the full index of OmniMemory pages there. Every path under docs/ that was migrated is now a pointer stub to its page — with three deliberate exceptions listed under Kept in this repository below, which remain full documents because they are out of scope for the public knowledge base.

Architecture

Reference

Guides

Runbooks

Kept in this repository — operating context and platform-convention files that must ship beside the code: CLAUDE.md · AGENT.md · CONTRIBUTING.md · SECURITY.md · CODE_OF_CONDUCT.md · LICENSE · CHANGELOG.md

The three full documents still under docs/ — CI/agent-config and point-in-time records that the public knowledge base does not carry: docs/ci/CI_MONITORING_GUIDE.md · docs/stub_protocols.md · docs/db-split/fk-audit.md


Security, Contributing, and License

Open an issue or email contact@omninode.ai.

Download files

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

Source Distribution

omninode_memory-0.18.1.tar.gz (1.3 MB view details)

Uploaded Source

Built Distribution

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

omninode_memory-0.18.1-py3-none-any.whl (660.4 kB view details)

Uploaded Python 3

File details

Details for the file omninode_memory-0.18.1.tar.gz.

File metadata

  • Download URL: omninode_memory-0.18.1.tar.gz
  • Upload date:
  • Size: 1.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.8 {"installer":{"name":"uv","version":"0.12.8","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 omninode_memory-0.18.1.tar.gz
Algorithm Hash digest
SHA256 dd49dfb0f506e10029a83993650316061f243a30c1e36c64a15d8b4263c0fea2
MD5 6771aa13c30552f45c662402a9b67b32
BLAKE2b-256 774c4546e6bb22c3d6275e4de43347f2ac4331f3d25afb74c33c4dd95e001a35

See more details on using hashes here.

File details

Details for the file omninode_memory-0.18.1-py3-none-any.whl.

File metadata

  • Download URL: omninode_memory-0.18.1-py3-none-any.whl
  • Upload date:
  • Size: 660.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.8 {"installer":{"name":"uv","version":"0.12.8","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 omninode_memory-0.18.1-py3-none-any.whl
Algorithm Hash digest
SHA256 043c601951a9007c118260e29aeb48d99de91451fcafc21a01cd55879cc06e02
MD5 f0776b3ed9f96cc4eb5c1493677f05a1
BLAKE2b-256 807c0b186f467960ae7ea660d9264ee7b49a4297f09f4d38a71e33504b69023a

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.18.1 This release

2 files

0.18.0

2 files

0.17.1

2 files

0.17.0

2 files

0.15.0

2 files

0.14.1

2 files

0.14.0

2 files

0.13.0

2 files

0.12.2

2 files

0.12.1

2 files

0.12.0

2 files

0.11.0

2 files

0.9.3

2 files

0.9.2

2 files

0.9.1

2 files

0.9.0

2 files

0.8.0

2 files

0.7.2

2 files

0.7.1

2 files

0.7.0

2 files

0.6.6

2 files

0.6.4

2 files

0.6.1

2 files

0.6.0

2 files

0.4.0

1 file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page