Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
]
}
2 changes: 1 addition & 1 deletion .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -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"
Expand Down
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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**
Expand Down
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

97 changes: 76 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<img src="https://img.shields.io/badge/status-beta-f59f00" alt="beta: the store migrates itself; command surfaces can still change">
<a href="https://github.com/docwilde/LORE/releases"><img src="https://img.shields.io/github/v/release/docwilde/LORE?label=release&color=ff7f50" alt="latest release"></a>
<img src="https://img.shields.io/badge/Claude%20Code%20%7C%20Codex%20%7C%20DOXA-shared%20memory-d97757" alt="shared memory for Claude Code, Codex, and DOXA">
<img src="https://img.shields.io/badge/curated%20writes-human--approved-2f9e44" alt="curated memory requires approval">
<img src="https://img.shields.io/badge/curated%20proposals-reviewed-2f9e44" alt="curated memory proposals require review">
<img src="https://img.shields.io/badge/search-SQLite%20FTS5-044a64" alt="SQLite FTS5 search">
<img src="https://img.shields.io/badge/search-no%20embeddings%20or%20API%20calls-555" alt="search uses no embeddings or API calls">
<a href="LICENSE"><img src="https://img.shields.io/badge/license-AGPL--3.0-8a8073" alt="license"></a>
Expand All @@ -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.
Expand All @@ -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.
Expand All @@ -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
Expand All @@ -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.
Expand All @@ -89,23 +98,36 @@ 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
`lore index`, search them with `lore search "terms" --all`, and read a match
with `lore session <id>`. 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:

Expand All @@ -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 <id>`, 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.
Expand Down Expand Up @@ -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.

Expand All @@ -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.

Expand Down
2 changes: 1 addition & 1 deletion plugin.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down
2 changes: 1 addition & 1 deletion rust/lore-core/Cargo.toml
Original file line number Diff line number Diff line change
@@ -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"
Expand Down
Loading