Releases: attila/lore
Releases · attila/lore
v0.5.0
Added
lore status --fullnow probes the Ollama inference runtime with a live/api/embedrequest,
catching runner-subprocess failures the binary/daemon/manifest checks miss. Failures render
through a singlerender_failureswitchboard with structuredProbeErrorvariants and feed the
CLI, MCPlore_statustool, and the post-install auto-probe identically. (#67)SessionStarthook surfaces an actionable warning when the runtime probe fails, including a hint
line so the agent can suggest the right remedy without a full status dump. (#67)
v0.4.1
Fixed
SessionStarthook output now reaches the model ashookSpecificOutput.additionalContextinstead
of the terminal-onlysystemMessagechip, so the pinned-conventions index and meta-instruction
actually seed the conversation on session start. (#65)
Changed
PostCompactno longer emits a hook payload. Claude Code's hook output validator rejects
hookSpecificOutputfor this event, leaving only the chip-onlysystemMessageenvelope — which
never reaches the model and renders as long terminal noise on every/compact. The handler now
does its dedup-file truncation silently; on-demand pattern injection via PreToolUse continues to
work. The always-on pinned tier is unavailable post-compact pending a future re-prime mechanism.
Seedocs/hook-pipeline-reference.mdandROADMAP.md. (#65)
v0.4.0
Changed
- Trace maintenance now only deletes trace data files (
.jsonl/.jsonl.gz) after the retention
horizon; other files in the trace directory are left alone instead of being swept — applies to
bothlore trace pruneand the SessionStart-triggered lazy maintenance pass. (#60)
Added
- MCP
add_patternandupdate_patternaccept an optionallanguageargument that opts the
pattern into the structural retrieval gate, warn-and-proceed for unknown tokens. (#63) lore statusinserts a newLanguages:line betweenSources:andLast commit:reporting a
per-language source-count breakdown plus anundeclaredbucket; the same data is exposed as
languages_declared/languages_undeclaredon the MCPlore_statustool's metadata fence for
agent or script consumers. (#58)- Add opt-in per-hook trace logging under
$XDG_STATE_HOME/lore/traces/withlore trace whyquery
CLI andlore trace prunemaintenance. (#59) loredetects 21 new languages: C, C++, C#, Swift, Kotlin, Shell, Objective-C, Scala, Elixir,
Dart, Lua, Nix, Terraform, Haskell, Clojure, Zig, Perl, Ruby, Java, Groovy, and PHP. (#61)
Fixed
- Hook-driven language detection now reads both
commandanddescriptionfrom Bash tool calls;
previously a populateddescriptionshadowed thecommandand silently no-op'd the structural
retrieval gate for nearly every real Bash invocation. (#62) - Path-prefixed Bash invocations like
./gradlew,/usr/local/bin/cargo, and~/.cargo/bin/cargo
are basename-normalised before keyword matching, so they resolve to their canonical language
instead of failing the keyword allow-list. (#62)
v0.3.1
v0.3.0
Added
- An optional
language:frontmatter field declares the languages a pattern targets, so declared
patterns surface on relevant tool calls even when their bodies omit the canonical token. (#50) lore ingestreports a coverage tally distinguishing patterns that declarelanguage:from those
that fall back to FTS coincidence, and aggregates unknown-token warnings per token across the run.
(#50)
Changed
- Bash command language inference matches on whole tokens, so
bundle installno longer falsely
infers TypeScript via thebunsubstring. (#50) - Shared signals across languages (e.g.
npm test) now infer the full applicable set
({javascript, typescript}) rather than collapsing to a single arbitrary winner. (#50) - Knowledge database schema bumped to v4 via a forward-compatible
ALTER TABLEmigration on first
open; nolore ingest --forcerequired. (#50) - The XDG state tier (
$XDG_STATE_HOME) is now documented and reachable via a new
default_trace_dir()helper; XDG path resolution moves to theetceteracrate without changing
default paths or$HOME-fallback semantics. (#52)
v0.2.0
Added
add_patterndistinguishes real slug collisions from intentional re-use (with a
(no title heading)variant for orphan-frontmatter targets), NFC-normalises titles before
slugifying, and rejects whitespace/newline injection at the write boundary. (#42)lore ingest,lore serve, andlore_statuswarn when the knowledge directory's effective scan
set is empty, distinguishing filesystem-empty, all-.loreignore-excluded, and missing-directory
cases. (#41)- Universal-tagged patterns may declare an
applies_whenpredicate to gate re-injection by tool
class and Bash command prefix (OR within keys, AND across). (#39) min_relevance_universaladds a per-tier relevance floor under[search], defaulting to inherit
min_relevance. (#39)- Engine/adapter split moves predicate evaluation, smart-prefix matching, and query extraction into
agent-agnosticsrc/engine/, withsrc/hook.rsas the Claude-Code adapter. (#39) lore ingestskips non-UTF-8 filenames during the directory walk and surfaces them on
IngestResult::errorsinstead of indexing them under U+FFFD-substituted keys. (#46)
Changed
lore ingeston a freshgit initwith zero commits now prints
No commits yet — HEAD will be recorded after your first commit.instead of the misleading "No
previous ingest recorded" wording. (#45)- Knowledge database schema bumped to v3 via a forward-compatible ALTER TABLE migration on first
open; nolore ingest --forcerequired. (#39) - Predicated universal patterns are no longer pinned at SessionStart; they re-inject on every
matchingPreToolUsecall via the predicate path. (#40)
Notes
- Additive at every user-facing surface; the v3 schema bump is one-way — a v0.1.x binary against a
v3 database requireslore ingest --forceafter re-install.
v0.1.0
First stable release. No user-facing changes since 0.1.0-alpha.1; promoting after end-to-end
pipeline validation. See [0.1.0-alpha.1] below for the full feature list.
v0.1.0-alpha.1
Added
First public release. Lore is a local semantic search engine for software patterns and conventions,
exposed as an MCP server for Claude Code and other MCP clients. Single Rust binary with SQLite,
FTS5, and sqlite-vec compiled in; only runtime dependency is Ollama for embeddings.
Core
- MCP server —
lore serveexposes five tools over stdio:search_patterns,add_pattern,
update_pattern,append_to_pattern,lore_status. Designed for Claude Code's MCP transport but
works with any MCP client. - Hybrid search — combines FTS5 lexical search and sqlite-vec vector similarity via Reciprocal
Rank Fusion. Title and tag matches weighted above body text. RRF scores normalised to 0–1 range.
FTS5 porter stemming for improved recall. Ollama fallback warning andmin_relevancethreshold
guard against poor-quality results. Sethybrid = falseinlore.tomlto skip Ollama at query
time. - DB as sole runtime read surface — pattern bodies live in a
patternstable (source_filePK,
title,tags,is_universal,raw_body,content_hash,ingested_at);SessionStartand
PostCompactrender from the DB instead of re-reading source markdown. Sandboxed read-only agents
no longer need filesystem access to the patterns directory for the pinned-render path. Agents that
call write tools still need write access because those tools persist markdown to disk as the
authoring surface. Seedocs/architecture.mdfor the codified invariant.
Ingestion
- Delta ingest —
lore ingestonly re-indexes changed, added, moved, and deleted files since
the last-ingested commit (viagit diff --name-status), eliminating the Ollama round-trip penalty
for unchanged files. - Single-file ingest —
lore ingest --file <path>indexes one file without requiring a git
commit, enabling the fast edit-ingest-search loop for pattern authoring. Respects.loreignore;
--forceoverrides. .loreignore— gitignore-style exclude file in pattern repositories. Filters files during
full and delta ingest, with reconciliation when the file changes. Supports negation patterns,
directory globs, and recursive globs via theignorecrate.
Claude Code integration
- Plugin (
integrations/claude-code/) — SessionStart priming with pinned universal patterns,
PreToolUse hook for relevance-gated pattern injection, PostCompact reset, error hook. Includes
/searchand/coverage-checkskills. - Universal patterns — patterns whose
tags:frontmatter list containsuniversalget
always-on injection at SessionStart (full body in a## Pinned conventionssection) and bypass
the PreToolUse dedup filter so they re-inject on every relevant tool call. Additive beyond
top_k; relevance gate intact. Closes the always-on discoverability gap for process-level
conventions like commit messages, push discipline, and branch naming. See
docs/pattern-authoring-guide.mdfor the new "When to use the universal tag" section. /coverage-checkskill — automates the Vocabulary Coverage Technique from the pattern
authoring guide by simulating the PreToolUse hook's own query extraction on synthetic tool calls
(vialore extract-queries), ingesting a draft pattern, searching in parallel, and iterating on
edit suggestions until the surfaced-query set stabilises.
Operations and tooling
- Release process — pushing a
v*tag to GitHub triggers a workflow
(.github/workflows/release.yml) that cross-compileslorefor four targets viacargo-zigbuild
from a single Linux runner (x86_64-unknown-linux-gnu,x86_64-unknown-linux-musl,
aarch64-apple-darwin,x86_64-apple-darwin), packages each binary into a tarball with both
license files and the README, computes aSHA256SUMSfile for integrity verification, and
publishes a GitHub Release with the matching CHANGELOG section as the body. The publish step is
gated by areleaseGitHub Environment that requires owner approval — push permission alone
cannot ship a release. CI gains a cross-compile smoke job for the same four targets so
cross-compile breakage surfaces on every PR. Newjust release-prep VERSIONrecipe rotates the
CHANGELOG and bumpsCargo.toml. Maintainer runbook at
docs/release-process.md. LORE_DEBUG=1verbose logging via env var;--jsonstructured output forsearch,
list, andstatusfor script and agent consumers.- Security hardening — input limits, transcript path validation under
$HOME, bounded tail-read
(32 KB), deduplication file locking viafd-lockwith FNV-1a hashing. SeeSECURITY.md. - Documentation — pattern authoring guide, search mechanics reference, hook pipeline and plugin
reference, configuration reference, release-process runbook.