[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-databricks-databricks-unstructured-pdf-generation":3,"mdc--5bfbgi-key":33,"related-org-databricks-databricks-unstructured-pdf-generation":1173,"related-repo-databricks-databricks-unstructured-pdf-generation":1362},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":31,"mdContent":32},"databricks-unstructured-pdf-generation","generate synthetic PDFs for Databricks RAG","Build RAG \u002F unstructured-document evaluation datasets and demo documents (e.g. for Knowledge Assistant) on Databricks: generate synthetic PDFs locally, upload to Unity Catalog volumes, and pair each document with test questions for retrieval evaluation.",{"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,19,22],{"name":13,"slug":14,"type":15},"PDF","pdf","tag",{"name":17,"slug":18,"type":15},"Data Engineering","data-engineering",{"name":20,"slug":21,"type":15},"Evals","evals",{"name":9,"slug":8,"type":15},204,"https:\u002F\u002Fgithub.com\u002Fdatabricks\u002Fdatabricks-agent-skills","2026-07-18T05:11:06.436145",null,60,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":26},[],"https:\u002F\u002Fgithub.com\u002Fdatabricks\u002Fdatabricks-agent-skills\u002Ftree\u002FHEAD\u002Fplugins\u002Fdatabricks\u002Fcopilot\u002Fskills\u002Fdatabricks-unstructured-pdf-generation","---\nname: databricks-unstructured-pdf-generation\ndescription: \"Build RAG \u002F unstructured-document evaluation datasets and demo documents (e.g. for Knowledge Assistant) on Databricks: generate synthetic PDFs locally, upload to Unity Catalog volumes, and pair each document with test questions for retrieval evaluation.\"\ncompatibility: Requires databricks CLI (>= v1.0.0)\nmetadata:\n  version: \"0.1.0\"\nparent: databricks-core\n---\n\n# Unstructured-Document for Demos and Eval Datasets on Databricks\n\nWorkflow for producing **synthetic PDF documents + paired test questions** as a Unity Catalog-resident dataset for Demos and RAG \u002F unstructured-document retrieval evaluation on Databricks. The PDF-generation step uses standard local HTML → PDF tooling; the Databricks-specific value is the workflow shape — UC volume layout, paired question files, and integration with downstream Databricks retrieval \u002F `ai_extract` \u002F `ai_parse_document` evaluation.\n\n## Workflow\n\n1. Write HTML files to `.\u002Fraw_data\u002Fhtml\u002F` (write multiple files in parallel for speed) — domain-shaped to match the documents your retrieval pipeline will see in production.\n2. Convert HTML → PDF using `\u003CSKILL_ROOT>\u002Fscripts\u002Fpdf_generator.py` (parallel conversion, wraps `plutoprint`).\n3. Upload PDFs to a Unity Catalog volume via `databricks fs cp` — same volume shape your production pipeline will read from.\n4. Generate `.\u002Fraw_data\u002Fpdf\u002Fpdf_eval_questions.json` pairing each document with retrieval-eval questions; this becomes the gold dataset for `mlflow.genai.evaluate()` or comparable retrieval-quality scorers.\n\n> If you only need ad-hoc PDFs (no Databricks workflow), any HTML → PDF tool (`weasyprint`, `wkhtmltopdf`, `playwright pdf`, `plutoprint`) works directly — this skill exists for the synthetic-dataset-on-UC end-to-end shape, not as a general PDF generator.\n\n> **Path convention:** `\u003CSKILL_ROOT>` below = the directory containing this SKILL.md. Resolve to the absolute install path (e.g. `~\u002F.claude\u002Fskills\u002Fdatabricks-unstructured-pdf-generation`). `.\u002Fraw_data\u002F...` paths are relative to your own project cwd.\n\n## Dependencies\n\n```bash\nuv pip install plutoprint\n```\n\n## Step 1: Write HTML Files\n\n```bash\nmkdir -p .\u002Fraw_data\u002Fhtml\n```\n\nWrite HTML documents to `.\u002Fraw_data\u002Fhtml\u002Ffilename.html`. Use subdirectories to organize (structure is preserved).\n\n## Step 2: Convert to PDF\n\n```bash\n# Convert entire folder (parallel, 4 workers)\npython \u003CSKILL_ROOT>\u002Fscripts\u002Fpdf_generator.py convert --input .\u002Fraw_data\u002Fhtml --output .\u002Fraw_data\u002Fpdf\n```\n\nSkips files where PDF exists and is newer than HTML. Use `--force` to reconvert all.\n\n## Step 3: Upload to Volume\n\n`databricks fs` requires the `dbfs:` scheme prefix even for UC Volume paths. `-r` copies the *contents* of the source directory into the target (the source directory name is not preserved), so name the target `raw_data\u002Fpdf` explicitly to keep the PDFs in their own folder on the volume. They land under `raw_data\u002Fpdf\u002F` — i.e. `dbfs:\u002FVolumes\u002Fmy_catalog\u002Fmy_schema\u002Fraw_data\u002Fpdf\u002Freport.pdf` — so a Knowledge Assistant or ingest pipeline can point at that single folder.\n\n```bash\ndatabricks fs cp -r --overwrite .\u002Fraw_data\u002Fpdf dbfs:\u002FVolumes\u002Fmy_catalog\u002Fmy_schema\u002Fraw_data\u002Fpdf\n```\n\n## Step 4: Generate Test Questions\n\nCreate `.\u002Fraw_data\u002Fpdf\u002Fpdf_eval_questions.json` with questions for Knowledge Assistant (KA) or Multi-Agent Supervisor (MAS) evaluation. It's fine for this file to be uploaded to the volume alongside the PDFs — downstream agents can use it:\n\n```json\n{\n  \"api_errors_guide.pdf\": {\n    \"question\": \"What is the solution for error ERR-4521?\",\n    \"expected_fact\": \"Call \u002Fapi\u002Fv2\u002Fauth\u002Frefresh with refresh_token before the 3600s TTL expires\"\n  },\n  \"installation_manual.pdf\": {\n    \"question\": \"What port does the service use by default?\",\n    \"expected_fact\": \"Port 8443 for HTTPS, configurable via CONFIG_PORT environment variable\"\n  }\n}\n```\n\nThis JSON can be used to build KA test cases and validate retrieval accuracy.\n\n## Document Content Guidelines\n\nWhen generating documents for Knowledge Assistant testing or demos:\n\n- **Multi-page documents**: Each PDF should be several pages with substantial content\n- **Specific error codes and solutions**: Include product-specific error codes, causes, and resolution steps\n- **Technical details**: API endpoints, configuration parameters, version numbers, specific commands\n- **Simple CSS**: Keep styling minimal for fast HTML creation and reliable PDF conversion\n- **Queryable facts**: Include details a KA must read the document to answer (not general knowledge)\n\n**Good document types:**\n- Product user manuals with troubleshooting sections\n- API error reference guides (error codes, causes, solutions)\n- Installation\u002Fconfiguration guides with specific steps\n- Technical specifications with version-specific details\n\n**Example content:** Instead of generic \"Connection failed\" errors, write:\n- \"Error ERR-4521: OAuth token expired. Cause: Token TTL exceeded 3600s default. Solution: Call `\u002Fapi\u002Fv2\u002Fauth\u002Frefresh` with your refresh_token before expiration. See Section 4.2 for token lifecycle management.\"\n\n## CLI Reference\n\n```\npython \u003CSKILL_ROOT>\u002Fscripts\u002Fpdf_generator.py convert [OPTIONS]\n\n  --input, -i     Input HTML file or folder (required)\n  --output, -o    Output folder for PDFs (required)\n  --force, -f     Force reconvert (ignore timestamps)\n  --workers, -w   Parallel workers (default: 4)\n```\n\n## Folder Structure\n\nSubfolder structure is preserved:\n\n```\n.\u002Fraw_data\u002Fhtml\u002F                    .\u002Fraw_data\u002Fpdf\u002F\n├── report.html             →       ├── report.pdf\n├── quarterly\u002F                      ├── quarterly\u002F\n│   └── q1.html             →       │   └── q1.pdf\n└── legal\u002F                          └── legal\u002F\n    └── terms.html          →           └── terms.pdf\n```\n\n## Bundled Script\n\nThis skill ships one helper script:\n\n| File | Description |\n|------|-------------|\n| [scripts\u002Fpdf_generator.py](scripts\u002Fpdf_generator.py) | HTML → PDF converter (wraps `plutoprint`); parallel folder conversion with timestamp-skip. Referenced by Step 2 and the CLI Reference. |\n\nThe script ships at `\u003CSKILL_ROOT>\u002Fscripts\u002Fpdf_generator.py`. If it is absent, recreate it from the [CLI Reference](#cli-reference) above (a `convert` subcommand taking `--input`\u002F`--output`\u002F`--force`\u002F`--workers`, wrapping `plutoprint` for HTML → PDF).\n\n## Troubleshooting\n\n| Issue | Solution |\n|-------|----------|\n| \"plutoprint not installed\" | `uv pip install plutoprint` |\n| PDF looks wrong | Check HTML\u002FCSS syntax |\n| \"Volume does not exist\" | `databricks volumes create CATALOG SCHEMA VOLUME_NAME MANAGED` (four separate positional args, not `catalog.schema.volume`) |\n",{"data":34,"body":39},{"name":4,"description":6,"compatibility":35,"metadata":36,"parent":38},"Requires databricks CLI (>= v1.0.0)",{"version":37},"0.1.0","databricks-core",{"type":40,"children":41},"root",[42,51,82,89,162,200,237,243,282,288,313,326,332,409,422,428,487,531,537,549,793,798,804,809,863,871,894,904,920,926,936,942,947,956,962,967,1019,1082,1088,1167],{"type":43,"tag":44,"props":45,"children":47},"element","h1",{"id":46},"unstructured-document-for-demos-and-eval-datasets-on-databricks",[48],{"type":49,"value":50},"text","Unstructured-Document for Demos and Eval Datasets on Databricks",{"type":43,"tag":52,"props":53,"children":54},"p",{},[55,57,63,65,72,74,80],{"type":49,"value":56},"Workflow for producing ",{"type":43,"tag":58,"props":59,"children":60},"strong",{},[61],{"type":49,"value":62},"synthetic PDF documents + paired test questions",{"type":49,"value":64}," as a Unity Catalog-resident dataset for Demos and RAG \u002F unstructured-document retrieval evaluation on Databricks. The PDF-generation step uses standard local HTML → PDF tooling; the Databricks-specific value is the workflow shape — UC volume layout, paired question files, and integration with downstream Databricks retrieval \u002F ",{"type":43,"tag":66,"props":67,"children":69},"code",{"className":68},[],[70],{"type":49,"value":71},"ai_extract",{"type":49,"value":73}," \u002F ",{"type":43,"tag":66,"props":75,"children":77},{"className":76},[],[78],{"type":49,"value":79},"ai_parse_document",{"type":49,"value":81}," evaluation.",{"type":43,"tag":83,"props":84,"children":86},"h2",{"id":85},"workflow",[87],{"type":49,"value":88},"Workflow",{"type":43,"tag":90,"props":91,"children":92},"ol",{},[93,107,128,141],{"type":43,"tag":94,"props":95,"children":96},"li",{},[97,99,105],{"type":49,"value":98},"Write HTML files to ",{"type":43,"tag":66,"props":100,"children":102},{"className":101},[],[103],{"type":49,"value":104},".\u002Fraw_data\u002Fhtml\u002F",{"type":49,"value":106}," (write multiple files in parallel for speed) — domain-shaped to match the documents your retrieval pipeline will see in production.",{"type":43,"tag":94,"props":108,"children":109},{},[110,112,118,120,126],{"type":49,"value":111},"Convert HTML → PDF using ",{"type":43,"tag":66,"props":113,"children":115},{"className":114},[],[116],{"type":49,"value":117},"\u003CSKILL_ROOT>\u002Fscripts\u002Fpdf_generator.py",{"type":49,"value":119}," (parallel conversion, wraps ",{"type":43,"tag":66,"props":121,"children":123},{"className":122},[],[124],{"type":49,"value":125},"plutoprint",{"type":49,"value":127},").",{"type":43,"tag":94,"props":129,"children":130},{},[131,133,139],{"type":49,"value":132},"Upload PDFs to a Unity Catalog volume via ",{"type":43,"tag":66,"props":134,"children":136},{"className":135},[],[137],{"type":49,"value":138},"databricks fs cp",{"type":49,"value":140}," — same volume shape your production pipeline will read from.",{"type":43,"tag":94,"props":142,"children":143},{},[144,146,152,154,160],{"type":49,"value":145},"Generate ",{"type":43,"tag":66,"props":147,"children":149},{"className":148},[],[150],{"type":49,"value":151},".\u002Fraw_data\u002Fpdf\u002Fpdf_eval_questions.json",{"type":49,"value":153}," pairing each document with retrieval-eval questions; this becomes the gold dataset for ",{"type":43,"tag":66,"props":155,"children":157},{"className":156},[],[158],{"type":49,"value":159},"mlflow.genai.evaluate()",{"type":49,"value":161}," or comparable retrieval-quality scorers.",{"type":43,"tag":163,"props":164,"children":165},"blockquote",{},[166],{"type":43,"tag":52,"props":167,"children":168},{},[169,171,177,179,185,186,192,193,198],{"type":49,"value":170},"If you only need ad-hoc PDFs (no Databricks workflow), any HTML → PDF tool (",{"type":43,"tag":66,"props":172,"children":174},{"className":173},[],[175],{"type":49,"value":176},"weasyprint",{"type":49,"value":178},", ",{"type":43,"tag":66,"props":180,"children":182},{"className":181},[],[183],{"type":49,"value":184},"wkhtmltopdf",{"type":49,"value":178},{"type":43,"tag":66,"props":187,"children":189},{"className":188},[],[190],{"type":49,"value":191},"playwright pdf",{"type":49,"value":178},{"type":43,"tag":66,"props":194,"children":196},{"className":195},[],[197],{"type":49,"value":125},{"type":49,"value":199},") works directly — this skill exists for the synthetic-dataset-on-UC end-to-end shape, not as a general PDF generator.",{"type":43,"tag":163,"props":201,"children":202},{},[203],{"type":43,"tag":52,"props":204,"children":205},{},[206,211,213,219,221,227,229,235],{"type":43,"tag":58,"props":207,"children":208},{},[209],{"type":49,"value":210},"Path convention:",{"type":49,"value":212}," ",{"type":43,"tag":66,"props":214,"children":216},{"className":215},[],[217],{"type":49,"value":218},"\u003CSKILL_ROOT>",{"type":49,"value":220}," below = the directory containing this SKILL.md. Resolve to the absolute install path (e.g. ",{"type":43,"tag":66,"props":222,"children":224},{"className":223},[],[225],{"type":49,"value":226},"~\u002F.claude\u002Fskills\u002Fdatabricks-unstructured-pdf-generation",{"type":49,"value":228},"). ",{"type":43,"tag":66,"props":230,"children":232},{"className":231},[],[233],{"type":49,"value":234},".\u002Fraw_data\u002F...",{"type":49,"value":236}," paths are relative to your own project cwd.",{"type":43,"tag":83,"props":238,"children":240},{"id":239},"dependencies",[241],{"type":49,"value":242},"Dependencies",{"type":43,"tag":244,"props":245,"children":250},"pre",{"className":246,"code":247,"language":248,"meta":249,"style":249},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","uv pip install plutoprint\n","bash","",[251],{"type":43,"tag":66,"props":252,"children":253},{"__ignoreMap":249},[254],{"type":43,"tag":255,"props":256,"children":259},"span",{"class":257,"line":258},"line",1,[260,266,272,277],{"type":43,"tag":255,"props":261,"children":263},{"style":262},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[264],{"type":49,"value":265},"uv",{"type":43,"tag":255,"props":267,"children":269},{"style":268},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[270],{"type":49,"value":271}," pip",{"type":43,"tag":255,"props":273,"children":274},{"style":268},[275],{"type":49,"value":276}," install",{"type":43,"tag":255,"props":278,"children":279},{"style":268},[280],{"type":49,"value":281}," plutoprint\n",{"type":43,"tag":83,"props":283,"children":285},{"id":284},"step-1-write-html-files",[286],{"type":49,"value":287},"Step 1: Write HTML Files",{"type":43,"tag":244,"props":289,"children":291},{"className":246,"code":290,"language":248,"meta":249,"style":249},"mkdir -p .\u002Fraw_data\u002Fhtml\n",[292],{"type":43,"tag":66,"props":293,"children":294},{"__ignoreMap":249},[295],{"type":43,"tag":255,"props":296,"children":297},{"class":257,"line":258},[298,303,308],{"type":43,"tag":255,"props":299,"children":300},{"style":262},[301],{"type":49,"value":302},"mkdir",{"type":43,"tag":255,"props":304,"children":305},{"style":268},[306],{"type":49,"value":307}," -p",{"type":43,"tag":255,"props":309,"children":310},{"style":268},[311],{"type":49,"value":312}," .\u002Fraw_data\u002Fhtml\n",{"type":43,"tag":52,"props":314,"children":315},{},[316,318,324],{"type":49,"value":317},"Write HTML documents to ",{"type":43,"tag":66,"props":319,"children":321},{"className":320},[],[322],{"type":49,"value":323},".\u002Fraw_data\u002Fhtml\u002Ffilename.html",{"type":49,"value":325},". Use subdirectories to organize (structure is preserved).",{"type":43,"tag":83,"props":327,"children":329},{"id":328},"step-2-convert-to-pdf",[330],{"type":49,"value":331},"Step 2: Convert to PDF",{"type":43,"tag":244,"props":333,"children":335},{"className":246,"code":334,"language":248,"meta":249,"style":249},"# Convert entire folder (parallel, 4 workers)\npython \u003CSKILL_ROOT>\u002Fscripts\u002Fpdf_generator.py convert --input .\u002Fraw_data\u002Fhtml --output .\u002Fraw_data\u002Fpdf\n",[336],{"type":43,"tag":66,"props":337,"children":338},{"__ignoreMap":249},[339,348],{"type":43,"tag":255,"props":340,"children":341},{"class":257,"line":258},[342],{"type":43,"tag":255,"props":343,"children":345},{"style":344},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[346],{"type":49,"value":347},"# Convert entire folder (parallel, 4 workers)\n",{"type":43,"tag":255,"props":349,"children":351},{"class":257,"line":350},2,[352,357,363,368,374,379,384,389,394,399,404],{"type":43,"tag":255,"props":353,"children":354},{"style":262},[355],{"type":49,"value":356},"python",{"type":43,"tag":255,"props":358,"children":360},{"style":359},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[361],{"type":49,"value":362}," \u003C",{"type":43,"tag":255,"props":364,"children":365},{"style":268},[366],{"type":49,"value":367},"SKILL_ROO",{"type":43,"tag":255,"props":369,"children":371},{"style":370},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[372],{"type":49,"value":373},"T",{"type":43,"tag":255,"props":375,"children":376},{"style":359},[377],{"type":49,"value":378},">",{"type":43,"tag":255,"props":380,"children":381},{"style":268},[382],{"type":49,"value":383},"\u002Fscripts\u002Fpdf_generator.py",{"type":43,"tag":255,"props":385,"children":386},{"style":268},[387],{"type":49,"value":388}," convert",{"type":43,"tag":255,"props":390,"children":391},{"style":268},[392],{"type":49,"value":393}," --input",{"type":43,"tag":255,"props":395,"children":396},{"style":268},[397],{"type":49,"value":398}," .\u002Fraw_data\u002Fhtml",{"type":43,"tag":255,"props":400,"children":401},{"style":268},[402],{"type":49,"value":403}," --output",{"type":43,"tag":255,"props":405,"children":406},{"style":268},[407],{"type":49,"value":408}," .\u002Fraw_data\u002Fpdf\n",{"type":43,"tag":52,"props":410,"children":411},{},[412,414,420],{"type":49,"value":413},"Skips files where PDF exists and is newer than HTML. Use ",{"type":43,"tag":66,"props":415,"children":417},{"className":416},[],[418],{"type":49,"value":419},"--force",{"type":49,"value":421}," to reconvert all.",{"type":43,"tag":83,"props":423,"children":425},{"id":424},"step-3-upload-to-volume",[426],{"type":49,"value":427},"Step 3: Upload to Volume",{"type":43,"tag":52,"props":429,"children":430},{},[431,437,439,445,447,453,455,461,463,469,471,477,479,485],{"type":43,"tag":66,"props":432,"children":434},{"className":433},[],[435],{"type":49,"value":436},"databricks fs",{"type":49,"value":438}," requires the ",{"type":43,"tag":66,"props":440,"children":442},{"className":441},[],[443],{"type":49,"value":444},"dbfs:",{"type":49,"value":446}," scheme prefix even for UC Volume paths. ",{"type":43,"tag":66,"props":448,"children":450},{"className":449},[],[451],{"type":49,"value":452},"-r",{"type":49,"value":454}," copies the ",{"type":43,"tag":456,"props":457,"children":458},"em",{},[459],{"type":49,"value":460},"contents",{"type":49,"value":462}," of the source directory into the target (the source directory name is not preserved), so name the target ",{"type":43,"tag":66,"props":464,"children":466},{"className":465},[],[467],{"type":49,"value":468},"raw_data\u002Fpdf",{"type":49,"value":470}," explicitly to keep the PDFs in their own folder on the volume. They land under ",{"type":43,"tag":66,"props":472,"children":474},{"className":473},[],[475],{"type":49,"value":476},"raw_data\u002Fpdf\u002F",{"type":49,"value":478}," — i.e. ",{"type":43,"tag":66,"props":480,"children":482},{"className":481},[],[483],{"type":49,"value":484},"dbfs:\u002FVolumes\u002Fmy_catalog\u002Fmy_schema\u002Fraw_data\u002Fpdf\u002Freport.pdf",{"type":49,"value":486}," — so a Knowledge Assistant or ingest pipeline can point at that single folder.",{"type":43,"tag":244,"props":488,"children":490},{"className":246,"code":489,"language":248,"meta":249,"style":249},"databricks fs cp -r --overwrite .\u002Fraw_data\u002Fpdf dbfs:\u002FVolumes\u002Fmy_catalog\u002Fmy_schema\u002Fraw_data\u002Fpdf\n",[491],{"type":43,"tag":66,"props":492,"children":493},{"__ignoreMap":249},[494],{"type":43,"tag":255,"props":495,"children":496},{"class":257,"line":258},[497,501,506,511,516,521,526],{"type":43,"tag":255,"props":498,"children":499},{"style":262},[500],{"type":49,"value":8},{"type":43,"tag":255,"props":502,"children":503},{"style":268},[504],{"type":49,"value":505}," fs",{"type":43,"tag":255,"props":507,"children":508},{"style":268},[509],{"type":49,"value":510}," cp",{"type":43,"tag":255,"props":512,"children":513},{"style":268},[514],{"type":49,"value":515}," -r",{"type":43,"tag":255,"props":517,"children":518},{"style":268},[519],{"type":49,"value":520}," --overwrite",{"type":43,"tag":255,"props":522,"children":523},{"style":268},[524],{"type":49,"value":525}," .\u002Fraw_data\u002Fpdf",{"type":43,"tag":255,"props":527,"children":528},{"style":268},[529],{"type":49,"value":530}," dbfs:\u002FVolumes\u002Fmy_catalog\u002Fmy_schema\u002Fraw_data\u002Fpdf\n",{"type":43,"tag":83,"props":532,"children":534},{"id":533},"step-4-generate-test-questions",[535],{"type":49,"value":536},"Step 4: Generate Test Questions",{"type":43,"tag":52,"props":538,"children":539},{},[540,542,547],{"type":49,"value":541},"Create ",{"type":43,"tag":66,"props":543,"children":545},{"className":544},[],[546],{"type":49,"value":151},{"type":49,"value":548}," with questions for Knowledge Assistant (KA) or Multi-Agent Supervisor (MAS) evaluation. It's fine for this file to be uploaded to the volume alongside the PDFs — downstream agents can use it:",{"type":43,"tag":244,"props":550,"children":554},{"className":551,"code":552,"language":553,"meta":249,"style":249},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"api_errors_guide.pdf\": {\n    \"question\": \"What is the solution for error ERR-4521?\",\n    \"expected_fact\": \"Call \u002Fapi\u002Fv2\u002Fauth\u002Frefresh with refresh_token before the 3600s TTL expires\"\n  },\n  \"installation_manual.pdf\": {\n    \"question\": \"What port does the service use by default?\",\n    \"expected_fact\": \"Port 8443 for HTTPS, configurable via CONFIG_PORT environment variable\"\n  }\n}\n","json",[555],{"type":43,"tag":66,"props":556,"children":557},{"__ignoreMap":249},[558,566,595,636,671,680,705,742,775,784],{"type":43,"tag":255,"props":559,"children":560},{"class":257,"line":258},[561],{"type":43,"tag":255,"props":562,"children":563},{"style":359},[564],{"type":49,"value":565},"{\n",{"type":43,"tag":255,"props":567,"children":568},{"class":257,"line":350},[569,574,580,585,590],{"type":43,"tag":255,"props":570,"children":571},{"style":359},[572],{"type":49,"value":573},"  \"",{"type":43,"tag":255,"props":575,"children":577},{"style":576},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[578],{"type":49,"value":579},"api_errors_guide.pdf",{"type":43,"tag":255,"props":581,"children":582},{"style":359},[583],{"type":49,"value":584},"\"",{"type":43,"tag":255,"props":586,"children":587},{"style":359},[588],{"type":49,"value":589},":",{"type":43,"tag":255,"props":591,"children":592},{"style":359},[593],{"type":49,"value":594}," {\n",{"type":43,"tag":255,"props":596,"children":598},{"class":257,"line":597},3,[599,604,609,613,617,622,627,631],{"type":43,"tag":255,"props":600,"children":601},{"style":359},[602],{"type":49,"value":603},"    \"",{"type":43,"tag":255,"props":605,"children":606},{"style":262},[607],{"type":49,"value":608},"question",{"type":43,"tag":255,"props":610,"children":611},{"style":359},[612],{"type":49,"value":584},{"type":43,"tag":255,"props":614,"children":615},{"style":359},[616],{"type":49,"value":589},{"type":43,"tag":255,"props":618,"children":619},{"style":359},[620],{"type":49,"value":621}," \"",{"type":43,"tag":255,"props":623,"children":624},{"style":268},[625],{"type":49,"value":626},"What is the solution for error ERR-4521?",{"type":43,"tag":255,"props":628,"children":629},{"style":359},[630],{"type":49,"value":584},{"type":43,"tag":255,"props":632,"children":633},{"style":359},[634],{"type":49,"value":635},",\n",{"type":43,"tag":255,"props":637,"children":639},{"class":257,"line":638},4,[640,644,649,653,657,661,666],{"type":43,"tag":255,"props":641,"children":642},{"style":359},[643],{"type":49,"value":603},{"type":43,"tag":255,"props":645,"children":646},{"style":262},[647],{"type":49,"value":648},"expected_fact",{"type":43,"tag":255,"props":650,"children":651},{"style":359},[652],{"type":49,"value":584},{"type":43,"tag":255,"props":654,"children":655},{"style":359},[656],{"type":49,"value":589},{"type":43,"tag":255,"props":658,"children":659},{"style":359},[660],{"type":49,"value":621},{"type":43,"tag":255,"props":662,"children":663},{"style":268},[664],{"type":49,"value":665},"Call \u002Fapi\u002Fv2\u002Fauth\u002Frefresh with refresh_token before the 3600s TTL expires",{"type":43,"tag":255,"props":667,"children":668},{"style":359},[669],{"type":49,"value":670},"\"\n",{"type":43,"tag":255,"props":672,"children":674},{"class":257,"line":673},5,[675],{"type":43,"tag":255,"props":676,"children":677},{"style":359},[678],{"type":49,"value":679},"  },\n",{"type":43,"tag":255,"props":681,"children":683},{"class":257,"line":682},6,[684,688,693,697,701],{"type":43,"tag":255,"props":685,"children":686},{"style":359},[687],{"type":49,"value":573},{"type":43,"tag":255,"props":689,"children":690},{"style":576},[691],{"type":49,"value":692},"installation_manual.pdf",{"type":43,"tag":255,"props":694,"children":695},{"style":359},[696],{"type":49,"value":584},{"type":43,"tag":255,"props":698,"children":699},{"style":359},[700],{"type":49,"value":589},{"type":43,"tag":255,"props":702,"children":703},{"style":359},[704],{"type":49,"value":594},{"type":43,"tag":255,"props":706,"children":708},{"class":257,"line":707},7,[709,713,717,721,725,729,734,738],{"type":43,"tag":255,"props":710,"children":711},{"style":359},[712],{"type":49,"value":603},{"type":43,"tag":255,"props":714,"children":715},{"style":262},[716],{"type":49,"value":608},{"type":43,"tag":255,"props":718,"children":719},{"style":359},[720],{"type":49,"value":584},{"type":43,"tag":255,"props":722,"children":723},{"style":359},[724],{"type":49,"value":589},{"type":43,"tag":255,"props":726,"children":727},{"style":359},[728],{"type":49,"value":621},{"type":43,"tag":255,"props":730,"children":731},{"style":268},[732],{"type":49,"value":733},"What port does the service use by default?",{"type":43,"tag":255,"props":735,"children":736},{"style":359},[737],{"type":49,"value":584},{"type":43,"tag":255,"props":739,"children":740},{"style":359},[741],{"type":49,"value":635},{"type":43,"tag":255,"props":743,"children":745},{"class":257,"line":744},8,[746,750,754,758,762,766,771],{"type":43,"tag":255,"props":747,"children":748},{"style":359},[749],{"type":49,"value":603},{"type":43,"tag":255,"props":751,"children":752},{"style":262},[753],{"type":49,"value":648},{"type":43,"tag":255,"props":755,"children":756},{"style":359},[757],{"type":49,"value":584},{"type":43,"tag":255,"props":759,"children":760},{"style":359},[761],{"type":49,"value":589},{"type":43,"tag":255,"props":763,"children":764},{"style":359},[765],{"type":49,"value":621},{"type":43,"tag":255,"props":767,"children":768},{"style":268},[769],{"type":49,"value":770},"Port 8443 for HTTPS, configurable via CONFIG_PORT environment variable",{"type":43,"tag":255,"props":772,"children":773},{"style":359},[774],{"type":49,"value":670},{"type":43,"tag":255,"props":776,"children":778},{"class":257,"line":777},9,[779],{"type":43,"tag":255,"props":780,"children":781},{"style":359},[782],{"type":49,"value":783},"  }\n",{"type":43,"tag":255,"props":785,"children":787},{"class":257,"line":786},10,[788],{"type":43,"tag":255,"props":789,"children":790},{"style":359},[791],{"type":49,"value":792},"}\n",{"type":43,"tag":52,"props":794,"children":795},{},[796],{"type":49,"value":797},"This JSON can be used to build KA test cases and validate retrieval accuracy.",{"type":43,"tag":83,"props":799,"children":801},{"id":800},"document-content-guidelines",[802],{"type":49,"value":803},"Document Content Guidelines",{"type":43,"tag":52,"props":805,"children":806},{},[807],{"type":49,"value":808},"When generating documents for Knowledge Assistant testing or demos:",{"type":43,"tag":810,"props":811,"children":812},"ul",{},[813,823,833,843,853],{"type":43,"tag":94,"props":814,"children":815},{},[816,821],{"type":43,"tag":58,"props":817,"children":818},{},[819],{"type":49,"value":820},"Multi-page documents",{"type":49,"value":822},": Each PDF should be several pages with substantial content",{"type":43,"tag":94,"props":824,"children":825},{},[826,831],{"type":43,"tag":58,"props":827,"children":828},{},[829],{"type":49,"value":830},"Specific error codes and solutions",{"type":49,"value":832},": Include product-specific error codes, causes, and resolution steps",{"type":43,"tag":94,"props":834,"children":835},{},[836,841],{"type":43,"tag":58,"props":837,"children":838},{},[839],{"type":49,"value":840},"Technical details",{"type":49,"value":842},": API endpoints, configuration parameters, version numbers, specific commands",{"type":43,"tag":94,"props":844,"children":845},{},[846,851],{"type":43,"tag":58,"props":847,"children":848},{},[849],{"type":49,"value":850},"Simple CSS",{"type":49,"value":852},": Keep styling minimal for fast HTML creation and reliable PDF conversion",{"type":43,"tag":94,"props":854,"children":855},{},[856,861],{"type":43,"tag":58,"props":857,"children":858},{},[859],{"type":49,"value":860},"Queryable facts",{"type":49,"value":862},": Include details a KA must read the document to answer (not general knowledge)",{"type":43,"tag":52,"props":864,"children":865},{},[866],{"type":43,"tag":58,"props":867,"children":868},{},[869],{"type":49,"value":870},"Good document types:",{"type":43,"tag":810,"props":872,"children":873},{},[874,879,884,889],{"type":43,"tag":94,"props":875,"children":876},{},[877],{"type":49,"value":878},"Product user manuals with troubleshooting sections",{"type":43,"tag":94,"props":880,"children":881},{},[882],{"type":49,"value":883},"API error reference guides (error codes, causes, solutions)",{"type":43,"tag":94,"props":885,"children":886},{},[887],{"type":49,"value":888},"Installation\u002Fconfiguration guides with specific steps",{"type":43,"tag":94,"props":890,"children":891},{},[892],{"type":49,"value":893},"Technical specifications with version-specific details",{"type":43,"tag":52,"props":895,"children":896},{},[897,902],{"type":43,"tag":58,"props":898,"children":899},{},[900],{"type":49,"value":901},"Example content:",{"type":49,"value":903}," Instead of generic \"Connection failed\" errors, write:",{"type":43,"tag":810,"props":905,"children":906},{},[907],{"type":43,"tag":94,"props":908,"children":909},{},[910,912,918],{"type":49,"value":911},"\"Error ERR-4521: OAuth token expired. Cause: Token TTL exceeded 3600s default. Solution: Call ",{"type":43,"tag":66,"props":913,"children":915},{"className":914},[],[916],{"type":49,"value":917},"\u002Fapi\u002Fv2\u002Fauth\u002Frefresh",{"type":49,"value":919}," with your refresh_token before expiration. See Section 4.2 for token lifecycle management.\"",{"type":43,"tag":83,"props":921,"children":923},{"id":922},"cli-reference",[924],{"type":49,"value":925},"CLI Reference",{"type":43,"tag":244,"props":927,"children":931},{"className":928,"code":930,"language":49},[929],"language-text","python \u003CSKILL_ROOT>\u002Fscripts\u002Fpdf_generator.py convert [OPTIONS]\n\n  --input, -i     Input HTML file or folder (required)\n  --output, -o    Output folder for PDFs (required)\n  --force, -f     Force reconvert (ignore timestamps)\n  --workers, -w   Parallel workers (default: 4)\n",[932],{"type":43,"tag":66,"props":933,"children":934},{"__ignoreMap":249},[935],{"type":49,"value":930},{"type":43,"tag":83,"props":937,"children":939},{"id":938},"folder-structure",[940],{"type":49,"value":941},"Folder Structure",{"type":43,"tag":52,"props":943,"children":944},{},[945],{"type":49,"value":946},"Subfolder structure is preserved:",{"type":43,"tag":244,"props":948,"children":951},{"className":949,"code":950,"language":49},[929],".\u002Fraw_data\u002Fhtml\u002F                    .\u002Fraw_data\u002Fpdf\u002F\n├── report.html             →       ├── report.pdf\n├── quarterly\u002F                      ├── quarterly\u002F\n│   └── q1.html             →       │   └── q1.pdf\n└── legal\u002F                          └── legal\u002F\n    └── terms.html          →           └── terms.pdf\n",[952],{"type":43,"tag":66,"props":953,"children":954},{"__ignoreMap":249},[955],{"type":49,"value":950},{"type":43,"tag":83,"props":957,"children":959},{"id":958},"bundled-script",[960],{"type":49,"value":961},"Bundled Script",{"type":43,"tag":52,"props":963,"children":964},{},[965],{"type":49,"value":966},"This skill ships one helper script:",{"type":43,"tag":968,"props":969,"children":970},"table",{},[971,990],{"type":43,"tag":972,"props":973,"children":974},"thead",{},[975],{"type":43,"tag":976,"props":977,"children":978},"tr",{},[979,985],{"type":43,"tag":980,"props":981,"children":982},"th",{},[983],{"type":49,"value":984},"File",{"type":43,"tag":980,"props":986,"children":987},{},[988],{"type":49,"value":989},"Description",{"type":43,"tag":991,"props":992,"children":993},"tbody",{},[994],{"type":43,"tag":976,"props":995,"children":996},{},[997,1007],{"type":43,"tag":998,"props":999,"children":1000},"td",{},[1001],{"type":43,"tag":1002,"props":1003,"children":1005},"a",{"href":1004},"scripts\u002Fpdf_generator.py",[1006],{"type":49,"value":1004},{"type":43,"tag":998,"props":1008,"children":1009},{},[1010,1012,1017],{"type":49,"value":1011},"HTML → PDF converter (wraps ",{"type":43,"tag":66,"props":1013,"children":1015},{"className":1014},[],[1016],{"type":49,"value":125},{"type":49,"value":1018},"); parallel folder conversion with timestamp-skip. Referenced by Step 2 and the CLI Reference.",{"type":43,"tag":52,"props":1020,"children":1021},{},[1022,1024,1029,1031,1036,1038,1044,1046,1052,1054,1060,1061,1066,1067,1073,1075,1080],{"type":49,"value":1023},"The script ships at ",{"type":43,"tag":66,"props":1025,"children":1027},{"className":1026},[],[1028],{"type":49,"value":117},{"type":49,"value":1030},". If it is absent, recreate it from the ",{"type":43,"tag":1002,"props":1032,"children":1034},{"href":1033},"#cli-reference",[1035],{"type":49,"value":925},{"type":49,"value":1037}," above (a ",{"type":43,"tag":66,"props":1039,"children":1041},{"className":1040},[],[1042],{"type":49,"value":1043},"convert",{"type":49,"value":1045}," subcommand taking ",{"type":43,"tag":66,"props":1047,"children":1049},{"className":1048},[],[1050],{"type":49,"value":1051},"--input",{"type":49,"value":1053},"\u002F",{"type":43,"tag":66,"props":1055,"children":1057},{"className":1056},[],[1058],{"type":49,"value":1059},"--output",{"type":49,"value":1053},{"type":43,"tag":66,"props":1062,"children":1064},{"className":1063},[],[1065],{"type":49,"value":419},{"type":49,"value":1053},{"type":43,"tag":66,"props":1068,"children":1070},{"className":1069},[],[1071],{"type":49,"value":1072},"--workers",{"type":49,"value":1074},", wrapping ",{"type":43,"tag":66,"props":1076,"children":1078},{"className":1077},[],[1079],{"type":49,"value":125},{"type":49,"value":1081}," for HTML → PDF).",{"type":43,"tag":83,"props":1083,"children":1085},{"id":1084},"troubleshooting",[1086],{"type":49,"value":1087},"Troubleshooting",{"type":43,"tag":968,"props":1089,"children":1090},{},[1091,1107],{"type":43,"tag":972,"props":1092,"children":1093},{},[1094],{"type":43,"tag":976,"props":1095,"children":1096},{},[1097,1102],{"type":43,"tag":980,"props":1098,"children":1099},{},[1100],{"type":49,"value":1101},"Issue",{"type":43,"tag":980,"props":1103,"children":1104},{},[1105],{"type":49,"value":1106},"Solution",{"type":43,"tag":991,"props":1108,"children":1109},{},[1110,1127,1140],{"type":43,"tag":976,"props":1111,"children":1112},{},[1113,1118],{"type":43,"tag":998,"props":1114,"children":1115},{},[1116],{"type":49,"value":1117},"\"plutoprint not installed\"",{"type":43,"tag":998,"props":1119,"children":1120},{},[1121],{"type":43,"tag":66,"props":1122,"children":1124},{"className":1123},[],[1125],{"type":49,"value":1126},"uv pip install plutoprint",{"type":43,"tag":976,"props":1128,"children":1129},{},[1130,1135],{"type":43,"tag":998,"props":1131,"children":1132},{},[1133],{"type":49,"value":1134},"PDF looks wrong",{"type":43,"tag":998,"props":1136,"children":1137},{},[1138],{"type":49,"value":1139},"Check HTML\u002FCSS syntax",{"type":43,"tag":976,"props":1141,"children":1142},{},[1143,1148],{"type":43,"tag":998,"props":1144,"children":1145},{},[1146],{"type":49,"value":1147},"\"Volume does not exist\"",{"type":43,"tag":998,"props":1149,"children":1150},{},[1151,1157,1159,1165],{"type":43,"tag":66,"props":1152,"children":1154},{"className":1153},[],[1155],{"type":49,"value":1156},"databricks volumes create CATALOG SCHEMA VOLUME_NAME MANAGED",{"type":49,"value":1158}," (four separate positional args, not ",{"type":43,"tag":66,"props":1160,"children":1162},{"className":1161},[],[1163],{"type":49,"value":1164},"catalog.schema.volume",{"type":49,"value":1166},")",{"type":43,"tag":1168,"props":1169,"children":1170},"style",{},[1171],{"type":49,"value":1172},"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":1174,"total":1361},[1175,1192,1206,1223,1240,1260,1271,1293,1304,1321,1334,1347],{"slug":1176,"name":1176,"fn":1177,"description":1178,"org":1179,"tags":1180,"stars":23,"repoUrl":24,"updatedAt":1191},"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},[1181,1184,1185,1188],{"name":1182,"slug":1183,"type":15},"Agents","agents",{"name":9,"slug":8,"type":15},{"name":1186,"slug":1187,"type":15},"Knowledge Management","knowledge-management",{"name":1189,"slug":1190,"type":15},"Multi-Agent","multi-agent","2026-07-15T05:41:38.548954",{"slug":1193,"name":1193,"fn":1194,"description":1195,"org":1196,"tags":1197,"stars":23,"repoUrl":24,"updatedAt":1205},"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},[1198,1201,1202],{"name":1199,"slug":1200,"type":15},"Data Analysis","data-analysis",{"name":9,"slug":8,"type":15},{"name":1203,"slug":1204,"type":15},"LLM","llm","2026-07-31T05:53:33.562077",{"slug":1207,"name":1207,"fn":1208,"description":1209,"org":1210,"tags":1211,"stars":23,"repoUrl":24,"updatedAt":1222},"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},[1212,1215,1216,1219],{"name":1213,"slug":1214,"type":15},"CLI","cli",{"name":9,"slug":8,"type":15},{"name":1217,"slug":1218,"type":15},"Docker","docker",{"name":1220,"slug":1221,"type":15},"Engineering","engineering","2026-07-12T08:04:55.843982",{"slug":1224,"name":1224,"fn":1225,"description":1226,"org":1227,"tags":1228,"stars":23,"repoUrl":24,"updatedAt":1239},"databricks-aibi-dashboards","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},[1229,1232,1235,1238],{"name":1230,"slug":1231,"type":15},"Analytics","analytics",{"name":1233,"slug":1234,"type":15},"Dashboards","dashboards",{"name":1236,"slug":1237,"type":15},"Data Visualization","data-visualization",{"name":9,"slug":8,"type":15},"2026-07-12T08:04:25.314591",{"slug":1241,"name":1241,"fn":1242,"description":1243,"org":1244,"tags":1245,"stars":23,"repoUrl":24,"updatedAt":1259},"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},[1246,1247,1250,1253,1256],{"name":9,"slug":8,"type":15},{"name":1248,"slug":1249,"type":15},"Design","design",{"name":1251,"slug":1252,"type":15},"Frontend","frontend",{"name":1254,"slug":1255,"type":15},"React","react",{"name":1257,"slug":1258,"type":15},"UI Components","ui-components","2026-07-12T08:04:02.02398",{"slug":1261,"name":1261,"fn":1262,"description":1263,"org":1264,"tags":1265,"stars":23,"repoUrl":24,"updatedAt":1270},"databricks-apps","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},[1266,1267,1268,1269],{"name":1230,"slug":1231,"type":15},{"name":1233,"slug":1234,"type":15},{"name":1199,"slug":1200,"type":15},{"name":9,"slug":8,"type":15},"2026-07-12T08:03:59.061458",{"slug":1272,"name":1272,"fn":1273,"description":1274,"org":1275,"tags":1276,"stars":23,"repoUrl":24,"updatedAt":1292},"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},[1277,1278,1281,1284,1287,1289],{"name":9,"slug":8,"type":15},{"name":1279,"slug":1280,"type":15},"FastAPI","fastapi",{"name":1282,"slug":1283,"type":15},"Flask","flask",{"name":1285,"slug":1286,"type":15},"Gradio","gradio",{"name":1288,"slug":356,"type":15},"Python",{"name":1290,"slug":1291,"type":15},"Streamlit","streamlit","2026-07-12T08:04:10.970845",{"slug":38,"name":38,"fn":1294,"description":1295,"org":1296,"tags":1297,"stars":23,"repoUrl":24,"updatedAt":1303},"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},[1298,1301,1302],{"name":1299,"slug":1300,"type":15},"Authentication","authentication",{"name":1213,"slug":1214,"type":15},{"name":9,"slug":8,"type":15},"2026-07-18T05:11:05.45506",{"slug":1305,"name":1305,"fn":1306,"description":1307,"org":1308,"tags":1309,"stars":23,"repoUrl":24,"updatedAt":1320},"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},[1310,1313,1316,1317],{"name":1311,"slug":1312,"type":15},"Automation","automation",{"name":1314,"slug":1315,"type":15},"Configuration","configuration",{"name":9,"slug":8,"type":15},{"name":1318,"slug":1319,"type":15},"Deployment","deployment","2026-07-15T05:41:35.930355",{"slug":1322,"name":1322,"fn":1323,"description":1324,"org":1325,"tags":1326,"stars":23,"repoUrl":24,"updatedAt":1333},"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},[1327,1328,1329,1330],{"name":1199,"slug":1200,"type":15},{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},{"name":1331,"slug":1332,"type":15},"SQL","sql","2026-07-31T05:53:32.561877",{"slug":1335,"name":1335,"fn":1336,"description":1337,"org":1338,"tags":1339,"stars":23,"repoUrl":24,"updatedAt":1346},"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},[1340,1341,1344,1345],{"name":1199,"slug":1200,"type":15},{"name":1342,"slug":1343,"type":15},"Database","database",{"name":9,"slug":8,"type":15},{"name":1331,"slug":1332,"type":15},"2026-07-12T08:04:08.678282",{"slug":1348,"name":1348,"fn":1349,"description":1350,"org":1351,"tags":1352,"stars":23,"repoUrl":24,"updatedAt":1360},"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},[1353,1354,1357],{"name":9,"slug":8,"type":15},{"name":1355,"slug":1356,"type":15},"Documentation","documentation",{"name":1358,"slug":1359,"type":15},"Reference","reference","2026-07-15T05:41:34.697746",31,{"items":1363,"total":1361},[1364,1371,1377,1384,1391,1399,1406],{"slug":1176,"name":1176,"fn":1177,"description":1178,"org":1365,"tags":1366,"stars":23,"repoUrl":24,"updatedAt":1191},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1367,1368,1369,1370],{"name":1182,"slug":1183,"type":15},{"name":9,"slug":8,"type":15},{"name":1186,"slug":1187,"type":15},{"name":1189,"slug":1190,"type":15},{"slug":1193,"name":1193,"fn":1194,"description":1195,"org":1372,"tags":1373,"stars":23,"repoUrl":24,"updatedAt":1205},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1374,1375,1376],{"name":1199,"slug":1200,"type":15},{"name":9,"slug":8,"type":15},{"name":1203,"slug":1204,"type":15},{"slug":1207,"name":1207,"fn":1208,"description":1209,"org":1378,"tags":1379,"stars":23,"repoUrl":24,"updatedAt":1222},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1380,1381,1382,1383],{"name":1213,"slug":1214,"type":15},{"name":9,"slug":8,"type":15},{"name":1217,"slug":1218,"type":15},{"name":1220,"slug":1221,"type":15},{"slug":1224,"name":1224,"fn":1225,"description":1226,"org":1385,"tags":1386,"stars":23,"repoUrl":24,"updatedAt":1239},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1387,1388,1389,1390],{"name":1230,"slug":1231,"type":15},{"name":1233,"slug":1234,"type":15},{"name":1236,"slug":1237,"type":15},{"name":9,"slug":8,"type":15},{"slug":1241,"name":1241,"fn":1242,"description":1243,"org":1392,"tags":1393,"stars":23,"repoUrl":24,"updatedAt":1259},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1394,1395,1396,1397,1398],{"name":9,"slug":8,"type":15},{"name":1248,"slug":1249,"type":15},{"name":1251,"slug":1252,"type":15},{"name":1254,"slug":1255,"type":15},{"name":1257,"slug":1258,"type":15},{"slug":1261,"name":1261,"fn":1262,"description":1263,"org":1400,"tags":1401,"stars":23,"repoUrl":24,"updatedAt":1270},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1402,1403,1404,1405],{"name":1230,"slug":1231,"type":15},{"name":1233,"slug":1234,"type":15},{"name":1199,"slug":1200,"type":15},{"name":9,"slug":8,"type":15},{"slug":1272,"name":1272,"fn":1273,"description":1274,"org":1407,"tags":1408,"stars":23,"repoUrl":24,"updatedAt":1292},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1409,1410,1411,1412,1413,1414],{"name":9,"slug":8,"type":15},{"name":1279,"slug":1280,"type":15},{"name":1282,"slug":1283,"type":15},{"name":1285,"slug":1286,"type":15},{"name":1288,"slug":356,"type":15},{"name":1290,"slug":1291,"type":15}]