tam-sizer
Size the total addressable market (TAM) for an Ideal Customer Profile (ICP) using ZoomInfo's verified company database. Iteratively refine the firmographic and technographic filter set with the user until the account universe matches their intent — then return both the count and the working filter set that other skills (build-list, score-accounts) can consume. Use for territory and capacity design, investor-ready market sizing, and ICP sharpening. Triggers on phrases like "size the market", "TAM for", "addressable market", "how many companies match", "is my ICP too broad/narrow", "refine my ICP filters".
What this skill does
# TAM Sizer
Iteratively refine a company-level ICP filter set against ZoomInfo's company database. Each pass returns a count, a banded sizing read, labelled sample views, and concrete refinement options. Terminates when the user finalizes — output is both the count and a structured filter-set artifact ready for `build-list`, `score-accounts`, or `find-similar`.
## When to use
- **`tam-sizer`** — user wants count + shape + working filter set, willing to iterate.
- **`build-list`** — filter set already settled; user wants the exportable list.
- **`find-similar`** — user has a seed account, not a filter-based market.
## Scope
TAM here = **company count** AND **working filter set**, both first-class outputs.
This skill does NOT size contacts. Buyer-persona criteria ("CTOs", "VP Sales") are recorded but NOT applied to the count — they describe who you sell *into*, not who the account *is*. Persona discovery is `build-list` / `search-contacts` once the filter set is settled.
## Input
- **ICP description (recommended)** — natural language, OR "my ICP" / "our ICP" / nothing (fall back to `get_gtm_context`).
- **Use case (optional)** — *territory design* / *investor sizing* / *ICP sharpening* (default).
- **SAM hypothesis inputs (optional)** — `addressable_fraction` (0–1) and `arpa_usd`.
## Workflow
### 1. Pull GTM context (always)
Call `get_gtm_context(detailed: true)` first. Use throughout — for filter defaults when the user is vague, sanity-check expectations on the sample, and refinement recommendations. If empty, proceed with user filters only and surface the absence.
### 2. Parse + merge ICP
Reconcile user text and GTM context. User text wins direct conflicts ("SF" overrides GTM's "North America"); GTM fills gaps. Tag every dimension as `user-specified` / `inherited from GTM` / `unspecified`. Persona criteria recorded but not applied.
### 3. Disambiguate ambiguous regions BEFORE the search
- **"EU"** can mean **European Union (27 countries)** or **Europe (continent)** — `continent: Europe` includes Russia, Turkey, UK, Switzerland, Norway. Ask one clarifying question if "EU" is unclarified.
- "Asia" includes Russia; "Americas" vs "North America" vs "US/Canada" — confirm if uncertain.
### 4. Lookup all filter values
Call `lookup` to resolve free text to standardized values. Don't guess.
`lookup` with multi-field `fuzzyMatch` may return empty data for the second field — call once per fieldName when using `fuzzyMatch`.
| Field | `fieldName` | Notes |
|---|---|---|
| Industries | `industries` | Passed to `search_companies` by `attributes.name` (e.g., `"Software"`), not `id`. Narrow to sub-industries (`"Customer Relationship Management (CRM) Software"`) over top-level. |
| Employee bands | `employee-count` | Enum values (`50to99`, etc.) in `employeeCount`. |
| Revenue bands | `revenue-ranges` | Or `revenueMin`/`revenueMax` (thousands USD). |
| Geography | `metro-regions` / `states` / `countries` / `continents` | |
| Technographics | `tech-vendors` → `tech-products` filtered by `vendor` | |
| NAICS / SIC | `naics-codes` / `sic-codes` | |
| Rankings | `company-rankings` | |
#### Taxonomy-gap gate (mandatory)
For every industry term (user-supplied or from GTM context), call `lookup industries fuzzyMatch=<term>` first.
- **≥1 match** → use the resolved industry name in `industryCodes`.
- **0 matches** → **do NOT silently fall back to `industryKeywords`.** Surface: *"No matching industry in ZI's taxonomy for `<term>`."* Recommend one of: (a) seed company + `find-similar`, (b) external list import via a company-match service, (c) explicit confirmation to proceed with `industryKeywords` knowing the noise risk. Wait for user confirmation.
Common gaps: climate-tech, sustainability, cleantech, sales-engagement, RevOps, agentic-AI, vector-databases.
### 5. Get the count
`search_companies` with resolved filters, `pageSize: 1`. Use `meta.totalResults`.
`meta.fieldResolution` does NOT echo continent / revenueMin/Max / fundingAmountMin/Max / employeeRangeMin/Max — always populate "Filters Applied" from input parsing.
#### Data-sparsity probe (mandatory when funding/revenue filters applied)
ZI's coverage of `fundingAmountMin/Max`, `fundingStartDate/EndDate`, `revenueMin/Max` is sparse for many segments. A filter collapsing the count to 0 may be a data gap, not a narrow ICP.
1. Run count **with** filter (`count_filtered`).
2. Run count **without** the funding/revenue filter (`count_unfiltered`), other filters intact.
3. If `count_filtered / count_unfiltered < 0.1` (filter drops >90%):
- Treat as **data-sparse**, not narrow ICP.
- Use `count_unfiltered` as **operative TAM** for banding.
- Surface: *"ZI's coverage of [field] is sparse for this segment. Filtered: X. Operative TAM: Y (unfiltered)."*
4. Otherwise: `count_filtered` is the operative TAM.
Both numbers always shown.
### 6. Classify the sizing band
| TAM size | Band | Read |
|---|---|---|
| > 50,000 | **Too broad** | Probably not operational. |
| 5,000 – 50,000 | **Healthy enterprise/mid-market** | Suggest tier segmentation. |
| 1,000 – 5,000 | **Sweet spot** | Focused primary-tier list. |
| 250 – 1,000 | **Tight/niche** | Flag capacity feasibility. |
| < 250 | **Too narrow** | Coverage risk; suggest widening. |
### 7. Fetch representative-account sample (two views)
`search_companies` twice in parallel, each `pageSize: 12`:
- **Trophy view** — default sort. ZI's internal ranking (revenue-biased). Biggest logos.
- **Anchor view** — `sort: "-employeeCount"`. Largest by headcount.
`search_companies.sort` does NOT support `relevance` — only `name` / `employeeCount` / `revenue` and `-` variants. Dedupe by `companyId`; label each row with its view.
### 8. Directional shape sample + noise rate
`search_companies` with `pageSize: 100`, default sort. **Revenue-skewed — NOT a census.** Use for:
- **ICP sanity check** — do top names look like the ICP, or contain conglomerate/BPO/staffing noise?
- **Geographic + sub-industry shape** — directionally useful even when revenue is biased.
- **Noise-rate estimation** — count rows in top 25 that visibly don't match the ICP. Rate = `noisy_rows / 25`.
Do NOT compute revenue-band or employee-band % from this sample. Skip the directional table entirely when TAM > 50,000.
#### Noise-adjusted TAM (mandatory when noise ≥20%)
- `tam_noise_adjusted = round(raw_count × (1 − noise_rate), 2 sig figs)`.
- Re-classify the band against `tam_noise_adjusted`.
- Cite specific noisy samples ("of top 25, 6 are wineries / solar installers").
- Report order: `raw count → noise rate → adjusted TAM → band`.
20–60% noise is common for keyword-fallback or taxonomy-gap searches — a stronger signal to revisit the filter set than to ship the count.
### 9. SAM hypothesis (only if both inputs supplied)
- SAM count = TAM × `addressable_fraction`
- SAM revenue = SAM count × `arpa_usd`
- Label: *Hypothesis, not forecast.*
### 10. Self-check before output
- ☑ Headline count to ≤2 sig figs.
- ☑ Taxonomy gap gate cleared — every industry term resolved via `lookup`, OR user explicitly confirmed `industryKeywords` proceed.
- ☑ Data-sparsity probe run when funding/revenue filters applied.
- ☑ Noise-adjusted TAM computed when top-25 noise ≥20%.
- ☑ Every unspecified dimension flagged from input parsing (not `fieldResolution`).
- ☑ GTM-inherited filters labeled separately from user-specified.
- ☑ Persona criteria marked "not applied to company TAM."
- ☑ Both sample views shown, labeled.
- ☑ Directional shape only if count ≤ 50k; no revenue/employee % bands ever.
- ☑ Refinement names specific dimension + estimated post-refinement count.
- ☑ Region disambiguation resolved.
### 11. Present refinement options + loop
- **Too broad (>50k)** → 2–3 narrowing options with estimated impact.
- **Too narrow (<250)** → 2–3 widening options.
- **Healthy band** → tier segmentation OR finalize.
- **Always** → offer "save filters" exit to chain targets.
Re-run from step 4 when filter changesRelated in Design
contribute
IncludedLocal-only OSS contribution command center. Auto-refreshes the user's in-flight PR and issue state on invoke so conversations start with full context — no need to brief Claude on what's in flight. Helps the user find issues to contribute to on GitHub, builds per-repo dossiers of what each upstream expects (CLA, DCO, branch convention, AI policy, draft-first, review bots, issue templates), runs deterministic gates before any external action so AI-assisted contributions don't reach maintainers as slop. State is markdown-only: candidate files at ~/.contribute-system/candidates/, repo dossiers at ~/.contribute-system/research/, append-only event log at ~/.contribute-system/log.jsonl. No database, no cloud calls. Use when the user asks about their PRs / issues / contributions, wants to find new work to take on, claim an issue, build/refresh a repo's dossier, or draft a Design Issue or PR. Trigger with "/contribute", "what's my PR status", "find a contribution", "claim issue X", "draft a Design Issue for Y", "refresh dossier for Z".
architectural-analysis
IncludedUser-triggered deep architectural analysis of a codebase or scoped subtree across eight modes — information architecture, data flow, integration points, UI surfaces, interaction patterns, data model, control flow, and failure modes. This skill should be used when the user asks to "diagram this codebase," "map the architecture," "show the data flow," "give me an ERD," "trace control flow," "find the integration points," "verify the layout pattern," "audit the UX architecture," or any similar request whose primary deliverable is mermaid diagrams plus cited reports under docs/architecture/. Dispatches haiku/sonnet sub-agents in parallel for per-mode exploration, then verifies every citation mechanically before any node lands in a diagram. Not for one-off prose explanations of code (use code-explanation) or for high-level system design from scratch (use system-design).
mcp
IncludedModel Context Protocol (MCP) server development and tool management. Languages: Python, TypeScript. Capabilities: build MCP servers, integrate external APIs, discover/execute MCP tools, manage multi-server configs, design agent-centric tools. Actions: create, build, integrate, discover, execute, configure MCP servers/tools. Keywords: MCP, Model Context Protocol, MCP server, MCP tool, stdio transport, SSE transport, tool discovery, resource provider, prompt template, external API integration, Gemini CLI MCP, Claude MCP, agent tools, tool execution, server config. Use when: building MCP servers, integrating external APIs as MCP tools, discovering available MCP tools, executing MCP capabilities, configuring multi-server setups, designing tools for AI agents.
react-native-skia
IncludedDesign, build, debug, and optimise high-polish animated graphics in React Native or Expo using @shopify/react-native-skia, Reanimated, and Gesture Handler. Use when the user wants canvas-driven UI, shaders, paths, rich text, image filters, sprite fields, Skottie, video frames, snapshots, web CanvasKit setup, or performance tuning for custom motion-heavy elements such as loaders, hero art, cards, charts, progress indicators, particle systems, or gesture-driven surfaces. Also use when the user asks for fluid, glow, glass, blob, parallax, 60fps/120fps, or GPU-friendly animated effects in React Native, even if they do not explicitly say "Skia". Do not use for ordinary form/layout work with standard views.
plaid
IncludedProduct Led AI Development — guides founders from idea to launched product. Six capabilities: Idea (discover a product idea), Validate (pressure-test the idea against fatal flaws, problem reality, competition, and 2-week MVP feasibility), Plan (vision intake + document generation), Design (translate image references into a design.md spec), Launch (go-to-market strategy), and Build (roadmap execution). Use when someone says "PLAID", "plaid idea", "help me find an idea", "product idea", "idea from my business", "idea from my expertise", "plaid validate", "validate my idea", "pressure-test", "is this idea good", "find fatal flaws", "validate the problem", "plan a product", "define my vision", "generate a PRD", "product strategy", "plaid design", "design from image", "translate image to design", "create design.md", "extract design tokens", "plaid launch", "go-to-market", "launch plan", "GTM strategy", "launch playbook", "plaid build", "build the app", "start building", or "execute the roadmap".
nextjs-framer-motion-animations
IncludedAdds production-safe Motion for React or Framer Motion animations to Next.js apps, including reveal, hover and tap micro-interactions, whileInView, stagger, AnimatePresence, layout and layoutId transitions, reorder, scroll-linked UI, and lightweight route-content transitions. Use when the user asks to add, refactor, or debug Motion or Framer Motion in App Router or Pages Router codebases, especially around server/client boundaries, reduced motion, LazyMotion, bundle size, hydration, or route transitions. Avoid for GSAP-style timelines, WebGL or 3D scenes, heavy scroll storytelling, or CSS-only effects unless Motion is explicitly requested.