$npx -y skills add MoizIbnYousaf/marketing-cli --skill company-researchResearch companies, competitors, funding, news, leadership, and market context with Exa Agent and advanced search. Use when researching companies, competitor analysis, market research, or building company lists. Writes findings the caller can fold into brand/competitors.md or bra
| 1 | ## On Activation |
| 2 | |
| 3 | 1. Read `brand/positioning.md`, `brand/competitors.md`, and `brand/audience.md` if present. Ground queries in the brand's category and known competitors. All optional. |
| 4 | 2. Confirm Exa MCP Agent tools or `EXA_API_KEY`. If missing, stop with the install hint from Prerequisites / `mktg doctor`. |
| 5 | 3. Default to Exa Agent for deep dives and lists; use advanced search only for quick single lookups. |
| 6 | 4. When `/cmo` or a research agent owns the brand write, return structured findings + sources - do not silently overwrite `brand/competitors.md` unless the user asked to update brand memory. |
| 7 | |
| 8 | # Company Research |
| 9 | |
| 10 | |
| 11 | ## mktg runtime note |
| 12 | |
| 13 | Prefer **Exa MCP** when available (tools: `web_search_exa`, `web_search_advanced_exa`, `web_fetch_exa`, `agent_run`). |
| 14 | If MCP Agent tools use the older create/wait/get names (`agent_create_run`, `agent_wait_for_run`, `agent_get_run_output`), use those equivalently. |
| 15 | Without MCP, call the HTTP API with `x-api-key: $EXA_API_KEY` (`POST https://api.exa.ai/search`, `/contents`, `/agent`). |
| 16 | Firecrawl remains the path for deep scrape of a **known URL** after Exa discovery. |
| 17 | |
| 18 | |
| 19 | ## Tool Selection (Critical) |
| 20 | |
| 21 | Two Exa surfaces, two jobs: |
| 22 | |
| 23 | - **Exa Agent** (`agent_run`, or legacy `agent_create_run` / `agent_wait_for_run` / `agent_get_run_output`) - the default for company research. Use it for deep dives, competitor analysis, multi-angle research (product + funding + news + people), and building company lists. One Agent run handles query decomposition, multi-step searching, and synthesis internally - do not orchestrate many manual searches for work an Agent run covers. |
| 24 | - **`web_search_advanced_exa`** - quick, low-latency lookups: a fast `category: "company"` discovery pass, a single news check, or finding a homepage. |
| 25 | |
| 26 | Do NOT use other Exa tools. |
| 27 | |
| 28 | ## Deep Dives and Lists: Exa Agent |
| 29 | |
| 30 | Agent runs are async: create the run, wait for it, then read the output. |
| 31 | |
| 32 | 1. `agent_create_run` with a natural-language `query` and, when you want repeatable structure, an `outputSchema` (bound arrays with `maxItems`). Returns an `agent_run_...` ID. |
| 33 | 2. `agent_wait_for_run` until the run is `completed` (call again if still running). |
| 34 | 3. `agent_get_run_output` - read `output.text` or `output.structured`, plus `output.grounding` citations. |
| 35 | |
| 36 | Useful inputs: `systemPrompt` (source preferences, dedup rules), `input.exclusion` (companies to avoid), `previousRunId` (follow-up runs), `effort` (`"auto"` default; `"high"` for hard research). |
| 37 | |
| 38 | ### Example: company deep dive |
| 39 | |
| 40 | ``` |
| 41 | agent_create_run { |
| 42 | "query": "Research Anthropic: product lines, funding history and valuation, key executives, main competitors, and notable news from the last 6 months.", |
| 43 | "effort": "auto", |
| 44 | "outputSchema": { |
| 45 | "type": "object", |
| 46 | "properties": { |
| 47 | "overview": { "type": "string" }, |
| 48 | "funding": { "type": "array", "maxItems": 10, "items": { "type": "object", "properties": { "round": { "type": "string" }, "amount": { "type": "string" }, "date": { "type": "string" } }, "required": ["round"] } }, |
| 49 | "competitors": { "type": "array", "maxItems": 10, "items": { "type": "string" } }, |
| 50 | "key_people": { "type": "array", "maxItems": 10, "items": { "type": "object", "properties": { "name": { "type": "string" }, "title": { "type": "string" } }, "required": ["name", "title"] } } |
| 51 | }, |
| 52 | "required": ["overview", "competitors"] |
| 53 | } |
| 54 | } |
| 55 | ``` |
| 56 | |
| 57 | ### Example: build a company list |
| 58 | |
| 59 | ``` |
| 60 | agent_create_run { |
| 61 | "query": "Find 25 AI infrastructure startups headquartered in San Francisco. For each, include what they build and their latest funding stage.", |
| 62 | "effort": "auto", |
| 63 | "outputSchema": { |
| 64 | "type": "object", |
| 65 | "properties": { |
| 66 | "companies": { |
| 67 | "type": "array", |
| 68 | "maxItems": 25, |
| 69 | "items": { |
| 70 | "type": "object", |
| 71 | "properties": { |
| 72 | "name": { "type": "string" }, |
| 73 | "website": { "type": "string", "format": "uri" }, |
| 74 | "description": { "type": "string", "description": "in 12 words or less" }, |
| 75 | "funding_stage": { "type": "string" } |
| 76 | }, |
| 77 | "required": ["name", "website", "description"] |
| 78 | } |
| 79 | } |
| 80 | }, |
| 81 | "required": ["companies"] |
| 82 | } |
| 83 | } |
| 84 | ``` |
| 85 | |
| 86 | ## Quick Lookups: Advanced Search |
| 87 | |
| 88 | Use `web_search_advanced_exa` when a single fast sea |