diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json
index dbf98e8..729d590 100644
--- a/.claude-plugin/marketplace.json
+++ b/.claude-plugin/marketplace.json
@@ -9,7 +9,7 @@
"name": "lore",
"source": "./",
"description": "Shared memory for Claude Code, Codex, and DOXA: capped curated facts, evidence-backed beliefs, FTS5 session search, staged review, learned skills, and signed sync.",
- "version": "0.62.27"
+ "version": "0.62.28"
}
]
}
diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json
index 64c6f1c..573cb0d 100644
--- a/.claude-plugin/plugin.json
+++ b/.claude-plugin/plugin.json
@@ -1,7 +1,7 @@
{
"name": "lore",
"description": "Memory for Claude Code that reasons about you and improves itself: Honcho-pattern belief store with deriver, dreamer and dialectic (/lore:ask), automatic skillification with a closed judge/update/retire loop, on a Hermes-pattern core \u2014 hard-capped curated memory, FTS5 session search, staged review.",
- "version": "0.62.27",
+ "version": "0.62.28",
"author": {
"name": "Fabian Wilde",
"email": "docwilde@proton.me"
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 84de141..dabd30b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,15 @@
# Changelog
+## 0.62.28 — 2026-11-12
+
+**README reference**
+
+- Document startup memory availability when pending enumeration fails, carrier
+ setup after plugin updates, and empty replacement and match-error behavior.
+- Clarify interactive CLI writes, staged model proposals, Codex hook trust and
+ MCP registration, and the graph-context defaults and Codex prompt-hook setup.
+- Describe learned skill outcomes, sync conflicts, and memory refresh behavior.
+
## 0.62.27 — 2026-11-12
**Startup memory**
diff --git a/Cargo.lock b/Cargo.lock
index 0125864..c8fc337 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -612,7 +612,7 @@ checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6"
[[package]]
name = "lore-core"
-version = "0.62.27"
+version = "0.62.28"
dependencies = [
"fancy-regex",
"hmac",
diff --git a/README.md b/README.md
index b26aef0..4202698 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
-
+
@@ -13,15 +13,15 @@
# LORE — Lots Of Reconciled Engrams
**Persistent memory shared by Claude Code, Codex, and DOXA.** Curated facts
-are capped and reviewed. Derived beliefs retain their evidence and appear
-on request or through explicitly enabled context.
+are hard-capped; curated proposals wait for review. Derived beliefs retain their
+evidence and appear on request or through explicitly enabled context.
> [!WARNING]
> **Beta.** Commands, caps, and configuration may change between releases.
> LORE indexes local transcripts; Claude review sends a scrubbed digest to
> the session's Anthropic endpoint. `/lore:setup` edits Claude settings.
-> Curated memory requires approval, but the deriver writes beliefs without
-> it. Sync is off until configured. Read [Data & safety](#data--safety).
+> Hooks and model tools stage curated changes for review; the deriver writes
+> beliefs directly. Sync is off until configured. Read [Data & safety](#data--safety).
LORE keeps recall separate from authority: a belief carries citations,
and relations between beliefs do not turn them into approved facts.
@@ -35,11 +35,11 @@ and relations between beliefs do not turn them into approved facts.
- **Beliefs with evidence.** Query conclusions, citations, and their graph on demand.
- **Session search.** Local FTS5 index of Claude Code, DOXA, and Codex transcripts.
- **File maps.** A short `path — purpose` guide to important project files.
-- **Learned skills.** Verified recipes are proposed, evaluated, and updated or retired.
+- **Learned skills.** Recipes carry outcome history and staged updates or retirement.
- **Local skill experiments.** [Capture diagnostic traces and compare pending coding skills](docs/skill-evaluation.md) against frozen tests before human approval.
- **Cross-machine sync.** Signed hub, peer, or offline transfer; off by default.
- **Agent integration.** Claude Code and Codex plugins inject startup context;
- Claude review and explicit Codex writes retain the proposal and approval gates.
+ interactive CLI writes apply directly, while review and model tools stage proposals.
Engine-origin labels add context, not authority. The [manual](docs/manual.md)
explains the write gates, hooks, and belief model.
@@ -60,6 +60,9 @@ in a private disk cache. Hooks use the installed carrier and never build during
startup. From a checkout, use `./task build` or `./task install`.
The carrier may use a newer patch release within the plugin’s major/minor
version; preview versions require an exact match.
+`./task install` places `lore-rs` and `lore` in `~/.local/bin` by default;
+keep that directory on `PATH`. Run setup after a plugin update so hooks have
+a compatible carrier before the next session starts.
Native CLI, hooks, MCP and DOXA share saved caps, stage switches, review
model preferences, context refresh and sync transport settings from
@@ -68,6 +71,12 @@ overrides saved values, including explicit empty values. A custom store
uses only process overrides unless it belongs to the chosen settings
directory. Store paths and identity remain process configuration. Saved credentials require a private, owned settings file.
+In [v0.62.27](https://github.com/docwilde/LORE/releases/tag/v0.62.27), startup
+and refresh snapshots load curated memory even when the pending-review scan
+fails. The snapshot reports the pending count as unknown with a diagnostic
+code. The pending directory scan is bounded at 4,096 entries; pending listings
+and review commands retain their bounds and approval checks.
+
`/lore:setup` walks each `/lore:doctor` finding behind its own confirmation: disabling Claude Code's built-in auto-memory, adding the permission allowlist, porting existing entries, priming the session index.
**First run:** review only looks forward, so run `/lore:backfill project` once to derive existing sessions into the belief store.
@@ -89,10 +98,13 @@ This WSL 2 setup has not been verified in LORE CI; see the
### Codex
LORE supports Codex through the portable [`plugin.json`](plugin.json) and
-its [SessionStart hook](codex/hooks/hooks.json). Installing the full Codex
-plugin automatically injects the shared user and current project snapshot
-at startup, resume, clear, and compaction. Claude Code, Codex, and DOXA read
-the same store; set `LORE_ROOT` when using a store other than `~/.claude/lore`.
+its [SessionStart hook](codex/hooks/hooks.json). Enable the full plugin, then
+review and trust its hook with `/hooks` in Codex. Once trusted, the hook injects
+the shared user and current project snapshot at startup, resume, clear, and
+compaction. Codex requires a new review when a hook changes; see its
+[hook trust documentation](https://learn.chatgpt.com/docs/hooks#review-and-trust-hooks).
+Claude Code, Codex, and DOXA read the same store; set `LORE_ROOT` when using a
+store other than `~/.claude/lore`.
The [Codex skill](codex/skills/lore/SKILL.md) supports explicit recall and
memory writes. Index local Codex, Claude Code, and DOXA transcripts with
@@ -100,12 +112,22 @@ memory writes. Index local Codex, Claude Code, and DOXA transcripts with
with `lore session `. Indexing and search stay local and use SQLite FTS5.
The Codex startup hook does not index transcripts or run the Claude reviewer.
-Use `lore memory add --scope user|project "one concise fact"` for an explicit
-write. Detached Codex writes become proposals under the normal write gate;
-inspect them with `lore pending` and resolve the exact reviewed proposal in
-the native terminal or DOXA. A proposal or search result is not an approved
-fact. The plugin manifest declares hooks and interface metadata; the native
-`lore mcp` server is available separately and is not registered automatically.
+Interactive Codex sessions can apply CLI memory writes directly. Calls
+classified as hooks or detached/model writers stage proposals; inspect them
+with `lore pending` and resolve the exact reviewed
+proposal in the native terminal or DOXA. The MCP tool `lore_remember` always
+stages a proposal. A proposal or search result is not an approved fact.
+
+The plugin declares its startup hook and skills. Register the native MCP server
+separately to give Codex tools for curated memory, beliefs and evidence,
+graph traversal, session search, and staged memory proposals. From this checkout:
+
+```sh
+./task install
+codex mcp add lore --env LORE_ENGINE=codex -- "$HOME/.local/bin/lore-rs" mcp --engine codex
+```
+
+Restart Codex to load the registered server.
For a skill-only local setup from this checkout:
@@ -118,12 +140,41 @@ The skill calls LORE's CLI against the shared store when a task needs recall.
This skill-only setup does not install the automatic SessionStart hook;
install the full Codex plugin for startup context injection.
+## Memory and graph context
+
+Claude Code refreshes curated memory on prompt submission when its content
+changes by default (`LORE_REFRESH_ON_CHANGE=0` opts out). The bundled Codex
+hook supplies startup snapshots; read back changes during a session with
+`lore memory show` or the MCP tool `lore_memory_list`.
+
+Replacements and removals require a unique `--match`. Empty or whitespace-only
+replacement text is refused; use `memory remove` to delete an entry:
+
+```sh
+lore memory replace --scope project --match "old wording" "replacement fact"
+lore memory remove --scope project --match "obsolete fact"
+```
+
+An absent entry reports `match_not_found`; multiple matches report
+`match_ambiguous`.
+
+Graph context is experimental and off by default. Enable it in the shared
+settings with `lore config set LORE_GRAPH_CONTEXT 1`. Its defaults are a
+1,200-character budget (`LORE_GRAPH_CONTEXT_CAP`) and one relation hop
+(`LORE_GRAPH_CONTEXT_HOPS`). The Claude prompt hook injects the bounded block;
+automatic graph context in Codex requires a separate `UserPromptSubmit` hook.
+With graph context enabled, `lore graph context --prompt "topic terms"` reads
+the block explicitly. `lore graph stats`, `lore graph neighbours `, and the
+MCP tool `lore_belief_neighbours` support on-demand inspection and traversal.
+Graph-retrieved beliefs retain their own evidence and citation status.
+
## Sync — one memory on every machine
Sync is **off until configured**. LORE records portable changes in a local
operation log; a configured transport moves signed operations between
-machines. Failed verification and conflicting writes go to pending review.
-Machine memory stays on its own host.
+machines. Unverified operations go to pending review; class-specific merge
+rules preserve alternatives or stage conflicting content. Machine memory
+stays on its own host.
- **Hub:** push and pull through the private `lore-hub` service, which stores operations without interpreting them.
- **Direct peer:** exchange operations between two machines without a hub.
@@ -153,7 +204,7 @@ an older hub copy cannot be replaced.
- **Search stays local.** Indexing needs no embeddings or API calls.
- **Claude review uses the session's Anthropic endpoint.** LORE scrubs likely secrets before sending a digest.
- **Derived beliefs are written without approval.** The [read gate](docs/manual.md#the-belief-gate-sits-on-read-not-on-write) limits when they can influence an agent.
-- **The write gate is advisory.** `LORE_WRITE_GATE` classifies callers; it is not a security boundary.
+- **The write gate is advisory.** Interactive CLI calls can write curated memory directly; hook/model callers stage proposals. `LORE_WRITE_GATE=off` bypasses CLI staging and is not a security boundary.
- **Sync is opt-in.** Configured transports can carry memory, beliefs, proposals, skills, and selected scrubbed session text; treat the destination as private storage.
- **Setup changes Claude settings with confirmation.** `lore teardown` reverses those changes.
@@ -177,7 +228,11 @@ and interoperability test oracle.
## Lineage
-Curated memory follows the [Hermes Agent](https://hermes-agent.nousresearch.com/docs/user-guide/features/memory) pattern: hard caps, a reviewer that proposes but never applies, a snapshot that stays frozen rather than thrashing the prompt cache. The belief layer is [Honcho](https://github.com/plastic-labs/honcho)'s deriver/dreamer/dialectic split, run here on one SQLite file with no standing service.
+Curated memory follows the [Hermes Agent](https://hermes-agent.nousresearch.com/docs/user-guide/features/memory)
+pattern: hard caps, a reviewer that proposes but never applies, and stable
+context with change-detected refresh in Claude Code and startup snapshots in
+Codex. The belief layer uses [Honcho](https://github.com/plastic-labs/honcho)'s
+deriver/dreamer/dialectic split, stored locally in SQLite.
The name means the accumulated knowledge of a craft — and, coincidentally, Data's brother in TNG. The logo's amber is a positronic wink at that.
diff --git a/plugin.json b/plugin.json
index 0e2e334..9e5a912 100644
--- a/plugin.json
+++ b/plugin.json
@@ -1,7 +1,7 @@
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "lore",
- "version": "0.62.27",
+ "version": "0.62.28",
"description": "Unified user, repo, and session memory for Claude Code, Codex, and DOXA",
"author": {
"name": "Dr. Fabian Wilde",
diff --git a/rust/lore-core/Cargo.toml b/rust/lore-core/Cargo.toml
index 62062d3..46f405a 100644
--- a/rust/lore-core/Cargo.toml
+++ b/rust/lore-core/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "lore-core"
-version = "0.62.27"
+version = "0.62.28"
edition = "2021"
license = "AGPL-3.0-only"
description = "Native LORE memory, beliefs, review and session index"