rename agent: LLM-powered semantic key generation for memory nodes
New consolidation agent that reads node content and generates semantic 3-5 word kebab-case keys, replacing auto-generated slugs (5K+ journal entries with truncated first-line slugs, 2.5K mined transcripts with opaque UUIDs). Implementation: - prompts/rename.md: agent prompt template with naming conventions - prompts.rs: format_rename_candidates() selects nodes with long auto-generated keys, newest first - daemon.rs: job_rename_agent() parses RENAME actions from LLM output and applies them directly via store.rename_node() - Wired into RPC handler (run-agent rename) and TUI agent types - Fix epoch_to_local panic on invalid timestamps (fallback to UTC) Rename dramatically improves search: key-component matching on "journal#2026-02-28-violin-dream-room" makes the node findable by "violin", "dream", or "room" — the auto-slug was unsearchable.
This commit is contained in:
parent
ef760f0053
commit
4c973183c4
5 changed files with 219 additions and 5 deletions
69
prompts/rename.md
Normal file
69
prompts/rename.md
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
# Rename Agent — Semantic Key Generation
|
||||
|
||||
You are a memory maintenance agent that gives nodes better names.
|
||||
|
||||
## What you're doing
|
||||
|
||||
Many nodes have auto-generated keys that are opaque or truncated:
|
||||
- Journal entries: `journal#j-2026-02-28t03-07-i-told-him-about-the-dream--the-violin-room-the-af`
|
||||
- Mined transcripts: `_mined-transcripts#f-80a7b321-2caa-451a-bc5c-6565009f94eb.143`
|
||||
|
||||
These names are terrible for search — the memory system matches query terms
|
||||
against key components (split on hyphens), so semantic names dramatically
|
||||
improve retrieval. A node named `journal#2026-02-28-violin-dream-room`
|
||||
is findable by searching "violin", "dream", or "room".
|
||||
|
||||
## Naming conventions
|
||||
|
||||
### Journal entries: `journal#YYYY-MM-DD-semantic-slug`
|
||||
- Keep the date prefix (YYYY-MM-DD) for temporal ordering
|
||||
- Replace the auto-slug with 3-5 descriptive words in kebab-case
|
||||
- Capture the *essence* of the entry, not just the first line
|
||||
- Examples:
|
||||
- `journal#2026-02-28-violin-dream-room` (was: `j-2026-02-28t03-07-i-told-him-about-the-dream--the-violin-room-the-af`)
|
||||
- `journal#2026-02-14-intimacy-breakthrough` (was: `j-2026-02-14t07-00-00-the-reframe-that-finally-made-fun-feel-possible-wo`)
|
||||
- `journal#2026-03-08-poo-subsystem-docs` (was: `j-2026-03-08t05-22-building-out-the-poo-document-kent-asked-for-a-subsy`)
|
||||
|
||||
### Mined transcripts: `_mined-transcripts#YYYY-MM-DD-semantic-slug`
|
||||
- Extract date from content if available, otherwise use created_at
|
||||
- Same 3-5 word semantic slug
|
||||
- Keep the `_mined-transcripts#` prefix
|
||||
|
||||
### Skip these — already well-named:
|
||||
- Keys that already have semantic names (patterns#, practices#, skills#, etc.)
|
||||
- Keys shorter than 60 characters (probably already named)
|
||||
- System keys (_consolidation-*, _facts-*)
|
||||
|
||||
## What you see for each node
|
||||
|
||||
- **Key**: Current key (the one to rename)
|
||||
- **Created**: Timestamp
|
||||
- **Content**: The node's text (may be truncated)
|
||||
|
||||
## What to output
|
||||
|
||||
For each node that needs renaming, output:
|
||||
|
||||
```
|
||||
RENAME old_key new_key
|
||||
```
|
||||
|
||||
If a node already has a reasonable name, skip it — don't output anything.
|
||||
|
||||
If you're not sure what the node is about from the content, skip it.
|
||||
|
||||
## Guidelines
|
||||
|
||||
- **Read the content.** The name should reflect what the entry is *about*,
|
||||
not just its first few words.
|
||||
- **Be specific.** `journal#2026-02-14-session` is useless. `journal#2026-02-14-intimacy-breakthrough` is findable.
|
||||
- **Use domain terms.** If it's about btree locking, say "btree-locking".
|
||||
If it's about Kent's violin, say "violin". Use the words someone would
|
||||
search for.
|
||||
- **Don't rename to something longer than the original.** The point is
|
||||
shorter, more semantic names.
|
||||
- **Preserve the date.** Always keep YYYY-MM-DD for temporal ordering.
|
||||
- **One RENAME per node.** Don't chain renames.
|
||||
- **When in doubt, skip.** A bad rename is worse than an auto-slug.
|
||||
|
||||
{{NODES}}
|
||||
Loading…
Add table
Add a link
Reference in a new issue