Runcastle

Competitor Teardown & Positioning Brief

MIT0 downloads

by runcastle

v1.0.0
Homepage ↗

Fans out an analyst agent per competitor to fetch and dissect each rival's site — pricing, positioning, messaging, gaps — then a strategist synthesizes the teardowns into a single positioning brief with sharp, defensible angles for your product.

Topology

Disclosures

Disclosures — declared side-effect surface

Everything below runs on your machine or inside the sandbox when you use this workflow. Mismatches between these declarations and the actual code block publishing.

Host hooks

Commands executed on YOUR host machine by Sandcastle lifecycle hooks.

  • cp .env.example .env

Sandbox hooks

Commands executed inside the sandbox container.

None declared.

Network access

Each analyst runs `curl` inside the sandbox to fetch the public HTML of the competitor URL it was assigned. No other hosts are contacted.

Shell expansion

Prompt files contain !`command` blocks — the agent CLI executes these commands at prompt-load time. They are highlighted amber in the prompt files below.

Files

Competitor teardown: {{COMPETITOR_SLUG}}

You are a competitive-intelligence analyst. Tear down a single competitor and write a structured brief. Be specific and cite the evidence you found.

The competitor's landing page

!curl -sL --max-time 30 {{COMPETITOR_URL}}

Your task

Using the fetched HTML above (and only public information), produce a teardown of {{COMPETITOR_SLUG}} ({{COMPETITOR_URL}}). Write it to competitors/{{COMPETITOR_SLUG}}.md with these sections:

  1. One-line positioning — how do they describe themselves above the fold?
  2. Target customer — who is the page written for?
  3. Core value props — the 3–5 benefits they lead with, in their words.
  4. Pricing & packaging — tiers, anchors, free plan / trial, anything you can infer.
  5. Messaging & tone — the vocabulary and emotional angle they lean on.
  6. Proof — social proof, logos, metrics, guarantees they cite.
  7. Gaps & weaknesses — what they under-serve, over-promise, or stay silent on.

Quote the page rather than paraphrasing when the exact wording matters. If the fetch returned little usable content, say so explicitly rather than inventing details. Commit the file with a message like research: teardown {{COMPETITOR_SLUG}}.

When the teardown file is written and committed, output <promise>COMPLETE</promise>.

README

Competitor Teardown & Positioning Brief

Turn a list of competitor URLs into a strategist-grade positioning brief — without spending a day in browser tabs. This workflow fans out one analyst per competitor, tears down each rival's public site, then synthesizes the findings into a single brief with defensible angles you can actually ship copy against.

What it does

You give it a handful of competitor URLs. For each one, a Claude Code analyst fetches the live landing page and dissects it: one-line positioning, target customer, the value props they lead with, pricing and packaging, messaging and tone, the proof they cite, and — most usefully — their gaps and weaknesses. Every teardown is written to competitors/<slug>.md.

A Claude Code strategist then reads all of the teardowns and produces positioning/BRIEF.md: a market map, the white space nobody is serving, 2–3 wedges your product can own (each tied to a specific gap), headline-ready messaging pillars, and the traps to avoid where rivals are strong.

How it works

main.ts fans out the analysts with Promise.all, each on its own research/<slug> branch so the parallel runs never collide. Each analyst pulls its page with a !`curl` block inside the prompt — this is why the manifest discloses network access and shell expansion. The strategist then runs once to synthesize. The topology is a fan-out (analyst ×N → strategist).

Requirements

Set CLAUDE_CODE_OAUTH_TOKEN in .sandcastle/.env (run claude setup-token). Edit the COMPETITORS list at the top of .sandcastle/main.ts to your real rivals. Build the image once with npx @ai-hero/sandcastle docker build-image, then run npx tsx .sandcastle/main.ts. Everything the agents fetch is public web content; nothing is sent anywhere but the model.