Skip to content

Lore 0.3.0

Choose a tag to compare

@aoc81 aoc81 released this 17 Jul 15:31
· 27 commits to main since this release

Sharper recall, a quieter capture nudge, near-duplicate triage, and a real test suite — all still hook-driven, staying in the lightweight recall/capture niche.

Recall

  • Word-boundary scoring — an exact word hit scores 2, a prefix overlap scores 1, and an entry needs a score of 2 to surface. auth no longer matches author, and one weak overlap never injects noise.
  • Short tags are findable — 2–3 char prompt words (ci, api, aws) now match against exact tags, where they're curated vocabulary. Previously the 4-char minimum made them impossible to hit.
  • Directory & glob files: refs — a ref may be an exact path, a directory prefix (src/auth/), or a glob (src/*.py), and all three power edit-time recall, the linter, and drift triage. Path matching is case-insensitive on Windows.
  • Local recall telemetry — every surfaced entry is logged to .git/lore-recall.log (local only, never committed) so /lore:stats can show which learnings actually get used and which never surface.
  • New /lore:search <query> — query the same scorer the recall hook uses, on demand.

Capture

  • captureNudge config (always | smart | off, default smart) — the smart mode skips the end-of-turn nudge on purely conversational turns (no tool use), so the LORE CHECK keeps its signal instead of becoming a mechanical reflex. Reads the transcript and fails open. Booleans work as shorthand (true→smart, false→off).
  • Post-compaction reminder (new SessionStart hook) — right after context is compacted, a short lore reminder is re-injected — exactly the moment an uncaptured learning would otherwise die with the context. (PreCompact can't inject context, so the post-compact SessionStart is the supported channel.)
  • Capture-time secret scan — the skill now scans the file it just wrote, so a leak is caught at write time, not just at the push boundary.

Health / freshness

  • /lore:lint --dupes — near-duplicate triage: entry pairs sharing title/tag vocabulary (e.g. two teammates capturing the same gotcha on parallel branches) plus category-name variants (CI vs ci).
  • Richer /lore:stats — now reports recall activity (most- and never-surfaced entries), the near-duplicate count, and a note when the project's .lore/ hook copies fall behind the installed plugin version.
  • Faster drift triage — --report now computes drift in a single streaming git log pass instead of one subprocess per referenced file.
  • .lore/VERSION stamp — /lore:init stamps the hook copies so the linter can flag stale ones.

Robustness

  • _TEMPLATE.md and _/.-prefixed files are no longer counted as entries (fixes the stats count and the generated index).
  • .lore.json values are type-validated — a wrongly-typed key is ignored instead of crashing a hook.

Tests

  • A 52-test stdlib unittest suite (scorer, ref matching, config, transcript-based nudge gating, secret scan, git drift) and a CI workflow running it on 3 OSes × Python 3.9/3.13.

⚠️ Behavior change

The end-of-turn capture nudge now defaults to smart (skips tool-less turns). To restore the previous every-turn behavior, set "captureNudge": "always" in a project's .lore.json.

Install / update: /plugin install lore@lore (auto-updates).