name: qdrant-memory repo: https://github.com/cnkang/hermes-plugin-qdrant-memory sha: 5ec9cac094e5e9dc80e1cd25b241bcec44019d5b description: "Durable native memory for Hermes with LLM fact extraction. Conversations are distilled by the Hermes-configured LLM into searchable memories — facts, preferences and decisions with deduplication and importance — instead of storing turns verbatim, and are kept in Qdrant (embedded, self-hosted Server, or Qdrant Cloud) with configurable embeddings (default: local Ollama qwen3-embedding:4b at 2560 dimensions). The plugin registers a native MemoryProvider plus four scoped tools: qdrant_memory_search, qdrant_memory_add, qdrant_memory_update and qdrant_memory_delete. A SQLite WAL admission ledger makes every write idempotent and replayable across restarts with fail-closed recovery; scoped inventory, portable export and scope-aware deletion (list/export/delete-all with explicit single-agent vs all-agents semantics) ship in the same CLI, and `migrate mem0` imports existing Mem0 exports with resumable, verifiable runs. Disclosure — memory text is stored in the configured Qdrant store (embedded files under /qdrant-memory/qdrant by default, or the Server/Cloud URL you set), and memory text plus each turn's recall query are sent as plain text to the configured embedding endpoint (default local Ollama at http://127.0.0.1:11434; an OpenAI-compatible remote endpoint can be configured, and keyed endpoints must use HTTPS). Disclosure — after each primary-agent turn, at session end and before context compression, conversation text goes to the LLM configured in Hermes through the Hermes plugin LLM facade (a provider/model override needs the plugin's Hermes trust grant) to extract facts and to compare near-duplicate memories; that LLM may be a remote provider. Disclosure — the provider is selected with memory.provider: qdrant-memory; its settings live in /qdrant-memory.json (0600, secrets stripped on save). QDRANT_URL, QDRANT_API_KEY and EMBEDDING_API_KEY are read through the Hermes secret scope, but an api_key written by hand into qdrant-memory.json takes precedence, and `migrate mem0` reads the source Qdrant endpoint and any api_key from /mem0.json or --source-config. Disclosure — state lives under /qdrant-memory/ (embedded store, SQLite WAL ledger, lock files); the ledger holds raw turn text and pre-compression transcripts until they are processed, and failed items until retried, then scrubs the bodies. Disclosure — single-writer design: a local ownership lock excludes a second writer to the same profile destination, and Server/Cloud deployments expect one active writer per scope. Disclosure — deletion removes records and fences pending operations, but is not a forensic secure erase (SQLite WAL pages and backups may retain content)." maintainer: cnkang tier: community category: memory requires_hermes: ">=0.21.5" version: "0.1.0" docs_url: https://github.com/cnkang/hermes-plugin-qdrant-memory#readme readme: true known_issues: - "Preview scope: multi-writer Server/Cloud deployments, hybrid retrieval and a web UI are not supported." - "Deletion removes records and fences pending operations but is not a forensic secure erase; storage-level remnants (WAL, backups) may persist." - "Embedded mode is single-writer: a second process fails closed on the ownership lock instead of sharing the store." - "Extraction adds LLM latency after a turn; memory admission is not guaranteed before the host admits the provider, and pending operations replay on the next start." capabilities: provides_tools: - qdrant_memory_search - qdrant_memory_add - qdrant_memory_update - qdrant_memory_delete provides_hooks: [] provides_middleware: [] requires_env: []