claude-code-gtm/ directory to store all campaign artifacts. This page explains the structure, what each file contains, and when it’s created.
Directory Structure
After running a full campaign, you’ll have:Top-Level Directories
context/
Global company knowledge and per-vertical research.
Root level:
{company}_context.md— The single source of truth for all skills- Created by:
context-building - Updated by:
context-building(all modes) - Read by: All skills
- Lifecycle: Permanent (one per company, continuously updated)
- Created by:
-
{vertical-slug}/hypothesis_set.md— Pain hypotheses for this vertical- Created by:
hypothesis-buildingORmarket-research - Read by:
list-building,enrichment-design,list-segmentation,email-prompt-building - Lifecycle: Reusable (update when entering the vertical again)
- Created by:
-
{vertical-slug}/sourcing_research.md— Deep research findings (optional)- Created by:
market-research - Read by:
email-prompt-building - Lifecycle: Reusable (reference for future campaigns in same vertical)
- Created by:
Vertical slug examples:
enterprise-saaslogistics-platformsfintech-b2b
prompts/
Self-contained email prompt templates.
Structure:
- Created by:
email-prompt-building - Read by:
email-generation - Lifecycle: Per-campaign (update if voice/research changes)
- Voice rules (from context file)
- Hypothesis-based P1 angles (from research)
- P2 value angles (from context → What We Do)
- P4 proof points (from context → Proof Library)
- Structural variants (by role/seniority)
- Banned phrasing
csv/
Input lists and output emails.
Structure:
Campaign slug examples:
enterprise-saas-q1logistics-platforms-2026-03fintech-expansion
Input Files (csv/input/{campaign-slug}/)
companies.csv
Raw company list from list building.
Created by: list-buildingColumns:
name— Company namedomain— Website domainshort_description— 1-2 sentence descriptionfounding_year— Year foundedemployee_count— Headcounthq_country— Headquarters countryhq_city— Headquarters cityrelevance_score— 0-100 (from Extruct API)
After running Search, Discovery, or Lookalike via
list-building. This is the starting list before enrichment.
companies_segmented.csv
Companies with tier assignments and enrichment data.
Created by: list-segmentationColumns:
- All columns from
companies.csv - Enrichment columns (added by
list-enrichment)- Custom research fields (e.g.,
data_infrastructure_maturity,recent_product_launch)
- Custom research fields (e.g.,
tier— 1, 2, or 3 (fit score)hypothesis_number— Primary hypothesis match (e.g.,#1,#2)hypothesis_name— Hypothesis short namesegmentation_reasoning— Why this tier was assigned
After enrichment is complete and tiering logic is applied. Usage:
- Filter to Tier 1 for high-touch emails
- Filter to Tier 2 for hypothesis-based templates
- Exclude Tier 3 or route back to re-enrichment
people.csv
Decision makers at target companies.
Created by: people-searchColumns:
company_domain— Matchesdomainfrom companies.csvfull_name— Person’s namefirst_name— Extracted first namelast_name— Extracted last namejob_title— Current rolelinkedin_url— LinkedIn profileseniority— Junior, Mid, Senior, Executive
After running LinkedIn search via Extruct API.
contacts.csv
People with verified contact information.
Created by: email-searchColumns:
- All columns from
people.csv - All enrichment columns from
companies_segmented.csv(joined on domain) email— Verified emailphone— Phone number (if found)email_status—verified,risky,invalidconfidence_score— 0-100 (from contact provider)
After contact enrichment via Prospeo, FullEnrich, or similar. This is the input to email generation.
Output Files (csv/output/{campaign-slug}/)
emails.csv
Generated emails ready for sending.
Created by: email-generationColumns:
- All columns from
contacts.csv(for reference) subject_line— Email subjectemail_body— Full email textp1— Paragraph 1 (pain angle)p2— Paragraph 2 (value prop)p3— Paragraph 3 (CTA)p4— Paragraph 4 (proof point, optional)hypothesis_used— Which hypothesis was appliedstructural_variant— A, B, C, or D (role-based structure)word_count— Total wordsflagged_issues— Any voice violations detected
After running the prompt template against
contacts.csv.
Usage:
- Import to email sequencer (Instantly, Lemlist, etc.)
- Spot-check for quality before sending
- Route Tier 1 emails through
email-response-simulationfirst
File Lifecycle
Foundation (Once per Company)
Created:
context/{company}_context.md
context-buildingLifecycle: Permanent, continuously updatedResearch (Once per Vertical)
Created:
context/{vertical-slug}/hypothesis_set.mdcontext/{vertical-slug}/sourcing_research.md(optional)
hypothesis-building or market-researchLifecycle: Reusable across campaigns in same verticalList Building (Per Campaign)
Created:
csv/input/{campaign-slug}/companies.csv
list-buildingLifecycle: Campaign-specificEnrichment (Per Campaign)
Created:
- Enrichment columns added to Extruct table
- Exported as updated
companies.csvor merged into segmented CSV
list-enrichmentLifecycle: Campaign-specificSegmentation (Per Campaign)
Created:
csv/input/{campaign-slug}/companies_segmented.csv
list-segmentationLifecycle: Campaign-specificPeople & Contact Search (Per Campaign)
Created:
csv/input/{campaign-slug}/people.csvcsv/input/{campaign-slug}/contacts.csv
people-search → email-searchLifecycle: Campaign-specificEmail Prompt (Per Vertical or Campaign)
Created:
prompts/{vertical-slug}/en_first_email.md
email-prompt-buildingLifecycle: Reusable if voice/research unchanged, otherwise update per campaignNaming Conventions
Company Name
Use the company’s primary domain without TLD:Vertical Slug
Lowercase, hyphen-separated, descriptive:Campaign Slug
Descriptive + date or identifier:File Retention
Keep forever:context/{company}_context.md— continuously updatedcontext/{vertical-slug}/— reusable research
csv/input/{campaign-slug}/— for reference and re-runscsv/output/{campaign-slug}/— for results tracking
prompts/{vertical-slug}/— update when voice or research changes
Example: Full Campaign File Tree
Running this prompt:Extruct Table Integration
Some artifacts live in Extruct tables instead of local CSVs: What stays in Extruct:- Company lists uploaded by
list-building - Enrichment columns added by
list-enrichment - People search results from
people-search
- Final segmented company list (
companies_segmented.csv) - Contacts with emails (
contacts.csv) - Generated emails (
emails.csv)
- Extruct tables are great for research and enrichment (parallel agents, web UI)
- CSVs are great for email generation and sequencer imports (local processing)
You can access Extruct tables anytime at
https://app.extruct.ai/tables/{table_id}Next Steps
End-to-End Workflow
See how these files are created in a full campaign
Context Files
Deep dive on the global context file structure
list-building
Learn how companies.csv is created
email-generation
Learn how emails.csv is created