{"id":"e1e3b172-fc19-4a9c-82b9-e5f252cfc861","shortId":"GYqgJ7","kind":"skill","title":"Context Window Management","tagline":"Antigravity Awesome Skills skill by Sickn33","description":"# Context Window Management\n\nStrategies for managing LLM context windows including summarization, trimming, routing, and avoiding context rot\n\n## Capabilities\n\n- context-engineering\n- context-summarization\n- context-trimming\n- context-routing\n- token-counting\n- context-prioritization\n\n## Prerequisites\n\n- Knowledge: LLM fundamentals, Tokenization basics, Prompt engineering\n- Skills_recommended: prompt-engineering\n\n## Scope\n\n- Does_not_cover: RAG implementation details, Model fine-tuning, Embedding models\n- Boundaries: Focus is context optimization, Covers strategies not specific implementations\n\n## Ecosystem\n\n### Primary_tools\n\n- tiktoken - OpenAI's tokenizer for counting tokens\n- LangChain - Framework with context management utilities\n- Claude API - 200K+ context with caching support\n\n## Patterns\n\n### Tiered Context Strategy\n\nDifferent strategies based on context size\n\n**When to use**: Building any multi-turn conversation system\n\ninterface ContextTier {\n    maxTokens: number;\n    strategy: 'full' | 'summarize' | 'rag';\n    model: string;\n}\n\nconst TIERS: ContextTier[] = [\n    { maxTokens: 8000, strategy: 'full', model: 'claude-3-haiku' },\n    { maxTokens: 32000, strategy: 'full', model: 'claude-3-5-sonnet' },\n    { maxTokens: 100000, strategy: 'summarize', model: 'claude-3-5-sonnet' },\n    { maxTokens: Infinity, strategy: 'rag', model: 'claude-3-5-sonnet' }\n];\n\nasync function selectStrategy(messages: Message[]): ContextTier {\n    const tokens = await countTokens(messages);\n\n    for (const tier of TIERS) {\n        if (tokens <= tier.maxTokens) {\n            return tier;\n        }\n    }\n    return TIERS[TIERS.length - 1];\n}\n\nasync function prepareContext(messages: Message[]): PreparedContext {\n    const tier = await selectStrategy(messages);\n\n    switch (tier.strategy) {\n        case 'full':\n            return { messages, model: tier.model };\n\n        case 'summarize':\n            const summary = await summarizeOldMessages(messages);\n            return { messages: [summary, ...recentMessages(messages)], model: tier.model };\n\n        case 'rag':\n            const relevant = await retrieveRelevant(messages);\n            return { messages: [...relevant, ...recentMessages(messages)], model: tier.model };\n    }\n}\n\n### Serial Position Optimization\n\nPlace important content at start and end\n\n**When to use**: Constructing prompts with significant context\n\n// LLMs weight beginning and end more heavily\n// Structure prompts to leverage this\n\nfunction buildOptimalPrompt(components: {\n    systemPrompt: string;\n    criticalContext: string;\n    conversationHistory: Message[];\n    currentQuery: string;\n}): string {\n    // START: System instructions (always first)\n    const parts = [components.systemPrompt];\n\n    // CRITICAL CONTEXT: Right after system (high primacy)\n    if (components.criticalContext) {\n        parts.push(`## Key Context\\n${components.criticalContext}`);\n    }\n\n    // MIDDLE: Conversation history (lower weight)\n    // Summarize if long, keep recent messages full\n    const history = components.conversationHistory;\n    if (history.length > 10) {\n        const oldSummary = summarize(history.slice(0, -5));\n        const recent = history.slice(-5);\n        parts.push(`## Earlier Conversation (Summary)\\n${oldSummary}`);\n        parts.push(`## Recent Messages\\n${formatMessages(recent)}`);\n    } else {\n        parts.push(`## Conversation\\n${formatMessages(history)}`);\n    }\n\n    // END: Current query (high recency)\n    // Restate critical requirements here\n    parts.push(`## Current Request\\n${components.currentQuery}`);\n\n    // FINAL: Reminder of key constraints\n    parts.push(`Remember: ${extractKeyConstraints(components.systemPrompt)}`);\n\n    return parts.join('\\n\\n');\n}\n\n### Intelligent Summarization\n\nSummarize by importance, not just recency\n\n**When to use**: Context exceeds optimal size\n\ninterface MessageWithMetadata extends Message {\n    importance: number;  // 0-1 score\n    hasCriticalInfo: boolean;  // User preferences, decisions\n    referenced: boolean;  // Was this referenced later?\n}\n\nasync function smartSummarize(\n    messages: MessageWithMetadata[],\n    targetTokens: number\n): Message[] {\n    // Sort by importance, preserve order for tied scores\n    const sorted = [...messages].sort((a, b) =>\n        (b.importance + (b.hasCriticalInfo ? 0.5 : 0) + (b.referenced ? 0.3 : 0)) -\n        (a.importance + (a.hasCriticalInfo ? 0.5 : 0) + (a.referenced ? 0.3 : 0))\n    );\n\n    const keep: Message[] = [];\n    const summarizePool: Message[] = [];\n    let currentTokens = 0;\n\n    for (const msg of sorted) {\n        const msgTokens = await countTokens([msg]);\n        if (currentTokens + msgTokens < targetTokens * 0.7) {\n            keep.push(msg);\n            currentTokens += msgTokens;\n        } else {\n            summarizePool.push(msg);\n        }\n    }\n\n    // Summarize the low-importance messages\n    if (summarizePool.length > 0) {\n        const summary = await llm.complete(`\n            Summarize these messages, preserving:\n            - Any user preferences or decisions\n            - Key facts that might be referenced later\n            - The overall flow of conversation\n\n            Messages:\n            ${formatMessages(summarizePool)}\n        `);\n\n        keep.unshift({ role: 'system', content: `[Earlier context: ${summary}]` });\n    }\n\n    // Restore original order\n    return keep.sort((a, b) => a.timestamp - b.timestamp);\n}\n\n### Token Budget Allocation\n\nAllocate token budget across context components\n\n**When to use**: Need predictable context management\n\ninterface TokenBudget {\n    system: number;      // System prompt\n    criticalContext: number;  // User prefs, key info\n    history: number;     // Conversation history\n    query: number;       // Current query\n    response: number;    // Reserved for response\n}\n\nfunction allocateBudget(totalTokens: number): TokenBudget {\n    return {\n        system: Math.floor(totalTokens * 0.10),      // 10%\n        criticalContext: Math.floor(totalTokens * 0.15),  // 15%\n        history: Math.floor(totalTokens * 0.40),     // 40%\n        query: Math.floor(totalTokens * 0.10),       // 10%\n        response: Math.floor(totalTokens * 0.25),    // 25%\n    };\n}\n\nasync function buildWithBudget(\n    components: ContextComponents,\n    modelMaxTokens: number\n): PreparedContext {\n    const budget = allocateBudget(modelMaxTokens);\n\n    // Truncate/summarize each component to fit budget\n    const prepared = {\n        system: truncateToTokens(components.system, budget.system),\n        criticalContext: truncateToTokens(\n            components.criticalContext, budget.criticalContext\n        ),\n        history: await summarizeToTokens(components.history, budget.history),\n        query: truncateToTokens(components.query, budget.query),\n    };\n\n    // Reallocate unused budget\n    const used = await countTokens(Object.values(prepared).join('\\n'));\n    const remaining = modelMaxTokens - used - budget.response;\n\n    if (remaining > 0) {\n        // Give extra to history (most valuable for conversation)\n        prepared.history = await summarizeToTokens(\n            components.history,\n            budget.history + remaining\n        );\n    }\n\n    return prepared;\n}\n\n## Validation Checks\n\n### No Token Counting\n\nSeverity: WARNING\n\nMessage: Building context without token counting. May exceed model limits.\n\nFix action: Count tokens before sending, implement budget allocation\n\n### Naive Message Truncation\n\nSeverity: WARNING\n\nMessage: Truncating messages without summarization. Critical context may be lost.\n\nFix action: Summarize old messages instead of simply removing them\n\n### Hardcoded Token Limit\n\nSeverity: INFO\n\nMessage: Hardcoded token limit. Consider making configurable per model.\n\nFix action: Use model-specific limits from configuration\n\n### No Context Management Strategy\n\nSeverity: WARNING\n\nMessage: LLM calls without context management strategy.\n\nFix action: Implement context management: budgets, summarization, or RAG\n\n## Collaboration\n\n### Delegation Triggers\n\n- retrieval|rag|search -> rag-implementation (Need retrieval system)\n- memory|persistence|remember -> conversation-memory (Need memory storage)\n- cache|caching -> prompt-caching (Need caching optimization)\n\n### Complete Context System\n\nSkills: context-window-management, rag-implementation, conversation-memory, prompt-caching\n\nWorkflow:\n\n```\n1. Design context strategy\n2. Implement RAG for large corpuses\n3. Set up memory persistence\n4. Add caching for performance\n```\n\n## Related Skills\n\nWorks well with: `rag-implementation`, `conversation-memory`, `prompt-caching`, `llm-npc-dialogue`\n\n## When to Use\n- User mentions or implies: context window\n- User mentions or implies: token limit\n- User mentions or implies: context management\n- User mentions or implies: context engineering\n- User mentions or implies: long context\n- User mentions or implies: context overflow\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":["context","window","management","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/context-window-management","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-25T09:40:44.545Z","embedding":null,"createdAt":"2026-04-18T20:36:23.128Z","updatedAt":"2026-04-25T09:40:44.545Z","lastSeenAt":"2026-04-25T09:40:44.545Z","tsv":"'-1':404 '-3':144,152,161,170 '-5':153,162,171,332,336 '0':331,403,442,445,449,452,461,492,664 '0.10':587,602 '0.15':592 '0.25':607 '0.3':444,451 '0.40':597 '0.5':441,448 '0.7':476 '1':197,824 '10':326,588,603 '100000':156 '15':593 '2':828 '200k':100 '25':608 '3':834 '32000':147 '4':839 '40':598 '8000':139 'a.hascriticalinfo':447 'a.importance':446 'a.referenced':450 'a.timestamp':535 'across':543 'action':699,723,747,769 'add':840 'alloc':539,540,706 'allocatebudget':579,619 'alway':290 'antigrav':4 'api':99 'ask':934 'async':173,198,417,609 'avoid':24 'await':181,206,221,235,469,495,638,651,674 'awesom':5 'b':438,534 'b.hascriticalinfo':440 'b.importance':439 'b.referenced':443 'b.timestamp':536 'base':111 'basic':51 'begin':265 'boolean':407,412 'boundari':72,942 'budget':538,542,618,626,648,705,773 'budget.criticalcontext':636 'budget.history':641,677 'budget.query':645 'budget.response':661 'budget.system':632 'build':118,689 'buildoptimalprompt':276 'buildwithbudget':611 'cach':103,798,799,802,804,822,841,857 'call':763 'capabl':27 'case':211,217,231 'category-antigravity-awesome-skills' 'check':682 'clarif':936 'claud':98,143,151,160,169 'clear':909 'collabor':777 'complet':806 'compon':277,545,612,623 'components.conversationhistory':323 'components.criticalcontext':303,308,635 'components.currentquery':368 'components.history':640,676 'components.query':644 'components.system':631 'components.systemprompt':294,377 'configur':743,754 'consid':741 'const':135,179,185,204,219,233,292,321,327,333,433,453,456,463,467,493,617,627,649,657 'constraint':373 'construct':258 'content':250,524 'context':1,10,17,25,29,32,35,38,44,75,95,101,107,113,262,296,306,393,526,544,551,690,718,756,765,771,807,811,826,869,881,887,894,899 'context-engin':28 'context-priorit':43 'context-rout':37 'context-summar':31 'context-trim':34 'context-window-manag':810 'contextcompon':613 'contextti':126,137,178 'convers':123,310,339,351,517,567,672,793,818,853 'conversation-memori':792,817,852 'conversationhistori':282 'corpus':833 'count':42,90,685,693,700 'counttoken':182,470,652 'cover':62,77 'criteria':945 'critic':295,361,717 'criticalcontext':280,559,589,633 'current':356,365,571 'currentqueri':284 'currenttoken':460,473,479 'decis':410,505 'deleg':778 'describ':913 'design':825 'detail':65 'dialogu':861 'differ':109 'earlier':338,525 'ecosystem':82 'els':349,481 'embed':70 'end':254,267,355 'engin':30,53,58,888 'environ':925 'environment-specif':924 'exceed':394,695 'expert':930 'extend':399 'extra':666 'extractkeyconstraint':376 'fact':507 'final':369 'fine':68 'fine-tun':67 'first':291 'fit':625 'fix':698,722,746,768 'flow':515 'focus':73 'formatmessag':347,353,519 'framework':93 'full':130,141,149,212,320 'function':174,199,275,418,578,610 'fundament':49 'give':665 'haiku':145 'hardcod':732,738 'hascriticalinfo':406 'heavili':269 'high':300,358 'histori':311,322,354,565,568,594,637,668 'history.length':325 'history.slice':330,335 'implement':64,81,704,770,785,816,829,851 'impli':868,874,880,886,892,898 'import':249,386,401,427,488 'includ':19 'infin':165 'info':564,736 'input':939 'instead':727 'instruct':289 'intellig':382 'interfac':125,397,553 'join':655 'keep':317,454 'keep.push':477 'keep.sort':532 'keep.unshift':521 'key':305,372,506,563 'knowledg':47 'langchain':92 'larg':832 'later':416,512 'let':459 'leverag':273 'limit':697,734,740,752,876,901 'llm':16,48,762,859 'llm-npc-dialogu':858 'llm.complete':496 'llms':263 'long':316,893 'lost':721 'low':487 'low-import':486 'lower':312 'make':742 'manag':3,12,15,96,552,757,766,772,813,882 'match':910 'math.floor':585,590,595,600,605 'maxtoken':127,138,146,155,164 'may':694,719 'memori':789,794,796,819,837,854 'mention':866,872,878,884,890,896 'messag':176,177,183,201,202,208,214,223,225,228,237,239,242,283,319,345,400,420,424,435,455,458,489,499,518,688,708,712,714,726,737,761 'messagewithmetadata':398,421 'middl':309 'might':509 'miss':947 'model':66,71,133,142,150,159,168,215,229,243,696,745,750 'model-specif':749 'modelmaxtoken':614,620,659 'msg':464,471,478,483 'msgtoken':468,474,480 'multi':121 'multi-turn':120 'n':307,341,346,352,367,380,381,656 'naiv':707 'need':549,786,795,803 'npc':860 'number':128,402,423,556,560,566,570,574,581,615 'object.values':653 'old':725 'oldsummari':328,342 'openai':86 'optim':76,247,395,805 'order':429,530 'origin':529 'output':919 'overal':514 'overflow':900 'part':293 'parts.join':379 'parts.push':304,337,343,350,364,374 'pattern':105 'per':744 'perform':843 'permiss':940 'persist':790,838 'place':248 'posit':246 'predict':550 'pref':562 'prefer':409,503 'prepar':628,654,680 'preparecontext':200 'prepared.history':673 'preparedcontext':203,616 'prerequisit':46 'preserv':428,500 'primaci':301 'primari':83 'priorit':45 'prompt':52,57,259,271,558,801,821,856 'prompt-cach':800,820,855 'prompt-engin':56 'queri':357,569,572,599,642 'rag':63,132,167,232,776,781,784,815,830,850 'rag-implement':783,814,849 'realloc':646 'recenc':359,389 'recent':318,334,344,348 'recentmessag':227,241 'recommend':55 'referenc':411,415,511 'relat':844 'relev':234,240 'remain':658,663,678 'rememb':375,791 'remind':370 'remov':730 'request':366 'requir':362,938 'reserv':575 'respons':573,577,604 'restat':360 'restor':528 'retriev':780,787 'retrieverelev':236 'return':192,194,213,224,238,378,531,583,679 'review':931 'right':297 'role':522 'rot':26 'rout':22,39 'safeti':941 'scope':59,912 'score':405,432 'search':782 'selectstrategi':175,207 'send':703 'serial':245 'set':835 'sever':686,710,735,759 'sickn33':9 'signific':261 'simpli':729 'size':114,396 'skill':6,7,54,809,845,904 'smartsummar':419 'sonnet':154,163,172 'sort':425,434,436,466 'source-sickn33' 'specif':80,751,926 'start':252,287 'stop':932 'storag':797 'strategi':13,78,108,110,129,140,148,157,166,758,767,827 'string':134,279,281,285,286 'structur':270 'substitut':922 'success':944 'summar':20,33,131,158,218,314,329,383,384,484,497,716,724,774 'summari':220,226,340,494,527 'summarizeoldmessag':222 'summarizepool':457,520 'summarizepool.length':491 'summarizepool.push':482 'summarizetotoken':639,675 'support':104 'switch':209 'system':124,288,299,523,555,557,584,629,788,808 'systemprompt':278 'targettoken':422,475 'task':908 'test':928 'tie':431 'tier':106,136,186,188,193,195,205 'tier.maxtokens':191 'tier.model':216,230,244 'tier.strategy':210 'tiers.length':196 'tiktoken':85 'token':41,50,88,91,180,190,537,541,684,692,701,733,739,875 'token-count':40 'tokenbudget':554,582 'tool':84 'totaltoken':580,586,591,596,601,606 'treat':917 'trigger':779 'trim':21,36 'truncat':709,713 'truncate/summarize':621 'truncatetotoken':630,634,643 'tune':69 'turn':122 'unus':647 'use':117,257,392,548,650,660,748,864,902 'user':408,502,561,865,871,877,883,889,895 'util':97 'valid':681,927 'valuabl':670 'warn':687,711,760 'weight':264,313 'well':847 'window':2,11,18,812,870 'without':691,715,764 'work':846 'workflow':823","prices":[{"id":"fbc5cf6a-5d0d-404d-a9c8-3f42487a8fe1","listingId":"e1e3b172-fc19-4a9c-82b9-e5f252cfc861","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:36:23.128Z"}],"sources":[{"listingId":"e1e3b172-fc19-4a9c-82b9-e5f252cfc861","source":"github","sourceId":"sickn33/antigravity-awesome-skills/context-window-management","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/context-window-management","isPrimary":false,"firstSeenAt":"2026-04-18T21:35:11.731Z","lastSeenAt":"2026-04-25T06:50:54.737Z"},{"listingId":"e1e3b172-fc19-4a9c-82b9-e5f252cfc861","source":"skills_sh","sourceId":"sickn33/antigravity-awesome-skills/context-window-management","sourceUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/context-window-management","isPrimary":true,"firstSeenAt":"2026-04-18T20:36:23.128Z","lastSeenAt":"2026-04-25T09:40:44.545Z"}],"details":{"listingId":"e1e3b172-fc19-4a9c-82b9-e5f252cfc861","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"context-window-management","source":"skills_sh","category":"antigravity-awesome-skills","skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/context-window-management"},"updatedAt":"2026-04-25T09:40:44.545Z"}}