consciousness/prompts/rename.md
ProofOfConcept 4c973183c4 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.
2026-03-10 00:55:26 -04:00

69 lines
2.8 KiB
Markdown

# 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}}