week I noticed my Claude Code token usage was through the roof. £100/week higher than normal.
I dug in and found the issue: Claude Code loads EVERY skill in your skills folder into the context window by default.
My .claude/skills/ folder had:
195 skills
1.3MB of content
220,750 tokens wasted before I even typed a prompt
That's your entire 128K context window eaten by skills you're not even using.
The Discovery: Skills Are Bloated
The worst offenders:
last30days skill: 66.9KB (16,725 tokens)
ads-plan assets: 81.5KB across 9 files (20,375 tokens)
writing-skills: 45.8KB (11,450 tokens)
Total waste: ~127,200 tokens just on these three skills. You're paying for content that loads automatically, whether you use it or not.
The 3-Step Fix I Built in 10 Minutes
Step 1: The Scanner
python
#!/usr/bin/env python3
skill-scanner.py - Find bloated skills
import os
from pathlib import Path
skills_dir = Path.home() / ".claude" / "skills"
bloated = []
for skill_file in skills_dir.glob("*.md"):
size_kb = skill_file.stat().st_size / 1024
if size_kb > 3: # Skills over 3KB are bloated
bloated.append({
'name': skill_file.stem,
'size_kb': size_kb,
'path': skill_file
})
print(f"Found {len(bloated)} bloated skills:")
for skill in sorted(bloated, key=lambda x: x['size_kb'], reverse=True)[:10]:
print(f" {skill['name']:30} {skill['size_kb']:6.1f}KB")
Run it: python3 skill-scanner.py
Step 2: The Mover
python
#!/usr/bin/env python3
skill-mover.py - Safely backup bloated skills
import shutil
from pathlib import Path
skills_dir = Path.home() / ".claude" / "skills"
backup_dir = Path.home() / ".claude" / "skills-backup"
backup_dir.mkdir(exist_ok=True)
Move all .md files >3KB
for skill_file in skills_dir.glob("*.md"):
if skill_file.stat().st_size / 1024 > 3:
dest = backup_dir / skill_file.name
shutil.move(str(skill_file), str(dest))
print(f"Moved: {skill_file.name}")
print(f"\n✅ Originals safe in: {backup_dir}")
Run it: python3 skill-mover.py
Step 3: The Optimizer
python
#!/usr/bin/env python3
skill-optimizer.py - Create minimal versions
from pathlib import Path
backup_dir = Path.home() / ".claude" / "skills-backup"
minimal_dir = Path.home() / ".claude" / "skills-minimal"
minimal_dir.mkdir(exist_ok=True)
for skill_file in backup_dir.glob("*.md"):
# Read original
with open(skill_file, 'r') as f:
content = f.read()
# Keep first 50 lines (essential content)
lines = content.split('\n')
minimal_content = '\n'.join(lines[:50])
# Add note about full version
minimal_content += f"\n\n---\n# Minimal version\nFull skill: {skill_file}\n"
# Save
minimal_path = minimal_dir / f"{skill_file.stem}-minimal.md"
with open(minimal_path, 'w') as f:
f.write(minimal_content)
print(f"Created: {minimal_path.name}")
print(f"\n✅ Minimal versions in: {minimal_dir}")
print(f"📁 Copy to skills folder: cp {minimal_dir}/*.md ~/.claude/skills/")
Run it: python3 skill-optimizer.py
The Complete Script (All 3 Steps Combined)
python
#!/usr/bin/env python3
"""
Claude Code Skill Optimizer - Complete 3-Step Fix
Saves 220K+ tokens per session
"""
import os
import shutil
from pathlib import Path
def main():
print("🔧 Claude Code Skill Optimizer")
print("=" * 50)
# Paths
home = Path.home()
skills_dir = home / ".claude" / "skills"
backup_dir = home / ".claude" / "skills-backup"
minimal_dir = home / ".claude" / "skills-minimal"
# Create directories
backup_dir.mkdir(exist_ok=True)
minimal_dir.mkdir(exist_ok=True)
# Step 1: Scan
print("\n1️⃣ SCANNING for bloated skills (>3KB)...")
bloated = []
for skill_file in skills_dir.glob("*.md"):
size_kb = skill_file.stat().st_size / 1024
if size_kb > 3:
bloated.append({'file': skill_file, 'size_kb': size_kb})
if not bloated:
print("✅ No bloated skills found!")
return
total_kb = sum(s['size_kb'] for s in bloated)
print(f" Found {len(bloated)} skills ({total_kb:.1f}KB total)")
# Step 2: Move
print("\n2️⃣ MOVING originals to backup...")
for skill in bloated:
dest = backup_dir / skill['file'].name
shutil.move(str(skill['file']), str(dest))
# Step 3: Create minimal versions
print("\n3️⃣ CREATING minimal versions...")
for skill_file in backup_dir.glob("*.md"):
with open(skill_file, 'r') as f:
content = f.read()
# Keep essential content (first 50 lines)
lines = content.split('\n')
minimal = '\n'.join(lines[:50])
minimal += f"\n\n---\n# Minimal version\nFull skill available at: {skill_file}"
# Save
minimal_path = minimal_dir / f"{skill_file.stem}-minimal.md"
with open(minimal_path, 'w') as f:
f.write(minimal)
# Results
print("\n✅ OPTIMIZATION COMPLETE!")
print("=" * 50)
estimated_tokens = total_kb * 250 # ~250 tokens per KB
weekly_savings = estimated_tokens * 0.000002 * 30 # £0.000002 per token × 30 sessions
print(f"Skills optimized: {len(bloated)}")
print(f"Original size: {total_kb:.1f}KB")
print(f"Tokens saved: ~{estimated_tokens:,.0f} per session")
print(f"Weekly savings: £{weekly_savings:.0f}")
print(f"\n📁 Backup: {backup_dir}")
print(f"📁 Minimal: {minimal_dir}")
print(f"\n🎯 Final step: cp {minimal_dir}/*.md {skills_dir}/")
if name == "main":
main()
The Results
Before:
195 skills, 1.3MB, 220,750 tokens wasted
Context window: 100% full before typing
Cost: £100+/week in wasted tokens
After:
Minimal skills, 448KB, 74,000 tokens
Context window: 58% free for actual work
Savings: £50-80/week immediately
Why This Matters
Claude Code's design flaw: It loads ALL skills by default
Hidden cost: You're paying for content you're not using
Simple fix: 50 lines of Python saves thousands
Reusable: Works for any Claude Code user
Download & Run
Save as skill-optimizer.py
Run: python3 skill-optimizer.py
Follow the 3 steps
Restart Claude Code
Time: 10 minutes
Savings: £50-100/week
ComplTags: #ClaudeCode #Python #AIAutomation #TokenOptimization #DeveloperTools #CostSaving #AICoding #TechTips #OpenSource
Hope this helps
Mike