Help us improve
Share bugs, ideas, or general feedback.
From gtmvp-gtm-agents
Run a full GTM audit on a brand — orchestrates competitor mapping, brand strategy, SWOT, Porter's, channel scoring, positioning whitespace, war-gaming, MaxSAT synthesis, content calendar, and PDF render into one unified intelligence brief. Takes a URL or brand name as argument.
npx claudepluginhub gtmvp/gtmvp-gtm-agents --plugin gtmvp-gtm-agentsHow this command is triggered — by the user, by Claude, or both
Slash command
/gtmvp-gtm-agents:gtm-audit url-or-brand-nameThe summary Claude sees in its command listing — used to decide when to auto-load this command
# /gtm-audit The flagship orchestration command for this plugin. Pipelines eleven analysis stages into a unified GTM intelligence brief — strategy through execution layer through PDF artifact. ## Argument `$ARGUMENTS` — a website URL (preferred) or brand name. If neither is provided, ask the user before proceeding. ## Pipeline Run these stages in order. Each stage consumes the prior stage's output. **Use the Task tool with `subagent_type` to invoke each agent so they run in isolated context windows.** ### Stage 1 — Crawl + brand context (preflight) Fetch the brand's site (homepage, /...
Share bugs, ideas, or general feedback.
The flagship orchestration command for this plugin. Pipelines eleven analysis stages into a unified GTM intelligence brief — strategy through execution layer through PDF artifact.
$ARGUMENTS — a website URL (preferred) or brand name. If neither is provided, ask the user before proceeding.
Run these stages in order. Each stage consumes the prior stage's output. Use the Task tool with subagent_type to invoke each agent so they run in isolated context windows.
Fetch the brand's site (homepage, /about, /pricing, /features, /customers if present). Extract:
Persist this as the "brand context" — every downstream stage references it.
Invoke competitor-mapper-agent with brand context. Uses the competitor-discovery-cot skill (A3) to apply the cross-shop disqualifier and produce 3-6 defensible competitors, rejected candidates, and whitespace gaps. Block on output.
Invoke brand-strategist-agent with brand context + competitor set. Runs the 6-dimension analysis using the tam-sam-som-horizons skill (C2): market sizing, niche, products, opportunities (quick wins / medium / long), customer journey, brand & messaging.
Apply the swot-analysis skill (B1) to brand using Stage 1+2+3. Produce S/W/O/T quadrants + cross-quadrant priorities with stopDoing fields. Strategic moves emitted here feed Stage 8.
Apply the porters-five-forces skill (C1) to the sub-vertical. Produce five-force scoring + overall attractiveness + strategic implications.
Apply the marketing-channel-scoring skill (A1) against the 28-channel taxonomy in data/channel-taxonomy.json. Produce per-channel scores, rollout plan (now / next quarter / year two), and portfolio check. Active publishing channels feed Stage 10.
Apply /positioning-pass logic with Stage 1+2+3 as input. Score brand + competitors on the 5-dimension positioning space (price_tier, audience_sophistication, feature_depth, channel_fit, defensibility_commitment), set the founder's defensibility envelope, then run the max-min-distance Z3 template to find the provably-optimal positioning vector. Emit:
gtm-output-schemas atomic-claim contractSkip if no clear competitor positioning vectors emerged from Stage 2 — output would be hand-wavy.
Apply /war-game logic with Stage 1+2 + candidate moves drawn from Stage 4 SWOT (O and S quadrants) and Stage 7 positioning alternatives. Auto-infer predicate from move language (pricing → 4a / feature → 4b / channel → 4c); default 4b. Run the quantifier-alternation Z3 template with manual skolemization, 30s timeout, combo-space precheck. Emit:
Skip if Stage 4 produced fewer than 3 candidate strategic moves — nothing to war-game.
After Stages 2-8 complete and before writing the synthesis document, run the MaxSAT step. Replaces naïve recommendation concatenation with a provably-optimal consistent subset.
Claim collection. Scan recommendations from Stages 2-8 (now includes positioning whitespace claims from Stage 7 and war-game durability claims from Stage 8). Accept a claim only if all four MaxSAT fields are present: claimId, atomicClaim, weight (1-10 int), confidence (0.0-1.0 float). Skip incomplete recommendations — do not default missing fields. Collect incompatibleWithClaimIds edges and build incompatible_pairs by mapping claim IDs to their 0-based index.
If fewer than 3 claims pass collection: skip the solver and fall back to prose synthesis. Note "insufficient MaxSAT-ready claims for solver synthesis" at the top.
Solver call (uses solver-maxsat — NOT solver-z3). Consult solver-patterns skill Template 6:
mcp__solver-maxsat__clear_modelmcp__solver-maxsat__add_item(1, ...) — claim data (list of dicts, incompatible_pairs)mcp__solver-maxsat__add_item(2, ...) — WCNF build + RC2 solve + export_solution(result_dict)mcp__solver-maxsat__solve_model(timeout=10000)Parse the result:
selected_claim_ids — render as the synthesis recommendationsdropped_claim_ids — list in the "Filtered claims" appendix with one-line reason (identify the conflicting selected claim if determinable)status == "unsatisfiable" → note "no synthesis-ready claims available; all recommendations require manual review"Apply /content-calendar logic with Stage 7 pillars + Stage 6 active publishing channels as input. If Stage 7 produced fewer than 3 pillars, fall back to brand-context-derived pillars per content-calendar.md's own fallback logic. Run solver-mzn with the assignment-with-diversity template, 30s timeout, feasibility precheck.
Emit the D×P schedule grid, pillar coverage summary, cadence summary, and sensitivity notes. Write JSON sidecar to content-calendar-{brand-slug}-{YYYY-MM-DD}.json.
Skip if the brand explicitly opts out of execution-layer planning (strategic-only audit).
After the synthesis markdown is written, render a PDF artifact alongside it. From PowerShell:
node scripts/report-bundler/bundle.mjs <path-to-synthesis-md>
Stage 11 must:
scripts/report-bundler/bundle.mjs exists. If not, log a warning and report the markdown path only.node is available on PATH.The bundler outputs gtm-audit-{brand-slug}-{YYYY-MM-DD}.pdf next to the markdown.
The solver-z3 MCP server holds shared session state. Stages 2, 3, 4, 5, 6, 7, 8 must all run sequentially — never invoke them from parallel Task sub-agents. Stage 9 (solver-maxsat) and Stage 10 (solver-mzn) each use a different MCP server but the same serial discipline applies: one solver invocation at a time.
After Stage 10 completes, produce a single synthesis document. Only render recommendations that appear in selected_claim_ids from Stage 9. Dropped claims go to the appendix. Section order:
weight × confidence, with explicit stop-doings)Write to gtm-audit-{brand-slug}-{YYYY-MM-DD}.md in the user's current working directory unless specified otherwise. Stage 11 produces gtm-audit-{brand-slug}-{YYYY-MM-DD}.pdf alongside it (when possible).
gtm-output-schemas atomic-claim contract.solver-maxsat is unavailable. Note the skip reason in the synthesis header.scripts/report-bundler/ is missing — markdown stays the primary artifact regardless.The full audit requires three MCP servers and one Node toolchain:
solver-z3 — Stages 2-8 (registered in ~/.claude.json as mcp-solver-z3.exe). Serial: one stage at a time.solver-maxsat — Stage 9 (mcp-solver-maxsat.exe). Without it, Stage 9 falls back to prose with a prominent warning.solver-mzn — Stage 10 (mcp-solver-mzn.exe, MiniZinc on PATH). Without it, Stage 10 is skipped with a note.scripts/report-bundler/bundle.mjs plus its installed Puppeteer dependency. Failure here is non-blocking.Never silently degrade — always state the solver/bundler status at the top of the synthesis document.