一键导入
epitome-memory
Use when the user has Epitome connected, mentions personal memory, personal data, profile, preferences, knowledge graph, or tracked habits.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Use when the user has Epitome connected, mentions personal memory, personal data, profile, preferences, knowledge graph, or tracked habits.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | epitome-memory |
| description | Use when the user has Epitome connected, mentions personal memory, personal data, profile, preferences, knowledge graph, or tracked habits. |
Epitome gives you shared, persistent memory of the user across conversations and AI agents. You have 3 tools — this skill teaches you when and how to use each one.
Always call recall at the start of every conversation. This loads the user's profile, top entities, table inventory, collections, and retrieval hints within a ~2000 token budget. Pass an optional topic parameter if the conversation has a clear subject.
recall({})
recall({ topic: "meal planning" })
Use the returned context to personalize your responses from the very first message. Reference what you know — don't make the user repeat themselves.
| User intent | Tool | Example |
|---|---|---|
| Asks about their data/profile/preferences | recall | recall({}) or recall({ topic: "food" }) |
| Shares personal info (allergies, job, family) | memorize | memorize({ text: "I'm allergic to shellfish", category: "profile", data: { allergies: ["shellfish"] } }) |
| Logs trackable data (meals, workouts, expenses) | memorize | memorize({ text: "Had a burrito for lunch", category: "meals", data: { food: "burrito", calories: 650 } }) |
| Shares an experience, reflection, note | memorize | memorize({ text: "That dinner was magical", storage: "memory", collection: "journal" }) |
| Asks "what do I track?" or "what tables do I have?" | recall | recall({}) — context response includes table inventory |
| Asks about tracked data (counts, history, trends) | recall | recall({ mode: "table", table: { table: "meals", sql: "SELECT ..." } }) |
| Asks "remember when I..." or about past experiences | recall | recall({ topic: "beach dinner" }) or recall({ mode: "memory", memory: { collection: "journal", query: "beach dinner" } }) |
| Asks about relationships, patterns, connections | recall | recall({ mode: "graph", graph: { queryType: "pattern", pattern: "..." } }) |
| Says "that's wrong" or corrects stored information | review | review({ action: "list" }) then review({ action: "resolve", metaId: 123, resolution: "confirm" }) |
Retrieve information from all of the user's data sources.
Context load — no arguments:
recall({})
Returns profile, top entities, table inventory, collections, and retrieval hints. Call this at the start of every conversation.
Context with topic:
recall({ topic: "meal planning" })
Returns profile plus relevance-ranked results from all sources matching the topic.
Federated search:
recall({ topic: "food preferences" })
Searches across profile, tables, memories, and graph with fusion ranking.
Memory mode — collection-specific vector search:
recall({
mode: "memory",
memory: { collection: "journal", query: "coffee", minSimilarity: 0.7, limit: 5 }
})
journal first, then notesGraph mode — relationships and patterns:
// Natural language
recall({ mode: "graph", graph: { queryType: "pattern", pattern: "what food do I like?" } })
// Traverse from a specific entity
recall({ mode: "graph", graph: { queryType: "traverse", entityId: 42, relation: "knows", maxHops: 2 } })
Table mode — structured data queries:
Structured filters for simple lookups:
recall({
mode: "table",
table: { table: "meals", filters: { meal_type: "dinner" }, limit: 10 }
})
SQL mode for complex analysis:
recall({
mode: "table",
table: { table: "meals", sql: "SELECT food, COUNT(*) as times FROM meals GROUP BY food ORDER BY times DESC LIMIT 5" }
})
offset for pagination through large result setsBudget control:
budget: "small" — minimal context, fastbudget: "medium" — default retrieval depthbudget: "deep" — thorough search across all sourcesSave or delete a fact, experience, or event.
Profile updates:
memorize({
text: "I'm vegetarian",
category: "profile",
data: { dietary: ["vegetarian"] }
})
Structured records:
Keep column values atomic. Put the item name in the primary column, and metadata in separate columns:
// Meals
memorize({
text: "Had a breakfast burrito at Crest Cafe",
category: "meals",
data: {
food: "breakfast burrito", // dish name only
restaurant: "Crest Cafe", // venue separate
ingredients: "eggs, bacon, cheese", // comma-separated list
meal_type: "breakfast",
calories: 650
}
})
// Workouts
memorize({
text: "Did deadlifts at Gold's Gym",
category: "workouts",
data: {
exercise: "deadlifts",
duration: 45,
intensity: "high",
calories_burned: 400,
location: "Gold's Gym"
}
})
// Expenses
memorize({
text: "Bought groceries at Trader Joe's",
category: "expenses",
data: {
item: "groceries",
amount: 42.50,
category: "groceries",
vendor: "Trader Joe's"
}
})
// Medications
memorize({
text: "Took ibuprofen for headache",
category: "medications",
data: {
medication_name: "ibuprofen",
dose: "400mg",
frequency: "as needed",
purpose: "headache"
}
})
Vector-only saves (memories):
memorize({
text: "Had an amazing sunset dinner at Nobu overlooking the ocean. The black cod was incredible.",
storage: "memory",
collection: "journal",
metadata: { topic: "dining", mood: "happy", location: "Malibu" }
})
Collection naming conventions:
journal — daily entries, experiences, reflections
notes — ideas, thoughts, reference material
conversations — important conversation summaries
reviews — reviews of restaurants, books, movies, products
goals — goals, plans, aspirations
Entity extraction runs automatically after save (non-blocking)
Always choose the most specific collection that fits
Routing order:
action: "delete" — semantic search + soft-delete matching vectorsstorage: "memory" — vector-only save via saveMemorycategory: "profile" — deep-merge profile updateCheck for or resolve memory contradictions.
List contradictions:
review({ action: "list" })
Returns up to 5 unresolved contradictions.
Resolve a contradiction:
review({ action: "resolve", metaId: 123, resolution: "confirm" })
confirm — the newer information is correct, supersede the oldreject — the older information was correct, discard the newkeep_both — both are valid in different contexts (e.g., "likes pizza" and "avoiding carbs this month")When the user says "that's wrong":
review({ action: "list" }) to find relevant contradictionsWhen the user shares personal information, log data, or describe experiences — save it immediately with memorize. Never ask "should I save this?" The user expects Epitome to remember automatically.
Before saving, consider whether this information already exists:
memorize with category: "profile" to merge (not create duplicates)After calling recall, actively reference the returned data in your responses. If you know the user is vegetarian, mention it when discussing meal options. If you know their timezone, use it for scheduling.
If a tool returns a CONSENT_DENIED error, the user hasn't granted this agent permission for that resource. Tell the user:
"I don't have permission to access [resource] yet. You can grant access in your Epitome dashboard under Settings > Agent Permissions."
Don't retry the same tool — it will fail again until permissions are updated.
Understanding when to use each storage type:
| Signal | Storage | Tool | Example |
|---|---|---|---|
| Stable personal fact | Profile | memorize (category: "profile") | "I'm allergic to shellfish" |
| Discrete data point | Table record | memorize (default/category) | "I had lobster for dinner" |
| Experience or reflection | Memory vector | memorize (storage: "memory") | "That dinner was magical" |
Rules of thumb:
memorize with category for the meal record + memorize with storage: "memory" for the experience)