GTM Orchestrator
One command takes a client brief from "new campaign" to "ready for human checkpoint before Bison launch" — every intermediate CSV and state inspectable on disk and in Sheets throughout.
System Architecture
Pipeline glue: brief → discovery → enrichment → qualification → copy → QA → launch. SQLite state mirrored live to Google Sheets.
gws CLI.Dependencies & Install
Everything the orchestrator needs to run. Python packages install via uv sync. External CLIs and services require separate setup.
The Pipeline
15 stages from brief to launch. Green = fully automated. Yellow = operator checkpoint. Orange = human gate.
Available Skills
30 skills across 8 categories. Invoke via slash command or natural language.
Click any skill to see what it consumes, produces, and when to use it.
Intake1:1 AI Copy System
The copy pipeline is a multi-agent system that generates, personalizes, and quality-checks every email before it reaches a real inbox. Here's how every piece connects.
Feature Flags
situation_line, value_line, cta_soft. Dual-agent pattern with 10-lead approval loop.{{VARIABLES}} against real lead data, then runs graduated prompt to check if the email makes sense for that specific person.personalization_max_leads (default 500). Company-domain caching prevents cost explosion on repeat domains.{{DOUBLE_BRACE}} in drafts → {SINGLE_BRACE_ALL_CAPS} at QA time (Bison-native format).Copy Pipeline Flow
2 prospect-voice variants → Copywriter Agent
2 agency-voice variants → Operator Picks Winner → Personalize
3 fields × N leads → Rendered QA
sample with real data → Anneal Loop
auto-fix spam → Mechanical QA
3-layer spam + vars + lead audit → Convert to Bison
{{VAR}} → {VAR} → final_copy.yaml
Development Roadmap
43 phases across 10 milestones. 22 days from first commit to v3.0.
Client Journey: End to End
Follow a new client from first conversation to live campaign with replies scoring. Every step shows what the operator does, what the system does, and what gets produced.
Client Onboarding
Operator runs: /gtm:icp-onboarding
The system interviews the operator about the client's business — who they sell to, deal size, verticals, title-level targeting, hard filters (geo, company size, exclusions). Optionally crawls the client's website via spider-waterfall to auto-extract ICP signals. Can also ingest existing CRM CSVs or call transcripts.
Three confirmation rounds refine each field with source attribution — "This came from your website's pricing page" vs "You said this in the interview."
Produces: icp-profile.yaml — the structured ICP consumed by every downstream skill.
Market Research
Operator runs: /gtm:research-chain
The 11-step FIND chain produces a Market Takeover Playbook. Steps include competitor landscape mapping, buyer-journey analysis, objection mining, pricing intelligence, channel analysis, and content gap identification. Each step writes a persistent artifact with SHA-256 hash — stale steps can be individually refreshed.
Optional: /gtm:voice-of-market mines Reddit for real prospect language — pain points, objections, buying triggers — in the buyer's own words. This feeds directly into copy angles.
Produces: research/<slug>-takeover-playbook.md + research/<slug>-playbook-structured.yaml
Campaign Strategy
Operator runs: /gtm:campaign-strategy
Consumes the ICP profile + structured playbook. Generates 15+ campaign ideas — each with a target segment, angle, hook, expected reply rate, and difficulty rating. The operator picks 1-3 to pursue.
Produces: campaign-strategy.yaml
Campaign Brief
Operator runs: /gtm:briefing
Synthesizes ICP + research + chosen strategy into a pipeline-ready brief. Contains required sections: Market, Segments, Personas, Angles, Rough Messaging, and EDP (Emotional Decision Points) per segment. Frontmatter specifies the seed domain, list source, enrichment preferences, and segmentation thresholds.
The brief is frozen at campaign init — immutable once the pipeline starts. Any change requires a new brief.
Produces: briefs/<campaign-slug>.md — the single input to the pipeline.
Pipeline Execution
Operator runs: gtm-orchestrator run --client acme --brief briefs/spring.md
The 15-stage pipeline fires. Stages 1-4 run fully automated — companies discovered, normalized, MX-filtered, ICP-qualified, contacts found. The operator's first touch point is Stage 5:
Checkpoint 1 — Enrichment Selection (Stage 5)
Pipeline pauses (exit 5). Operator opens checkpoint.json, picks enrichments (LinkedIn scrape, recent news, funding, etc.), then runs gtm-orchestrator resume. Clay and lg-llm-runtime sub-runners execute the selected enrichments.
Checkpoint 2 — Segmentation Tiebreak (Stage 6)
LLM assigns each lead to a segment. Leads below the confidence threshold land in tiebreak.csv. Operator assigns ambiguous leads manually, resumes. Each segment gets its own subcampaigns/<slug>/leads.csv.
Checkpoint 3 — Copy Selection (Stage 7)
Dual-agent copy runs: Braun (prospect-voice) writes 2 variants, campaign-copywriter writes 2 more. Operator opens selection.yaml, picks a winner per segment (or provides custom copy), resumes. Stage 7b then personalizes each lead with AI-generated situation_line, value_line, and cta_soft.
Checkpoint 4 — QA Review (Stage 8)
Rendered QA checks sample emails with real lead data. Self-annealing loop auto-fixes spam words. Mechanical checks catch variable syntax errors and lead-data quality issues. If clean, variables convert to Bison format automatically. If not, operator reviews qa_findings.yaml.
Checkpoint 5 — Scorecard (Stage 85)
List quality scored on 8 dimensions. Grade C+ proceeds automatically. Grade D pauses for review. Grade F hard-blocks — the list isn't ready.
Produces: final_copy.yaml — Bison-ready copy in single-brace format, per-segment lead CSVs, full cost breakdown.
Bison Launch
Stage 9 runs 7 substages automatically: creates one Bison campaign per segment, uploads the 3-email sequence with custom variables, lists connected inboxes for operator selection (checkpoint), uploads leads in 500-lead batches, routes leads to campaigns, and verifies campaign settings match standards.
Then the hard gate: launch_confirmation.yaml presents a full pre-launch summary — segment counts, inbox assignments, sequence preview, settings verification. The operator must set operator_confirms: true and sign their name. There is no auto-launch pathway.
Produces: Live Bison campaigns — one per segment, sending 3-email sequences with per-lead personalization.
Replies + Retrospective
Operator runs: gtm-orchestrator score-replies <campaign_dir>
Reply classifier scores incoming replies into 9 categories (interested, meeting-booked, objection, not-now, wrong-person, unsubscribe, auto-reply, negative, other) using a graduated prompt. SHA-256 dedup prevents double-scoring.
Retrospective engine writes outcomes.md with per-segment breakdown: reply rate, interest rate, meeting rate, and comparison against the 1% baseline. Feeds learnings back into the next campaign's research and strategy.
Produces: outcomes.md — segment performance breakdown, what worked, what to change.
What the client folder looks like after
icp-profile.yaml ← Step 1
research/acme-takeover-playbook.md ← Step 2
campaign-strategy.yaml ← Step 3
briefs/spring-outbound.md ← Step 4 (frozen)
campaigns/spring-outbound/ ← Steps 5-7
campaign.db ← SQLite state (truth)
stages/
01-discover/ 02-normalize/ 03-qualify/
04-people/ 05-enrich/ 06-segment/
07-copy/ 08-qa/ 09-launch/
subcampaigns/
saas-founders/leads.csv
agency-owners/leads.csv
outcomes.md ← Step 7
Commands + Exit Codes
Commands
run <campaign_dir> — start or resume
run --dry-run — simulate Bison calls
resume <campaign_dir> — after checkpoint edit
status <campaign_dir> — per-stage costs
score-replies <campaign_dir> — post-launch
Exit Codes
0 — Success
5 — CheckpointPending (edit + resume)
6 — StandardsVerificationFailed
7 — Scorecard hard-block (grade F)