company-deep-dive
Company Deep Dive
360° company research powered by Nimble's web data APIs.
User request: $ARGUMENTS
Before running any commands, read references/nimble-playbook.md for Claude Code
constraints (no shell state, no &/wait, sub-agent permissions, communication style).
Instructions
Step 0: Preflight
Run the preflight pattern from references/nimble-playbook.md (5 simultaneous Bash
calls: date calc, today, CLI check, profile load, index.md load).
From the results:
- CLI missing or API key unset →
references/profile-and-onboarding.md, stop - Profile exists → note it for context (company name helps frame the research). Read
~/.nimble/memory/companies/index.mdto check if the target company already has prior research. Follow[[path/entity]]cross-references to load related context.- Prior research exists: Load it. Run in refresh mode — focus on what's new since the last report date. Tell the user: "I have prior research on [Company] from [date]. Refreshing with latest data."
- No prior research: Run in full mode — comprehensive across all dimensions.
- No profile → that's fine. Company deep dive doesn't require onboarding (unlike competitor-intel). Proceed directly to Step 1.
Step 1: Identify Target Company
Parse the target company from $ARGUMENTS or the user's message.
If clear (e.g., "research Stripe", "tell me about Datadog"):
- Extract the company name
- Run two Bash calls simultaneously to confirm identity:
nimble search --query "[Company] official site" --max-results 3 --search-depth litenimble search --query "[Company] company overview" --max-results 5 --search-depth lite
- Confirm briefly: "Researching [Company] ([domain])..."
If ambiguous (e.g., "research Mercury" — could be bank, auto, or other):
- Ask one clarifying question with the top candidates
If missing — ask: "Which company would you like me to research?"
Scope selection — if the user hasn't specified depth, default to full deep dive. If they say "quick overview", "brief", or "summary", run a quick mode that skips the Deep Extraction step and produces a shorter report.
Step 2: WSA Discovery
Discover available WSAs for the target company's domain. Run both searches simultaneously:
nimble agent list --search "{company-domain}" --limit 20
nimble agent list --search "{company-name}" --limit 20
From the results, filter for WSAs with entity_type matching SERP or PDP, and
prefer managed_by: "nimble". Validate each with
nimble agent get --template-name {name}, then cache discovered WSA names + params
for the run. Pass them to dimension agents in Step 3 for enrichment alongside
nimble search. If no WSAs found, continue with nimble search alone.
Step 3: Parallel Research Across Dimensions (sub-agents)
Read references/dimension-agent-prompt.md for the full agent prompt template.
Follow the sub-agent spawning rules from references/nimble-playbook.md
(bypassPermissions, batch max 4, explicit Bash instruction, fallback on failure).
Spawn nimble-researcher agents (agents/nimble-researcher.md) with
mode: "bypassPermissions". Each agent researches one dimension of the company.
Pass discovered WSA names from Step 2 to each agent so they can use them for
enrichment alongside nimble search.
Important: The Nimble API has a 10 req/sec rate limit per API key. With each agent running 4-5 searches in parallel, limit concurrent agents to 2 per batch to stay under the limit. Run overview searches in their own phase, not alongside agent batches.
Call estimation & Scaled Execution: Before launching agents, estimate total API
calls: 2 overview searches + ~5 searches per agent × 5 agents = ~27 calls. Each agent
should use extract-batch or agent run-batch for 11+ calls instead of individual
calls. See the Scaled Execution pattern in references/nimble-playbook.md for tier
selection.
Phase A — Overview searches (run directly, before agents):
nimble search --query "about" --include-domain '["[domain]"]' --max-results 3 --search-depth litenimble search --query "[Company] Wikipedia OR Crunchbase OR Pitchbook" --max-results 5 --search-depth lite
These give foundational context (founding date, HQ, employee count, mission) that frames all dimensional findings.
Phase B — Batch 1 (2 agents simultaneously):
| Agent | Dimension | Focus |
|---|---|---|
| 1 | Funding & Financials | Funding rounds, valuation, revenue signals, investors, financial health |
| 2 | Product & Technology | Products, tech stack, recent launches, engineering blog, open-source |
Phase C — Batch 2 (2 agents simultaneously):
| Agent | Dimension | Focus |
|---|---|---|
| 3 | Leadership & Team | Founders, C-suite, key hires, departures, team size, culture signals |
| 4 | Recent News & Events | Press coverage, announcements, partnerships, awards, conferences |
Phase D — Batch 3 (1 agent):
| Agent | Dimension | Focus |
|---|---|---|
| 5 | Market Position | Competitors, market share, positioning, analyst coverage, customer reviews |
Refresh mode adjustment: If prior research exists, pass the known facts to each
agent as context so they focus on what's new. Agents should use --start-date to
filter for recent data only.
Fallback: If any agent fails or returns empty, run those dimension searches directly from the main context. Don't leave gaps in the report.
Step 4: Deep Extraction
From all agents' results, identify the top 5-8 most informative URLs across dimensions. Prioritize:
- Funding announcements with specific amounts
- Official product/feature pages
- Executive interviews, podcast appearances, or conference talks
- In-depth analyst or journalist profiles
- The company's own about/team page
Make one Bash call per URL, all simultaneously:
nimble extract --url "https://..." --format markdown
For extraction failures, follow the fallback in references/nimble-playbook.md.
Quick mode: Skip this step entirely. Report from search snippets only.
WSA enrichment: If WSAs were discovered in Step 2, use them here for richer
extraction on key URLs before falling back to nimble extract.
Step 5: Synthesize Report
Structure the output as a 360° Company Report:
# [Company Name] — Deep Dive
*As of [today's date]*
## Quick Assessment
[2-3 sentence verdict: what this company is, where they stand, and the one thing
that matters most right now. This is the "if you read nothing else" paragraph.]
## Company Overview
- Founded: [year] | HQ: [location] | Employees: [estimate]
- Domain: [domain] | Industry: [industry]
- Mission/focus: [one line]
## Funding & Financials
[Latest round, total raised, key investors, valuation signals, revenue indicators.
Every claim dated and sourced.]
## Leadership & Team
[Founders, C-suite, notable recent hires or departures. Executive perspectives
on company direction — direct quotes when available from interviews or talks.]
## Product & Technology
[Core products, recent launches, tech stack signals, engineering culture,
open-source contributions. What they're building and how.]
## Market Position
[Key competitors, differentiation, market share signals, analyst perspectives,
customer sentiment from reviews (G2/Capterra/Reddit).]
## Recent News & Events
[Chronological, most recent first. Each entry dated with source.]
## Strategic Outlook
[Synthesis across all dimensions: where the company is heading, key risks,
growth signals, and strategic bets. This is insight, not summary.]
## Sources
[Numbered list of all URLs cited in the report]
Core rules:
- Every factual claim must have a date and source URL.
- Lead with the Quick Assessment — most readers stop there.
- Say "no public data found" for a dimension rather than speculating.
- Distinguish between confirmed facts and inferred signals.
- Executive quotes add credibility — include direct quotes from interviews, earnings calls, or conference talks when found.
- In refresh mode: lead with "What's New Since [last date]" before the full sections.
Step 6: Save to Memory
Make all Write calls simultaneously:
- Report →
~/.nimble/memory/reports/company-deep-dive-[date].md - Company profile →
~/.nimble/memory/companies/[company-name-slug].md(use the format inreferences/memory-and-distribution.md). Add[[path/entity]]cross-references for key people discovered (e.g.,[[people/jane-smith]]), competitors in the same space (e.g.,[[competitors/widgetco]]), and any other related entities. - If profile exists → update
last_runs.company-deep-divein~/.nimble/business-profile.json - Follow the wiki update pattern from
references/memory-and-distribution.md: updateindex.mdrows for all affected entity files, append alog.mdentry for this run.
The company profile in companies/ should contain structured key facts (overview,
financials, leadership, products) that can be loaded by future runs of any skill
that needs context on this company.
Step 7: Share & Distribute
Always offer distribution — do not skip this step. Follow
references/memory-and-distribution.md for connector detection, sharing flow, and
source links enforcement.
Step 8: Follow-ups
- Go deeper on a dimension → focused searches on that topic
- Compare with another company → side-by-side analysis
- "What about [specific topic]?" → targeted search + extraction
- "Looks good" → done
Sibling skill suggestions:
Next steps:
- Run
competitor-intelto track this company as a competitor over time- Run
meeting-prepif you're meeting with someone at this company- Run
competitor-positioningto analyze their messaging vs yours
Agent Teams Mode (Dual-Mode)
Check at startup: echo $CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS
Team mode (flag set): Spawn 3 teammates instead of sub-agents. Each teammate covers related dimensions and can message the others to cross-check findings.
| Teammate | Dimensions | Cross-checks with |
|---|---|---|
| Financials & News | Funding, revenue, recent news, events | Market (valuation vs positioning) |
| Product & Leadership | Products, tech stack, founders, key hires | Financials (pivots vs funding) |
| Market | Competitors, positioning, reviews, analysts | Product (differentiation claims) |
Lead (you): Create shared tasks, wait for all teammates to complete, then synthesize the final report. When a teammate finds a claim that another should verify (e.g., a funding amount that implies a valuation), it posts a task for the relevant teammate.
Solo mode (flag not set): Standard sub-agent flow from Step 3.
What This Skill Is NOT
- Not competitor monitoring. For tracking multiple competitors over time, use
competitor-intel. This skill goes deep on ONE company. - Not meeting prep. For researching people you're meeting with, use
meeting-prep. This skill researches companies, not individuals. - Not financial advice. This is intelligence gathering from public sources, not investment analysis or due diligence certification.
- Not real-time monitoring. This produces a point-in-time report. For ongoing
tracking, run it again later or use
competitor-intelwith the company added.
Error Handling
See references/nimble-playbook.md for the standard error table (missing API key, 429,
401, empty results, extraction garbage). Skill-specific errors:
- Search 500: Retry once without
--focusflag. If still failing, retry with a simplified query (shorter terms, no date filter). Log the failure but don't skip the dimension. - Search timeout: Retry once, then skip that call and continue — consistent with the playbook's timeout policy.
- Company not found: Retry with domain, alternative names, or parent company
- Empty results for a dimension: Note "No public data found" — don't speculate