Releases: keepnotes-ai/keep
v0.140.0
What's new
Stronger type tag — type is now reserved for entity-type classification (conversation, paper, vulnerability, person, ...) to support graph-model semantics. The previous content-kind values (learning, breakdown, decision, ...) move to a new kind tag. Existing data is migrated automatically on daemon startup.
Conditional expressions everywhere — tagdocs, prompt docs, and tag classifier specs support _when: conditions written in CEL. Conditions are evaluated against a unified item context (item.id, item.tags, item.summary, item.content_type, ...) that matches the shape visible in get output.
Conditional edge tags — edge tagdocs (.tag/{key} with _inverse) can declare _when: to restrict when edges are materialized. For example, .tag/from can be conditioned on type=email so that from only creates person-edges in email content, not date-edges in reports. Edges are cleaned up when a source note stops matching.
Inverse edges are findable — find -t cited_by=source_id now works. Inverse-edge tag keys are detected automatically and routed to the edges table instead of regular tag matching.
Conversation auto-tagging — Hermes sync_turn(), Claude Code/Kiro prompt-capture hooks, and OpenClaw ingest/ingestBatch now tag captured messages with type=conversation. Speech-act classification (act tag) is conditioned on type=conversation so it only runs on conversations, not papers or references.
Prompt _when conditions — prompt docs can use _when: CEL expressions to control when they apply, as an alternative to body match rules. A passing _when takes precedence over legacy key=value rules.
v0.139.1
v0.139.0
v0.138.1
v0.138.1 — fix: bump pillow 12.1.1 → 12.2.0 (CVE-2026-40192)
v0.138.0
What’s new
frame: debugging?
frame: feature?
- Added a bundled standard edge tag:
frame, with inverseframes.framepoints at a provisional view, stance, or orientation.- A frame is not just a label. It names a current way of seeing and acting that can disclose a situation, its possibilities, and what counts as relevant.
- Agents can use frames to label conversational activities or episodic analysis, and retrieval can use them as part of its variety filter.
- Added
_value_regextagdoc support for pattern-constrained tag values.- This is a general tagdoc feature, not only a
frameimplementation detail. - For the bundled
frametag,_value_regexrequires target note IDs ending in a question mark, soframe: debugging?is valid whileframe: debuggingis not.
- This is a general tagdoc feature, not only a
- Fixed
tag()so edge tags now correctly normalize/process edge values and create inverse edges, matchingput()behavior.
There are no built-in frame descriptions. A frame note can accumulate its own practices, procedures, cues, rituals, and prior history.