{"id":"e1e3b172-fc19-4a9c-82b9-e5f252cfc861","shortId":"GYqgJ7","kind":"skill","title":"context-window-management","tagline":"Strategies for managing LLM context windows including","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","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding"],"capabilities":["skill","source-sickn33","skill-context-window-management","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/context-window-management","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 (9,214 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.699Z","embedding":null,"createdAt":"2026-04-18T20:36:23.128Z","updatedAt":"2026-05-18T18:50:51.699Z","lastSeenAt":"2026-05-18T18:50:51.699Z","tsv":"'-1':406 '-3':146,154,163,172 '-5':155,164,173,334,338 '0':333,405,444,447,451,454,463,494,666 '0.10':589,604 '0.15':594 '0.25':609 '0.3':446,453 '0.40':599 '0.5':443,450 '0.7':478 '1':199,826 '10':328,590,605 '100000':158 '15':595 '2':830 '200k':102 '25':610 '3':836 '32000':149 '4':841 '40':600 '8000':141 'a.hascriticalinfo':449 'a.importance':448 'a.referenced':452 'a.timestamp':537 'across':545 'action':701,725,749,771 'add':842 'alloc':541,542,708 'allocatebudget':581,621 'alway':292 'api':101 'ask':936 'async':175,200,419,611 'avoid':26 'await':183,208,223,237,471,497,640,653,676 'b':440,536 'b.hascriticalinfo':442 'b.importance':441 'b.referenced':445 'b.timestamp':538 'base':113 'basic':53 'begin':267 'boolean':409,414 'boundari':74,944 'budget':540,544,620,628,650,707,775 'budget.criticalcontext':638 'budget.history':643,679 'budget.query':647 'budget.response':663 'budget.system':634 'build':120,691 'buildoptimalprompt':278 'buildwithbudget':613 'cach':105,800,801,804,806,824,843,859 'call':765 'capabl':29 'case':213,219,233 'check':684 'clarif':938 'claud':100,145,153,162,171 'clear':911 'collabor':779 'complet':808 'compon':279,547,614,625 'components.conversationhistory':325 'components.criticalcontext':305,310,637 'components.currentquery':370 'components.history':642,678 'components.query':646 'components.system':633 'components.systemprompt':296,379 'configur':745,756 'consid':743 'const':137,181,187,206,221,235,294,323,329,335,435,455,458,465,469,495,619,629,651,659 'constraint':375 'construct':260 'content':252,526 'context':2,9,12,19,27,31,34,37,40,46,77,97,103,109,115,264,298,308,395,528,546,553,692,720,758,767,773,809,813,828,871,883,889,896,901 'context-engin':30 'context-priorit':45 'context-rout':39 'context-summar':33 'context-trim':36 'context-window-manag':1,812 'contextcompon':615 'contextti':128,139,180 'convers':125,312,341,353,519,569,674,795,820,855 'conversation-memori':794,819,854 'conversationhistori':284 'corpus':835 'count':44,92,687,695,702 'counttoken':184,472,654 'cover':64,79 'criteria':947 'critic':297,363,719 'criticalcontext':282,561,591,635 'current':358,367,573 'currentqueri':286 'currenttoken':462,475,481 'decis':412,507 'deleg':780 'describ':915 'design':827 'detail':67 'dialogu':863 'differ':111 'earlier':340,527 'ecosystem':84 'els':351,483 'embed':72 'end':256,269,357 'engin':32,55,60,890 'environ':927 'environment-specif':926 'exceed':396,697 'expert':932 'extend':401 'extra':668 'extractkeyconstraint':378 'fact':509 'final':371 'fine':70 'fine-tun':69 'first':293 'fit':627 'fix':700,724,748,770 'flow':517 'focus':75 'formatmessag':349,355,521 'framework':95 'full':132,143,151,214,322 'function':176,201,277,420,580,612 'fundament':51 'give':667 'haiku':147 'hardcod':734,740 'hascriticalinfo':408 'heavili':271 'high':302,360 'histori':313,324,356,567,570,596,639,670 'history.length':327 'history.slice':332,337 'implement':66,83,706,772,787,818,831,853 'impli':870,876,882,888,894,900 'import':251,388,403,429,490 'includ':11,21 'infin':167 'info':566,738 'input':941 'instead':729 'instruct':291 'intellig':384 'interfac':127,399,555 'join':657 'keep':319,456 'keep.push':479 'keep.sort':534 'keep.unshift':523 'key':307,374,508,565 'knowledg':49 'langchain':94 'larg':834 'later':418,514 'let':461 'leverag':275 'limit':699,736,742,754,878,903 'llm':8,18,50,764,861 'llm-npc-dialogu':860 'llm.complete':498 'llms':265 'long':318,895 'lost':723 'low':489 'low-import':488 'lower':314 'make':744 'manag':4,7,14,17,98,554,759,768,774,815,884 'match':912 'math.floor':587,592,597,602,607 'maxtoken':129,140,148,157,166 'may':696,721 'memori':791,796,798,821,839,856 'mention':868,874,880,886,892,898 'messag':178,179,185,203,204,210,216,225,227,230,239,241,244,285,321,347,402,422,426,437,457,460,491,501,520,690,710,714,716,728,739,763 'messagewithmetadata':400,423 'middl':311 'might':511 'miss':949 'model':68,73,135,144,152,161,170,217,231,245,698,747,752 'model-specif':751 'modelmaxtoken':616,622,661 'msg':466,473,480,485 'msgtoken':470,476,482 'multi':123 'multi-turn':122 'n':309,343,348,354,369,382,383,658 'naiv':709 'need':551,788,797,805 'npc':862 'number':130,404,425,558,562,568,572,576,583,617 'object.values':655 'old':727 'oldsummari':330,344 'openai':88 'optim':78,249,397,807 'order':431,532 'origin':531 'output':921 'overal':516 'overflow':902 'part':295 'parts.join':381 'parts.push':306,339,345,352,366,376 'pattern':107 'per':746 'perform':845 'permiss':942 'persist':792,840 'place':250 'posit':248 'predict':552 'pref':564 'prefer':411,505 'prepar':630,656,682 'preparecontext':202 'prepared.history':675 'preparedcontext':205,618 'prerequisit':48 'preserv':430,502 'primaci':303 'primari':85 'priorit':47 'prompt':54,59,261,273,560,803,823,858 'prompt-cach':802,822,857 'prompt-engin':58 'queri':359,571,574,601,644 'rag':65,134,169,234,778,783,786,817,832,852 'rag-implement':785,816,851 'realloc':648 'recenc':361,391 'recent':320,336,346,350 'recentmessag':229,243 'recommend':57 'referenc':413,417,513 'relat':846 'relev':236,242 'remain':660,665,680 'rememb':377,793 'remind':372 'remov':732 'request':368 'requir':364,940 'reserv':577 'respons':575,579,606 'restat':362 'restor':530 'retriev':782,789 'retrieverelev':238 'return':194,196,215,226,240,380,533,585,681 'review':933 'right':299 'role':524 'rot':28 'rout':24,41 'safeti':943 'scope':61,914 'score':407,434 'search':784 'selectstrategi':177,209 'send':705 'serial':247 'set':837 'sever':688,712,737,761 'signific':263 'simpli':731 'size':116,398 'skill':56,811,847,906 'skill-context-window-management' 'smartsummar':421 'sonnet':156,165,174 'sort':427,436,438,468 'source-sickn33' 'specif':82,753,928 'start':254,289 'stop':934 'storag':799 'strategi':5,15,80,110,112,131,142,150,159,168,760,769,829 'string':136,281,283,287,288 'structur':272 'substitut':924 'success':946 'summar':22,35,133,160,220,316,331,385,386,486,499,718,726,776 'summari':222,228,342,496,529 'summarizeoldmessag':224 'summarizepool':459,522 'summarizepool.length':493 'summarizepool.push':484 'summarizetotoken':641,677 'support':106 'switch':211 'system':126,290,301,525,557,559,586,631,790,810 'systemprompt':280 'targettoken':424,477 'task':910 'test':930 'tie':433 'tier':108,138,188,190,195,197,207 'tier.maxtokens':193 'tier.model':218,232,246 'tier.strategy':212 'tiers.length':198 'tiktoken':87 'token':43,52,90,93,182,192,539,543,686,694,703,735,741,877 'token-count':42 'tokenbudget':556,584 'tool':86 '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' 'totaltoken':582,588,593,598,603,608 'treat':919 'trigger':781 'trim':23,38 'truncat':711,715 'truncate/summarize':623 'truncatetotoken':632,636,645 'tune':71 'turn':124 'unus':649 'use':119,259,394,550,652,662,750,866,904 'user':410,504,563,867,873,879,885,891,897 'util':99 'valid':683,929 'valuabl':672 'warn':689,713,762 'weight':266,315 'well':849 'window':3,10,13,20,814,872 'without':693,717,766 'work':848 'workflow':825","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-05-18T18:50:51.699Z"},{"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-05-07T22:40:42.086Z"}],"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","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":"74d9c1cd379dbbd3b4fd5e4e2b5bb7b4aa4bf8f1","skill_md_path":"skills/context-window-management/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/context-window-management"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"context-window-management","description":"Strategies for managing LLM context windows including"},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/context-window-management"},"updatedAt":"2026-05-18T18:50:51.699Z"}}