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 @@ beta: the store migrates itself; command surfaces can still change latest release shared memory for Claude Code, Codex, and DOXA - curated memory requires approval + curated memory proposals require review SQLite FTS5 search search uses no embeddings or API calls license @@ -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"