When working across multiple AI-powered IDEs (VS Code, Cursor, Windsurf, Google Antigravity) and CLI tools (Claude Code), each tool creates its own configuration folders.
Without a clear structure, you end up with:
| Tool | Global Config Location | Project Config Location |
|---|---|---|
| Claude Code | ~/.claude/ |
<project>/.claude/ + CLAUDE.md |
| Cursor | User Settings (in-app) | <project>/.cursor/rules/*.mdc |
| Windsurf | global_rules.md (in-app) |
<project>/.windsurf/rules/*.md |
| Antigravity | ~/.gemini/antigravity/skills/ |
<project>/.agent/skills/ |
| VS Code | ~/.vscode/ |
<project>/.vscode/ |
Claude Code reads CLAUDE.md files by walking UP the directory tree from your project folder. This is powerful but dangerous:
~/.claude/CLAUDE.md ← Always loaded (global) ↓ ~/projects/CLAUDE.md ← Loaded if exists (applies to ALL projects!) ↓ ~/projects/my-app/CLAUDE.md ← Loaded (project-specific)
If you put a CLAUDE.md in a parent folder, ALL child projects inherit it. This causes context leakage between unrelated projects.
C:\Users\YourName\ # Or /Users/YourName on Mac │ ├── .claude\ # GLOBAL Claude Code config │ ├── CLAUDE.md # Universal coding standards │ ├── settings.json │ └── commands\ # Shared slash commands │ ├── review.md # /review command │ ├── document.md # /document command │ └── test.md # /test command │ ├── .gemini\ # GLOBAL Antigravity config │ ├── GEMINI.md # Universal Gemini context │ └── antigravity\ │ └── skills\ # Global skills (all projects) │ ├── code-review\ │ │ └── skill.md │ └── documentation\ │ └── skill.md │ ├── .cursor\ # Cursor config (managed by Cursor) ├── .vscode\ # VS Code config │ │ ├── Dev\ # ALL DEVELOPMENT WORK │ │ ⚠️ NO CLAUDE.md HERE! │ │ │ ├── _config\ # Shared configuration │ │ ├── env-templates\ # .env templates by project type │ │ │ ├── nextjs.env.example │ │ │ ├── python-api.env.example │ │ │ └── n8n.env.example │ │ └── snippets\ # Reusable code snippets │ │ │ ├── _templates\ # Project starter templates │ │ │ ⚠️ NO CLAUDE.md HERE! │ │ ├── README.md # How to use templates │ │ │ │ │ ├── nextjs-starter\ │ │ │ ├── CLAUDE.md # "Use placeholders, keep generic" │ │ │ ├── TEMPLATE-CONFIG.md # Customization checklist │ │ │ ├── _brand\ # Placeholder brand files │ │ │ ├── .cursor\rules\ │ │ │ ├── .windsurf\rules\ │ │ │ ├── .agent\skills\ │ │ │ └── src\ │ │ │ │ │ ├── python-api\ │ │ │ └── [same structure] │ │ │ │ │ └── electron-app\ │ │ └── [same structure] │ │ │ ├── _brand-library\ # ALL branding files │ │ │ ⚠️ NO CLAUDE.md HERE! │ │ ├── README.md # How to use brand files │ │ ├── my-company\ │ │ │ ├── brand-guidelines.json │ │ │ ├── colors.json │ │ │ └── tone-of-voice.md │ │ ├── client-a\ │ │ │ └── brand-guidelines.json │ │ └── client-b\ │ │ └── brand-guidelines.json │ │ │ │ │ ├── active\ # ACTIVE PROJECTS │ │ │ ⚠️ NO CLAUDE.md HERE! │ │ │ │ │ ├── project-one\ # Each project is ISOLATED │ │ │ ├── CLAUDE.md ✅ Project-specific context │ │ │ ├── GEMINI.md # For Antigravity │ │ │ ├── .claude\ │ │ │ │ ├── settings.json │ │ │ │ └── commands\ # Project-specific commands │ │ │ ├── .cursor\ │ │ │ │ └── rules\ │ │ │ │ └── project.mdc │ │ │ ├── .windsurf\ │ │ │ │ └── rules\ │ │ │ │ └── project.md │ │ │ ├── .agent\ # Antigravity project skills │ │ │ │ └── skills\ │ │ │ ├── .vscode\ │ │ │ │ └── settings.json │ │ │ ├── _brand\ # Copy/symlink from _brand-library │ │ │ ├── src\ │ │ │ ├── venv\ # Python virtual environment │ │ │ ├── .env # Environment variables │ │ │ ├── .gitignore │ │ │ └── README.md │ │ │ │ │ ├── project-two\ │ │ │ └── [same structure] │ │ │ │ │ └── project-three\ │ │ └── [same structure] │ │ │ │ │ ├── learning\ # TUTORIALS & EXPERIMENTS │ │ │ ⚠️ NO CLAUDE.md HERE! │ │ ├── course-name\ │ │ │ ├── CLAUDE.md │ │ │ └── ... │ │ └── experiment-topic\ │ │ ├── CLAUDE.md │ │ └── ... │ │ │ │ │ └── hackathons\ # HACKATHON PROJECTS │ │ ⚠️ NO CLAUDE.md HERE! │ ├── 2025-12-hackathon-name\ │ │ ├── CLAUDE.md │ │ ├── _brand\ │ │ └── ... │ └── 2025-10-hackathon-name\ │ └── ... │ │ ├── Clients\ # CLIENT WORK (if applicable) │ │ ⚠️ NO CLAUDE.md HERE! │ │ │ ├── client-a\ # One folder per client │ │ ├── CLAUDE.md # Client standards & branding refs │ │ ├── _brand\ # Copy from _brand-library │ │ ├── _specs\ # Client specifications │ │ │ │ │ ├── project-one\ # Client's projects │ │ │ ├── CLAUDE.md # Project-specific │ │ │ └── ... │ │ │ │ │ └── project-two\ │ │ └── ... │ │ │ └── client-b\ │ └── [same structure] │ │ ├── Archive\ # ARCHIVED/ABANDONED PROJECTS │ │ ⚠️ NO CLAUDE.md ANYWHERE IN ARCHIVE! │ ├── README.md # Index of what's here │ ├── 2025-Q4\ │ │ ├── old-project-one\ │ │ └── old-project-two\ │ └── 2025-Q3\ │ └── ... │ │ ├── Content\ # CONTENT CREATION (YouTube, etc.) │ ├── CLAUDE.md # Content creation standards │ ├── _assets\ │ ├── _templates\ │ └── channel-name\ │ ├── CLAUDE.md # Channel-specific voice │ ├── scripts\ │ └── research\ │ │ └── Documents\ # Keep Windows/Mac defaults as-is
Dev\CLAUDE.md # Affects ALL projects! Dev\active\CLAUDE.md # Affects all active!
Dev\active\my-project\CLAUDE.md # Only affects this project
The hierarchy should have nothing between global and project:
~/.claude/CLAUDE.md # Global (coding standards, env info) ↓ ↓ (NOTHING in between!) ↓ project\CLAUDE.md # Project-specific context
Instead of branding files in Downloads or random project folders:
Dev\_brand-library\ ├── my-company\brand-guidelines.json ├── client-a\brand-guidelines.json └── client-b\brand-guidelines.json
Then copy or symlink to projects that need it:
# Create symlink to brand folder mklink /D "C:\path\to\project\_brand" "C:\Users\Name\Dev\_brand-library\client-a"
Templates should tell the AI "you're building a template, use placeholders":
# Template: NextJS Starter ## IMPORTANT This is a TEMPLATE, not a client project. - Use placeholder values for branding - Use CSS variables: var(--color-primary) - Use config files for client-specific values - Document all customization points in TEMPLATE-CONFIG.md ## Placeholder Conventions - Colors: #PLACEHOLDER_PRIMARY - Client name: {{CLIENT_NAME}} - Logo: placeholder.svg
When archiving projects, the AI config becomes irrelevant. No need for CLAUDE.md in Archive folders — this also prevents accidentally loading old context.
When you open a project in any IDE, here's what gets loaded:
✅ ~/.claude/CLAUDE.md (global standards) ✅ Dev\active\my-project\CLAUDE.md (project context) ❌ Dev\CLAUDE.md (doesn't exist - correct!) ❌ Dev\active\CLAUDE.md (doesn't exist - correct!)
✅ User Rules (from Settings) ✅ Dev\active\my-project\.cursor\rules\*.mdc
✅ ~/.gemini/GEMINI.md ✅ ~/.gemini/antigravity/skills\* ✅ Dev\active\my-project\GEMINI.md ✅ Dev\active\my-project\.agent\skills\*
✅ global_rules.md (from Settings) ✅ Dev\active\my-project\.windsurf\rules\*.md
| Tool | Global (all projects) | Project-specific |
|---|---|---|
| Claude Code | ~/.claude/commands/*.md |
<project>/.claude/commands/*.md |
| Antigravity | ~/.gemini/antigravity/skills/*/skill.md |
<project>/.agent/skills/*/skill.md |
| Cursor | User Rules (in-app) | <project>/.cursor/rules/*.mdc |
| Windsurf | global_rules.md (in-app) |
<project>/.windsurf/rules/*.md |
The most important rule is: CLAUDE.md files only at the global level (~/.claude/) and individual project level. Never in container folders like Dev\, active\, or Clients\. This ensures complete isolation between projects.