{"id":"796bbd6d-d28a-4014-b3c4-d310173ba4c6","shortId":"eNJrZJ","kind":"skill","title":"Conversation Memory","tagline":"Antigravity Awesome Skills skill by Sickn33","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"],"capabilities":["skill","source-sickn33","category-antigravity-awesome-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":{"install_from":"skills.sh"}},"qualityScore":"0.300","qualityRationale":"deterministic score 0.30 from registry signals: · indexed on skills.sh · published under sickn33/antigravity-awesome-skills","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:v1","enrichmentVersion":1,"enrichedAt":"2026-04-25T11:40:45.212Z","embedding":null,"createdAt":"2026-04-18T20:33:49.242Z","updatedAt":"2026-04-25T11:40:45.212Z","lastSeenAt":"2026-04-25T11:40:45.212Z","tsv":"'-1':912 '/decided':779 '/my':790 '/prefer':768 '0':734,777,788,799,804,809,818,911,956 '0.1':803,808 '0.2':798 '0.3':684,776,787 '0.5':943 '0.7':243,738,745,753 '0.9':445,476 '1':484,884,1309 '10':306,1087 '100':653,802 '1000':235,667 '10000':659 '2':245,894,1313 '24':232,664 '3':270,893,934,1318 '4':944,1323 '5':521,530,881 '60':233,234,665,666 'a.importance':730 'a.relevance':954 'access':962,1111 'across':156 'action':1176,1204,1233,1256 'add':178,669,1030,1177,1324 'addmessag':173 'administr':81 'age/importance':1263 'ai':101,134 'alreadi':847 'alway':177 'anoth':964,972 'antigrav':3 'applic':102 'ask':844,1414 'assist':589 'async':172,216,252,370,414,503,668,701,760,872,904,1029,1063,1088,1123,1138 'augment':534 'authent':1039 'avoid':430 'await':187,195,203,206,213,230,246,249,267,286,384,410,423,453,461,518,524,577,586,679,694,699,706,724,754,757,889,901,908,1059,1078,1097,1113,1130,1145,1153 'awar':487 'awesom':4 'b':728,815,817,952 'b.importance':729 'b.relevance':953 'base':27,1261 'basic':56 'boundari':82,1422 'break':624,856,989 'buffer':137,142,180 'build':131,531 'buildcontext':253 'cach':1286,1287,1290,1292,1342 'call':499 'came':364 'candid':888 'candidates.map':903 'capabl':29 'category-antigravity-awesome-skills' 'caus':1200 'chat':1379 'check':198,697,1159 'chose':780 'clarif':1416 'class':168,368,645,1010 'cleanup':631,1243,1249,1260,1327 'clear':1389 'collabor':1264 'complaint':984 'complet':1294 'complianc':985,1122,1137 'concept':346 'confid':357,444,475 'confus':850 'consolid':49,217,633,662,713,1258,1325 'const':185,191,228,237,257,265,284,303,382,401,406,421,433,516,522,527,536,575,677,704,722,731,739,747,765,887,899,906,938,1049,1095,1143,1149 'construct':76 'content':201,208,355,442,473,590,1213 'context':64,141,502,540,832,840,853,898,1267,1271,1275,1302,1321,1334 'context-window-manag':63,1270,1301,1333 'convers':1,9,16,53,133,139,302,309,568,1299,1354 'conversation-memori':1298 'conversationbuff':143 'cost':609,617 'count':705,709 'cover':73,89 'creat':458 'criteria':1425 'critic':966,1071,1166 'cross':1000 'cross-us':999 'current':138,571,824 'data':113,1119,1134 'databas':55,80 'date.now':211,449,451,480,482 'deleg':1265 'delet':720,1089,1104,1135 'deleteuserdata':1139 'deni':1112 'describ':1393 'design':1310 'detail':331 'dialogu':1346 'differ':122,126 'do/i.test':785 'duplic':431 'e':296,547 'e.facts.join':298 'e.facts.map':549 'e.name':297,548 'ecosystem':94 'edg':595 'els':457 'enforceshorttermlimit':702 'entiti':26,39,160,166,184,186,192,194,197,283,285,293,317,324,337,379,387,395,402,407,409,412,416,460,523 'entities.length':290,541 'entities.map':295,546 'entity-bas':25 'entity-memori':38 'entity.facts':436 'entity.facts.map':471 'entity.name':467 'entity.name.tolowercase':425,463 'entity.type':469 'entitymemori':167,369 'environ':1405 'environment-specif':1404 'error':1045,1110 'everi':625 'exist':422,427,456 'existing.facts':439 'existing.facts.push':441 'existing.id':455 'existing.lastmentioned':450 'existing.mentioncount':452 'expert':1410 'explos':1202 'export':1120 'exportuserdata':1124 'extract':183,378,383,386,404,580 'extractandstor':371 'extractedent':417 'extractent':188 'f':472,474,550 'f.content':551 'fact':161,322,347,348,354,381,389,398,429,434,440,443,470 'factor':766,812 'filter':935,1072,1081,1085,1183,1190,1198,1209 'fix':640,868,1004,1175,1203,1232,1255 'focus':83 'formatd':562 'formatmessag':311,569 'function':504,873 'gdpr':1121,1136 'generateid':465 'getkey':1013 'graph':75 'grow':598,1253 'hasdecis':778 'hasfactaboutus':789 'hasuserprefer':767 'hate':773 'help':836 'high':603,615,827 'histori':1380 'id':338,464,1048 'implement':69,79,170,641,1234,1257,1282,1307,1314,1339 'impli':1353,1359,1364,1370,1378 'import':212,220,674,691,715,1189,1197,1206,1212 'in-memori':110 'includ':17,489,830,863,1238 'increas':610,618 'info':1245 'inform':970,982 'input':1419 'integr':1319 'intellig':869 'interact':148,558 'interfac':135,336,353 'interv':663 'invalid':1046 'irrelev':852 'ismemoryworthi':204 'isol':992,1007,1162,1172 'isolatedmemori':1011 'isvaliduserid':1041 'item':638 'join':280,299,552,553,565 'json':394 'json.parse':403 'key':58,1021,1050,1061 'key-valu':57 'keyword':858 'knowledg':51,74 'known':292,542 'langchain':103,108 'lastment':349,481 'latenc':619 'layer':99 'length':800 'lifecycl':643 'like':769,772 'limit':647,698,947,1086,1381 'llm':15,52,376,498,1344 'llm-npc-dialogu':1343 'llm.complete':385,578,909 'llms':88 'logic':1226 'long':22,35,153,226,262,656,718,1372 'long-term':21,152,225,261,717,1371 'long-term-memori':34 'longterm':158 'longtermmemori':159 'longtermrelev':266 'longtermrelevant.length':272 'longtermrelevant.map':277 'love/i.test':774 'low':690,936,1211 'low-import':689,1210 'm':278,561,748,756,905,930,941,1150 'm.content':279,564,924 'm.id':759,1157 'm.importance':752 'm.relevance':942 'm.timestamp':563 'make':497 'manag':66,644,1273,1304,1322,1336 'managedmemori':646 'mandatori':1084 'match':859,1390 'max':652,658,712,737,744 'maxresult':879,892,957 'may':1199 'mechan':1250 'mem0':97 'memor':200 'memori':2,10,12,28,33,37,40,42,45,48,85,98,104,105,112,117,120,123,229,238,240,248,264,275,318,486,491,501,508,515,533,583,596,613,629,642,670,671,681,696,723,762,763,820,829,838,849,866,870,877,883,916,923,958,994,997,1009,1027,1033,1034,1062,1070,1096,1128,1144,1152,1164,1168,1181,1195,1201,1214,1222,1227,1235,1242,1248,1295,1300,1311,1355,1365,1374 'memories.semanticsearch':890 'memories.slice':733,741 'memories.sort':726 'memory-aug':532 'memory-awar':485 'memory-consolid':47 'memory-persist':41 'memory-retriev':44 'memory.addmessage':587 'memory.buffer.getrecent':529 'memory.content':775,786,797 'memory.content.length':801 'memory.entity.getrelevant':525 'memory.id':251,1053 'memory.importance':242,692 'memory.longterm.search':519 'memory.referenced':244 'memory.role':806 'memory.userid':1054,1106 'memoryid':1016,1028,1092,1100,1117 'memorystor':878 'memorysystem':136,171,509 'mention':1351,1357,1362,1368,1376 'mentioncount':351,483 'merg':428 'messag':174,175,182,189,205,215,362,372,373,392,399,626,1167,1193,1220,1246 'message.content':209,400 'message.id':413 'million':636 'miss':1427 'move':219,714 'n':276,281,294,300,310,315,316,545,554,559,566 'name':340,396,466 'namespac':998,1019 'need':328,1274,1283,1291 'new':459,582,1044,1109 'npc':1345 'number':350,352,358,367,880,928 'object.values':811 'one':960 'oper':1169,1182 'optim':1276 'output':1399 'ownership':1102 'parsefloat':932 'part':258 'parts.join':314 'parts.push':273,291,307 'past':557 'pattern':54,86,118 'peopl':163,333 'permiss':1420 'persist':11,43,155,1366 'person':343 'place':164,334,344 'prerequisit':50 'primari':95 'privaci':983,1173 'privat':648,654,660,1012 'promis':176,218,256,374,420,512,672,703,764,882,1035,1069,1094,1127,1142 'promise.all':902 'prompt':488,493,535,537,579,1240,1289,1341 'prompt-cach':1288,1340 'promptwithmemori':505 'purpos':127 'queri':254,269,288,506,520,526,572,573,825,875,891,920,921,922,1067,1076,1080 'rag':68,1277,1281,1306,1338 'rag-implement':67,1280,1305,1337 'random':842 'rate':910 'readon':649,655,661 'recent':147,301,304,308,312,567 'recentcontext':528,570 'recommend':62,639,867,1003 'redi':109 'reduc':813 'relat':1328 'relev':260,274,282,490,514,556,822,861,896,914,931,937,939,949 'relevancescor':907,933 'relevantmemori':517 'relevantmemories.length':555 'relevantmemories.map':560 'rememb':330,1360 'requir':1418 'respons':576,585,591,593 'rest':721 'retriev':46,92,513,614,634,819,865,871,1002,1187,1217,1225,1236,1278,1284,1317 'retrieverelev':874 'return':313,393,592,685,810,925,929,948,1024,1077,1129 'review':1411 'role':588 'safeti':1421 'scope':70,1392 'score':673,678,683,693,862,895,900,1205 'scored.filter':940 'scoreimport':214,761 'search':78,886,1064 'see':969,978 'seem':841 'semant':77,885 'session':116,149,157,975 'sever':602,826,965,1165,1191,1218,1244 'share':996 'sharp':594 'short':19,31,145,222,650 'short-term':18,144,221 'short-term-memori':30 'shortterm':150 'shorttermmemori':151 'sickn33':8 'simpl':857 'situat':604,828,967 'skill':5,6,61,1297,1329,1384 'slice':955 'slow':601,606,612 'sort':945,950 'sourc':359,446,477 'source-sickn33' 'sourceid':418,447,478 'specif':1406 'stop':1412 'storag':90,616,1215,1251,1315 'store':60,114,319,597,627,676,688,995,1194,1208,1221 'strategi':93,1293 'strict':1005 'string':255,259,339,341,356,360,419,507,511,876,1015,1017,1018,1032,1066,1068,1091,1093,1126,1141 'substitut':1402 'success':1424 'symptom':611,837,976 'system':13,121,600,605,1285,1296 'systemprompt':510,538 'tag':1056 'task':1388 'term':20,23,32,36,146,154,223,227,263,651,657,711,719,736,743,1373 'test':1408 'thing':165,335,345,846 'this.buffer.add':181 'this.buffer.getrecent':305 'this.enforceshorttermlimit':700 'this.entity.getrelevant':287 'this.entity.upsert':196 'this.exportuserdata':1146 'this.get':1098 'this.getkey':1051,1115,1155 'this.hassimilarfact':438 'this.longterm.add':247,755 'this.longterm.search':268 'this.scoreimportance':680 'this.short':710,735,742 'this.shortterm.add':207,695 'this.shortterm.count':707 'this.shortterm.getall':725 'this.shortterm.getold':231 'this.shortterm.remove':250,758 'this.store.delete':1114,1154 'this.store.get':424 'this.store.getall':1131 'this.store.search':1079 'this.store.set':454,462,1060 'this.upsert':411 'throw':1043,1108 'tier':119,124,1312 'tieredmemori':169 'time':608,621 'timestamp':210,366,448,479 'toconsolid':740,750 'tokeep':732 'token':1269 'tool':96 'treat':1397 'trigger':1266 'trim':574 'type':342,397,468 'unbound':599,1254 'updat':321 'upsert':415 'use':130,327,375,496,1231,1349,1382 'user':539,544,807,843,961,968,973,977,980,991,1001,1006,1023,1025,1047,1058,1074,1118,1133,1161,1171,1185,1350,1356,1361,1367,1375 'userid':1014,1026,1031,1037,1042,1052,1055,1065,1082,1083,1090,1099,1107,1116,1125,1132,1140,1147,1156,1178 'usermessag':805 'util':106 'valid':1036,1158,1407 'valu':59 'vector':1279 'verifi':1101 'violat':986 'vulner':1174 'warn':1192,1219 'well':1331 'window':65,1268,1272,1303,1335 'without':1170,1196,1216 'won':783,1228 'work':1330 'work/i.test':796 'workflow':1308","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-04-25T06:50:54.901Z"},{"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-04-25T11:40:45.212Z"}],"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","source":"skills_sh","category":"antigravity-awesome-skills","skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/conversation-memory"},"updatedAt":"2026-04-25T11:40:45.212Z"}}