Agency pattern
Full Lesson Reference
If you work across multiple clients, the agency pattern is the default. Each client gets its own isolated world - folder, CLAUDE.md, MCP connections, database, and GitHub structure. This lesson is the full setup.
Why isolation matters
- Data isolation - one client's data never appears in another client's session
- Brand isolation - client A's voice doesn't leak into client B's work
- Auth isolation - each client's platform logins are separate
- Context isolation - no accidentally referencing another client's numbers
- Token efficiency - only load MCPs + skills relevant to THIS client
Strong isolation = fewer mistakes. The 30-second overhead of switching folders is worth hours of not cleaning up cross-contamination.
Folder structure
Claude Code/
├── CLAUDE.md ← agency-level rules ├── _shared/ ← templates, brand assets, team docs │ ├── templates/ │ └── team-brand-guides/ ├── client-acme/ │ ├── CLAUDE.md ← Acme-specific rules │ ├── .env ← Acme's API keys │ ├── .mcp.json ← Acme's MCPs │ ├── brief.md ← Acme's ongoing brief │ ├── reports/ │ ├── campaigns/ │ └── data/ ├── client-brightside/ │ └── (same structure) ├── client-nova/ │ └── (same structure) └── internal/ ← agency's own projects ├── team-ops/ ├── sales/ └── wins-showcase/
📷 Upload image here: l02-agency-folder-structure.png Terminal showing the agency folder structure via tree command
The CLAUDE.md hierarchy
Global (~/.claude/CLAUDE.md)
Your identity, locale, work style, safety. Covered in Module 02.
Agency CLAUDE.md (Claude Code/CLAUDE.md)
Rules that apply across every client
Agency-level rules
Deliverables
- Reports always use [template name] template
- Data sources must be traceable to warehouse or MCP pull
- Weekly reports Friday AEST, MBR first Monday of month
Client folder structure Every client folder has: CLAUDE.md, .env, .mcp.json, brief.md, reports/, campaigns/, data/
Safety
- Never cross-reference data between clients
- Always double-check client name in outputs
Branding
- Never use our agency logo on client deliverables
- Never use client logo on our internal materials Client CLAUDE.md
Everything specific to one client - brand, channels, goals, reporting preferences. Covered in Module 02 Lesson 3.
MCP setup per client
Each client's .mcp.json lists their specific platforms + accounts. Typical ecom client:
{ "mcpServers": { "google-ads": { "customerId": "123-456-7890" }, "meta-ads": { "adAccountId": "act_1234567890" }, "klaviyo": { "account": "client-acme-prod" }, "ga4": { "propertyId": "GA4-XXXXX" }, "shopify": { "store": "client-acme.myshopify.com" } } }
Open client-acme/ folder, run Claude, only Acme's MCPs activate. Open client-brightside/ and those MCPs swap out for Brightside's.
Database per client
If you're running Supabase databases per client (for ad data, historical performance, etc.):
- Your personal memory layer = 1 Supabase project (covered in Module 04)
- Each client = optionally 1 separate Supabase project for their operational data
Client Supabase credentials live in the client's .env. The project CLAUDE.md says "for data queries, use client-specific Supabase at [URL], not the personal memory layer".
Naming conventions
Consistent naming prevents confusion
- Client folders: client-[slug] (e.g. client-acme, client-brightside)
- Internal projects: internal/[project]
- Shared assets: _shared/ (underscore prefix sorts first)
- Reports inside a client: reports/YYYY-MM-type.html (e.g. 2026-04-weekly.html)
Onboarding a new client
When a new client joins
Create a new client folder for [client-name]. Use our standard template - CLAUDE.md, .env, .mcp.json, brief.md, and subfolders for reports/, campaigns/, data/. Ask me for the details needed to fill in CLAUDE.md and the MCP configuration.
Claude creates the folder + asks clarifying questions. Typical questions:
- Client name + website
- Channels they run on + account IDs
- Primary metrics
- Brand colours + font
- Reporting cadence
- Current goals
10 minutes from "new client signed" to "ready to work".
Offboarding a client
When a client relationship ends
Archive client-[name]. Move the folder from working location to _archive/. Mark the project record in memory as archived. Don't delete anything.
Everything stays searchable. If they come back in 6 months, everything is retrievable.
Power-user tips
- Tab colour per client in your terminal - prevents typing into the wrong session
- Name terminal tabs by client - visible indicator of which session is which
- Shared templates in _shared/ - reusable assets that evolve across clients
- Client-specific skills live in the client folder - client-acme/.claude/skills/ keeps Acme-only skills out of the global 16K budget
- Back up client data separately - each client folder syncs to Dropbox/Drive separately so client X's sync issues don't affect client Y
Action items
☐ If you're an agency/freelancer - audit your folder structure against this pattern
☐ Create _shared/ folder for reusable templates
☐ Confirm each client has their own .env + .mcp.json (data isolation)
☐ Use consistent naming (client-slug, YYYY-MM-type, etc.)
☐ Build a client onboarding skill that creates the standard folder structure
Next lesson: In-house + channel patterns.
Exercises
- Review the concepts covered in this lesson: Agency pattern.
- Write down your key takeaway from this lesson.
- Practice running any commands or prompts mentioned above inside your terminal.