← NimbleCONTENT HISTORY

Update to Nimble

Snapshot Sep 30, 2026 · 22:54 UTC · version 1.7.0

Collection source: not recorded for this historical snapshot.

WHAT CHANGED · RULE-BASED ANALYSIS

First saved snapshot

No earlier snapshot is available to establish a change.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "name": "competitor-intel",
  "description": "Searches the live web via Nimble APIs to monitor competitors and produce a\nstructured intelligence briefing. Runs parallel searches for news, product\nlaunches, hiring signals, and funding — then compares against previous\nfindings to highlight only what's new.\n\nUse this skill when the user asks about competitors, competitive intelligence,\nor what rival companies are doing. Common triggers: \"what are my competitors\ndoing\", \"competitor update\", \"competitor news\", \"competitive landscape\",\n\"market intel\", \"what's new with [company]\", \"track [company]\", \"competitor\nbriefing\", \"who's making moves\", \"competitive analysis\", \"losing deals to\n[company]\", \"battlecard\". Also use before board meetings or strategy sessions\nwhen the user wants competitive context.\n\nRequires the Nimble CLI (nimble search, nimble extract) for live web data.\nDo NOT use for single-company deep dives (use company-deep-dive), meeting\nprep with attendees (use meeting-prep), or non-business queries.\n",
  "included_files": [
    {
      "relative_path": "references/competitor-agent-prompt.md",
      "size_in_bytes": 3051
    },
    {
      "relative_path": "references/memory-and-distribution.md",
      "size_in_bytes": 22058
    },
    {
      "relative_path": "references/nimble-playbook.md",
      "size_in_bytes": 37015
    },
    {
      "relative_path": "references/profile-and-onboarding.md",
      "size_in_bytes": 9344
    }
  ],
  "skill_md_contents": "---\nname: competitor-intel\ndescription: |\n  Searches the live web via Nimble APIs to monitor competitors and produce a\n  structured intelligence briefing. Runs parallel searches for news, product\n  launches, hiring signals, and funding — then compares against previous\n  findings to highlight only what's new.\n\n  Use this skill when the user asks about competitors, competitive intelligence,\n  or what rival companies are doing. Common triggers: \"what are my competitors\n  doing\", \"competitor update\", \"competitor news\", \"competitive landscape\",\n  \"market intel\", \"what's new with [company]\", \"track [company]\", \"competitor\n  briefing\", \"who's making moves\", \"competitive analysis\", \"losing deals to\n  [company]\", \"battlecard\". Also use before board meetings or strategy sessions\n  when the user wants competitive context.\n\n  Requires the Nimble CLI (nimble search, nimble extract) for live web data.\n  Do NOT use for single-company deep dives (use company-deep-dive), meeting\n  prep with attendees (use meeting-prep), or non-business queries.\nallowed-tools:\n  - Bash(nimble:*)\n  - Bash(date:*)\n  - Bash(cat:*)\n  - Bash(mkdir:*)\n  - Bash(python3:*)\n  - Bash(echo:*)\n  - Bash(jq:*)\n  - Bash(ls:*)\n  - Read\n  - Write\n  - Edit\n  - Glob\n  - Grep\n  - Agent\n  - AskUserQuestion\nmetadata:\n  author: Nimbleway\n  version: 1.6.1\n  category: business-research\n---\n\n# Competitor Intelligence\n\nReal-time competitive intelligence powered by Nimble's web data APIs.\n\nUser request: $ARGUMENTS\n\n**Before running any commands**, read `references/nimble-playbook.md` for Claude Code\nconstraints (no shell state, no `&`/`wait`, sub-agent permissions, communication style).\n\n---\n\n## Instructions\n\n### Step 0: Preflight\n\nFollow the transport selection + standard preflight from `references/nimble-playbook.md` — pick CLI or MCP at session start, then run the standard preflight calls (date calc, today, profile, memory index) in parallel.\n\nFrom the results:\n- CLI missing or API key unset → `references/profile-and-onboarding.md`, stop\n- Tag all `nimble` CLI calls: `nimble --client-source nimble-agent-skills <subcommand>`. MCP requests are attributed at the transport level — see `references/nimble-playbook.md`.\n- Profile exists → read `~/.nimble/memory/competitors/index.md` to identify which\n  competitor files exist and their last-updated dates. If the index doesn't exist\n  (first run or upgrade), fall back to reading all `~/.nimble/memory/competitors/*.md`\n  directly — the index is an optimization, not a gate. Then load the relevant\n  competitor files for known signals\n  (used for dedup in Steps 3 + 5). Follow cross-references (`[[path/entity]]` links)\n  to load related context. Determine mode using smart date windowing\n  from `references/nimble-playbook.md`:\n  - **Full mode:** first run OR last run > 14 days ago\n  - **Quick refresh:** last run < 14 days ago\n  - **Same-day repeat:** if `last_runs.competitor-intel` is today, check if a report\n    already exists at `~/.nimble/memory/reports/competitor-intel-[today].md`. If so,\n    ask: \"Already ran today. Run again for fresh data?\" Don't silently re-run.\n  - Skip to Step 2\n- No profile → Step 1\n\n**Note:** Step 2 (WSA Discovery) runs after onboarding but before any research.\n\n### Step 1: First-Run Onboarding (2 prompts max)\n\n**Prompt 1** — ask in plain text (NOT AskUserQuestion with options):\n\n> \"What's your company's website domain? (e.g., acme.com)\"\n\nVerify — make two Bash calls simultaneously:\n\n- `nimble search --query \"[domain]\" --include-domain '[\"[domain]\"]' --max-results 3 --search-depth lite`\n- `nimble search --query \"[domain] company\" --max-results 5 --search-depth lite`\n\n**Prompt 2** — confirm company + choose competitor method (use AskUserQuestion):\n\n> I found that **[Company]** ([domain]) is [brief description].\n> Is this right? And how should I find your competitors?\n> - **Yes — find competitors for me**\n> - **Yes — I'll list them myself**\n> - **Wrong company — let me clarify**\n\nIf \"find competitors\", make three Bash calls simultaneously:\n\n- `nimble search --query \"[Company] competitors\" --max-results 10 --search-depth lite`\n- `nimble search --query \"[Company] vs\" --max-results 10 --search-depth lite`\n- `nimble search --query \"[Company] alternatives\" --max-results 5 --search-depth lite`\n\nPropose the list. Once the user confirms, create the profile and start Steps 2+3.\nWhen creating the profile, also ask for or infer each competitor's domain and the\nuser's industry keywords. See `references/profile-and-onboarding.md` for the full\nprofile schema (company, competitors with domains/categories, industry_keywords,\nintegrations, preferences).\n\n### Step 2: WSA Discovery\n\nFor each competitor domain and the user's domain, discover available WSAs:\n\n```bash\nnimble extract:templates list --limit 100  # then filter items for \"{domain}\"\n```\n\nRun one search per domain simultaneously. From the results, filter for WSAs with\n`entity_type` matching SERP or PDP, prefer `managed_by: \"nimble\"`, and validate\neach with `nimble extract:templates get --extract-template-name {name}`. Cache discovered WSA names +\nparams for the run. Use discovered WSAs alongside `nimble search` in Steps 3-4\nfor richer data. If no WSAs found, continue with `nimble search` alone.\n\n### Step 3: Research the User's Company\n\nUse `--include-domain` to avoid noise from generic company names. Make two Bash calls:\n\n- `nimble search --query \"product updates OR changelog OR releases\" --include-domain '[\"[company-domain]\"]' --start-date \"[start-date]\" --max-results 5 --search-depth lite`\n- `nimble search --query \"[UserCompany] news\" --focus news --start-date \"[start-date]\" --max-results 5 --search-depth lite`\n\n**Fallback if < 3 results:** `nimble search --query \"blog\" --include-domain '[\"[company-domain]\"]' --max-results 5 --search-depth lite`\n\n### Step 4: Parallel Research Per Competitor (sub-agents)\n\nRead `references/competitor-agent-prompt.md` for the full agent prompt template.\nFollow the sub-agent spawning rules from `references/nimble-playbook.md`\n(bypassPermissions, batch max 4, explicit Bash instruction, fallback on failure).\n\nSpawn `nimble-researcher` agents (`agents/nimble-researcher.md`) with\n`mode: \"bypassPermissions\"`. Customize the prompt template with each competitor's\nname, domain, start-date, known signals from memory (loaded in Step 0), and any\ndiscovered WSA names from Step 2 so agents can use them for enrichment.\n\n**Call estimation & Scaled Execution:** Before launching agents, estimate total API\ncalls: ~6 searches per competitor × N competitors + ~2 industry searches + extractions.\nFor 2+ competitors (12+ calls), tell agents to use `extract-batch` for page extractions\ninstead of individual calls. See the Scaled Execution pattern in\n`references/nimble-playbook.md` for tier selection.\n\nAlso run **industry searches** directly (not in sub-agents), using `industry_keywords`\nfrom the business profile:\n\n- `nimble search --query \"[industry_keyword] AI agents OR automation\" --focus news --start-date \"[start-date]\" --max-results 5 --search-depth lite`\n- `nimble search --query \"[industry_keyword] regulation OR compliance OR pricing\" --focus news --start-date \"[start-date]\" --max-results 5 --search-depth lite`\n\n### Step 5: Deep Extraction\n\nExtract signals that need date verification OR richer detail. See\n`references/nimble-playbook.md` → \"Signal Date Validation\" → \"Verification Budget\"\nfor the full rules.\n\n**Must extract:**\n- All P1 signals (funding, M&A, leadership) — need confirmed details AND date verification\n- Any signal with `DATE_CONFIDENCE: LOW` — event date needs verification from page content\n- Any signal where `SOURCE_TYPE: DERIVATIVE` — confirm the event date from the actual\n  page content\n\n**Extract if useful:**\n- P2 signals where the snippet lacks a date or key detail\n\n**Skip:** P3 signals with `DATE_CONFIDENCE: HIGH`.\n\nMake one Bash call per URL, all simultaneously:\n\n`nimble extract --url \"https://...\" --format markdown`\n\nFor extraction failures, follow the fallback in `references/nimble-playbook.md`.\n\nWhen reading extracted content, determine the **actual event date** from the article body\n(not just the page header date). Look for: explicit dates tied to the event, temporal\nlanguage (\"last September\", \"in Q3\"), and datelines.\n\n### Step 5.5: Signal Validation\n\nBefore building the report, validate every signal's freshness. See\n`references/nimble-playbook.md` → \"Signal Date Validation\" for the full pattern.\n\n**For each signal from Step 3, classify it:**\n\n| Check | Result | Action |\n|---|---|---|\n| EVENT_DATE within freshness window + not in memory | **NEW** | Include |\n| EVENT_DATE within window + updates a known signal | **UPDATED** | Include as update |\n| EVENT_DATE outside freshness window | **STALE** | Drop — old event, new article |\n| DATE_CONFIDENCE: LOW + couldn't verify in Step 4 | **UNCERTAIN** | Drop with note |\n\n**P1 corroboration (mandatory)** — any P1 signal with `NEEDS_CORROBORATION: true` MUST\nbe corroborated before it can enter the report. This is a hard gate, not a suggestion.\n\nFor each flagged P1, run:\n\n`nimble search --query \"[Company] [event summary]\" --max-results 5 --search-depth lite`\n\nLook for the **primary source** (company blog, press release, official filing). If the\nprimary source dates the event outside the freshness window, reclassify as STALE.\nIf no primary source is found, reclassify as UNCERTAIN and drop.\n\n**Drop rules:**\n- Event date is outside the freshness window → STALE\n- Only sourced from derivative/aggregator sites with no corroborating primary or major\n  outlet → UNCERTAIN, drop unless verified via extraction\n- Content clearly describes a past event (temporal language like \"last year\", \"back in Q3\",\n  \"months ago\") with event date outside the window → STALE\n\nAfter validation, you should have a clean list of NEW and UPDATED signals only.\n\n### Step 6: Analysis & Output\n\n**Full mode** (first run or > 14 days since last) — structured briefing:\n\n- **TL;DR** — 3-5 P1 signals, most recent first, every one dated with source\n- **Per competitor** — \"Recent\" and \"Older Context\" subsections, \"Where They Win\n  vs. Where You Win\" table, \"What This Means\" (1-2 sentences)\n- **Industry Trends** — signals from industry searches\n- **Your Company Update** — releases/news from Step 2\n- **Cross-Competitor Patterns** — converging trends\n- **What This Means for [Company]** — strategic implications + suggested actions\n\n**Quick refresh mode** (last run < 14 days) — short format:\n\n- **New Signals** — dated, with competitor name, priority, and clickable source URL\n- **Nothing New** — list competitors with no new signals\n- **Action Items** — only if something requires attention\n\n**Core rules:**\n- Every signal MUST have a verified **event date**. Only events that happened within the\n  freshness window qualify as new signals — older events are background context.\n- Only include signals classified as NEW or UPDATED in Step 5.5. STALE and UNCERTAIN\n  signals have already been dropped.\n- Deduplicate against `~/.nimble/memory/competitors/*.md` — only surface NEW findings.\n- Say \"nothing notable this period\" rather than padding with fluff.\n- P3 signals: mention briefly or omit if report is long.\n\n### Step 7: Save & Update Memory\n\n**Only persist signals that passed Step 5.5 validation** (classified as NEW or UPDATED).\nDo not write STALE or UNCERTAIN signals to competitor memory files.\n\nMake all Write calls simultaneously:\n\n- Report → `~/.nimble/memory/reports/competitor-intel-[date].md` (save the **full\n  briefing**, not a summary — this is the local source of truth)\n- Per competitor → append validated signals to `~/.nimble/memory/competitors/[name].md`\n  (use the format documented in `references/memory-and-distribution.md`). Add\n  `[[path/entity]]` cross-references for relationships discovered during research\n  (e.g., key people → `[[people/name]]`, related competitors → `[[competitors/name]]`).\n- Profile → update `last_runs.competitor-intel` in `~/.nimble/business-profile.json`\n- Follow the wiki update pattern from `references/memory-and-distribution.md`: update\n  `index.md` rows for all affected entity files, append a `log.md` entry for this run.\n\n### Step 7.5: Synthesis Page Generation\n\nIf 3+ competitors were researched in this run, OR the existing\n`~/.nimble/memory/synthesis/competitive-landscape.md` has stale source timestamps\n(source entity files were updated since generation), generate or refresh the synthesis\npage.\n\nUse the `nimble-analyst` agent (`agents/nimble-analyst.md`) with\n`mode: \"bypassPermissions\"` to synthesize patterns across all competitor files. The\nagent should read all `~/.nimble/memory/competitors/*.md` files and produce a\n`competitive-landscape.md` following the format in\n`references/memory-and-distribution.md` — market map, feature comparison, pricing\ncomparison, key patterns, and strategic implications. Cite source entity files with\n`[[competitors/name]]` links.\n\nAlso append any unanswered questions to `~/.nimble/memory/backlog.md`\n(e.g., competitors where key data like pricing or funding is missing).\n\nAfter generating, update `index.md` with the synthesis page entry.\n\n### Step 8: Share & Distribute\n\n**Always offer distribution — do not skip this step.** Follow\n`references/memory-and-distribution.md` for connector detection, sharing flow, and\nsource links enforcement.\n\n### Step 9: Follow-ups\n\n- **Go deeper** on a competitor → more focused searches\n- **Skip a competitor** → update `preferences.skip_competitors`\n- **Add a competitor** → update `competitors`, create memory stub\n- **\"Looks good\"** → done\n\n**Sibling skill suggestions:**\n\n> **Next steps:**\n> - Run `competitor-positioning` to analyze how competitors present themselves online\n> - Run `company-deep-dive` for a full 360 profile on any competitor from this report\n> - Run `meeting-prep` if you're meeting with someone at a competitor\n\n---\n\n## Agent Teams Mode (Dual-Mode)\n\nCheck at startup: `echo $CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`\n\n**Team mode** (flag set): Spawn full **teammates** instead of sub-agents:\n\n- **Lead** (you): Assign competitors, synthesize the final briefing\n- **One teammate per competitor**: Uses `references/competitor-agent-prompt.md` with discovered WSAs —\n  teammates can message each other when they find overlapping signals\n- **Devil's Advocate** (optional): Challenges findings, looks for blind spots\n- Lead synthesizes a **cross-validated** briefing with higher confidence\n\n**Solo mode** (flag not set): Standard sub-agent flow from Step 3.\n\n---\n\n## Error Handling\n\nSee `references/nimble-playbook.md` for the standard error table (missing API key, 429,\n401, empty results, extraction garbage). Skill-specific errors:\n\n- **Search 500:** Retry once without `--focus` flag. If still failing, retry with a\n  simplified query (shorter terms, no date filter). Log the failure but don't skip\n  the competitor.\n- **Search timeout:** Retry once, then skip that call and continue — consistent with\n  the playbook's timeout policy.\n"
}

SHA-256: 967c54e9dada4428e2d1443131212faa6d865e8d62c64642574bc2d7aade64b2