[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-databricks-databricks-app-design":3,"mdc-3gtt3i-key":36,"related-repo-databricks-databricks-app-design":882,"related-org-databricks-databricks-app-design":990},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":32,"sourceUrl":34,"mdContent":35},"databricks-app-design","design UX for Databricks AppKit applications","Design the UX of custom-code Databricks Apps (AppKit\u002FReact) data screens — KPI\u002Foverview pages, reports, charts, tables, and Genie\u002Fchat data assistants — mapped to concrete AppKit components. Use when BUILDING or reviewing the UI of an AppKit\u002FReact app that displays data or answers data questions: choosing genre, layout, charts, KPIs, semantic color, required states (loading\u002Fempty\u002Ferror), IBCS notation, and AI-result trust (showing generated SQL\u002Fsources for Genie\u002Fchat). A plain \"create a dashboard\" request means a managed AI\u002FBI (Lakeview) dashboard → use databricks-aibi-dashboards, NOT this skill. Also NOT for non-data frontend (forms, settings, auth, marketing) or scaffolding\u002Fbuild\u002Fdeploy (→ databricks-apps). Complements databricks-apps; use it alongside whenever a custom app has a chart, table, KPI, report, or Genie\u002Fchat\u002FAI surface.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"databricks","Databricks","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fdatabricks.png",[12,16,17,20,23],{"name":13,"slug":14,"type":15},"React","react","tag",{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},"UI Components","ui-components",{"name":21,"slug":22,"type":15},"Frontend","frontend",{"name":24,"slug":25,"type":15},"Design","design",204,"https:\u002F\u002Fgithub.com\u002Fdatabricks\u002Fdatabricks-agent-skills","2026-07-12T08:04:02.02398",null,60,[],{"repoUrl":27,"stars":26,"forks":30,"topics":33,"description":29},[],"https:\u002F\u002Fgithub.com\u002Fdatabricks\u002Fdatabricks-agent-skills\u002Ftree\u002FHEAD\u002Fplugins\u002Fdatabricks\u002Fcopilot\u002Fskills\u002Fdatabricks-app-design","---\nname: databricks-app-design\nparent: databricks-apps\ndescription: 'Design the UX of custom-code Databricks Apps (AppKit\u002FReact) data screens — KPI\u002Foverview pages, reports, charts, tables, and Genie\u002Fchat data assistants — mapped to concrete AppKit components. Use when BUILDING or reviewing the UI of an AppKit\u002FReact app that displays data or answers data questions: choosing genre, layout, charts, KPIs, semantic color, required states (loading\u002Fempty\u002Ferror), IBCS notation, and AI-result trust (showing generated SQL\u002Fsources for Genie\u002Fchat). A plain \"create a dashboard\" request means a managed AI\u002FBI (Lakeview) dashboard → use databricks-aibi-dashboards, NOT this skill. Also NOT for non-data frontend (forms, settings, auth, marketing) or scaffolding\u002Fbuild\u002Fdeploy (→ databricks-apps). Complements databricks-apps; use it alongside whenever a custom app has a chart, table, KPI, report, or Genie\u002Fchat\u002FAI surface.'\nmetadata:\n  version: 0.1.0\n---\n\n# Data App Design\n\nMake Databricks data + AI apps that communicate clearly and compile to real AppKit code. This\nskill merges two bodies of knowledge and binds them to implementation:\n\n- **Composition** — what to show, how much to abstract, how to lay it out → `references\u002Fdashboard-patterns.md`\n- **Notation** — make comparable things look comparable; honest scales; scenario marks → `references\u002Fibcs-notation.md`\n- **Implementation** — the exact AppKit components, hooks, and tokens to use → `references\u002Fappkit-cheatsheet.md`\n\nDesign advice that doesn't name a real component is incomplete. Always end at a component plan.\n\n## When to use \u002F when NOT\n- USE for: the data screens of a custom-code Databricks App (AppKit\u002FReact) — overview\u002FKPI pages, reports, metric\u002Fontology pages, variance analysis, charts, tables, and Genie\u002FNL data surfaces — design *or* critique.\n- Do NOT use for: authoring managed **AI\u002FBI (Lakeview) dashboards** (→ `databricks-aibi-dashboards`), generic frontend (forms, auth, settings, marketing), or scaffolding\u002Fbuild\u002Fdeploy (→ `databricks-apps`). **A plain \"create a dashboard\" \u002F \"build a dashboard\" request (no app \u002F AppKit \u002F React \u002F custom-code signal) means a managed AI\u002FBI (Lakeview) dashboard → use `databricks-aibi-dashboards`, not this skill.** If a request is \"add a form\", \"deploy this\", or \"build a Lakeview \u002F AI-BI dashboard\", this skill should not fire.\n- Relationship: `databricks-apps` builds\u002Fruns the app; this skill decides what the data screens should look like and which primitives realize them.\n\n## Workflow\n1. **Frame** — audience, the decision\u002Fquestion, refresh cadence, device, primary task. One sentence.\n2. **Genre** — pick the closest from `dashboard-patterns.md` (static \u002F analytic \u002F magazine \u002F infographic \u002F repository \u002F embedded mini). State it.\n3. **Compose** — choose content + composition patterns (data abstraction, meta-info, layout, interaction, color). Make the tradeoff explicit: what's summarized, hidden, paginated, or made interactive — and why.\n4. **Apply notation** — run the relevant `ibcs-notation.md` rules: message-in-title, scenario marks (actual\u002FPY\u002Fplan\u002Fforecast), honest scales, semantic color. On any chart-vocabulary conflict, **IBCS wins** (see the conflict note in that file).\n5. **Bind to components** — map every element to a primitive that's actually **exported from `@databricks\u002Fappkit` \u002F `@databricks\u002Fappkit-ui`** (see `appkit-cheatsheet.md`); never cite a component AppKit doesn't ship. There's no prebuilt KPI\u002Ftrend\u002Fdistribution card — compose those from primitives, following the notation rules. Use `colorPalette` + semantic tokens, never hardcoded hex. Bind data with `useAnalyticsQuery`\u002F`queryKey` + `sql.*` params.\n6. **Cover the states** — every data view must handle loading \u002F empty \u002F error \u002F partial (see checklist).\n7. **Review** — run the checklists in both reference files; lead critiques with the highest-impact comprehension or integrity issue, citing the affected component\u002Ffile.\n\n## Required states & data realism (non-negotiable for data apps)\n- **Loading** → `Skeleton`; **Empty** → `Empty` with a useful next action; **Error** → inline message, never a blank panel; **Partial\u002Fstale** → show what you have + a freshness note.\n- Every KPI shows unit + period + comparison + **freshness\u002Fsource** (mirror the metric definition; don't show a number with no provenance).\n- Large tables → server-side pagination\u002Fsort\u002Ffilter, not client-side over a huge result set.\n- Long-running queries → optimistic loading + timeout\u002Ferror UX.\n\n## AI \u002F Genie surfaces (the \"AI\" half)\n**Gate:** this section applies **only** if the app has a Genie \u002F chat \u002F natural-language \u002F \"ask your data\" surface. For a pure dashboard \u002F KPI \u002F report app with no conversational input, **skip this section and `references\u002Fgenie-ai-trust.md` entirely.** When it does apply, implement ALL five (code in `references\u002Fgenie-ai-trust.md`):\nA Genie\u002Fchat\u002FNL answer is only trustworthy if the user can see how it was produced and who it ran as. \"Use `GenieChat` + a spinner\" is NOT enough — for ANY Genie\u002Fchat surface, ship all five (copy the exact snippets from the reference):\n1. **Identity** — a `\u002Fapi\u002Fwhoami` route (real `x-forwarded-email`\u002F`x-forwarded-user` headers) + the signed-in user in a `Badge`. Claim OBO **only if `user_api_scopes: [dashboards.genie]` is wired**; otherwise disclose the query runs as the app's service principal.\n2. **Generated SQL** — render `attachments[].query` in an inspectable \"Generated SQL\" `Card`; never hide how the answer was computed.\n3. **Streaming\u002Fstatus** — reflect `useGenieChat().status` (`streaming`\u002F`error`), never a frozen spinner.\n4. **Disclaimer** — a persistent \"AI-generated — verify\" note per answer.\n5. **Governance + states** — `genie()` space config + a truthful execution-identity note (OBO when user-scoped, else service principal) + empty\u002Ferror\u002Fambiguous handling (`Empty`, `Alert`).\n\n## Output formats\n\n**Design proposal:**\n```markdown\n## Direction\n[Genre, audience, primary task, design intent.]\n## Pattern & notation choices\n- Composition: [data info, meta info, layout, interaction, color]\n- Notation: [message, scenario marks, scales, semantic color]\n## Component plan        ← the part that makes it buildable\n- [element] → [AppKit component] (queryKey\u002Fprops), [token\u002Fpalette], states handled\n## Tradeoffs & risks\n[What's summarized\u002Fhidden\u002Fpaginated\u002Finteractive; overload, scale, a11y, maintenance risks.]\n```\n\n**Critique:** lead with the top comprehension\u002Fintegrity issue, cite the component\u002Ffile, then list\nfindings by impact, each with the concrete fix (which component\u002Ftoken\u002Fstate to change).\n\n## Anti-patterns\n- Producing a design memo with no component plan.\n- \"Use semantic color\" without naming the token\u002Fpalette.\n- Naming a component AppKit doesn't export (e.g. a prebuilt `KpiCard`) — compose composites from published primitives instead.\n- Adding interaction, pages, or density the task doesn't need (over-engineering a mock-first app).\n- Forgetting loading\u002Fempty\u002Ferror states, or KPIs with no freshness\u002Fsource.\n",{"data":37,"body":41},{"name":4,"parent":38,"description":6,"metadata":39},"databricks-apps",{"version":40},"0.1.0",{"type":42,"children":43},"root",[44,53,59,114,119,126,195,201,359,365,435,441,488,649,655,663,824,834,840,876],{"type":45,"tag":46,"props":47,"children":49},"element","h1",{"id":48},"data-app-design",[50],{"type":51,"value":52},"text","Data App Design",{"type":45,"tag":54,"props":55,"children":56},"p",{},[57],{"type":51,"value":58},"Make Databricks data + AI apps that communicate clearly and compile to real AppKit code. This\nskill merges two bodies of knowledge and binds them to implementation:",{"type":45,"tag":60,"props":61,"children":62},"ul",{},[63,82,98],{"type":45,"tag":64,"props":65,"children":66},"li",{},[67,73,75],{"type":45,"tag":68,"props":69,"children":70},"strong",{},[71],{"type":51,"value":72},"Composition",{"type":51,"value":74}," — what to show, how much to abstract, how to lay it out → ",{"type":45,"tag":76,"props":77,"children":79},"code",{"className":78},[],[80],{"type":51,"value":81},"references\u002Fdashboard-patterns.md",{"type":45,"tag":64,"props":83,"children":84},{},[85,90,92],{"type":45,"tag":68,"props":86,"children":87},{},[88],{"type":51,"value":89},"Notation",{"type":51,"value":91}," — make comparable things look comparable; honest scales; scenario marks → ",{"type":45,"tag":76,"props":93,"children":95},{"className":94},[],[96],{"type":51,"value":97},"references\u002Fibcs-notation.md",{"type":45,"tag":64,"props":99,"children":100},{},[101,106,108],{"type":45,"tag":68,"props":102,"children":103},{},[104],{"type":51,"value":105},"Implementation",{"type":51,"value":107}," — the exact AppKit components, hooks, and tokens to use → ",{"type":45,"tag":76,"props":109,"children":111},{"className":110},[],[112],{"type":51,"value":113},"references\u002Fappkit-cheatsheet.md",{"type":45,"tag":54,"props":115,"children":116},{},[117],{"type":51,"value":118},"Design advice that doesn't name a real component is incomplete. Always end at a component plan.",{"type":45,"tag":120,"props":121,"children":123},"h2",{"id":122},"when-to-use-when-not",[124],{"type":51,"value":125},"When to use \u002F when NOT",{"type":45,"tag":60,"props":127,"children":128},{},[129,142,183],{"type":45,"tag":64,"props":130,"children":131},{},[132,134,140],{"type":51,"value":133},"USE for: the data screens of a custom-code Databricks App (AppKit\u002FReact) — overview\u002FKPI pages, reports, metric\u002Fontology pages, variance analysis, charts, tables, and Genie\u002FNL data surfaces — design ",{"type":45,"tag":135,"props":136,"children":137},"em",{},[138],{"type":51,"value":139},"or",{"type":51,"value":141}," critique.",{"type":45,"tag":64,"props":143,"children":144},{},[145,147,152,154,160,162,167,169,181],{"type":51,"value":146},"Do NOT use for: authoring managed ",{"type":45,"tag":68,"props":148,"children":149},{},[150],{"type":51,"value":151},"AI\u002FBI (Lakeview) dashboards",{"type":51,"value":153}," (→ ",{"type":45,"tag":76,"props":155,"children":157},{"className":156},[],[158],{"type":51,"value":159},"databricks-aibi-dashboards",{"type":51,"value":161},"), generic frontend (forms, auth, settings, marketing), or scaffolding\u002Fbuild\u002Fdeploy (→ ",{"type":45,"tag":76,"props":163,"children":165},{"className":164},[],[166],{"type":51,"value":38},{"type":51,"value":168},"). ",{"type":45,"tag":68,"props":170,"children":171},{},[172,174,179],{"type":51,"value":173},"A plain \"create a dashboard\" \u002F \"build a dashboard\" request (no app \u002F AppKit \u002F React \u002F custom-code signal) means a managed AI\u002FBI (Lakeview) dashboard → use ",{"type":45,"tag":76,"props":175,"children":177},{"className":176},[],[178],{"type":51,"value":159},{"type":51,"value":180},", not this skill.",{"type":51,"value":182}," If a request is \"add a form\", \"deploy this\", or \"build a Lakeview \u002F AI-BI dashboard\", this skill should not fire.",{"type":45,"tag":64,"props":184,"children":185},{},[186,188,193],{"type":51,"value":187},"Relationship: ",{"type":45,"tag":76,"props":189,"children":191},{"className":190},[],[192],{"type":51,"value":38},{"type":51,"value":194}," builds\u002Fruns the app; this skill decides what the data screens should look like and which primitives realize them.",{"type":45,"tag":120,"props":196,"children":198},{"id":197},"workflow",[199],{"type":51,"value":200},"Workflow",{"type":45,"tag":202,"props":203,"children":204},"ol",{},[205,215,233,243,268,339,349],{"type":45,"tag":64,"props":206,"children":207},{},[208,213],{"type":45,"tag":68,"props":209,"children":210},{},[211],{"type":51,"value":212},"Frame",{"type":51,"value":214}," — audience, the decision\u002Fquestion, refresh cadence, device, primary task. One sentence.",{"type":45,"tag":64,"props":216,"children":217},{},[218,223,225,231],{"type":45,"tag":68,"props":219,"children":220},{},[221],{"type":51,"value":222},"Genre",{"type":51,"value":224}," — pick the closest from ",{"type":45,"tag":76,"props":226,"children":228},{"className":227},[],[229],{"type":51,"value":230},"dashboard-patterns.md",{"type":51,"value":232}," (static \u002F analytic \u002F magazine \u002F infographic \u002F repository \u002F embedded mini). State it.",{"type":45,"tag":64,"props":234,"children":235},{},[236,241],{"type":45,"tag":68,"props":237,"children":238},{},[239],{"type":51,"value":240},"Compose",{"type":51,"value":242}," — choose content + composition patterns (data abstraction, meta-info, layout, interaction, color). Make the tradeoff explicit: what's summarized, hidden, paginated, or made interactive — and why.",{"type":45,"tag":64,"props":244,"children":245},{},[246,251,253,259,261,266],{"type":45,"tag":68,"props":247,"children":248},{},[249],{"type":51,"value":250},"Apply notation",{"type":51,"value":252}," — run the relevant ",{"type":45,"tag":76,"props":254,"children":256},{"className":255},[],[257],{"type":51,"value":258},"ibcs-notation.md",{"type":51,"value":260}," rules: message-in-title, scenario marks (actual\u002FPY\u002Fplan\u002Fforecast), honest scales, semantic color. On any chart-vocabulary conflict, ",{"type":45,"tag":68,"props":262,"children":263},{},[264],{"type":51,"value":265},"IBCS wins",{"type":51,"value":267}," (see the conflict note in that file).",{"type":45,"tag":64,"props":269,"children":270},{},[271,276,278,297,299,305,307,313,315,321,323,329,331,337],{"type":45,"tag":68,"props":272,"children":273},{},[274],{"type":51,"value":275},"Bind to components",{"type":51,"value":277}," — map every element to a primitive that's actually ",{"type":45,"tag":68,"props":279,"children":280},{},[281,283,289,291],{"type":51,"value":282},"exported from ",{"type":45,"tag":76,"props":284,"children":286},{"className":285},[],[287],{"type":51,"value":288},"@databricks\u002Fappkit",{"type":51,"value":290}," \u002F ",{"type":45,"tag":76,"props":292,"children":294},{"className":293},[],[295],{"type":51,"value":296},"@databricks\u002Fappkit-ui",{"type":51,"value":298}," (see ",{"type":45,"tag":76,"props":300,"children":302},{"className":301},[],[303],{"type":51,"value":304},"appkit-cheatsheet.md",{"type":51,"value":306},"); never cite a component AppKit doesn't ship. There's no prebuilt KPI\u002Ftrend\u002Fdistribution card — compose those from primitives, following the notation rules. Use ",{"type":45,"tag":76,"props":308,"children":310},{"className":309},[],[311],{"type":51,"value":312},"colorPalette",{"type":51,"value":314}," + semantic tokens, never hardcoded hex. Bind data with ",{"type":45,"tag":76,"props":316,"children":318},{"className":317},[],[319],{"type":51,"value":320},"useAnalyticsQuery",{"type":51,"value":322},"\u002F",{"type":45,"tag":76,"props":324,"children":326},{"className":325},[],[327],{"type":51,"value":328},"queryKey",{"type":51,"value":330}," + ",{"type":45,"tag":76,"props":332,"children":334},{"className":333},[],[335],{"type":51,"value":336},"sql.*",{"type":51,"value":338}," params.",{"type":45,"tag":64,"props":340,"children":341},{},[342,347],{"type":45,"tag":68,"props":343,"children":344},{},[345],{"type":51,"value":346},"Cover the states",{"type":51,"value":348}," — every data view must handle loading \u002F empty \u002F error \u002F partial (see checklist).",{"type":45,"tag":64,"props":350,"children":351},{},[352,357],{"type":45,"tag":68,"props":353,"children":354},{},[355],{"type":51,"value":356},"Review",{"type":51,"value":358}," — run the checklists in both reference files; lead critiques with the highest-impact comprehension or integrity issue, citing the affected component\u002Ffile.",{"type":45,"tag":120,"props":360,"children":362},{"id":361},"required-states-data-realism-non-negotiable-for-data-apps",[363],{"type":51,"value":364},"Required states & data realism (non-negotiable for data apps)",{"type":45,"tag":60,"props":366,"children":367},{},[368,413,425,430],{"type":45,"tag":64,"props":369,"children":370},{},[371,376,378,384,386,391,392,397,399,404,406,411],{"type":45,"tag":68,"props":372,"children":373},{},[374],{"type":51,"value":375},"Loading",{"type":51,"value":377}," → ",{"type":45,"tag":76,"props":379,"children":381},{"className":380},[],[382],{"type":51,"value":383},"Skeleton",{"type":51,"value":385},"; ",{"type":45,"tag":68,"props":387,"children":388},{},[389],{"type":51,"value":390},"Empty",{"type":51,"value":377},{"type":45,"tag":76,"props":393,"children":395},{"className":394},[],[396],{"type":51,"value":390},{"type":51,"value":398}," with a useful next action; ",{"type":45,"tag":68,"props":400,"children":401},{},[402],{"type":51,"value":403},"Error",{"type":51,"value":405}," → inline message, never a blank panel; ",{"type":45,"tag":68,"props":407,"children":408},{},[409],{"type":51,"value":410},"Partial\u002Fstale",{"type":51,"value":412}," → show what you have + a freshness note.",{"type":45,"tag":64,"props":414,"children":415},{},[416,418,423],{"type":51,"value":417},"Every KPI shows unit + period + comparison + ",{"type":45,"tag":68,"props":419,"children":420},{},[421],{"type":51,"value":422},"freshness\u002Fsource",{"type":51,"value":424}," (mirror the metric definition; don't show a number with no provenance).",{"type":45,"tag":64,"props":426,"children":427},{},[428],{"type":51,"value":429},"Large tables → server-side pagination\u002Fsort\u002Ffilter, not client-side over a huge result set.",{"type":45,"tag":64,"props":431,"children":432},{},[433],{"type":51,"value":434},"Long-running queries → optimistic loading + timeout\u002Ferror UX.",{"type":45,"tag":120,"props":436,"children":438},{"id":437},"ai-genie-surfaces-the-ai-half",[439],{"type":51,"value":440},"AI \u002F Genie surfaces (the \"AI\" half)",{"type":45,"tag":54,"props":442,"children":443},{},[444,449,451,456,458,471,473,478,480,486],{"type":45,"tag":68,"props":445,"children":446},{},[447],{"type":51,"value":448},"Gate:",{"type":51,"value":450}," this section applies ",{"type":45,"tag":68,"props":452,"children":453},{},[454],{"type":51,"value":455},"only",{"type":51,"value":457}," if the app has a Genie \u002F chat \u002F natural-language \u002F \"ask your data\" surface. For a pure dashboard \u002F KPI \u002F report app with no conversational input, ",{"type":45,"tag":68,"props":459,"children":460},{},[461,463,469],{"type":51,"value":462},"skip this section and ",{"type":45,"tag":76,"props":464,"children":466},{"className":465},[],[467],{"type":51,"value":468},"references\u002Fgenie-ai-trust.md",{"type":51,"value":470}," entirely.",{"type":51,"value":472}," When it does apply, implement ALL five (code in ",{"type":45,"tag":76,"props":474,"children":476},{"className":475},[],[477],{"type":51,"value":468},{"type":51,"value":479},"):\nA Genie\u002Fchat\u002FNL answer is only trustworthy if the user can see how it was produced and who it ran as. \"Use ",{"type":45,"tag":76,"props":481,"children":483},{"className":482},[],[484],{"type":51,"value":485},"GenieChat",{"type":51,"value":487}," + a spinner\" is NOT enough — for ANY Genie\u002Fchat surface, ship all five (copy the exact snippets from the reference):",{"type":45,"tag":202,"props":489,"children":490},{},[491,547,573,606,616],{"type":45,"tag":64,"props":492,"children":493},{},[494,499,501,507,509,515,516,522,524,530,532,545],{"type":45,"tag":68,"props":495,"children":496},{},[497],{"type":51,"value":498},"Identity",{"type":51,"value":500}," — a ",{"type":45,"tag":76,"props":502,"children":504},{"className":503},[],[505],{"type":51,"value":506},"\u002Fapi\u002Fwhoami",{"type":51,"value":508}," route (real ",{"type":45,"tag":76,"props":510,"children":512},{"className":511},[],[513],{"type":51,"value":514},"x-forwarded-email",{"type":51,"value":322},{"type":45,"tag":76,"props":517,"children":519},{"className":518},[],[520],{"type":51,"value":521},"x-forwarded-user",{"type":51,"value":523}," headers) + the signed-in user in a ",{"type":45,"tag":76,"props":525,"children":527},{"className":526},[],[528],{"type":51,"value":529},"Badge",{"type":51,"value":531},". Claim OBO ",{"type":45,"tag":68,"props":533,"children":534},{},[535,537,543],{"type":51,"value":536},"only if ",{"type":45,"tag":76,"props":538,"children":540},{"className":539},[],[541],{"type":51,"value":542},"user_api_scopes: [dashboards.genie]",{"type":51,"value":544}," is wired",{"type":51,"value":546},"; otherwise disclose the query runs as the app's service principal.",{"type":45,"tag":64,"props":548,"children":549},{},[550,555,557,563,565,571],{"type":45,"tag":68,"props":551,"children":552},{},[553],{"type":51,"value":554},"Generated SQL",{"type":51,"value":556}," — render ",{"type":45,"tag":76,"props":558,"children":560},{"className":559},[],[561],{"type":51,"value":562},"attachments[].query",{"type":51,"value":564}," in an inspectable \"Generated SQL\" ",{"type":45,"tag":76,"props":566,"children":568},{"className":567},[],[569],{"type":51,"value":570},"Card",{"type":51,"value":572},"; never hide how the answer was computed.",{"type":45,"tag":64,"props":574,"children":575},{},[576,581,583,589,591,597,598,604],{"type":45,"tag":68,"props":577,"children":578},{},[579],{"type":51,"value":580},"Streaming\u002Fstatus",{"type":51,"value":582}," — reflect ",{"type":45,"tag":76,"props":584,"children":586},{"className":585},[],[587],{"type":51,"value":588},"useGenieChat().status",{"type":51,"value":590}," (",{"type":45,"tag":76,"props":592,"children":594},{"className":593},[],[595],{"type":51,"value":596},"streaming",{"type":51,"value":322},{"type":45,"tag":76,"props":599,"children":601},{"className":600},[],[602],{"type":51,"value":603},"error",{"type":51,"value":605},"), never a frozen spinner.",{"type":45,"tag":64,"props":607,"children":608},{},[609,614],{"type":45,"tag":68,"props":610,"children":611},{},[612],{"type":51,"value":613},"Disclaimer",{"type":51,"value":615}," — a persistent \"AI-generated — verify\" note per answer.",{"type":45,"tag":64,"props":617,"children":618},{},[619,624,626,632,634,639,641,647],{"type":45,"tag":68,"props":620,"children":621},{},[622],{"type":51,"value":623},"Governance + states",{"type":51,"value":625}," — ",{"type":45,"tag":76,"props":627,"children":629},{"className":628},[],[630],{"type":51,"value":631},"genie()",{"type":51,"value":633}," space config + a truthful execution-identity note (OBO when user-scoped, else service principal) + empty\u002Ferror\u002Fambiguous handling (",{"type":45,"tag":76,"props":635,"children":637},{"className":636},[],[638],{"type":51,"value":390},{"type":51,"value":640},", ",{"type":45,"tag":76,"props":642,"children":644},{"className":643},[],[645],{"type":51,"value":646},"Alert",{"type":51,"value":648},").",{"type":45,"tag":120,"props":650,"children":652},{"id":651},"output-formats",[653],{"type":51,"value":654},"Output formats",{"type":45,"tag":54,"props":656,"children":657},{},[658],{"type":45,"tag":68,"props":659,"children":660},{},[661],{"type":51,"value":662},"Design proposal:",{"type":45,"tag":664,"props":665,"children":670},"pre",{"className":666,"code":667,"language":668,"meta":669,"style":669},"language-markdown shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","## Direction\n[Genre, audience, primary task, design intent.]\n## Pattern & notation choices\n- Composition: [data info, meta info, layout, interaction, color]\n- Notation: [message, scenario marks, scales, semantic color]\n## Component plan        ← the part that makes it buildable\n- [element] → [AppKit component] (queryKey\u002Fprops), [token\u002Fpalette], states handled\n## Tradeoffs & risks\n[What's summarized\u002Fhidden\u002Fpaginated\u002Finteractive; overload, scale, a11y, maintenance risks.]\n","markdown","",[671],{"type":45,"tag":76,"props":672,"children":673},{"__ignoreMap":669},[674,692,702,715,729,742,755,802,815],{"type":45,"tag":675,"props":676,"children":679},"span",{"class":677,"line":678},"line",1,[680,686],{"type":45,"tag":675,"props":681,"children":683},{"style":682},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[684],{"type":51,"value":685},"## ",{"type":45,"tag":675,"props":687,"children":689},{"style":688},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[690],{"type":51,"value":691},"Direction\n",{"type":45,"tag":675,"props":693,"children":695},{"class":677,"line":694},2,[696],{"type":45,"tag":675,"props":697,"children":699},{"style":698},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[700],{"type":51,"value":701},"[Genre, audience, primary task, design intent.]\n",{"type":45,"tag":675,"props":703,"children":705},{"class":677,"line":704},3,[706,710],{"type":45,"tag":675,"props":707,"children":708},{"style":682},[709],{"type":51,"value":685},{"type":45,"tag":675,"props":711,"children":712},{"style":688},[713],{"type":51,"value":714},"Pattern & notation choices\n",{"type":45,"tag":675,"props":716,"children":718},{"class":677,"line":717},4,[719,724],{"type":45,"tag":675,"props":720,"children":721},{"style":682},[722],{"type":51,"value":723},"-",{"type":45,"tag":675,"props":725,"children":726},{"style":698},[727],{"type":51,"value":728}," Composition: [data info, meta info, layout, interaction, color]\n",{"type":45,"tag":675,"props":730,"children":732},{"class":677,"line":731},5,[733,737],{"type":45,"tag":675,"props":734,"children":735},{"style":682},[736],{"type":51,"value":723},{"type":45,"tag":675,"props":738,"children":739},{"style":698},[740],{"type":51,"value":741}," Notation: [message, scenario marks, scales, semantic color]\n",{"type":45,"tag":675,"props":743,"children":745},{"class":677,"line":744},6,[746,750],{"type":45,"tag":675,"props":747,"children":748},{"style":682},[749],{"type":51,"value":685},{"type":45,"tag":675,"props":751,"children":752},{"style":688},[753],{"type":51,"value":754},"Component plan        ← the part that makes it buildable\n",{"type":45,"tag":675,"props":756,"children":758},{"class":677,"line":757},7,[759,763,768,773,778,783,788,793,797],{"type":45,"tag":675,"props":760,"children":761},{"style":682},[762],{"type":51,"value":723},{"type":45,"tag":675,"props":764,"children":765},{"style":682},[766],{"type":51,"value":767}," [",{"type":45,"tag":675,"props":769,"children":771},{"style":770},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[772],{"type":51,"value":45},{"type":45,"tag":675,"props":774,"children":775},{"style":682},[776],{"type":51,"value":777},"]",{"type":45,"tag":675,"props":779,"children":780},{"style":698},[781],{"type":51,"value":782}," → [AppKit component] (queryKey\u002Fprops), ",{"type":45,"tag":675,"props":784,"children":785},{"style":682},[786],{"type":51,"value":787},"[",{"type":45,"tag":675,"props":789,"children":790},{"style":770},[791],{"type":51,"value":792},"token\u002Fpalette",{"type":45,"tag":675,"props":794,"children":795},{"style":682},[796],{"type":51,"value":777},{"type":45,"tag":675,"props":798,"children":799},{"style":698},[800],{"type":51,"value":801},", states handled\n",{"type":45,"tag":675,"props":803,"children":805},{"class":677,"line":804},8,[806,810],{"type":45,"tag":675,"props":807,"children":808},{"style":682},[809],{"type":51,"value":685},{"type":45,"tag":675,"props":811,"children":812},{"style":688},[813],{"type":51,"value":814},"Tradeoffs & risks\n",{"type":45,"tag":675,"props":816,"children":818},{"class":677,"line":817},9,[819],{"type":45,"tag":675,"props":820,"children":821},{"style":698},[822],{"type":51,"value":823},"[What's summarized\u002Fhidden\u002Fpaginated\u002Finteractive; overload, scale, a11y, maintenance risks.]\n",{"type":45,"tag":54,"props":825,"children":826},{},[827,832],{"type":45,"tag":68,"props":828,"children":829},{},[830],{"type":51,"value":831},"Critique:",{"type":51,"value":833}," lead with the top comprehension\u002Fintegrity issue, cite the component\u002Ffile, then list\nfindings by impact, each with the concrete fix (which component\u002Ftoken\u002Fstate to change).",{"type":45,"tag":120,"props":835,"children":837},{"id":836},"anti-patterns",[838],{"type":51,"value":839},"Anti-patterns",{"type":45,"tag":60,"props":841,"children":842},{},[843,848,853,866,871],{"type":45,"tag":64,"props":844,"children":845},{},[846],{"type":51,"value":847},"Producing a design memo with no component plan.",{"type":45,"tag":64,"props":849,"children":850},{},[851],{"type":51,"value":852},"\"Use semantic color\" without naming the token\u002Fpalette.",{"type":45,"tag":64,"props":854,"children":855},{},[856,858,864],{"type":51,"value":857},"Naming a component AppKit doesn't export (e.g. a prebuilt ",{"type":45,"tag":76,"props":859,"children":861},{"className":860},[],[862],{"type":51,"value":863},"KpiCard",{"type":51,"value":865},") — compose composites from published primitives instead.",{"type":45,"tag":64,"props":867,"children":868},{},[869],{"type":51,"value":870},"Adding interaction, pages, or density the task doesn't need (over-engineering a mock-first app).",{"type":45,"tag":64,"props":872,"children":873},{},[874],{"type":51,"value":875},"Forgetting loading\u002Fempty\u002Ferror states, or KPIs with no freshness\u002Fsource.",{"type":45,"tag":877,"props":878,"children":879},"style",{},[880],{"type":51,"value":881},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":883,"total":989},[884,901,915,932,948,956,966],{"slug":885,"name":885,"fn":886,"description":887,"org":888,"tags":889,"stars":26,"repoUrl":27,"updatedAt":900},"databricks-agent-bricks","create Databricks Agent Bricks","Create Agent Bricks: Knowledge Assistants (KA) for document Q&A and Supervisor Agents for multi-agent orchestration (MAS).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[890,893,894,897],{"name":891,"slug":892,"type":15},"Agents","agents",{"name":9,"slug":8,"type":15},{"name":895,"slug":896,"type":15},"Knowledge Management","knowledge-management",{"name":898,"slug":899,"type":15},"Multi-Agent","multi-agent","2026-07-15T05:41:38.548954",{"slug":902,"name":902,"fn":903,"description":904,"org":905,"tags":906,"stars":26,"repoUrl":27,"updatedAt":914},"databricks-ai-functions","use Databricks built-in AI functions","Use Databricks built-in AI Functions (ai_classify, ai_extract, ai_summarize, ai_mask, ai_translate, ai_fix_grammar, ai_gen, ai_analyze_sentiment, ai_similarity, ai_parse_document, ai_prep_search, ai_query, ai_forecast) to add AI capabilities directly to SQL and PySpark pipelines without managing model endpoints. Also covers document parsing and building custom RAG pipelines (parse → prep_search → index → query).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[907,910,911],{"name":908,"slug":909,"type":15},"Data Analysis","data-analysis",{"name":9,"slug":8,"type":15},{"name":912,"slug":913,"type":15},"LLM","llm","2026-07-31T05:53:33.562077",{"slug":916,"name":916,"fn":917,"description":918,"org":919,"tags":920,"stars":26,"repoUrl":27,"updatedAt":931},"databricks-ai-runtime","submit and manage Databricks GPU workloads","Databricks AI Runtime (`air`) CLI — the command-line tool for submitting and managing GPU training workloads on Databricks serverless compute. Use for: running `air` workloads, custom Docker image setup, environment configuration, and troubleshooting `air` jobs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[921,924,925,928],{"name":922,"slug":923,"type":15},"CLI","cli",{"name":9,"slug":8,"type":15},{"name":926,"slug":927,"type":15},"Docker","docker",{"name":929,"slug":930,"type":15},"Engineering","engineering","2026-07-12T08:04:55.843982",{"slug":159,"name":159,"fn":933,"description":934,"org":935,"tags":936,"stars":26,"repoUrl":27,"updatedAt":947},"create Databricks AI\u002FBI dashboards","Create Databricks AI\u002FBI dashboards. Must use when creating, updating, or deploying Lakeview dashboards as Databricks Dashboard have a unique json structure. CRITICAL: You MUST test ALL SQL queries via CLI BEFORE deploying. Follow guidelines strictly.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[937,940,943,946],{"name":938,"slug":939,"type":15},"Analytics","analytics",{"name":941,"slug":942,"type":15},"Dashboards","dashboards",{"name":944,"slug":945,"type":15},"Data Visualization","data-visualization",{"name":9,"slug":8,"type":15},"2026-07-12T08:04:25.314591",{"slug":4,"name":4,"fn":5,"description":6,"org":949,"tags":950,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[951,952,953,954,955],{"name":9,"slug":8,"type":15},{"name":24,"slug":25,"type":15},{"name":21,"slug":22,"type":15},{"name":13,"slug":14,"type":15},{"name":18,"slug":19,"type":15},{"slug":38,"name":38,"fn":957,"description":958,"org":959,"tags":960,"stars":26,"repoUrl":27,"updatedAt":965},"build applications on Databricks Apps","Build apps on Databricks Apps platform. Use when asked to create data apps, analytics tools, or custom interactive visualizations. A plain \"create a dashboard\" request means a managed AI\u002FBI (Lakeview) dashboard → use databricks-aibi-dashboards, not this skill. Evaluates data access patterns (analytics vs Lakebase synced tables) before scaffolding. Invoke BEFORE starting implementation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[961,962,963,964],{"name":938,"slug":939,"type":15},{"name":941,"slug":942,"type":15},{"name":908,"slug":909,"type":15},{"name":9,"slug":8,"type":15},"2026-07-12T08:03:59.061458",{"slug":967,"name":967,"fn":968,"description":969,"org":970,"tags":971,"stars":26,"repoUrl":27,"updatedAt":988},"databricks-apps-python","build Python backends for Databricks Apps","Python backend for Databricks Apps — FastAPI (default), Flask, Dash, Streamlit, Gradio, Reflex. **Default for a new Databricks App is `databricks-apps` (AppKit — Node\u002FTypeScript\u002FReact) — reach for it first.** Use this skill only when the user asks for a Python backend, extends an existing Python app, or the team is Python-only. Covers OAuth auth, app resources, SQL warehouse and Lakebase connectivity, foundation-model \u002F Vector Search \u002F model-serving APIs (via `databricks-python-sdk`), and deployment via CLI or DABs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[972,973,976,979,982,985],{"name":9,"slug":8,"type":15},{"name":974,"slug":975,"type":15},"FastAPI","fastapi",{"name":977,"slug":978,"type":15},"Flask","flask",{"name":980,"slug":981,"type":15},"Gradio","gradio",{"name":983,"slug":984,"type":15},"Python","python",{"name":986,"slug":987,"type":15},"Streamlit","streamlit","2026-07-12T08:04:10.970845",31,{"items":991,"total":989},[992,999,1005,1012,1019,1027,1034,1043,1055,1072,1087,1100],{"slug":885,"name":885,"fn":886,"description":887,"org":993,"tags":994,"stars":26,"repoUrl":27,"updatedAt":900},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[995,996,997,998],{"name":891,"slug":892,"type":15},{"name":9,"slug":8,"type":15},{"name":895,"slug":896,"type":15},{"name":898,"slug":899,"type":15},{"slug":902,"name":902,"fn":903,"description":904,"org":1000,"tags":1001,"stars":26,"repoUrl":27,"updatedAt":914},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1002,1003,1004],{"name":908,"slug":909,"type":15},{"name":9,"slug":8,"type":15},{"name":912,"slug":913,"type":15},{"slug":916,"name":916,"fn":917,"description":918,"org":1006,"tags":1007,"stars":26,"repoUrl":27,"updatedAt":931},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1008,1009,1010,1011],{"name":922,"slug":923,"type":15},{"name":9,"slug":8,"type":15},{"name":926,"slug":927,"type":15},{"name":929,"slug":930,"type":15},{"slug":159,"name":159,"fn":933,"description":934,"org":1013,"tags":1014,"stars":26,"repoUrl":27,"updatedAt":947},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1015,1016,1017,1018],{"name":938,"slug":939,"type":15},{"name":941,"slug":942,"type":15},{"name":944,"slug":945,"type":15},{"name":9,"slug":8,"type":15},{"slug":4,"name":4,"fn":5,"description":6,"org":1020,"tags":1021,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1022,1023,1024,1025,1026],{"name":9,"slug":8,"type":15},{"name":24,"slug":25,"type":15},{"name":21,"slug":22,"type":15},{"name":13,"slug":14,"type":15},{"name":18,"slug":19,"type":15},{"slug":38,"name":38,"fn":957,"description":958,"org":1028,"tags":1029,"stars":26,"repoUrl":27,"updatedAt":965},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1030,1031,1032,1033],{"name":938,"slug":939,"type":15},{"name":941,"slug":942,"type":15},{"name":908,"slug":909,"type":15},{"name":9,"slug":8,"type":15},{"slug":967,"name":967,"fn":968,"description":969,"org":1035,"tags":1036,"stars":26,"repoUrl":27,"updatedAt":988},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1037,1038,1039,1040,1041,1042],{"name":9,"slug":8,"type":15},{"name":974,"slug":975,"type":15},{"name":977,"slug":978,"type":15},{"name":980,"slug":981,"type":15},{"name":983,"slug":984,"type":15},{"name":986,"slug":987,"type":15},{"slug":1044,"name":1044,"fn":1045,"description":1046,"org":1047,"tags":1048,"stars":26,"repoUrl":27,"updatedAt":1054},"databricks-core","configure Databricks CLI and authentication","Databricks CLI operations and the parent\u002Fentry-point skill for Databricks CLI use: authentication, profile selection, and bundles. Load this first for CLI, auth, profile, and bundle tasks, then load the matching product skill. For finding or exploring data, answering questions about the data, or generating SQL, load the databricks-data-discovery skill (it routes to Genie One). Contains up-to-date guidelines for Databricks-related CLI tasks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1049,1052,1053],{"name":1050,"slug":1051,"type":15},"Authentication","authentication",{"name":922,"slug":923,"type":15},{"name":9,"slug":8,"type":15},"2026-07-18T05:11:05.45506",{"slug":1056,"name":1056,"fn":1057,"description":1058,"org":1059,"tags":1060,"stars":26,"repoUrl":27,"updatedAt":1071},"databricks-dabs","manage Databricks Declarative Automation Bundles","Create, configure, validate, deploy, run, and manage Declarative Automation Bundles (DABs, formerly Databricks Asset Bundles). Use when working with Databricks resources via DABs including dashboards, jobs, pipelines, alerts, volumes, and apps.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1061,1064,1067,1068],{"name":1062,"slug":1063,"type":15},"Automation","automation",{"name":1065,"slug":1066,"type":15},"Configuration","configuration",{"name":9,"slug":8,"type":15},{"name":1069,"slug":1070,"type":15},"Deployment","deployment","2026-07-15T05:41:35.930355",{"slug":1073,"name":1073,"fn":1074,"description":1075,"org":1076,"tags":1077,"stars":26,"repoUrl":27,"updatedAt":1086},"databricks-data-discovery","discover and query Databricks data","Discover, explore, and query Databricks data via Genie — the CLI equivalent of the Genie One MCP. MUST be invoked whenever the user asks to find or locate data ('what tables are in X', 'where does X live', 'which catalog\u002Fschema has Y'), answer a natural-language question about the data, or write a SQL query.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1078,1079,1082,1083],{"name":908,"slug":909,"type":15},{"name":1080,"slug":1081,"type":15},"Data Engineering","data-engineering",{"name":9,"slug":8,"type":15},{"name":1084,"slug":1085,"type":15},"SQL","sql","2026-07-31T05:53:32.561877",{"slug":1088,"name":1088,"fn":1089,"description":1090,"org":1091,"tags":1092,"stars":26,"repoUrl":27,"updatedAt":1099},"databricks-dbsql","query and script Databricks SQL warehouses","Databricks SQL (DBSQL) advanced features and SQL warehouse capabilities. This skill MUST be invoked when the user mentions: \"DBSQL\", \"Databricks SQL\", \"SQL warehouse\", \"SQL scripting\", \"stored procedure\", \"CALL procedure\", \"materialized view\", \"CREATE MATERIALIZED VIEW\", \"pipe syntax\", \"|>\", \"geospatial\", \"H3\", \"ST_\", \"spatial SQL\", \"collation\", \"COLLATE\", \"ai_query\", \"ai_classify\", \"ai_extract\", \"ai_gen\", \"AI function\", \"http_request\", \"remote_query\", \"read_files\", \"Lakehouse Federation\", \"recursive CTE\", \"WITH RECURSIVE\", \"multi-statement transaction\", \"temp table\", \"temporary view\", \"pipe operator\". SHOULD also invoke when the user asks about SQL best practices, data modeling patterns, or advanced SQL features on Databricks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1093,1094,1097,1098],{"name":908,"slug":909,"type":15},{"name":1095,"slug":1096,"type":15},"Database","database",{"name":9,"slug":8,"type":15},{"name":1084,"slug":1085,"type":15},"2026-07-12T08:04:08.678282",{"slug":1101,"name":1101,"fn":1102,"description":1103,"org":1104,"tags":1105,"stars":26,"repoUrl":27,"updatedAt":1113},"databricks-docs","search Databricks documentation","Databricks documentation reference via llms.txt index. Use when other skills do not cover a topic, looking up unfamiliar Databricks features, or needing authoritative docs on APIs, configurations, or platform capabilities.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1106,1107,1110],{"name":9,"slug":8,"type":15},{"name":1108,"slug":1109,"type":15},"Documentation","documentation",{"name":1111,"slug":1112,"type":15},"Reference","reference","2026-07-15T05:41:34.697746"]