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

2.8 KiB

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