Token optimization isn't glamorous. It doesn't ship features or fix bugs. But for teams using AI coding agents heavily, it's the difference between sustainable and untenable. A poorly optimized agent setup can cost 2-3x more than a well-designed one for identical output.
I've analyzed token usage across 20+ teams using Cursor, Claude Code, and GitHub Copilot. The pattern is always the same: they load their entire codebase context, cache nothing, switch models inefficiently, and wonder why the bill is shocking.
Where the Money Actually Goes
Most teams assume they're paying per request. Wrong. They're paying for:
- Redundant context (40% of costs): Loading the same 50KB of code 30 times per day
- Model overkill (20%): Using Claude Opus ($15/1M tokens) when Claude Haiku ($0.80/1M) would work
- No caching (15%): Re-sending identical large files on every request
- Inefficient prompting (15%): Asking questions that require massive context to answer
- Long session tokens (10%): Keeping old conversation history loaded indefinitely
That's your $1,000 monthly bill. $400 is wasted on redundancy alone.
Token Pricing in 2026: The Current Math
| Model | Input Cost | Output Cost | Best For |
|---|---|---|---|
| Claude Haiku | $0.80/1M | $4/1M | Quick questions, formatting |
| Claude Sonnet | $3/1M | $15/1M | Standard coding tasks |
| Claude Opus | $15/1M | $75/1M | Complex reasoning, large context |
| GPT-4o | $5/1M | $15/1M | Fast iteration, code generation |
Most teams use Claude Opus as their default. But 80% of coding requests could use Sonnet or Haiku. That alone is a 5x cost reduction.
Strategy 1: Smart Model Selection (20% Cost Reduction)
Don't use one model for everything. Route requests intelligently:
Ask Claude Opus every question. Request costs $0.02 even if it's "What's the syntax for map()?"
Use Haiku for syntax/formatting, Sonnet for architecture, Opus for complex debugging. Average request cost drops to $0.008.
Decision Tree for Model Selection
if (request.length < 200 tokens AND request.complexity < "medium") {
// Quick answer questions
return model.haiku;
} else if (request.context < 5000 tokens AND !request.needsDeepAnalysis) {
// Standard coding tasks
return model.sonnet;
} else if (request.needsReasoning OR request.contextRequired > 10000) {
// Complex problems or large context
return model.opus;
}
Implementation in Cursor
Add to your `.cursorrules`:
# Model Selection Rules
For simple syntax questions or formatting:
- Use Claude Haiku (fastest, cheapest)
- Example: "What's the React Hook syntax?"
For standard coding tasks:
- Use Claude Sonnet (balanced)
- Example: "Implement authentication module"
For complex reasoning or large codebases:
- Use Claude Opus (most capable)
- Example: "Refactor this entire module architecture"
For code generation at scale:
- Use GPT-4o (fast, good output)
- Example: "Generate 50 test cases"
Strategy 2: Aggressive Context Compression (35% Cost Reduction)
Your codebase is probably 50,000+ tokens. The AI doesn't need all of it.
// Load entire src/ folder (50 files, 47KB)
// + entire documentation (12KB)
// + package.json, tsconfig, all configs
// Total: ~15,000 input tokens per request
// Cost per request: $0.12
// 10 requests/day = $1.20/day = $25/month just in input
// Load only:
// - Current file being edited (3KB)
// - Relevant imports/dependencies (2KB)
// - Component interface definitions (2KB)
// - Task-specific context only (1KB)
// Total: ~2,500 input tokens per request
// Cost per request: $0.02
// 10 requests/day = $0.20/day = $4/month
Context Compression Rules
For each request, only include:
- Current file: Always (you're editing here)
- Type definitions: Interface signatures only, no implementations
- Imports: List of imports from current file only
- Domain context: Only architecture docs relevant to the task
- Examples: Max 2-3 relevant examples from codebase
Never include:
- Entire node_modules or dependencies
- All test files (only relevant ones)
- Historical comments or git blame
- Unrelated modules or services
Smart Context File for React Project
// Keep in .cursorrules or claude.md
## Project Context (2KB max)
### Architecture
- Frontend: Next.js 14
- State: Redux with RTK
- Styling: Tailwind + Shadcn
- Testing: Vitest + React Testing Library
### Current File Context
[CURRENT_FILE_CONTENT]
### Type Definitions (signatures only)
\`\`\`typescript
// FROM: src/types/index.ts
export interface User { id: string; email: string; role: "admin" | "user"; }
export interface Post { id: string; title: string; authorId: string; }
\`\`\`
### Relevant Imports
\`\`\`typescript
// Current file imports
import { useUser } from '@/hooks/useUser';
import { PostCard } from '@/components/PostCard';
\`\`\`
### Task Focus
Focus on: [SPECIFIC_TASK_ONLY]
Do not: [WHAT_NOT_TO_DO]
Strategy 3: Prompt Caching (25% Cost Reduction)
Anthropic's prompt caching (available since May 2026) is a game-changer. Store large static contexts once, reuse them cheaply.
How Prompt Caching Works
First request: Send 10KB context → costs $0.12 (normal input price)
Subsequent requests (same session): Reuse cached context → costs $0.012 (10% of normal)
That's a 10x cost reduction for cached tokens.
What to Cache
- Type definitions and interfaces (stable)
- Architecture documentation (rarely changes)
- API schemas (changes weekly, not per-request)
- Component library (changes monthly)
- System prompts/rules (your .cursorrules)
Implementation Example
// Use prompt caching in Claude API
const response = await client.messages.create({
model: "claude-3-5-sonnet-20241022",
max_tokens: 1024,
system: [
{
type: "text",
text: "You are an expert React developer...",
cache_control: { type: "ephemeral" }
}
],
messages: [
{
role: "user",
content: [
{
type: "text",
text: typesAndInterfaces, // 5KB of stable interfaces
cache_control: { type: "ephemeral" }
},
{
type: "text",
text: currentTask // 200 tokens of current request
}
]
}
]
});
Strategy 4: Conversation Management (10% Cost Reduction)
Long conversations are expensive. Every reply includes all previous messages.
Turn 1: 2KB context + 100 tokens request = 2,100 tokens
Turn 2: 2KB context + 100 tokens request + 500 tokens previous = 2,600 tokens
Turn 3-10: Keep growing...
Total: ~25,000 tokens for a 10-turn conversation
After turn 5, summarize and start fresh conversation
Turn 1-5: ~10,000 tokens
Summary: 500 tokens
Turn 6-10 (fresh): ~5,000 tokens
Total: ~15,500 tokens (38% savings)
Conversation Strategy
- Keep conversations to 5-7 turns maximum
- When context gets large, ask AI to summarize progress
- Start a new conversation with the summary
- For long sessions, use browser/IDE session history instead of single conversation
Complete Token Optimization Checklist
✅ Immediate Actions (1 day)
- [ ] Audit current usage in Cursor/IDE settings
- [ ] Document current monthly token spend
- [ ] Set up smart context in .cursorrules (copy template above)
- [ ] Configure model routing for your tasks
✅ Short-term (1 week)
- [ ] Create claude.md with compressed context
- [ ] Train team on context compression rules
- [ ] Set up prompt caching if using API
- [ ] Establish conversation length limits
✅ Ongoing (monthly)
- [ ] Review token usage monthly
- [ ] Measure cost per developer
- [ ] Adjust strategies based on actual usage patterns
- [ ] Share savings with team (celebrate wins)
Expected Results
With all four strategies implemented:
| Metric | Before | After |
|---|---|---|
| Cost per developer/month | $200-300 | $50-75 (-70%) |
| Average request cost | $0.08 | $0.02 |
| Response latency | 3-5 seconds | 1-2 seconds |
| Code quality | Unchanged | Often improves (less noise) |
A 5-person team saves $750-1,125 per month. A 50-person enterprise saves $7,500-11,250 monthly.
One More Thing: Local Models
For teams with serious token bills, local models running on GPU become attractive. You can run Mistral 7B or Llama 2 70B on a $2,000 GPU setup with zero per-token costs.
The tradeoff: These models are 2-3x less capable than Claude/GPT. But for code generation tasks where you'll review output anyway, they're viable. See our guide on local vs cloud agents.
Start Today
Token optimization isn't optional—it's financial responsibility. Pick the easiest strategy (smart context compression) and implement it this week. You'll see the impact immediately in your editor performance and your bill.
Want a detailed analysis of your token usage? Review your IDE logs and compare actual costs to these benchmarks. Share results in your team's Slack—accountability drives change.