← 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": "nimble-databricks-data-products",
  "description": "Builds Databricks data products from live web data, end to end: discovers the right Nimble\nweb-data agents, scrapes into Delta tables, and produces an AI/BI dashboard and/or a deployed\nDatabricks App — a table → dashboard → app workflow, for production data products or quick demos.\nUse whenever a request pairs live or scraped web data WITH a Databricks destination — e.g. \"scrape\nAmazon/Walmart prices into a Delta table and build a dashboard\", \"load Zillow/Instagram/Maps/search\nresults into Databricks and build a dashboard or app\", \"showcase Nimble + Databricks to a prospect\".\nPrefer it over nimble-web-expert or competitor-intel when the data lands in Databricks. Do NOT use\nfor one-off web fetches or CSV exports with no Databricks destination — use nimble-web-expert\ninstead. Do NOT use for competitor or company research briefings — use competitor-intel or\ncompany-deep-dive instead. Do NOT use for generic Databricks work with no Nimble/web-data angle —\nuse the official databricks-* skills instead.\n",
  "included_files": [
    {
      "relative_path": "assets/nimble-logo.png",
      "size_in_bytes": 25427
    },
    {
      "relative_path": "references/app-cookbook.md",
      "size_in_bytes": 4795
    },
    {
      "relative_path": "references/branding.md",
      "size_in_bytes": 2447
    },
    {
      "relative_path": "references/dashboard-cookbook.md",
      "size_in_bytes": 5919
    },
    {
      "relative_path": "references/databricks-skills.md",
      "size_in_bytes": 1944
    },
    {
      "relative_path": "references/install-nimble-integration.md",
      "size_in_bytes": 2544
    },
    {
      "relative_path": "references/nimble-agents.md",
      "size_in_bytes": 11840
    },
    {
      "relative_path": "references/preflight.md",
      "size_in_bytes": 3425
    },
    {
      "relative_path": "scripts/build_dashboard.py",
      "size_in_bytes": 13611
    },
    {
      "relative_path": "scripts/ingest.sh",
      "size_in_bytes": 2390
    }
  ],
  "skill_md_contents": "---\nname: nimble-databricks-data-products\ndescription: |\n  Builds Databricks data products from live web data, end to end: discovers the right Nimble\n  web-data agents, scrapes into Delta tables, and produces an AI/BI dashboard and/or a deployed\n  Databricks App — a table → dashboard → app workflow, for production data products or quick demos.\n  Use whenever a request pairs live or scraped web data WITH a Databricks destination — e.g. \"scrape\n  Amazon/Walmart prices into a Delta table and build a dashboard\", \"load Zillow/Instagram/Maps/search\n  results into Databricks and build a dashboard or app\", \"showcase Nimble + Databricks to a prospect\".\n  Prefer it over nimble-web-expert or competitor-intel when the data lands in Databricks. Do NOT use\n  for one-off web fetches or CSV exports with no Databricks destination — use nimble-web-expert\n  instead. Do NOT use for competitor or company research briefings — use competitor-intel or\n  company-deep-dive instead. Do NOT use for generic Databricks work with no Nimble/web-data angle —\n  use the official databricks-* skills instead.\nallowed-tools:\n  - Bash(databricks:*)\n  - Bash(python3:*)\n  - Bash(bash:*)\n  - Bash(jq:*)\n  - Bash(npm:*)\n  - Read\n  - Write\n  - Edit\n  - AskUserQuestion\n  - Skill\nmetadata:\n  author: Nimbleway\n  version: 1.6.1\n  category: data-platforms\n---\n\n# Nimble on Databricks — data products builder\n\nTurn a natural-language brief like\n`pricing analysis on dog products from walmart and amazon` into working Databricks data products:\n**discover agents → ingest live web search data into Delta → build dashboard and/or app → deliver links.**\nEqually at home for a quick demo or a real, reusable data product.\n\nYou are the orchestrator. Databricks mechanics are delegated to the official `databricks-*`\nskills (see `references/databricks-skills.md`); this skill owns the **Nimble glue and the gaps**\n(agent discovery, ingestion-from-agents, the AI/BI dashboard JSON, branding).\n\n## Golden rules\n\n- **Discover, don't assume.** Read agent names via `nimble_agent_list()`, input params via\n  `nimble_agent_describe('<agent>')`, and output fields by probing one call (`to_json(parsing[0])`) —\n  never hardcode from memory (Amazon search takes `keyword`, not `query`).\n- **Probe before fanning out.** Run one call per source first to learn its localization flag, field\n  names, and value formats — sources differ (some return numeric prices, others currency strings).\n- **One statement per Statements API call.** Multiple `;`-separated statements in one call are a parse error.\n- **Each Bash call is a fresh shell.** Env vars and `cd` don't persist — set them inline. See `references/preflight.md`.\n- **Fail fast, then confirm.** Run Phase 0 preflight first; recommend a warehouse + writable schema, then confirm before writing.\n- **Always ask the deliverable.** Table / +dashboard / +app is a per-run choice.\n- **Branding is always on, neutral.** \"Powered by Nimble\" + light theme + yellow accent. See `references/branding.md`.\n- **Leave artifacts in place.** No teardown.\n- **Show your work and the headline.** End with URLs and the one-sentence insight (e.g. the price gap).\n\n## Workflow\n\nTrack these as todos so nothing is skipped.\n\n### Phase 0 — Preflight (read-only, fail fast)\nLean on the **`databricks-core`** skill for the generic checks.\n1. `databricks current-user me` → confirm auth; capture the username (for the default schema).\n2. Find a **RUNNING** SQL warehouse: `databricks warehouses list`. Prefer one already RUNNING; if none, offer to start one.\n3. **Integration gate** — confirm these exist:\n   `nimble_integration.tools.{nimble_search, nimble_extract, nimble_agent_run, nimble_agent_list, nimble_agent_describe}`.\n   Quick check: `databricks functions list nimble_integration tools`.\n   **If missing → STOP** and walk the user through `references/install-nimble-integration.md`\n   (Nimble cookbook). Do not try to auto-install.\n4. **Recommend + confirm** the target: a warehouse and a writable `catalog.schema`\n   (default `users.<username>`). Verify writability — some shared catalogs deny `CREATE TABLE`.\n   Present the recommendation and let the user confirm or override before writing.\n\nDetails + exact commands: `references/preflight.md`.\n\n### Phase 1 — Interpret the brief + clarify (AskUserQuestion)\nParse the brief into: **domain/entity · search terms · sources · analysis goal**.\nThen ask (batch into one AskUserQuestion call):\n- **Deliverable** — always ask: table / table + dashboard / table + dashboard + app.\n- **Sources** — confirm the agents you matched (e.g. Amazon + Walmart SERP).\n- **Volume** — default ~8–10 search terms, ~100+ rows/source.\n\nKeep the brief's intent (the \"analysis goal\") — it picks the Phase 4 template and the headline.\n\n### Phase 2 — Discover agents + map a unified schema\nSee `references/nimble-agents.md`.\n1. `nimble_agent_list()` via SQL, filter by the source/domain keywords.\n2. For each chosen agent: `nimble_agent_describe('<name>')` → read its input params (required ones,\n   exact names, localization/pagination flags). Output fields come from the §2.5 probe, not here.\n3. Design **one unified table** with a `source` column + a normalized core\n   (`product_name, price, currency, rating, review_count, brand, url, …`), keeping only fields the\n   chosen agents actually emit. Multi-source comparison hinges on the shared columns.\n\n### Phase 3 — Ingest (control table + one set-based call)\nSee `references/nimble-agents.md` for the full SQL. Drive ingestion from a **control table**, not\nper-keyword files — it's reproducible and expandable (add a row, re-run).\n0. **Probe ONE call per source first (fail fast).** Before fanning out, run a single\n   `nimble_agent_run` per source and check: status, the real field names, the localization flag, and\n   whether a price casts cleanly. This catches the Walmart-class surprises (localization, currency-\n   string prices, `product_price` vs `price`) in ~40s instead of after a wasted full round. Highest-\n   leverage step — see `nimble-agents.md` §2.5.\n1. Create a **control (queries) table** `<schema>.<table>_queries` (source, agent, keyword,\n   params_json, localization, enabled) and seed one row per (source × term). `params_json` uses each\n   agent's **real** param name (from `input_properties`); set **localization per agent** (e.g.\n   `amazon_serp` true, `walmart_serp` false).\n2. Create the **unified results table** (`source` column + normalized core + `raw VARIANT`).\n3. Run **one INSERT** that calls `nimble_agent_run(q.agent, q.params_json, q.localization)` via a\n   correlated `LATERAL` join over the control table, with a `/*+ REPARTITION(N) */` hint (N ≈ enabled\n   rows, kept modest — high parallelism can trip API rate limits) so the agent calls run in parallel.\n   It's one long statement → run it async with `bash scripts/ingest.sh <WH> ingest.sql`.\n4. **Reconcile against the control table** (LEFT JOIN): a term that lands no items returns an empty\n   result, and a correlated LATERAL drops empty rows — so reconcile to confirm every source is\n   covered. If a source shows 0, re-check its localization flag (per-agent) and casts before\n   building; see `nimble-agents.md` §6 for the diagnostic order.\n\n### Phase 4 — Build the deliverable(s)\nChoose a **template** from the matched agents' `vertical`/`entity_type`:\n\n| Vertical | Dashboard/app shape |\n|----------|---------------------|\n| Ecommerce (SERP/PDP/CLP) | KPIs; listings & avg price by source/keyword; sponsored share; price-vs-rating scatter; product table with Open links; multi-source → comparison bars + best-effort item-level price gap |\n| Social | volume/engagement by account/post; top-content table; like/follower distributions |\n| Real Estate | price & price/sqft; listings by location; beds/baths breakdowns |\n| Maps / Local | avg rating; review counts; places table |\n| LLM / AEO | source/answer presence; share-of-voice; citation table |\n| _fallback_ | KPIs + 2 categorical bars + the raw table (works off any `output_schema`) |\n\n**Comparison depth (hybrid):** always build the aggregate/category comparison; *additionally* try\nbest-effort item-level matching across sources (normalize brand + key tokens). If confident matches\nexist, add a \"same-product price gap\" view; otherwise keep the aggregate comparison and note that\nitem-level matching wasn't confident.\n\n- **Dashboard** → use `scripts/build_dashboard.py` (compact spec → valid `serialized_dashboard`,\n  create + publish). It bakes in every Lakeview gotcha. Read `references/dashboard-cookbook.md` for\n  the spec format and recipes.\n- **App** → follow `references/app-cookbook.md` (delegates scaffold/deploy to `databricks-apps`;\n  adds the Nimble-specific SQL, branding, and the numeric-string / light-mode gotchas).\n- **Branding** → `references/branding.md` (always applied).\n\n### Phase 5 — Verify, deliver & share\n- Publish the dashboard / confirm the app is `RUNNING`; collect URLs.\n- Summarize what was built and the **headline insight** (the comparison takeaway).\n- **Offer to share** the dashboard/app link — if a Slack or Notion connector is available, offer to\n  post it there (Slack = the link + headline; Notion = a short dated page). Mention once; don't nag.\n- **Suggest next steps** with sibling skills, e.g. `competitor-intel` / `company-deep-dive` for\n  business signals on the brands surfaced, or `nimble-web-expert` for a one-off deeper pull.\n- Offer iterations (more charts, item-level matching, theming, a scheduled refresh job).\n\n## Reference map\n- `references/databricks-skills.md` — which official `databricks-*` skill to use per phase.\n- `references/install-nimble-integration.md` — setup when the integration gate fails.\n- `references/preflight.md` — auth, warehouse, writable-schema discovery (exact commands).\n- `references/nimble-agents.md` — discovery, schema mapping, ingestion SQL + gotchas.\n- `references/dashboard-cookbook.md` — Lakeview JSON recipes + every gotcha (authoritative).\n- `references/app-cookbook.md` — AppKit demo app glue + gotchas.\n- `references/branding.md` — \"Powered by Nimble\", logo, colors.\n- `scripts/ingest.sh` — async statement fan-out + poll.\n- `scripts/build_dashboard.py` — compact spec → create + publish a dashboard.\n- `assets/nimble-logo.png` — the Nimble mark for app branding.\n"
}

SHA-256: 2e352aeaeb02dc7f9690ae4a26ef7bbbd2b500202cb9b55953506b5c6a821c33