It was late at night. I had handed a large refactor to Claude Code and walked away. When I came back, there it was: "context window exceeded." Work stopped. I had no idea how far it had gotten. The files were in a half-finished state, and I didn't have the context in my head to pick up where it left off.
That painful experience taught me everything in this article. By the end, you'll have a complete playbook for preventing context window errors—and recovering cleanly when they do happen.
What Is the "Context Window Exceeded" Error in Claude Code?
The "context window exceeded" error means Claude Code has hit the upper limit of tokens it can process in one session. Everything counts toward that limit: the full conversation history, every file it has read, all the code it has generated.
The critical insight is that this limit doesn't arrive suddenly—it approaches gradually. Claude Code tracks context usage throughout a session, and there are ways to monitor it. That means you can act before the error ever appears.
There are four main strategies:
- Use
/compactto summarize and compress conversation history - Use
.claudeignoreto prevent unnecessary files from being read in the first place - Split long sessions by domain so they never get out of hand
- Use Plan mode to lock in design decisions upfront, minimizing token spend during implementation
I'll cover each in detail. But first—what to do when the error has already happened.
How Do You Recover Your Work After a Context Window Error?
When the error hits, the session is over. Don't panic. Follow these steps to understand the situation.
Step 1: Check the diff with git
git diff HEAD
git status
Claude Code writes changes to disk as it goes. Even if the session ended abruptly, everything it touched is still there in the file system. Running git diff tells you exactly what changed and how far the work progressed.
Step 2: Save the current state
Even if the state looks incomplete, save it immediately.
git add -A
git stash push -m "claude-code session 2026-02-26 interrupted"
Or commit the parts that look complete. Either way, secure the work before doing anything else.
Step 3: Start a new session with minimal context
Open a new session and describe what's needed in compact form.
The previous session ended with context window exceeded.
Modified files: src/components/Header.tsx, src/lib/api.ts
Remaining task: fix type errors in the Footer component
Please load only the relevant files and continue.
No long explanations needed. "What to do" and "which files" are all that matter.
How Do You Monitor Context Usage in Claude Code?
Claude Code sometimes displays context usage in responses during a session, but it's not consistent. You need to develop your own awareness.
Run /status when a session starts feeling long
/status
This shows an approximate token count. If you're at 70–80%, that's your signal to act.
Rough guidelines for session "weight"
| Situation | Approximate token usage |
|---|---|
| Small bug fix (1–2 files) | 10–30k |
| Feature addition (5–10 files) | 50–150k |
| Large refactor (20+ files) | 200k+ → danger zone |
Token usage scales faster than you'd expect as file count grows. Every "while you're at it, fix this too" request accelerates you toward the limit.
The right mindset for context efficiency
- One session = one task, no exceptions
- No "while you're at it" requests
- New tasks always start in new sessions
How Does /compact Work and When Should You Use It?
The /compact command summarizes your conversation history and replaces it with a compressed version. The detailed back-and-forth becomes a concise summary of what's been accomplished. Token count drops significantly, and you can continue working.
/compact
Claude extracts the key information from the conversation and produces a summary. The working context carries over, so the session continues naturally.
Good times to use /compact
- When context usage reaches 60–70%
- When transitioning from a research/design phase to implementation
- When a debugging session has reached a natural stopping point
When to avoid it
- In the middle of a complex design discussion (the summary may lose important nuances)
- When precise code details need to be preserved
/compact isn't perfect. Important decisions can get lost in summarization. The safest habit is to write key decisions to a file—or to CLAUDE.md—before compacting.
<!-- What to record in CLAUDE.md before compacting -->
## Current Work
- Task: refactor user authentication module
- Decision: switch from JWT to session cookies
- Modified: src/auth/index.ts, src/middleware/auth.ts
- Remaining: update tests
How Do You Reduce Token Usage with .claudeignore?
The single most effective context management technique is preventing unnecessary files from being loaded in the first place. The .claudeignore file works like .gitignore—it tells Claude Code which files and directories to skip when exploring the project.
touch .claudeignore
# .claudeignore
# Dependencies (never load these)
node_modules/
vendor/
.venv/
__pycache__/
# Build artifacts
dist/
build/
.next/
out/
# Large data files
*.csv
*.json.bak
data/raw/
# Logs and caches
*.log
.cache/
coverage/
# Archive docs not needed for current work
docs/archive/
*.pdf
# Test snapshots
__snapshots__/
The impact is real
Excluding node_modules/ alone can save tens of thousands—sometimes hundreds of thousands—of tokens per session. In a Next.js project, always exclude .next/. A single .claudeignore file can double or triple how long a session lasts before hitting the limit.
How Should You Split Sessions to Handle Long-Running Tasks?
The most fundamental solution to context management is splitting one large task into multiple focused sessions.
What splitting looks like
Bad (one session tries to do everything):
- Design the user auth system
- Design the DB schema
- Implement the API
- Build the frontend
- Write tests
- Configure deployment
Good (separate sessions):
Session 1: Design only (record decisions in CLAUDE.md)
Session 2: DB + API
Session 3: Frontend
Session 4: Tests
Session 5: Deployment config
The biggest cause of context explosion is trying to carry the full history of a previous session into a new one. Each session should start fresh, with only the minimum context needed.
Create a handover file between sessions
<!-- session-handover.md -->
## What was completed last session
- Auth implemented using JWT (RSA256)
- Files under src/auth/ are complete
- Tests not written yet
## What to do this session
- Add tests under src/auth/__tests__/
- Target: 80%+ code coverage
Hand this to Claude Code at the start of each session. The long explanatory conversation becomes unnecessary.
Why Is Auto-Compaction Risky?
Claude Code has an auto-compaction feature that automatically summarizes context when it crosses a threshold. It sounds convenient, but auto-compaction during critical work can cause problems.
You can't control when it fires. If it triggers in the middle of a complex refactor—or while you're tracking down a subtle bug—important assumptions can vanish from the context, sending the work in the wrong direction.
{
"autoCompact": false
}
Disabling auto-compaction and running /compact manually at a moment of your choosing is the safer approach. Check the summary before continuing. Make sure nothing critical was lost.
What's the Setup Checklist for Preventing Context Window Errors?
Here's everything from this article as an actionable checklist. Set this up once per project and you'll rarely have to think about it again.
Project initialization
- Create
.claudeignore, excludingnode_modules/,dist/,.next/ - Create
CLAUDE.mdand establish the habit of recording decisions there - Disable auto-compaction in settings
At the start of each session
- One task per session—no mixing
- Pass only the minimum necessary context from the previous session
- Never ask Claude Code to load files unrelated to the current task
During a session
- Run
/compactwhen usage hits 60% - Refuse the temptation to add "while you're at it" requests
- Write design decisions to a file immediately—don't leave them only in the conversation
When the error happens
- Run
git diffto see what changed - Stash or commit the current state
- Start a new session with a compact, focused handover message
Wrapping Up
"Context window exceeded" is not bad luck. It's an engineering problem with engineering solutions.
- Use
.claudeignoreto control what gets loaded - Enforce one session, one task
- Run
/compactmanually at the 70% mark - Manage handoffs between sessions with files, not conversation history
These four practices eliminate almost all context-related interruptions. Even late-night large-scale refactors become manageable when sessions are properly scoped.
Start right now: create a .claudeignore file in your project.