{"id":"796bbd6d-d28a-4014-b3c4-d310173ba4c6","shortId":"eNJrZJ","kind":"skill","title":"conversation-memory","tagline":"Persistent memory systems for LLM conversations including","description":"# Conversation Memory\n\nPersistent memory systems for LLM conversations including short-term, long-term, and entity-based memory\n\n## Capabilities\n\n- short-term-memory\n- long-term-memory\n- entity-memory\n- memory-persistence\n- memory-retrieval\n- memory-consolidation\n\n## Prerequisites\n\n- Knowledge: LLM conversation patterns, Database basics, Key-value stores\n- Skills_recommended: context-window-management, rag-implementation\n\n## Scope\n\n- Does_not_cover: Knowledge graph construction, Semantic search implementation, Database administration\n- Boundaries: Focus is memory patterns for LLMs, Covers storage and retrieval strategies\n\n## Ecosystem\n\n### Primary_tools\n\n- Mem0 - Memory layer for AI applications\n- LangChain Memory - Memory utilities in LangChain\n- Redis - In-memory data store for session memory\n\n## Patterns\n\n### Tiered Memory System\n\nDifferent memory tiers for different purposes\n\n**When to use**: Building any conversational AI\n\ninterface MemorySystem {\n    // Buffer: Current conversation (in context)\n    buffer: ConversationBuffer;\n\n    // Short-term: Recent interactions (session)\n    shortTerm: ShortTermMemory;\n\n    // Long-term: Persistent across sessions\n    longTerm: LongTermMemory;\n\n    // Entity: Facts about people, places, things\n    entity: EntityMemory;\n}\n\nclass TieredMemory implements MemorySystem {\n    async addMessage(message: Message): Promise<void> {\n        // Always add to buffer\n        this.buffer.add(message);\n\n        // Extract entities\n        const entities = await extractEntities(message);\n        for (const entity of entities) {\n            await this.entity.upsert(entity);\n        }\n\n        // Check for memorable content\n        if (await isMemoryWorthy(message)) {\n            await this.shortTerm.add({\n                content: message.content,\n                timestamp: Date.now(),\n                importance: await scoreImportance(message)\n            });\n        }\n    }\n\n    async consolidate(): Promise<void> {\n        // Move important short-term to long-term\n        const memories = await this.shortTerm.getOld(24 * 60 * 60 * 1000);\n        for (const memory of memories) {\n            if (memory.importance > 0.7 || memory.referenced > 2) {\n                await this.longTerm.add(memory);\n            }\n            await this.shortTerm.remove(memory.id);\n        }\n    }\n\n    async buildContext(query: string): Promise<string> {\n        const parts: string[] = [];\n\n        // Relevant long-term memories\n        const longTermRelevant = await this.longTerm.search(query, 3);\n        if (longTermRelevant.length) {\n            parts.push('## Relevant Memories\\n' +\n                longTermRelevant.map(m => `- ${m.content}`).join('\\n'));\n        }\n\n        // Relevant entities\n        const entities = await this.entity.getRelevant(query);\n        if (entities.length) {\n            parts.push('## Known Entities\\n' +\n                entities.map(e => `- ${e.name}: ${e.facts.join(', ')}`).join('\\n'));\n        }\n\n        // Recent conversation\n        const recent = this.buffer.getRecent(10);\n        parts.push('## Recent Conversation\\n' + formatMessages(recent));\n\n        return parts.join('\\n\\n');\n    }\n}\n\n### Entity Memory\n\nStore and update facts about entities\n\n**When to use**: Need to remember details about people, places, things\n\ninterface Entity {\n    id: string;\n    name: string;\n    type: 'person' | 'place' | 'thing' | 'concept';\n    facts: Fact[];\n    lastMentioned: number;\n    mentionCount: number;\n}\n\ninterface Fact {\n    content: string;\n    confidence: number;\n    source: string;  // Which message this came from\n    timestamp: number;\n}\n\nclass EntityMemory {\n    async extractAndStore(message: Message): Promise<void> {\n        // Use LLM to extract entities and facts\n        const extraction = await llm.complete(`\n            Extract entities and facts from this message.\n            Return JSON: { \"entities\": [\n                { \"name\": \"...\", \"type\": \"...\", \"facts\": [\"...\"] }\n            ]}\n\n            Message: \"${message.content}\"\n        `);\n\n        const { entities } = JSON.parse(extraction);\n        for (const entity of entities) {\n            await this.upsert(entity, message.id);\n        }\n    }\n\n    async upsert(entity: ExtractedEntity, sourceId: string): Promise<void> {\n        const existing = await this.store.get(entity.name.toLowerCase());\n\n        if (existing) {\n            // Merge facts, avoiding duplicates\n            for (const fact of entity.facts) {\n                if (!this.hasSimilarFact(existing.facts, fact)) {\n                    existing.facts.push({\n                        content: fact,\n                        confidence: 0.9,\n                        source: sourceId,\n                        timestamp: Date.now()\n                    });\n                }\n            }\n            existing.lastMentioned = Date.now();\n            existing.mentionCount++;\n            await this.store.set(existing.id, existing);\n        } else {\n            // Create new entity\n            await this.store.set(entity.name.toLowerCase(), {\n                id: generateId(),\n                name: entity.name,\n                type: entity.type,\n                facts: entity.facts.map(f => ({\n                    content: f,\n                    confidence: 0.9,\n                    source: sourceId,\n                    timestamp: Date.now()\n                })),\n                lastMentioned: Date.now(),\n                mentionCount: 1\n            });\n        }\n    }\n}\n\n### Memory-Aware Prompting\n\nInclude relevant memories in prompts\n\n**When to use**: Making LLM calls with memory context\n\nasync function promptWithMemory(\n    query: string,\n    memory: MemorySystem,\n    systemPrompt: string\n): Promise<string> {\n    // Retrieve relevant memories\n    const relevantMemories = await memory.longTerm.search(query, 5);\n    const entities = await memory.entity.getRelevant(query);\n    const recentContext = memory.buffer.getRecent(5);\n\n    // Build memory-augmented prompt\n    const prompt = `\n${systemPrompt}\n\n## User Context\n${entities.length ? `Known about user:\\n${entities.map(e =>\n    `- ${e.name}: ${e.facts.map(f => f.content).join('; ')}`\n).join('\\n')}` : ''}\n\n${relevantMemories.length ? `Relevant past interactions:\\n${relevantMemories.map(m =>\n    `- [${formatDate(m.timestamp)}] ${m.content}`\n).join('\\n')}` : ''}\n\n## Recent Conversation\n${formatMessages(recentContext)}\n\n## Current Query\n${query}\n    `.trim();\n\n    const response = await llm.complete(prompt);\n\n    // Extract any new memories from response\n    await memory.addMessage({ role: 'assistant', content: response });\n\n    return response;\n}\n\n## Sharp Edges\n\n### Memory store grows unbounded, system slows\n\nSeverity: HIGH\n\nSituation: System slows over time, costs increase\n\nSymptoms:\n- Slow memory retrieval\n- High storage costs\n- Increasing latency over time\n\nWhy this breaks:\nEvery message stored as memory.\nNo cleanup or consolidation.\nRetrieval over millions of items.\n\nRecommended fix:\n\n// Implement memory lifecycle management\n\nclass ManagedMemory {\n    // Limits\n    private readonly SHORT_TERM_MAX = 100;\n    private readonly LONG_TERM_MAX = 10000;\n    private readonly CONSOLIDATION_INTERVAL = 24 * 60 * 60 * 1000;\n\n    async add(memory: Memory): Promise<void> {\n        // Score importance before storing\n        const score = await this.scoreImportance(memory);\n        if (score < 0.3) return;  // Don't store low-importance\n\n        memory.importance = score;\n        await this.shortTerm.add(memory);\n\n        // Check limits\n        await this.enforceShortTermLimit();\n    }\n\n    async enforceShortTermLimit(): Promise<void> {\n        const count = await this.shortTerm.count();\n        if (count > this.SHORT_TERM_MAX) {\n            // Consolidate: move important to long-term, delete rest\n            const memories = await this.shortTerm.getAll();\n            memories.sort((a, b) => b.importance - a.importance);\n\n            const toKeep = memories.slice(0, this.SHORT_TERM_MAX * 0.7);\n            const toConsolidate = memories.slice(this.SHORT_TERM_MAX * 0.7);\n\n            for (const m of toConsolidate) {\n                if (m.importance > 0.7) {\n                    await this.longTerm.add(m);\n                }\n                await this.shortTerm.remove(m.id);\n            }\n        }\n    }\n\n    async scoreImportance(memory: Memory): Promise<number> {\n        const factors = {\n            hasUserPreference: /prefer|like|don't like|hate|love/i.test(memory.content) ? 0.3 : 0,\n            hasDecision: /decided|chose|will do|won't do/i.test(memory.content) ? 0.3 : 0,\n            hasFactAboutUser: /my|I am|I have|I work/i.test(memory.content) ? 0.2 : 0,\n            length: memory.content.length > 100 ? 0.1 : 0,\n            userMessage: memory.role === 'user' ? 0.1 : 0,\n        };\n\n        return Object.values(factors).reduce((a, b) => a + b, 0);\n    }\n}\n\n### Retrieved memories not relevant to current query\n\nSeverity: HIGH\n\nSituation: Memories included in context but don't help\n\nSymptoms:\n- Memories in context seem random\n- User asks about things already in memory\n- Confusion from irrelevant context\n\nWhy this breaks:\nSimple keyword matching.\nNo relevance scoring.\nIncluding all retrieved memories.\n\nRecommended fix:\n\n// Intelligent memory retrieval\n\nasync function retrieveRelevant(\n    query: string,\n    memories: MemoryStore,\n    maxResults: number = 5\n): Promise<Memory[]> {\n    // 1. Semantic search\n    const candidates = await memories.semanticSearch(query, maxResults * 3);\n\n    // 2. Score relevance with context\n    const scored = await Promise.all(candidates.map(async (m) => {\n        const relevanceScore = await llm.complete(`\n            Rate 0-1 how relevant this memory is to the query.\n            Query: \"${query}\"\n            Memory: \"${m.content}\"\n            Return just the number.\n        `);\n        return { ...m, relevance: parseFloat(relevanceScore) };\n    }));\n\n    // 3. Filter low relevance\n    const relevant = scored.filter(m => m.relevance > 0.5);\n\n    // 4. Sort and limit\n    return relevant\n        .sort((a, b) => b.relevance - a.relevance)\n        .slice(0, maxResults);\n}\n\n### Memories from one user accessible to another\n\nSeverity: CRITICAL\n\nSituation: User sees information from another user's sessions\n\nSymptoms:\n- User sees other user's information\n- Privacy complaints\n- Compliance violations\n\nWhy this breaks:\nNo user isolation in memory store.\nShared memory namespace.\nCross-user retrieval.\n\nRecommended fix:\n\n// Strict user isolation in memory\n\nclass IsolatedMemory {\n    private getKey(userId: string, memoryId: string): string {\n        // Namespace all keys by user\n        return `user:${userId}:memory:${memoryId}`;\n    }\n\n    async add(userId: string, memory: Memory): Promise<void> {\n        // Validate userId is authenticated\n        if (!isValidUserId(userId)) {\n            throw new Error('Invalid user ID');\n        }\n\n        const key = this.getKey(userId, memory.id);\n        memory.userId = userId;  // Tag with user\n        await this.store.set(key, memory);\n    }\n\n    async search(userId: string, query: string): Promise<Memory[]> {\n        // CRITICAL: Filter by user in query\n        return await this.store.search({\n            query,\n            filter: { userId: userId },  // Mandatory filter\n            limit: 10\n        });\n    }\n\n    async delete(userId: string, memoryId: string): Promise<void> {\n        const memory = await this.get(userId, memoryId);\n        // Verify ownership before delete\n        if (memory.userId !== userId) {\n            throw new Error('Access denied');\n        }\n        await this.store.delete(this.getKey(userId, memoryId));\n    }\n\n    // User data export (GDPR compliance)\n    async exportUserData(userId: string): Promise<Memory[]> {\n        return await this.store.getAll({ userId });\n    }\n\n    // User data deletion (GDPR compliance)\n    async deleteUserData(userId: string): Promise<void> {\n        const memories = await this.exportUserData(userId);\n        for (const m of memories) {\n            await this.store.delete(this.getKey(userId, m.id));\n        }\n    }\n}\n\n## Validation Checks\n\n### No User Isolation in Memory\n\nSeverity: CRITICAL\n\nMessage: Memory operations without user isolation. Privacy vulnerability.\n\nFix action: Add userId to all memory operations, filter by user on retrieval\n\n### No Importance Filtering\n\nSeverity: WARNING\n\nMessage: Storing memories without importance filtering. May cause memory explosion.\n\nFix action: Score importance before storing, filter low-importance content\n\n### Memory Storage Without Retrieval\n\nSeverity: WARNING\n\nMessage: Storing memories but no retrieval logic. Memories won't be used.\n\nFix action: Implement memory retrieval and include in prompts\n\n### No Memory Cleanup\n\nSeverity: INFO\n\nMessage: No memory cleanup mechanism. Storage will grow unbounded.\n\nFix action: Implement consolidation and cleanup based on age/importance\n\n## Collaboration\n\n### Delegation Triggers\n\n- context window|token -> context-window-management (Need context optimization)\n- rag|retrieval|vector -> rag-implementation (Need retrieval system)\n- cache|caching -> prompt-caching (Need caching strategies)\n\n### Complete Memory System\n\nSkills: conversation-memory, context-window-management, rag-implementation\n\nWorkflow:\n\n```\n1. Design memory tiers\n2. Implement storage and retrieval\n3. Integrate with context management\n4. Add consolidation and cleanup\n```\n\n## Related Skills\n\nWorks well with: `context-window-management`, `rag-implementation`, `prompt-caching`, `llm-npc-dialogue`\n\n## When to Use\n- User mentions or implies: conversation memory\n- User mentions or implies: remember\n- User mentions or implies: memory persistence\n- User mentions or implies: long-term memory\n- User mentions or implies: chat history\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["conversation","memory","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows"],"capabilities":["skill","source-sickn33","skill-conversation-memory","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/conversation-memory","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 37911 github stars · SKILL.md body (14,121 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T18:50:51.876Z","embedding":null,"createdAt":"2026-04-18T20:33:49.242Z","updatedAt":"2026-05-18T18:50:51.876Z","lastSeenAt":"2026-05-18T18:50:51.876Z","tsv":"'-1':914 '/decided':781 '/my':792 '/prefer':770 '0':736,779,790,801,806,811,820,913,958 '0.1':805,810 '0.2':800 '0.3':686,778,789 '0.5':945 '0.7':245,740,747,755 '0.9':447,478 '1':486,886,1311 '10':308,1089 '100':655,804 '1000':237,669 '10000':661 '2':247,896,1315 '24':234,666 '3':272,895,936,1320 '4':946,1325 '5':523,532,883 '60':235,236,667,668 'a.importance':732 'a.relevance':956 'access':964,1113 'across':158 'action':1178,1206,1235,1258 'add':180,671,1032,1179,1326 'addmessag':175 'administr':83 'age/importance':1265 'ai':103,136 'alreadi':849 'alway':179 'anoth':966,974 'applic':104 'ask':846,1416 'assist':591 'async':174,218,254,372,416,505,670,703,762,874,906,1031,1065,1090,1125,1140 'augment':536 'authent':1041 'avoid':432 'await':189,197,205,208,215,232,248,251,269,288,386,412,425,455,463,520,526,579,588,681,696,701,708,726,756,759,891,903,910,1061,1080,1099,1115,1132,1147,1155 'awar':489 'b':730,817,819,954 'b.importance':731 'b.relevance':955 'base':29,1263 'basic':58 'boundari':84,1424 'break':626,858,991 'buffer':139,144,182 'build':133,533 'buildcontext':255 'cach':1288,1289,1292,1294,1344 'call':501 'came':366 'candid':890 'candidates.map':905 'capabl':31 'caus':1202 'chat':1381 'check':200,699,1161 'chose':782 'clarif':1418 'class':170,370,647,1012 'cleanup':633,1245,1251,1262,1329 'clear':1391 'collabor':1266 'complaint':986 'complet':1296 'complianc':987,1124,1139 'concept':348 'confid':359,446,477 'confus':852 'consolid':51,219,635,664,715,1260,1327 'const':187,193,230,239,259,267,286,305,384,403,408,423,435,518,524,529,538,577,679,706,724,733,741,749,767,889,901,908,940,1051,1097,1145,1151 'construct':78 'content':203,210,357,444,475,592,1215 'context':66,143,504,542,834,842,855,900,1269,1273,1277,1304,1323,1336 'context-window-manag':65,1272,1303,1335 'convers':2,9,11,18,55,135,141,304,311,570,1301,1356 'conversation-memori':1,1300 'conversationbuff':145 'cost':611,619 'count':707,711 'cover':75,91 'creat':460 'criteria':1427 'critic':968,1073,1168 'cross':1002 'cross-us':1001 'current':140,573,826 'data':115,1121,1136 'databas':57,82 'date.now':213,451,453,482,484 'deleg':1267 'delet':722,1091,1106,1137 'deleteuserdata':1141 'deni':1114 'describ':1395 'design':1312 'detail':333 'dialogu':1348 'differ':124,128 'do/i.test':787 'duplic':433 'e':298,549 'e.facts.join':300 'e.facts.map':551 'e.name':299,550 'ecosystem':96 'edg':597 'els':459 'enforceshorttermlimit':704 'entiti':28,41,162,168,186,188,194,196,199,285,287,295,319,326,339,381,389,397,404,409,411,414,418,462,525 'entities.length':292,543 'entities.map':297,548 'entity-bas':27 'entity-memori':40 'entity.facts':438 'entity.facts.map':473 'entity.name':469 'entity.name.tolowercase':427,465 'entity.type':471 'entitymemori':169,371 'environ':1407 'environment-specif':1406 'error':1047,1112 'everi':627 'exist':424,429,458 'existing.facts':441 'existing.facts.push':443 'existing.id':457 'existing.lastmentioned':452 'existing.mentioncount':454 'expert':1412 'explos':1204 'export':1122 'exportuserdata':1126 'extract':185,380,385,388,406,582 'extractandstor':373 'extractedent':419 'extractent':190 'f':474,476,552 'f.content':553 'fact':163,324,349,350,356,383,391,400,431,436,442,445,472 'factor':768,814 'filter':937,1074,1083,1087,1185,1192,1200,1211 'fix':642,870,1006,1177,1205,1234,1257 'focus':85 'formatd':564 'formatmessag':313,571 'function':506,875 'gdpr':1123,1138 'generateid':467 'getkey':1015 'graph':77 'grow':600,1255 'hasdecis':780 'hasfactaboutus':791 'hasuserprefer':769 'hate':775 'help':838 'high':605,617,829 'histori':1382 'id':340,466,1050 'implement':71,81,172,643,1236,1259,1284,1309,1316,1341 'impli':1355,1361,1366,1372,1380 'import':214,222,676,693,717,1191,1199,1208,1214 'in-memori':112 'includ':10,19,491,832,865,1240 'increas':612,620 'info':1247 'inform':972,984 'input':1421 'integr':1321 'intellig':871 'interact':150,560 'interfac':137,338,355 'interv':665 'invalid':1048 'irrelev':854 'ismemoryworthi':206 'isol':994,1009,1164,1174 'isolatedmemori':1013 'isvaliduserid':1043 'item':640 'join':282,301,554,555,567 'json':396 'json.parse':405 'key':60,1023,1052,1063 'key-valu':59 'keyword':860 'knowledg':53,76 'known':294,544 'langchain':105,110 'lastment':351,483 'latenc':621 'layer':101 'length':802 'lifecycl':645 'like':771,774 'limit':649,700,949,1088,1383 'llm':8,17,54,378,500,1346 'llm-npc-dialogu':1345 'llm.complete':387,580,911 'llms':90 'logic':1228 'long':24,37,155,228,264,658,720,1374 'long-term':23,154,227,263,719,1373 'long-term-memori':36 'longterm':160 'longtermmemori':161 'longtermrelev':268 'longtermrelevant.length':274 'longtermrelevant.map':279 'love/i.test':776 'low':692,938,1213 'low-import':691,1212 'm':280,563,750,758,907,932,943,1152 'm.content':281,566,926 'm.id':761,1159 'm.importance':754 'm.relevance':944 'm.timestamp':565 'make':499 'manag':68,646,1275,1306,1324,1338 'managedmemori':648 'mandatori':1086 'match':861,1392 'max':654,660,714,739,746 'maxresult':881,894,959 'may':1201 'mechan':1252 'mem0':99 'memor':202 'memori':3,5,12,14,30,35,39,42,44,47,50,87,100,106,107,114,119,122,125,231,240,242,250,266,277,320,488,493,503,510,517,535,585,598,615,631,644,672,673,683,698,725,764,765,822,831,840,851,868,872,879,885,918,925,960,996,999,1011,1029,1035,1036,1064,1072,1098,1130,1146,1154,1166,1170,1183,1197,1203,1216,1224,1229,1237,1244,1250,1297,1302,1313,1357,1367,1376 'memories.semanticsearch':892 'memories.slice':735,743 'memories.sort':728 'memory-aug':534 'memory-awar':487 'memory-consolid':49 'memory-persist':43 'memory-retriev':46 'memory.addmessage':589 'memory.buffer.getrecent':531 'memory.content':777,788,799 'memory.content.length':803 'memory.entity.getrelevant':527 'memory.id':253,1055 'memory.importance':244,694 'memory.longterm.search':521 'memory.referenced':246 'memory.role':808 'memory.userid':1056,1108 'memoryid':1018,1030,1094,1102,1119 'memorystor':880 'memorysystem':138,173,511 'mention':1353,1359,1364,1370,1378 'mentioncount':353,485 'merg':430 'messag':176,177,184,191,207,217,364,374,375,394,401,628,1169,1195,1222,1248 'message.content':211,402 'message.id':415 'million':638 'miss':1429 'move':221,716 'n':278,283,296,302,312,317,318,547,556,561,568 'name':342,398,468 'namespac':1000,1021 'need':330,1276,1285,1293 'new':461,584,1046,1111 'npc':1347 'number':352,354,360,369,882,930 'object.values':813 'one':962 'oper':1171,1184 'optim':1278 'output':1401 'ownership':1104 'parsefloat':934 'part':260 'parts.join':316 'parts.push':275,293,309 'past':559 'pattern':56,88,120 'peopl':165,335 'permiss':1422 'persist':4,13,45,157,1368 'person':345 'place':166,336,346 'prerequisit':52 'primari':97 'privaci':985,1175 'privat':650,656,662,1014 'promis':178,220,258,376,422,514,674,705,766,884,1037,1071,1096,1129,1144 'promise.all':904 'prompt':490,495,537,539,581,1242,1291,1343 'prompt-cach':1290,1342 'promptwithmemori':507 'purpos':129 'queri':256,271,290,508,522,528,574,575,827,877,893,922,923,924,1069,1078,1082 'rag':70,1279,1283,1308,1340 'rag-implement':69,1282,1307,1339 'random':844 'rate':912 'readon':651,657,663 'recent':149,303,306,310,314,569 'recentcontext':530,572 'recommend':64,641,869,1005 'redi':111 'reduc':815 'relat':1330 'relev':262,276,284,492,516,558,824,863,898,916,933,939,941,951 'relevancescor':909,935 'relevantmemori':519 'relevantmemories.length':557 'relevantmemories.map':562 'rememb':332,1362 'requir':1420 'respons':578,587,593,595 'rest':723 'retriev':48,94,515,616,636,821,867,873,1004,1189,1219,1227,1238,1280,1286,1319 'retrieverelev':876 'return':315,395,594,687,812,927,931,950,1026,1079,1131 'review':1413 'role':590 'safeti':1423 'scope':72,1394 'score':675,680,685,695,864,897,902,1207 'scored.filter':942 'scoreimport':216,763 'search':80,888,1066 'see':971,980 'seem':843 'semant':79,887 'session':118,151,159,977 'sever':604,828,967,1167,1193,1220,1246 'share':998 'sharp':596 'short':21,33,147,224,652 'short-term':20,146,223 'short-term-memori':32 'shortterm':152 'shorttermmemori':153 'simpl':859 'situat':606,830,969 'skill':63,1299,1331,1386 'skill-conversation-memory' 'slice':957 'slow':603,608,614 'sort':947,952 'sourc':361,448,479 'source-sickn33' 'sourceid':420,449,480 'specif':1408 'stop':1414 'storag':92,618,1217,1253,1317 'store':62,116,321,599,629,678,690,997,1196,1210,1223 'strategi':95,1295 'strict':1007 'string':257,261,341,343,358,362,421,509,513,878,1017,1019,1020,1034,1068,1070,1093,1095,1128,1143 'substitut':1404 'success':1426 'symptom':613,839,978 'system':6,15,123,602,607,1287,1298 'systemprompt':512,540 'tag':1058 'task':1390 'term':22,25,34,38,148,156,225,229,265,653,659,713,721,738,745,1375 'test':1410 'thing':167,337,347,848 'this.buffer.add':183 'this.buffer.getrecent':307 'this.enforceshorttermlimit':702 'this.entity.getrelevant':289 'this.entity.upsert':198 'this.exportuserdata':1148 'this.get':1100 'this.getkey':1053,1117,1157 'this.hassimilarfact':440 'this.longterm.add':249,757 'this.longterm.search':270 'this.scoreimportance':682 'this.short':712,737,744 'this.shortterm.add':209,697 'this.shortterm.count':709 'this.shortterm.getall':727 'this.shortterm.getold':233 'this.shortterm.remove':252,760 'this.store.delete':1116,1156 'this.store.get':426 'this.store.getall':1133 'this.store.search':1081 'this.store.set':456,464,1062 'this.upsert':413 'throw':1045,1110 'tier':121,126,1314 'tieredmemori':171 'time':610,623 'timestamp':212,368,450,481 'toconsolid':742,752 'tokeep':734 'token':1271 'tool':98 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'treat':1399 'trigger':1268 'trim':576 'type':344,399,470 'unbound':601,1256 'updat':323 'upsert':417 'use':132,329,377,498,1233,1351,1384 'user':541,546,809,845,963,970,975,979,982,993,1003,1008,1025,1027,1049,1060,1076,1120,1135,1163,1173,1187,1352,1358,1363,1369,1377 'userid':1016,1028,1033,1039,1044,1054,1057,1067,1084,1085,1092,1101,1109,1118,1127,1134,1142,1149,1158,1180 'usermessag':807 'util':108 'valid':1038,1160,1409 'valu':61 'vector':1281 'verifi':1103 'violat':988 'vulner':1176 'warn':1194,1221 'well':1333 'window':67,1270,1274,1305,1337 'without':1172,1198,1218 'won':785,1230 'work':1332 'work/i.test':798 'workflow':1310","prices":[{"id":"ee730519-4f02-4abd-ad4d-e66eaf2c770b","listingId":"796bbd6d-d28a-4014-b3c4-d310173ba4c6","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T20:33:49.242Z"}],"sources":[{"listingId":"796bbd6d-d28a-4014-b3c4-d310173ba4c6","source":"github","sourceId":"sickn33/antigravity-awesome-skills/conversation-memory","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/conversation-memory","isPrimary":false,"firstSeenAt":"2026-04-18T21:35:13.233Z","lastSeenAt":"2026-05-18T18:50:51.876Z"},{"listingId":"796bbd6d-d28a-4014-b3c4-d310173ba4c6","source":"skills_sh","sourceId":"sickn33/antigravity-awesome-skills/conversation-memory","sourceUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/conversation-memory","isPrimary":true,"firstSeenAt":"2026-04-18T20:33:49.242Z","lastSeenAt":"2026-05-07T22:40:38.263Z"}],"details":{"listingId":"796bbd6d-d28a-4014-b3c4-d310173ba4c6","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"conversation-memory","github":{"repo":"sickn33/antigravity-awesome-skills","stars":37911,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-05-18T08:24:49Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"5540356e0e373ecfe8e77c039deb5d59455958fa","skill_md_path":"skills/conversation-memory/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/conversation-memory"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"conversation-memory","description":"Persistent memory systems for LLM conversations including"},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/conversation-memory"},"updatedAt":"2026-05-18T18:50:51.876Z"}}