Agent skill
hypo-generator
Use when Viktor wants to generate outreach hypotheses for an IT agency client from a website URL or text brief.
Filed under Prospecting and list building.
From victor-shulga/gtm-skills · 6 skill entries · 0 · pushed 2026-09-24
What it does when it runs
Use when Viktor wants to generate outreach hypotheses for an IT agency client from a website URL or text brief. Performs Phase 1 (extract services / ICP / use cases / case studies from the client's site) + Phase 2 (build a 10-hypothesis matrix of 2-3 ICP × 2-3 signals × 2-3 offers, each scored with Viktor's 5-factor weighted framework). Trigger when the user says: "генеруй гіпотези для клієнта", "побудуй матрицю гіпотез", "оціни цей агентський сайт", "що тестувати для [клієнт]", "hypothesis generation for agency", "матриця гіпотез по URL", or provides a client URL and asks what campaigns to run. NOT for one-off campaign idea generation when ICP/signals are already known — use hypothesis-builder for that.
Automated analysis of the skill and the 2 files bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.
- Keys and connectors you must supply
- None found.
- Hosts it reaches
- northcrest.example
- Tool permissions it declares
- No
allowed-toolsin the frontmatter. It does act, so it runs under whatever permissions your session already grants. - Actions present in the files
- network
Install it
View source on GitHub ↗git clone --depth 1 --filter=blob:none --sparse https://github.com/victor-shulga/gtm-skills.git /tmp/gtm-skills git -C /tmp/gtm-skills sparse-checkout set "hypo-generator" mkdir -p ~/.claude/skills/hypo-generator cp -R "/tmp/gtm-skills/hypo-generator/." ~/.claude/skills/hypo-generator/
Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗
The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.
The skill
Source on GitHub ↗Reproduced in full from victor-shulga/gtm-skills/blob/c2b2687c889e47d012639c5050168dea85310e4e/hypo-generator/SKILL.md, which is licensed MIT (repository). 1,915 words, 19 headings.
Hypo Generator
Generates a full 10-hypothesis outreach matrix for an IT agency client, starting from a website URL (preferred) or a text brief. Built on Viktor Shulha's two-phase methodology + signals-catalog.md.
Audience for the output: Viktor's client (an IT agency founder or their biz dev team). Hypotheses are framed for their outbound, not for Viktor outreaching to them.
Required input
One of:
- A client URL (preferred) — agency's main marketing site
- A text brief — what the agency does, who they sell to, where, recent cases
Optional (always welcome):
- Geographic priorities or no-go regions
- Industries to focus on or avoid
- 1-3 case studies with numeric outcomes (preferred for proof)
- Current state of outbound (none / ad-hoc / has SDR / has agency)
Workflow
Phase 1 — Discovery (do this first, before any hypotheses)
If a URL was provided:
- WebFetch the homepage. Extract:
- Services / capabilities (what they sell — design, custom dev, mobile, AI, etc.)
- Vertical / industry focus (who they sell to today)
- Geographic indicators (HQ, team distribution, sales markets)
- Case studies with quantified outcomes — note the client logos and any numbers
- Existing positioning ("we help X achieve Y by Z")
- Team size / company size proxies (about page, careers page)
- Tech stack signals (technologies mentioned in case studies)
- If the homepage references
/case-studies,/services,/industries— WebFetch one or two of these for deeper context. - Note explicit gaps: anything critical you still don't know.
If a text brief was provided: extract the same fields from it; flag missing fields.
Phase 1.5 — Ask clarifying questions (only if needed)
Use AskUserQuestion to fill only critical gaps. Don't over-ask. Likely candidates:
- Geo priority — if site doesn't make it clear, ask: US / UK / EU / DACH / LATAM / no preference?
- No-go segments — anything they explicitly won't sell to (e.g., crypto, gambling)?
- Best case study to use as proof — which 1-2 cases have actual numeric outcomes (revenue lifted, time saved, conversion improved)?
- Current outbound state — none / has SDR / has agency / has tried & burned
Skip questions you can answer from the site. Maximum 4 questions in one batch.
Phase 2 — Build the hypothesis matrix
-
Read
signals-catalog.md(in this skill folder) — this is your signals library. Don't invent signals; pick from the catalog.Operational pairing: this skill is the STRATEGY layer (which signal × ICP × offer to bet on). For the OPERATIONS layer — how to detect a chosen signal (which tool, Clay credit cost, freshness/decay window), how to score accounts that have it, and which signal-to-action GTM play to fire — use the
agency-signal-sourcerskill (resources/detection-tools.md⭐,scoring.md,gtm-plays.md). Itsdetection-tools.mddirectly informs the "Easy to scrape" factor in Phase 3, and itstaxonomy.mdcan surface NEW signals worth adding tosignals-catalog.md. -
Define 2-3 ICPs based on Phase 1 findings. Each ICP = (industry × company size × geo). Examples: "US fintech series A-B, 50-200 ppl"; "UK D2C ecom, 20-100 ppl"; "EU healthtech post-seed, 10-50 ppl".
-
Pick 2-3 signals per ICP from the catalog. Prefer dynamic signals (timing-based, 3-5% TAM) over static data points unless static gives a stronger problem hook.
-
Pick 2-3 offers based on Phase 1 services + use case mapping. Each offer = (service + outcome) → e.g., "Discovery + MVP in 90 days for fintech founders launching a new product line".
-
Cross-combine into exactly 10 hypotheses. Don't list all 27 possible combos — diversify across ICP × signal × offer so no two hypotheses are too similar.
-
For each hypothesis, fill these 12 fields (matching Viktor's Hypothesis Report Template):
Field What goes here #H01–H10 Hyp nameShort label: "Fintech Series A — new product launch — Discovery+MVP" ICPIndustry + size, in one line Persona (primary)Title of the person you'll target first Buying committee2-3 other roles that influence the deal, in a sub-bullet GeoRegion(s) SubindustryMore granular vertical if relevant ProblemThe expensive, specific problem they have (1-2 sentences) Buying signalThe trigger from signals-catalog.md you're using OfferThe service/outcome framing Case study / ProofWhich of the agency's cases you'd use as proof (with the actual numeric outcome) TAMEstimated account count + brief reasoning ("US fintech Series A-B, 50-200 ppl ≈ 800-1500 per LinkedIn") Test batchRecommended initial outreach size: usually 200-500 accounts
Phase 3 — Score every hypothesis
Apply Viktor's 5-factor weighted model exactly. Each factor scored 1, 3, or 5:
| Factor | Weight | Scoring rules |
|---|---|---|
| Easy to scrape | 0.15 | 5 = signal is trivially detectable in Clay / LinkedIn / BuiltWith / Crunchbase. 3 = requires LLM enrichment or moderate effort. 1 = manual review needed or signal lives only in private data. |
| Scaling possibility | 0.15 | 5 = TAM > 3,000 and signal fires for 5%+ of TAM continuously. 3 = TAM 300-3,000 OR signal is infrequent. 1 = TAM < 300 OR signal fires rarely. |
| Clear & expensive problem | 0.25 | 5 = problem causes obvious revenue/cost pain ("AEs spending 40% time prospecting"). 3 = problem is real but not urgent. 1 = problem is theoretical or "nice to have". |
| Offer relevance | 0.20 | 5 = the agency has the exact case study + capability for this ICP + signal combo. 3 = adjacent fit, would require slight repositioning. 1 = stretch — agency doesn't have proof or capability here. |
| Trivial trigger | 0.25 | 5 = signal is unambiguous and almost always means the buyer has the problem ("posted SDR role 4 weeks ago, then withdrew it"). 3 = signal is suggestive but not deterministic ("growing team"). 1 = signal is weak / generic / could mean many things. |
Total score = Σ(score × weight). Range: 1.0 — 5.0.
Verdict thresholds:
- Total > 3.5 → "Run first" — high conviction, start with 500+ batch
- Total 3.0 – 3.5 → "Worth testing" — start with 200-300 batch, iterate fast
- Total < 3.0 → "Skip or rework" — at least one factor is fundamentally broken
Each individual score must include a one-line justification ("Trivial trigger = 3: 'recent funding round' is detectable but not all funded companies need outbound help right now").
Phase 4 — Generate the report
Output a single Markdown document in this order:
# Hypothesis Report — [Client name]
Generated: YYYY-MM-DD · Source: [URL or "text brief"]
## Executive summary
- Strongest hypothesis: H0X — [name] — total score [X.X] — [one-line why]
- Weakest hypothesis kept: H0X — [name] — total score [X.X] — [why included anyway]
- Recommended starting batch: [H01, H03, H07] — total addressable accounts ≈ [X]
- Key risk in this client's portfolio: [one observation, e.g., "all 10 lean on Series A funding — concentration risk"]
## Phase 1 — What I extracted from the site
- **Services:** [list]
- **Existing use cases:** [list]
- **Vertical / industry signals:** [list]
- **Case studies with numbers:** [list with quantified outcomes]
- **Gaps I had to ask about:** [list]
## Summary table (all 10, sorted by score)
| # | Hypothesis | ICP | Persona | Signal | Offer | Final Score | Verdict |
|---|---|---|---|---|---|:---:|---|
| H01 | [short name] | [industry + size + geo] | [title] | [signal in plain words, e.g. "Hiring a BDR + sales is founder-led" — NOT the catalog ID] | [offer] | 4.70 | ✅ Run first |
| ... | ... | ... | ... | ... | ... | ... | ... |
Rules for this table:
- **Signals in plain words, never catalog IDs.** Write "New sales leader joined in last 90 days", not "A3/C5". The ID lives only in the detailed card below.
- **Final score only** — no per-factor breakdown in this table (that stays in the detailed cards).
- Verdict: ✅ Run first (>3.5) · ⚠️ Worth testing (3.0–3.5) · ❌ Skip/rework (<3.0).
- End with one line: **Старт: [H0X · H0X · H0X]** — the highest-conviction batch.
## Hypotheses (sorted by total score, descending)
### H01 — [Hyp name] — Total: 4.2 ✅ Run first
| Field | Value |
|---|---|
| ICP | ... |
| Persona (primary) | ... |
| Buying committee | • Title 1 (role) <br> • Title 2 (role) |
| Geo | ... |
| Subindustry | ... |
| Problem | ... |
| Buying signal | ... (from signals-catalog.md: section X) |
| Offer | ... |
| Case study / Proof | ... |
| TAM | ... |
| Test batch | ... |
**Scoring:**
- Easy to scrape: 5 (0.75) — [reason]
- Scaling: 5 (0.75) — [reason]
- Clear & expensive problem: 5 (1.25) — [reason]
- Offer relevance: 3 (0.60) — [reason]
- Trivial trigger: 5 (1.25) — [reason]
- **Total: 4.60 / 5.0**
---
[Repeat for H02 ... H10]
## Post-launch reference (Kill / Optimize / Scale)
After running a hypothesis with at least 200 accounts:
- **Kill:** reply rate < 1% OR interest rate (positive replies / all replies) < 17% → hypothesis disproven, find new signal or angle
- **Optimize:** interest rate 17–30% → potential. Test new copy angles, refine data filters, keep running
- **Scale:** interest rate > 30% → validated. Add LinkedIn channel, increase volume, promote to Tier 1
Speed of testing > polish. Get 3 hypotheses live in 7 days, not 1 hypothesis perfected in 30.
## Next steps
1. Validate TAM numbers in Apollo / Sales Navigator
2. Build account lists in Clay using the signals listed above
3. Draft copy variants for top 3 hypotheses
4. Set up tracking: reply rate + interest rate per hypothesis (not per campaign)
Language
Default: Ukrainian (Viktor's clients are mostly Ukrainian-speaking IT agencies). Switch to English only if the source URL/brief is in English AND Viktor explicitly asks for English output.
The signals catalog itself stays in English (it's a reference).
Hard rules
- Never invent signals. Every "Buying signal" field must reference one from
signals-catalog.md. If a real-world signal applies but isn't in the catalog, add it to the catalog first with a note "(new, added YYYY-MM-DD, needs validation)" before using it. - Never invent case studies. If the site doesn't show a case with numeric outcome for an ICP, write
Proof: TBD — no matching case study on site, recommend adding onein that hypothesis. Don't fabricate. - TAM must include reasoning. "≈800-1500 accounts" alone is unacceptable; always add the source ("US fintech 50-200 ppl per LinkedIn Sales Nav filters").
- No more, no fewer than 10 hypotheses. Discipline forces prioritization.
- Diversity check before finalizing: if two hypotheses share both ICP and signal, replace one. Don't ship near-duplicates.
- Each score needs a one-line reason. Bare numbers are useless for Viktor's review.
References in this skill folder
signals-catalog.md— the canonical signals/data-points library to draw fromexamples/example-report.md— one full sample report to anchor formatting expectations
Files bundled with it
These load only when the skill asks for them, so they cost nothing until it runs.
Need help setting it up?
This page tells you what hypo-generator does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.
Book a call →The directory stays free. There is nothing gated behind this.