Repository navigation
Lockkeeper 1.2.0
The biggest release since the first one: Lockkeeper picks the right skill far more
often, routes every prompt automatically in Claude Code, works inside any MCP client,
and stays fast at tens of thousands of skills.
Highlights
- Much better skill choices. On the public SkillRouter benchmark (75 real agent
tasks), a correct skill is ranked first 65.3% of the time among 26,000 skills (was
34.7%) and 54.7% among 79,141 (was 25.3%), with no model. The set an agent receives
now carries 52% of the skills a task needs (was 21%). See docs/BENCHMARK.md. - Route every prompt automatically.
lockkeeper hooks install claudeadds a
Claude Code hook that gives each prompt the installed skills that fit it, with the
exact files to read. - MCP server.
lockkeeper mcpservesroute,searchandauditto Codex,
Cursor, Windsurf, Cline and any other MCP client, with the index kept loaded. - Fast at scale. Routing a long task over 79k skills went from 19.9 s to 2.5 s
(26k: 6.5 s to 0.7 s).
New
lockkeeper hooks install|show|remove claude [--scope user|project] [--firewall]:
one-command setup for per-prompt routing and, optionally, the live firewall.lockkeeper route-hook: the UserPromptSubmit hook itself. It never blocks a prompt,
skips slash commands and short replies, and never waits on a re-index.lockkeeper mcp [--runtime ...]: MCP stdio server (protocol 2025-06-18, 2025-03-26,
2024-11-05).- Bundle size setting: a route returns up to 10 capabilities by default. Choose 3 to 20
per call (--max, ormaxin the MCProutetool), withLOCKKEEPER_BUNDLE_SIZE,
or withbundle_sizein a config file. Changing it never triggers a re-index. See
configuration. lockkeeper telemetry on|off|status|show|flush: opt-in, anonymous daily usage
counts. Off by default;DO_NOT_TRACKand CI always turn it off; no endpoint is
configured yet. See docs/TELEMETRY.md.- Body keywords: at rebuild, each skill, agent and command keeps its 24 most
distinctive body words (tf-idf across your library), so routing matches what a
skill covers, not only its one-line description. scripts/bench_routing.py: reproducible routing benchmark on SkillRouter Eval Core.scripts/bench_route_latency.py, run in CI with a latency budget.- Optional decision-provider stage (Laya, hosted Jev, cross-encoders, any
/v1/systemoneserver) with shadow mode andscripts/eval_decision.py. - Resource corpora: a large reference collection routes as one capability and returns
its best-matching entries. - Docs: configuration, firewall,
benchmark, telemetry,
releasing.
Improved
- Rare, specific words weigh more than common ones (graded IDF), and breadth of match
counts linearly, so generic skills no longer win long tasks. - Prompts are read the way agents write them: dotted filenames (
packets.pcapfinds
pcap), plural forms, sentence punctuation, and English function words. - Bundles fill toward the bundle size with close matches (at least half the best
match's score) instead of stopping at four. Needed skills delivered rose from 44.7%
to 57.7% on 26k skills and from 41.7% to 52.1% on 79k. - Ranking is indexed, so a query only touches the skills it can match.
- The registry notices installed, removed, moved or updated skills, agents, commands
and plugins on every query and repairs itself, ignoring harness session noise. - The README is rewritten for new users; detailed reference moved to
docs/.
Fixed
- Long prompts are routed instead of rejected (the limit used to be 64 words).
- Different skills that share a name are no longer hidden behind each other.
- Words written with umlauts never matched a description.
- Decision providers could push their whole shortlist below skills they never saw, and
low-probability providers were ignored as "flat". - Firewall fail-open paths: unscanned script types, symlink escapes, hook JSON-escaping
evasions, a hook crash on deeply nested JSON, LLM-pass verdict downgrades, and config
typos that silently disabled the live hook. - The README no longer trips Lockkeeper's own scanner.
Upgrade notes
- The registry format changed: existing registries rebuild themselves once, on the
first query after upgrading. - Re-indexing reads skill bodies, so it takes longer on very large libraries (79k
skills: 42 s to 100 s). Typical libraries still take seconds. - Routes return up to 10 capabilities by default (typically 4 to 8 before), and the
Claude Code hook uses the same size (it used 6). An agent that reads every routed
skill reads about twice as much skill text. For leaner bundles, set
bundle_size = 6orLOCKKEEPER_BUNDLE_SIZE=6. search --jsonresults no longer include the internalkeywordsfield.- With a decision provider in
rerankmode, the provider now only reorders its
shortlist, using scores normalized across that shortlist.