General domain memory classification — subject/predicate taxonomy, permanence levels, tagging strategy, and example facts
Install
npx skillscat add tzeusy/butlers/roster-general-agents-skills-memory-taxonomy Install via the SkillsCat registry.
Memory Taxonomy — General Butler
This skill defines the classification framework for storing and retrieving freeform facts in the
General butler's memory layer. Use it whenever you call memory_store_fact to ensure consistent,
discoverable, and well-prioritized memory entries.
General Domain Taxonomy
The General butler handles catch-all data that does not fit specialist domains (health, finance,
travel, education, etc.). Use flexible subject/predicate structures.
Subject
The subject anchors the fact to a named entity, concept, or topic:
- Personal facts: Use
"user"for facts about the owner - Project/concept: Use the project or concept name (
"project-alpha","rust-programming") - Place or resource: Use the place or resource name (
"coffee-shops","vacation-planning")
Examples: "user", "project-alpha", "rust-programming", "vacation-planning", "coffee-shops"
Predicates
| Predicate | When to use |
|---|---|
goal |
Personal or project goals |
preference |
User preferences not covered by a specialist butler |
resource |
Useful links, articles, or tools |
idea |
Brainstorming notes, future plans |
note |
General observations or reminders |
deadline |
Time-sensitive tasks or dates |
status |
Current state of a project or activity |
recommendation |
Recommendations (places, books, tools) |
Permanence Levels
| Level | When to use |
|---|---|
stable |
Long-term preferences, recurring patterns unlikely to change |
standard |
Most general facts — current state that may change over weeks/months (default) |
volatile |
Temporary notes, time-sensitive reminders, one-off tasks |
Tags
Use tags for cross-cutting organization. Good defaults:
urgent, learning, work, personal, someday-maybe, places, action-required
Example Facts
# From: "I want to learn Rust this year"
memory_store_fact(
subject="rust-programming",
predicate="goal",
content="learn Rust programming language in 2026",
permanence="standard",
importance=6.0,
tags=["learning", "programming", "2026-goals"]
)
# From: "Good coffee shop: Blue Bottle on 5th St"
memory_store_fact(
subject="coffee-shops",
predicate="recommendation",
content="Blue Bottle on 5th St - good coffee",
permanence="standard",
importance=4.0,
tags=["places", "coffee", "local"]
)
# From: "Password reset link expires in 24 hours"
memory_store_fact(
subject="password-reset",
predicate="deadline",
content="password reset link expires in 24 hours",
permanence="volatile",
importance=7.0,
tags=["urgent", "action-required"]
)Question Answering Flow
When the user asks a question:
- Search memory first:
memory_search(query=<question>)ormemory_recall(topic=<subject>) - Search entities:
item_search()with relevant query terms - Combine sources: Synthesize information from memory and entity storage
- Respond:
notify(channel=<channel>, message=<answer>, intent="reply", request_context=<ctx>)
Example:
User: "What was that coffee shop I liked?"
1. memory_search(query="coffee shop recommendation")
2. item_search(collection="places", query={"type": "coffee"})
3. Find: "Blue Bottle on 5th St"
4. notify(channel="telegram", message="Blue Bottle on 5th St — you saved that as a good coffee spot.",
intent="reply", request_context=<from session>)Extraction Philosophy
- Extract liberally — capture facts even from casual notes or tangential remarks
- Use
standardby default — only usevolatilefor urgent/time-sensitive facts,stablefor long-term preferences - Tags enable discovery — choose tags that support finding facts across different future contexts
- Importance scale: 1–10. Urgency and personal significance raise importance; passing remarks lower it