Doramagic Project Pack · Human Manual
remnic
Open-source memory and context for user-aware agents: scoped memory, provenance, retrieval quality, correction, boundaries, evals, and MCP/HTTP access.
Overview & System Architecture
Related topics: Memory Engine & Retrieval Pipeline, Platform Integrations & Plugins
Continue reading this section for the full explanation and source context.
Related Pages
Related topics: Memory Engine & Retrieval Pipeline, Platform Integrations & Plugins
Overview & System Architecture
Remnic is a markdown-first memory layer for AI coding agents. It stores knowledge as plain Markdown files with YAML front-matter, exposes recall through an MCP server, and ships host-specific plugins that inject memory into agent sessions at the right moment. The system is organized as a TypeScript monorepo with one core package (@remnic/core) and a family of host plugins (@remnic/plugin-openclaw, @remnic/plugin-pi, @remnic/plugin-codex).
Purpose and Scope
Remnic's role is to be the durable, inspectable, agent-agnostic memory backing store. The core treats every piece of knowledge as a typed Markdown record, classifies it via a taxonomy, and surfaces it to agents only when the recall policy decides it is relevant. Source: packages/remnic-core/src/memory-extension/shared-instructions.ts defines nine top-level memory types — fact, preference, decision, entity, skill, correction, question, observation, and summary — each rendered to the host agent with semantic weight hints.
The system deliberately keeps private runtime state separate from public knowledge. The OpenClaw wiki-bridge enumerator, for example, scans only facts/, entities/, corrections/, artifacts/, and profile.md, and explicitly excludes state/, questions/, transcripts/, archive/, buffers/, and tokens/. Source: packages/plugin-openclaw/src/public-artifacts.ts.
Package Layout
flowchart LR
subgraph Core["@remnic/core"]
MCP[access-mcp.ts<br/>engram.recall, briefing]
AS[access-service.ts<br/>briefing, recall]
Storage[storage.ts<br/>entity serialization]
NK[native-knowledge.ts<br/>obsidian + workspace chunks]
CXM[shared-context/manager.ts<br/>cross-signals, daily curation]
MemExt[memory-extension/<br/>codex + shared instructions]
Conn[connectors/live/<br/>github]
end
subgraph Plugins["Host Plugins"]
OC[plugin-openclaw<br/>wiki bridge, flush plan]
PI[plugin-pi<br/>context hook, commands]
CX[plugin-codex<br/>phase-2 sandbox publisher]
end
Agents[AI Agents / IDE Hosts] --> Core
Core --> Plugins
Plugins --> AgentsThe core package owns recall, storage, connectors, and host-agnostic policies. Each plugin adapts the core to a specific host's extension API (OpenClaw, Pi, Codex). Source: packages/remnic-core/src/memory-extension/codex-publisher.ts shows how the Codex extension is materialized on disk under an extensionRoot/instructions.md plus skills/ and rollout_summaries/ directories.
Recall Pipeline
Recall follows a deterministic pipeline from query to injected context:
- Query normalization — stopwords, lexical cues, and filesystem-like paths are stripped. Source: packages/remnic-core/src/recall-query-policy.ts collapses whitespace, drops
~/...andC:\...tokens, and trims compact identifier terms before they ever hit the index. - Chunk sourcing — Obsidian notes, OpenClaw workspace-sync files, and curated-include files are chunked with heading awareness and tagged with namespace, privacy class, and source hash. Source: packages/remnic-core/src/native-knowledge.ts.
- Cue and intent scoring —
explicit-cue-recall.tsandresponse-guidance-recall.tsapply pattern libraries (DIY tasks, calculus walkthroughs, sleep-quality metrics, etc.) to assemble evidence. Source: packages/remnic-core/src/explicit-cue-recall.ts and packages/remnic-core/src/response-guidance-recall.ts. - Assembly and disclosure — the access service joins hits, applies
RecallDisclosurelevels (sectionvs.raw), and returnsEngramAccessMemoryRecordpayloads. Source: packages/remnic-core/src/access-service.ts. - Injection — the host plugin writes the recall blob into the agent's message stream. For Pi, recall must be appended to messages rather than prepended to keep prefix caches valid. Source: issue #1479.
The MCP surface exposes engram.recall, engram.recall_explain, and engram.set_coding_context (the last binds a coding-agent project/branch to a namespace). Source: packages/remnic-core/src/access-mcp.ts.
Storage, Connectors, and Curation
Entity files are serialized in a compiled-truth + timeline format that remains parse-compatible with legacy summary and facts fields. Structured sections are sorted by schema, and legacy facts are preserved when no timeline exists. Source: packages/remnic-core/src/storage.ts.
Connectors ingest external corpora. The GitHub connector, for example, paginates issues, PRs, and discussions, builds ConnectorDocument records with stable externalId values, and feeds them into the recall index. Source: packages/remnic-core/src/connectors/live/github.ts.
The shared-context manager runs daily curation: it merges cross-signal overlaps, applies optional semantic enhancement (fail-open on timeout), and writes a cross-signals/<date>.md roll-up plus a structured JSON report. Source: packages/remnic-core/src/shared-context/manager.ts. Taxonomy decisions are exposed as a human-readable RESOLVER.md decision tree generated from category priorities. Source: packages/remnic-core/src/taxonomy/resolver-doc-generator.ts.
Known Limitations and Recent Fixes
The community has surfaced several architectural gaps that drive recent releases:
| Area | Issue | Resolution |
|---|---|---|
| Flush plan lifecycle | Models hallucinate memory-candidates/ paths; flush-plan.md grows unbounded (#1483) | Constrained flush-plan prompt (#1484) |
| LCM model routing | LCM summarizer bypassed taskModelChain (#1473) | Routed through taskModelChain (v9.3.637) |
| OAuth providers | FallbackLlmClient rejected OAuth-only providers (#1478) | Resolved in v9.3.639 |
| Pi stale-ctx | Post-await ctx access threw "stale ctx" (#1481) | Hardened context handling in v9.3.640 |
| QMD on Windows | launchProcess() lacked shell:true (#1476) | Windows QMD launcher fix in v9.3.640 |
| Day summary cron | Timezone and model reconciliation gaps (#1475, #1474) | Reconciled in v9.3.639 |
The current release, v9.3.644, accepts 2026.6.11 beta OpenClaw hosts. Source: v9.3.644 release notes.
See Also
- Memory types and citation format —
packages/remnic-core/src/memory-extension/shared-instructions.ts - MCP tool inventory —
packages/remnic-core/src/access-mcp.ts - OpenClaw wiki bridge —
packages/plugin-openclaw/src/public-artifacts.ts - Codex sandbox publisher —
packages/remnic-core/src/memory-extension/codex-publisher.ts - Daily cross-signals curation —
packages/remnic-core/src/shared-context/manager.ts
Source: https://github.com/joshuaswarren/remnic / Human Manual
Memory Engine & Retrieval Pipeline
Related topics: Overview & System Architecture, Configuration, Operations & Troubleshooting
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Related Pages
Related topics: Overview & System Architecture, Configuration, Operations & Troubleshooting
Memory Engine & Retrieval Pipeline
Overview
Remnic is a local-first, file-backed memory system that stores knowledge as plain Markdown files with YAML frontmatter and exposes a multi-stage retrieval pipeline to host agents (Codex, OpenClaw, Pi, etc.). The memory engine is responsible for ingesting facts, organizing them into a semantic taxonomy, retrieving contextually relevant entries on demand, and periodically consolidating redundant memories. The retrieval pipeline composes several scoring strategies — lexical overlap, intent matching, and event-order cues — into a single ranked recall snapshot, which is then surfaced back into the host's context window.
Source: packages/remnic-core/src/memory-extension/shared-instructions.ts
Memory Model & Storage Layout
Each memory is a Markdown document with a YAML frontmatter type field. The supported semantic types are enumerated in the shared instruction block and consumed by every host-specific publisher:
| Type | Semantic Role |
|---|---|
fact | Objective, user-confirmed knowledge |
preference | Stated or inferred user preferences |
decision | Explicit trade-off or commitment |
entity | Named thing the user cares about |
skill | Reusable workflow or procedure |
correction | Amendment to a prior memory |
question | Open uncertainty flagged for review |
observation | Cross-session pattern |
summary | Condensed roll-up |
Source: packages/remnic-core/src/memory-extension/shared-instructions.ts
On disk, memories live under a memoryDir partitioned into scanned roots (facts/, entities/, corrections/, artifacts/, profile.md) and explicitly excluded private roots (state/, questions/, transcripts/, archive/, buffers/, tokens/). The public-artifacts provider enforces this split by walking only the allow-listed directories and resolving symlinks against the memory root before exposing entries to wiki ingestion.
Source: packages/plugin-openclaw/src/public-artifacts.ts
Wearable day transcripts are deliberately stored under wearables/<source>/<YYYY-MM-DD>.md — outside the memory scan roots so they never appear as recallable memories, but inside the QMD collection root so they remain full-text searchable.
Source: packages/remnic-core/src/wearables/day-store.ts
Retrieval Pipeline
Recall is composed of three complementary scorers that run together and produce a single ranked snapshot:
- Lexical / explicit-cue recall — Tokenizes the query, drops a curated stopword set, and counts token overlap against indexed chunks. Reference targets are capped via
maxReferences, and the resulting section is bounded bymaxCharsto keep the injected blob host-budget-friendly.
Source: packages/remnic-core/src/explicit-cue-recall.ts
- Intent / response-guidance recall — Pattern-matches the normalized query against an intent registry (e.g.
diy_insulation_summary,calculus_derivative_walkthrough,technical_project_summary) and emits intent tags that bias the downstream ranker toward domain-specific evidence.
Source: packages/remnic-core/src/response-guidance-recall.ts
- Event-order recall — Surfaces memories whose frontmatter events are temporally adjacent to the current turn, weighted against an enumerated phrase dictionary of conversational anchors.
Source: packages/remnic-core/src/event-order-recall.ts
The MCP surface exposes this pipeline as engram.recall (with query, cwd, projectTag, asOf, tags, and tagMatch parameters) and engram.recall_explain, plus a companion engram.set_coding_context that pins a session to a project/branch-scoped namespace.
Source: packages/remnic-core/src/access-mcp.ts
Architecture
flowchart LR
Q[Query] --> EX[Explicit Cue Recall]
Q --> RG[Response Guidance / Intent]
Q --> EO[Event Order Recall]
EX --> R[Ranked Snapshot]
RG --> R
EO --> R
R --> CTX[Host Context Window]
CTX --> AGENT[Host Agent]Consolidation & Maintenance
The semantic consolidation engine clusters near-duplicate memories via token overlap, synthesizes a canonical version through an LLM operator, archives the originals, and runs a post-consolidation materialize step. Operators are dispatched through a pluggable vocabulary defined in consolidation-operator.ts and re-exported from semantic-consolidation.ts to avoid circular imports.
Source: packages/remnic-core/src/semantic-consolidation.ts
Native Obsidian vaults are chunked heading-aware; each heading becomes a NativeKnowledgeChunk keyed by vaultId:notePath:startLine-endLine with metadata inherited from the parent note (tags, aliases, wikilinks, backlinks, namespace, privacy class).
Source: packages/remnic-core/src/native-knowledge.ts
The taxonomy resolver emits a human-readable RESOLVER.md decision tree from a Taxonomy definition so operators can file new knowledge deterministically. Categories are sorted by ascending priority number, with ties broken by lexical id.
Source: packages/remnic-core/src/taxonomy/resolver-doc-generator.ts
The operator toolkit injects a managed capture-instructions block into host instructions files, idempotently upserting between CAPTURE_INSTRUCTIONS_START / CAPTURE_INSTRUCTIONS_END markers so manual edits outside the block are preserved.
Source: packages/remnic-core/src/operator-toolkit.ts
Public Artifacts & Wiki Bridge
For OpenClaw hosts, the memory-wiki bridge mode enumerates only the allow-listed public directories (facts/, entities/, corrections/, artifacts/, profile.md) and rejects symlink traversal that would re-target an allow-listed directory onto a private one (e.g. facts -> state). The corpus supplement then exposes those memories as a read-only remnic corpus under a service-scoped supplement ID, with no exposure of transcript buffers, auth metadata, or runtime state.
Source: packages/plugin-openclaw/src/public-artifacts.ts Source: packages/plugin-openclaw/README.md
Known Issues & Operational Notes
- LCM summarizer model routing — In v9.3.639 the Lossless Context Management summarizer was rerouted through
taskModelChaininstead of the gateway default; prior versions fell back toagents.defaults.model(issue #1473). - OAuth-only providers —
FallbackLlmClientwas hardened in v9.3.639 to honor OAuth-only providers whenmodelSource: "gateway"(issue #1478). - Day-summary cron reconciliation — The
engram-day-summarycron now reconciles model config on plugin startup viareconcileDaySummaryCronRouting(), matching the hourly summary behavior (issue #1474). - Recall injection order — The Pi plugin's
contexthook now appends recalled memories instead of prepending them, preserving prefix-cache locality for providers like DeepSeek V4 Flash (issue #1479).
See Also
- OpenClaw Plugin Lifecycle
- MCP Tool Surface
- Semantic Consolidation Operators
- Obsidian Vault Ingestion
Source: https://github.com/joshuaswarren/remnic / Human Manual
Platform Integrations & Plugins
Related topics: Overview & System Architecture, Configuration, Operations & Troubleshooting
Continue reading this section for the full explanation and source context.
Related Pages
Related topics: Overview & System Architecture, Configuration, Operations & Troubleshooting
Platform Integrations & Plugins
Remnic distributes its functionality across a monorepo of platform integrations (host-specific plugins such as @remnic/plugin-openclaw and @remnic/plugin-pi) and extension publishers that teach external agent hosts (Codex, OpenClaw) how to read and write Remnic memory. The @remnic/core package sits between them, exposing canonical memory, MCP tools, and connector adapters that every host and plugin consume.
Architecture Overview
The integration layer is organised so that core remains host-agnostic, while each plugin owns the surface area unique to its platform (event hooks, message-shape translation, public-artifact emission). The diagram below shows the major relationships that the source code expresses today.
flowchart LR Host["Agent Host<br/>(OpenClaw / Pi / Claude Code / Codex)"] Plugin["Host Plugin<br/>(plugin-openclaw, plugin-pi)"] Core["@remnic/core<br/>(canonical memory + MCP)"] Pub["Memory Extension Publisher<br/>(codex-publisher + shared-instructions)"] Conn["Connectors<br/>(github live, codex-materialize)"] NK["Native Knowledge<br/>(Obsidian vault sync)"] Host -- "events / messages" --> Plugin Plugin -- "RecallTool, append/prepend context" --> Core Host -. "instructions.md + skills/" .-> Pub Pub -- "shared instruction fragments" --> Core Conn -- "ConnectorDocument[]" --> Core NK -- "NativeKnowledgeChunk[]" --> Core Core -- "facts/, entities/, profile.md" --> Plugin
Public Artifacts and the Memory-Wiki Bridge
The OpenClaw plugin enumerates a safe subset of memory for wiki ingestion via packages/plugin-openclaw/src/public-artifacts.ts. The function listRemnicPublicArtifacts() resolves the memory directory with realpath, then walks an allowlist of directories (facts/, entities/, corrections/, artifacts/, plus the public summary of profile.md).
Private runtime state is explicitly excluded:
"Private/runtime state (state/, questions/, transcripts, buffers, etc.) is explicitly excluded." — packages/plugin-openclaw/src/public-artifacts.ts:1-15
The implementation also defends against symlink traversal: a directory named facts that resolves to state is rejected so that allowlisted names cannot redirect to private data. Source: packages/plugin-openclaw/src/public-artifacts.ts:67-90.
Memory Extension Publishers
When Remnic integrates with a host that loads static instructions (e.g., Codex), it ships a *memory extension* — a directory containing instructions.md, optional skills/, and per-session rollout_summaries/. The publisher lives in packages/remnic-core/src/memory-extension/codex-publisher.ts and is composed from shared fragments defined in packages/remnic-core/src/memory-extension/shared-instructions.ts.
Reusable blocks include REMNIC_SEMANTIC_OVERVIEW (a markdown table describing the nine canonical memory types: fact, preference, decision, entity, skill, correction, question, observation, summary) and REMNIC_CITATION_FORMAT, which lets host agents emit oai-mem-citation blocks for downstream retrieval. Source: packages/remnic-core/src/memory-extension/shared-instructions.ts:12-44.
The Codex publisher renders these blocks into instructions.md with an atomic write (temp file + rename). It also enforces a Phase-2 sandbox rule set — "No network. No CLI invocation. No MCP tool calls." — when publishing inside Codex's consolidation sandbox. Source: packages/remnic-core/src/memory-extension/codex-publisher.ts:160-200.
Live and Materialized Connectors
Remnic pulls knowledge from third-party sources via two connector families:
| Connector | Location | Purpose |
|---|---|---|
| GitHub live | packages/remnic-core/src/connectors/live/github.ts | Paginated fetch of issues, PRs, discussions and comments using cursor watermarks. |
| Codex rollout | packages/remnic-core/src/connectors/codex-materialize.ts | Materialises Codex rollout logs into Markdown summaries under <codex_home>/memories, gated by a .remnic-managed sentinel and idempotent via a content hash. |
The GitHub connector exposes a ConnectorDocument shape with externalId, externalRevision, and externalUrl, and paginates by mutating the page query parameter. Source: packages/remnic-core/src/connectors/live/github.ts:30-55.
The Codex materializer returns a MaterializeResult distinguishing wrote, skippedNoSentinel, and skippedIdempotent outcomes — important because hosts may re-run materialisation repeatedly without producing duplicate memory. Source: packages/remnic-core/src/connectors/codex-materialize.ts:30-60.
Native Knowledge and Obsidian
packages/remnic-core/src/native-knowledge.ts implements Obsidian vault ingestion. Notes are split with a heading-aware chunker (chunkObsidianNote) that preserves tags, aliases, wikilinks, and backlinks per chunk. An alias index (buildAliasIndex) maps aliases back to note paths so recall can resolve synonym queries.
The module also handles two state-file formats — openclaw-workspace-sync.json and a generic curated-include state — converting either into the unified NativeKnowledgeChunk shape the rest of core expects.
MCP Access Surface
Plugins and external callers reach memory through the Model Context Protocol. packages/remnic-core/src/access-mcp.ts registers tools including engram.recall (with chunk | section | raw granularity, asOf historical pin, tags filter, and tagMatch: "any" | "all"), engram.recall_explain, and engram.set_coding_context. The asOf parameter is the implementation behind issue #680 (historical recall), and tags/tagMatch implement issue #689. Source: packages/remnic-core/src/access-mcp.ts:20-90.
Workspace Projection and Shared Context
packages/remnic-core/src/projection/index.ts renders canonical memory into a human-readable .engram/context-tree/ of Markdown files annotated with provenance, trust tier, confidence, and source anchors. Manual edits inside fenced blocks are preserved across regenerations.
packages/remnic-core/src/shared-context/manager.ts writes a daily Cross-Signals report summarising overlapping themes, risks, and promotion candidates across agent outputs, supporting cross-agent coordination.
Common Failure Modes (from Community Reports)
Several recent issues describe real-world integration friction:
- Stale ctx errors (
@remnic/plugin-pi) after session replacement break the whole extension until restart (issue #1481). - OAuth-only providers are rejected by
FallbackLlmClientbefore runtime auth resolution whenmodelSource: "gateway"(issue #1478); v9.3.639 routed OAuth and LCM throughtaskModelChain. - Windows QMD launch fails because
launchProcess()calls barespawn()withoutshell:true(issue #1476); fixed in v9.3.640. - Day Summary cron timezone is server-locked (issue #1475), and the cron is not reconciled on startup like the hourly cron is (issue #1474); partially addressed in v9.3.639.
- OpenClaw flush-plan paths hallucinated by the LLM grow
flush-plan.mdindefinitely (issue #1483); the prompt was constrained in v9.3.640 and lifecycle processing fixed in v9.3.641.
See Also
- Remnic Memory Types & Recall
- MCP Tools Reference
- Connectors & Live Sync
Source: https://github.com/joshuaswarren/remnic / Human Manual
Configuration, Operations & Troubleshooting
Related topics: Overview & System Architecture, Memory Engine & Retrieval Pipeline, Platform Integrations & Plugins
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Related Pages
Related topics: Overview & System Architecture, Memory Engine & Retrieval Pipeline, Platform Integrations & Plugins
Configuration, Operations & Troubleshooting
Remnic is a memory-augmentation layer that stores knowledge as plain Markdown files with YAML front-matter and exposes that corpus to host agents through MCP, native publishers, and bridge plugins. This page documents the operational surface: how memory is persisted, how access is mediated, how privacy boundaries are enforced, and where known issues surface during routine use.
Operational Architecture
Remnic is organized as a set of cooperating subsystems that move knowledge between external sources, structured storage, and runtime agents. The flow can be summarized as:
flowchart LR
A[External Sources<br/>Codex rollouts, GitHub, Obsidian] --> B[Connectors<br/>codex-materialize, github.ts]
B --> C[Native Knowledge<br/>native-knowledge.ts]
C --> D[Storage Layer<br/>storage.ts]
D --> E[Memory Directory<br/>facts/, entities/, corrections/, artifacts/]
D --> F[MCP Access Layer<br/>access-mcp.ts, access-service.ts]
D --> G[Host Publishers<br/>codex-publisher.ts, plugin-openclaw]
F --> H[Host Agents]
G --> H
D -.private state excluded.-> X[state/, questions/, transcripts/, archive/, buffers/, tokens/]The diagram highlights two important operational boundaries. First, only specific top-level directories are eligible for ingestion by external agents; second, the MCP and publisher surfaces are explicitly downstream of storage and never reach private runtime state. Source: packages/plugin-openclaw/src/public-artifacts.ts:1-15
Configuration Touch Points
Memory Type Taxonomy
Every persisted memory carries a type front-matter field that tells host agents how to weight it. The taxonomy is published verbatim into host instructions.md files so the meaning is consistent across surfaces. Source: packages/remnic-core/src/memory-extension/shared-instructions.ts:13-37
| Type | Role |
|---|---|
fact | Objective confirmed knowledge |
preference | Stated or inferred user preference |
decision | Explicit decision or trade-off |
entity | Named thing the user cares about |
skill | Reusable workflow / procedure |
correction | Fix or amendment to a prior memory |
question | Open uncertainty flagged for resolution |
observation | Cross-session pattern |
summary | Condensed roll-up |
Per-Note Metadata
Native knowledge chunks carry namespace and privacy-class metadata propagated from the source vault. chunkObsidianNote assigns vaultId, notePath, namespace, privacyClass, tags, aliases, wikilinks, and backlinks to every chunk so downstream recall can apply privacy filters before returning content. Source: packages/remnic-core/src/native-knowledge.ts:1-44
Materialization Sentinels
Codex rollout materialization writes a .remnic-managed sentinel alongside the memory directory. Subsequent runs use the sentinel plus a content hash to short-circuit idempotent re-ingestion and to skip gracefully when the sentinel is missing. Source: packages/remnic-core/src/connectors/codex-materialize.ts:18-75
Privacy & Access Boundaries
Public vs. Private Artifacts
The OpenClaw bridge enumerates a strict allow-list of public directories: facts/, entities/, corrections/, artifacts/, and profile.md. Everything else — including state/, questions/, transcripts/, archive/, runtime buffers, and tokens/ — is deliberately excluded from wiki ingestion. Source: packages/plugin-openclaw/src/public-artifacts.ts:5-13
Two defensive checks protect the boundary at runtime:
- The memory root is resolved via
realpath()before any directory is opened; if resolution fails, the enumerator returns an empty list rather than guessing. Source: packages/plugin-openclaw/src/public-artifacts.ts:46-58 - Each allow-listed directory is checked for symlink redirection that could alias a public name to a private directory (e.g.,
facts -> state/), preventing accidental disclosure. Source: packages/plugin-openclaw/src/public-artifacts.ts:62-69
MCP Tool Surface
Remnic exposes a constrained set of MCP tools. engram.recall accepts a query plus optional filters: namespace, disclosure, cwd, projectTag, asOf (historical pin, issue #680), and tags with tagMatch semantics (any or all, issue #689). engram.recall_explain returns the most recent snapshot for a session, and engram.set_coding_context attaches project/branch routing. The principal field on remnic_briefing is described as transport-bound and never sourced from untrusted payloads. Source: packages/remnic-core/src/access-mcp.ts:1-50, packages/remnic-core/src/access-service.ts:14-22
Sandbox Enforcement
The Codex phase-2 publisher publishes an explicit sandboxing contract into instructions.md: no network calls, no CLI invocation of remnic/engram, no MCP tool calls, and only filesystem reads for memory. Local writes are permitted only where the sandbox policy allows. This contract is what makes Codex consolidation safe in restricted environments. Source: packages/remnic-core/src/memory-extension/codex-publisher.ts:24-35
Known Operational Issues
The community has surfaced several recurring operational failure modes that operators should expect to triage:
- Windows QMD probe failure —
launchProcess()uses a barespawn()withoutshell:true, sosh,.cmd, and JS launchers all error withENOENT/EINVALon Windows. Tracked in issue #1476 and fixed in v9.3.640. - LLM routing bypass — LCM summarization and gateway task defaults originally fell back to
agents.defaults.modelinstead of the plugin'staskModelChain; OAuth-only providers (e.g.openai/gpt-5.4) were rejected before runtime auth. Fixed in v9.3.639 (#1482) and v9.3.637 (#1470). - Cron reconciliation drift —
engram-day-summarydid not reconcile model config on plugin startup or accept a configurable timezone. Tracked in #1474 / #1475. - Flush-plan hallucination — During memory-triggered compaction, the model occasionally writes to hallucinated paths (e.g.
memory-candidates/); fixed in v9.3.640 (#1484) and v9.3.641 (#1487). - Pi plugin stale context — Post-await
ctxaccess after session replacement triggers ExtensionRunner's stale-ctx error; v9.3.640 appends recall instead of prepending for prefix-cache friendliness and hardens context handling (#1481, #1479).
Diagnostics
The bench package ships a registry of regression benchmarks that operators can re-run after upgrades to validate that recall, ingestion, and consolidation paths still behave correctly. Defined suites include enrichmentFidelity, entityConsolidation, pageVersioning, retrievalPersonalization, retrievalTemporal, retrievalDirectAnswer, retrievalGraph, retrievalReasoningTrace, codingRecall, proceduralRecall, ingestionEntityRecall, ingestionSchemaCompleteness, ingestionBacklinkF1, and ingestionSetupFriction. Source: packages/bench/src/registry.ts:1-58
Cross-signals reports (crossSignalsDir/<date>.md) and daily curation output also act as first-line diagnostics: they surface counts of approved / approved-with-feedback / rejected decisions, the semantic-enhancer outcome (applied, timed-out, or no overlaps), and a list of recurring themes and risks. Source: packages/remnic-core/src/shared-context/manager.ts:1-30
See Also
- Memory Type Reference
- MCP Tool Reference
- OpenClaw Bridge Mode
- Codex Phase-2 Consolidation
Source: https://github.com/joshuaswarren/remnic / Human Manual
Doramagic Pitfall Log
Source-linked risks stay visible on the manual page so the preview does not read like a recommendation.
Developers may expose sensitive permissions or credentials: FallbackLlmClient rejects OAuth-only providers (openai) before runtime auth resolution
Developers may expose sensitive permissions or credentials: [Windows] QMD probe fails: launchProcess() uses bare spawn() without shell:true — all qmd launch forms (sh/.cmd/JS) error
Developers may fail before the first successful local run: plugin-pi: stale ctx error after session replacement/reload (post-await ctx access in event + command handlers)
May increase setup, validation, or first-run risk for the user.
Doramagic Pitfall Log
Found 29 structured pitfall item(s), including 2 high/blocking item(s). Top priority: Security or permission risk - Security or permission risk requires verification.
1. Security or permission risk: Security or permission risk requires verification
- Severity: high
- Finding: Developers should check this security_permissions risk before relying on the project: FallbackLlmClient rejects OAuth-only providers (openai) before runtime auth resolution
- User impact: Developers may expose sensitive permissions or credentials: FallbackLlmClient rejects OAuth-only providers (openai) before runtime auth resolution
- Recommended check: Before packaging this project, run the relevant install/config/quickstart check for: FallbackLlmClient rejects OAuth-only providers (openai) before runtime auth resolution. Context: Source discussion did not expose a precise runtime context.
- Evidence: failure_mode_cluster:github_issue | https://github.com/joshuaswarren/remnic/issues/1478
2. Security or permission risk: Security or permission risk requires verification
- Severity: high
- Finding: Developers should check this security_permissions risk before relying on the project: [Windows] QMD probe fails: launchProcess() uses bare spawn() without shell:true — all qmd launch forms (sh/.cmd/JS) error
- User impact: Developers may expose sensitive permissions or credentials: [Windows] QMD probe fails: launchProcess() uses bare spawn() without shell:true — all qmd launch forms (sh/.cmd/JS) error
- Recommended check: Before packaging this project, run the relevant install/config/quickstart check for: [Windows] QMD probe fails: launchProcess() uses bare spawn() without shell:true — all qmd launch forms (sh/.cmd/JS) error. Context: Observed when using node, windows, macos
- Evidence: failure_mode_cluster:github_issue | https://github.com/joshuaswarren/remnic/issues/1476
3. Installation risk: Installation risk requires verification
- Severity: medium
- Finding: Developers should check this installation risk before relying on the project: plugin-pi: stale ctx error after session replacement/reload (post-await ctx access in event + command handlers)
- User impact: Developers may fail before the first successful local run: plugin-pi: stale ctx error after session replacement/reload (post-await ctx access in event + command handlers)
- Recommended check: Before packaging this project, run the relevant install/config/quickstart check for: plugin-pi: stale ctx error after session replacement/reload (post-await ctx access in event + command handlers). Context: Observed when using node, macos
- Evidence: failure_mode_cluster:github_issue | https://github.com/joshuaswarren/remnic/issues/1481
4. Installation risk: Installation risk requires verification
- Severity: medium
- Finding: Project evidence flags a installation risk. Review the linked source before relying on this workflow.
- User impact: May increase setup, validation, or first-run risk for the user.
- Recommended check: Reproduce the official install and quickstart path in an isolated environment.
- Evidence: community_evidence:github | https://github.com/joshuaswarren/remnic/issues/1474
5. Installation risk: Installation risk requires verification
- Severity: medium
- Finding: Project evidence flags a installation risk. Review the linked source before relying on this workflow.
- User impact: May increase setup, validation, or first-run risk for the user.
- Recommended check: Reproduce the official install and quickstart path in an isolated environment.
- Evidence: community_evidence:github | https://github.com/joshuaswarren/remnic/issues/1476
6. Installation risk: Installation risk requires verification
- Severity: medium
- Finding: Project evidence flags a installation risk. Review the linked source before relying on this workflow.
- User impact: May increase setup, validation, or first-run risk for the user.
- Recommended check: Reproduce the official install and quickstart path in an isolated environment.
- Evidence: community_evidence:github | https://github.com/joshuaswarren/remnic/issues/1481
7. Configuration risk: Configuration risk requires verification
- Severity: medium
- Finding: Project evidence flags a configuration risk. Review the linked source before relying on this workflow.
- User impact: May increase setup, validation, or first-run risk for the user.
- Recommended check: Reproduce the official install and quickstart path in an isolated environment.
- Evidence: capability.host_targets | https://github.com/joshuaswarren/remnic
8. Configuration risk: Configuration risk requires verification
- Severity: medium
- Finding: Developers should check this configuration risk before relying on the project: Day Summary cron job does not reconcile model config on plugin startup
- User impact: Developers may misconfigure credentials, environment, or host setup: Day Summary cron job does not reconcile model config on plugin startup
- Recommended check: Before packaging this project, run the relevant install/config/quickstart check for: Day Summary cron job does not reconcile model config on plugin startup. Context: Source discussion did not expose a precise runtime context.
- Evidence: failure_mode_cluster:github_issue | https://github.com/joshuaswarren/remnic/issues/1474
9. Configuration risk: Configuration risk requires verification
- Severity: medium
- Finding: Developers should check this configuration risk before relying on the project: Day Summary cron timezone is not configurable (uses server timezone)
- User impact: Developers may misconfigure credentials, environment, or host setup: Day Summary cron timezone is not configurable (uses server timezone)
- Recommended check: Before packaging this project, run the relevant install/config/quickstart check for: Day Summary cron timezone is not configurable (uses server timezone). Context: Source discussion did not expose a precise runtime context.
- Evidence: failure_mode_cluster:github_issue | https://github.com/joshuaswarren/remnic/issues/1475
10. Configuration risk: Configuration risk requires verification
- Severity: medium
- Finding: Developers should check this configuration risk before relying on the project: Flush plan: models hallucinate 'memory-candidates/' paths and flush-plan.md grows indefinitely
- User impact: Developers may misconfigure credentials, environment, or host setup: Flush plan: models hallucinate 'memory-candidates/' paths and flush-plan.md grows indefinitely
- Recommended check: Before packaging this project, run the relevant install/config/quickstart check for: Flush plan: models hallucinate 'memory-candidates/' paths and flush-plan.md grows indefinitely. Context: Observed when using node, python
- Evidence: failure_mode_cluster:github_issue | https://github.com/joshuaswarren/remnic/issues/1483
11. Configuration risk: Configuration risk requires verification
- Severity: medium
- Finding: Developers should check this configuration risk before relying on the project: LCM summarizer bypasses taskModelChain, falls back to gateway default model chain
- User impact: Developers may misconfigure credentials, environment, or host setup: LCM summarizer bypasses taskModelChain, falls back to gateway default model chain
- Recommended check: Before packaging this project, run the relevant install/config/quickstart check for: LCM summarizer bypasses taskModelChain, falls back to gateway default model chain. Context: Source discussion did not expose a precise runtime context.
- Evidence: failure_mode_cluster:github_issue | https://github.com/joshuaswarren/remnic/issues/1473
12. Configuration risk: Configuration risk requires verification
- Severity: medium
- Finding: Developers should check this configuration risk before relying on the project: v9.3.639
- User impact: Upgrade or migration may change expected behavior: v9.3.639
- Recommended check: Before packaging this project, run the relevant install/config/quickstart check for: v9.3.639. Context: Observed when using docker
- Evidence: failure_mode_cluster:github_release | https://github.com/joshuaswarren/remnic/releases/tag/v9.3.639
Source: Doramagic discovery, validation, and Project Pack records
Community Discussion Evidence
These external discussion links are review inputs, not standalone proof that the project is production-ready.
Count of project-level external discussion links exposed on this manual page.
Open the linked issues or discussions before treating the pack as ready for your environment.
Community Discussion Evidence
Doramagic exposes project-level community discussion separately from official documentation. Review these links before using remnic with real data or production workflows.
- Flush plan: models hallucinate 'memory-candidates/' paths and flush-plan - github / github_issue
- LCM summarizer bypasses taskModelChain, falls back to gateway default mo - github / github_issue
- FallbackLlmClient rejects OAuth-only providers (openai) before runtime a - github / github_issue
- plugin-pi: stale ctx error after session replacement/reload (post-await - github / github_issue
- Make context recall append instead of prepend - github / github_issue
- [[Windows] QMD probe fails: launchProcess() uses bare spawn() without she](https://github.com/joshuaswarren/remnic/issues/1476) - github / github_issue
- Day Summary cron timezone is not configurable (uses server timezone) - github / github_issue
- Day Summary cron job does not reconcile model config on plugin startup - github / github_issue
- v9.3.644 - github / github_release
- v9.3.643 - github / github_release
- v9.3.642 - github / github_release
- v9.3.641 - github / github_release
Source: Project Pack community evidence and pitfall evidence