{
  "markdown": "# Databricks Agent Skills\n\nSkills for AI coding assistants (Claude Code, Cursor, etc.) that provide Databricks-specific guidance.\n\n## Installation\n\nTwo install paths cover the **stable** skills. They install to different places\nbut end up loaded by the same agents — pick whichever fits your workflow.\n\n- **Databricks CLI** writes SKILL.md files directly into each agent's skill\n  directory (`~/.claude/skills/`, `~/.cursor/extensions/<...>`, etc.).\n- **Plugin marketplaces** (Claude Code, Cursor) cache the plugin under the\n  agent's plugin directory (e.g. `~/.claude/plugins/cache/databricks-agent-skills/`);\n  the agent discovers skills from there.\n\n**Via the Databricks CLI (canonical; supports experimental skills):**\n\n```bash\ndatabricks aitools install\n```\n\nThe CLI auto-detects your coding agent(s) and installs the stable skills to the\nright location:\n\n- **Claude Code** → `~/.claude/skills/`\n- **Cursor**, **Codex CLI**, **OpenCode**, **GitHub Copilot**, **Antigravity**\n  → their respective skill directories\n\nFor finer control, use the `aitools skills install` subcommand directly — it\naccepts a positional skill name and an `--experimental` flag (see the\n[Experimental Skills](#experimental-skills) section).\n\n**Via the Claude Code plugin marketplace** (stable skills only — installs every\nskill under [`./skills/`](./skills/)):\n\n```text\n/plugin marketplace add databricks/databricks-agent-skills\n/plugin install databricks@databricks-agent-skills\n```\n\n**Via the Cursor plugin marketplace:**\n\n```text\n/add-plugin databricks\n```\n\nThe Cursor plugin ships the skills plus the `databricks-setup` /\n`databricks-doctor` commands, two of the three hooks (session context,\nauth-failure hints), and a routing rule that steers Databricks prompts into the\nskills; see\n[Commands and hooks](#commands-and-hooks-claude-code-cursor).\n\n**Via the GitHub Copilot plugin marketplace:**\n\n```text\ncopilot plugin marketplace add databricks/databricks-agent-skills\ncopilot plugin install databricks@databricks-agent-skills\n```\n\nWorks in Copilot CLI (plugins are GA there) and VS Code (agent plugins,\npreview; also installable from the Extensions view). Ships the skills plus\ntwo hooks: the session context primer and the auth-failure hinter (both run on\nCopilot CLI and the cloud agent; VS Code has its own hooks system). The Copilot\ncloud agent on github.com takes no plugins;\nfor that surface, vendor the skills into the target repo (`.github/skills/`)\nand the auth-hint hook into `.github/hooks/`.\n\n**Via the Codex plugin marketplace:**\n\n```text\ncodex plugin marketplace add databricks/databricks-agent-skills\ncodex plugin add databricks\n```\n\nThe Codex plugin ships the skills plus all three hooks (prompt routing,\nsession context, auth-failure hints). Codex hash-pins plugin hooks: run\n`/hooks` once after install (and after each update) to review and enable\nthem. Codex has no distributable slash commands, so the setup/doctor\nworkflows are reachable through the skills there.\n\n### CLI vs plugin marketplace\n\n| | CLI | Plugin marketplace |\n|---|---|---|\n| Stable skills | ✅ (default) | ✅ |\n| Experimental skills | ✅ (with `--experimental` or by name) | ❌ |\n| Per-skill selection | ✅ (`databricks aitools install <name>`) | ❌ (all-or-nothing) |\n| Commands & hooks | ❌ (skills only today, see below) | ✅ |\n| Updates | `databricks aitools update` | Plugin marketplace update flow |\n| Required outside the agent | Databricks CLI v1.0.0+ | None |\n\nIf in doubt, use the CLI — it's the canonical install path and the only one that\nexposes experimental skills.\n\n## Available Skills\n\nStable skills shipped from [`skills/`](./skills/):\n\n- **databricks-core** — CLI, authentication, profile selection, data exploration. Parent skill for all product skills.\n- **databricks-data-discovery** — Find, explore, and query data via Genie One (natural-language data Q&A and SQL generation); falls back to manual `information_schema` exploration.\n- **databricks-apps** — Build full-stack TypeScript apps on Databricks using AppKit.\n- **databricks-app-design** — Design the UX of data apps: dashboards, KPI pages, reports, charts, and Genie/chat surfaces, mapped to AppKit components.\n- **databricks-dabs** — Declarative Automation Bundles (formerly Asset Bundles) for deploying and managing Databricks resources.\n- **databricks-jobs** — Lakeflow Jobs orchestration: task types, triggers, schedules, notifications.\n- **databricks-lakebase** — Lakebase Postgres: projects, branching, autoscaling, synced tables, Data API.\n- **databricks-model-serving** — Model Serving endpoint management, AI Gateway, traffic config.\n- **databricks-pipelines** — Lakeflow Spark Declarative Pipelines (formerly DLT) for batch and streaming.\n- **databricks-serverless-migration** — Migrate classic-compute workloads to serverless compute.\n- **databricks-vector-search** — Vector Search endpoints + indexes for RAG and semantic search.\n- **databricks-agent-bricks** — Agent Bricks: Knowledge Assistants, Genie Spaces, Multi-Agent Supervisor.\n- **databricks-ai-functions** — Built-in AI Functions (ai_query, ai_classify, ai_extract, ai_parse_document, ai_forecast) in SQL and PySpark.\n- **databricks-aibi-dashboards** — AI/BI dashboards with a SQL-validation workflow.\n- **databricks-apps-python** — Python data apps (Streamlit, Dash, Gradio, Flask, FastAPI, Reflex); prefers AppKit for new apps.\n- **databricks-dbsql** — Databricks SQL warehouse patterns.\n- **databricks-docs** — Databricks documentation lookup via llms.txt.\n- **databricks-execution-compute** — Execute code on Databricks compute.\n- **databricks-iceberg** — Apache Iceberg tables (Managed/Foreign), UniForm, Iceberg REST Catalog, client interoperability.\n- **databricks-lakeflow-connect** — Lakeflow Connect managed ingestion connectors.\n- **databricks-metric-views** — Unity Catalog Metric Views for governed metrics.\n- **databricks-ml-training** — ML model training on Databricks.\n- **databricks-mlflow-evaluation** — End-to-end agent / GenAI evaluation with MLflow.\n- **databricks-python-sdk** — Python SDK, Databricks Connect, CLI, REST API.\n- **databricks-spark-structured-streaming** — Spark Structured Streaming patterns.\n- **databricks-synthetic-data-gen** — Realistic synthetic / test data with Faker.\n- **databricks-unity-catalog** — Unity Catalog system tables for lineage, audit, and billing.\n- **databricks-unstructured-pdf-generation** — Generate synthetic PDFs for RAG.\n- **databricks-zerobus-ingest** — Zerobus streaming ingest patterns.\n\n## Experimental Skills\n\nThe [`experimental/`](./experimental/) directory contains additional skills\noriginally imported from\n[databricks-solutions/ai-dev-kit](https://github.com/databricks-solutions/ai-dev-kit)\n(now deprecated — this repo is the source of truth going forward) on a\n**best-effort basis**.\n\n- Experimental skills are **not officially supported** — they may be used, but\n  do not follow the same review / quality bar as the stable skills under\n  [`skills/`](./skills/).\n- They are **not installed by default** by `databricks aitools install`.\n  Pass `--experimental` to install all of them, or install a specific one\n  by name (with the `--experimental` flag — e.g. `databricks aitools install\n  spark-python-data-source --experimental`).\n- See [`experimental/README.md`](./experimental/README.md) for the full list\n  and caveats.\n\n## Commands and hooks (Claude Code, Cursor)\n\nWhen installed as a Claude Code plugin, the `databricks` plugin adds slash\ncommands and three hooks (prompt routing, session context, auth-failure hints)\non top of the skills. The Cursor plugin (`databricks`) ships the same\ncommands and two of the hooks; see the Cursor note below.\n(These ship via the plugin marketplaces; the CLI `databricks aitools install`\npath installs skills only today; see the note at the end.)\n\n**Slash commands**: friction-only entry points; everyday work stays with the\nauto-invoked skills.\n\n- `/databricks:setup [workspace-url]`: auth/onboarding. Install check, then an\n  OAuth / PAT / service-principal profile, then verify.\n- `/databricks:doctor [profile]`: read-only health check (CLI version, auth,\n  workspace reachability, compute, recent job failures).\n\n(Product workflows such as apps, jobs, pipelines, DABs, etc. are handled by the\nskills, not commands, so they aren't duplicated here.)\n\n**Hooks** (`hooks/`, all fail-open):\n\n- **Prompt router** (UserPromptSubmit): a fast keyword regex (sub-50ms, no LLM,\n  no network) over each prompt. When the prompt is Databricks-related, it injects\n  a note steering Claude to load `databricks-core` plus the matching product\n  skill before answering. The full note fires once per session; later Databricks\n  prompts get a one-line reminder. Unrelated prompts are untouched. No\n  permission gating, no cost warnings.\n- **Context primer** (SessionStart, skipped on resume): injects the routing\n  rule, CLI version, configured profile names and any\n  `[__settings__].default_profile` (read locally, no network call, no token\n  values), and env/in-platform auth state.\n- **Auth-failure hint** (PostToolUse on Bash): when a `databricks` command fails\n  with an auth-shaped error, adds one line suggesting `/databricks:doctor` or\n  `databricks auth login` before retrying. Never blocks or rewrites commands.\n\n**Cursor.** Cursor has a flat `/` menu (no `plugin:command` namespacing), so\nthe same commands ship as `/databricks-setup` and `/databricks-doctor`,\nrendered from the one templated [`commands/`](./commands/) source into the\nCursor bundle folder. The Cursor-dialect hook wiring ships as the Cursor bundle\nfolder's `hooks/hooks.json` (auto-discovered from the plugin root, no\ndeclaration): the context primer (`sessionStart`) and the auth-failure hint\n(`postToolUse`), both invoked with `--platform cursor` so they emit Cursor's\noutput shape and reference the Cursor command names. The\nprompt-router hook does not port (Cursor's `beforeSubmitPrompt` cannot inject\ncontext), so routing instead ships as a Cursor rule\n([`rules/databricks-routing.mdc`](./rules/databricks-routing.mdc)) that injects\nthe routing table when a prompt is Databricks-related, independent of an open\nCursor bug that currently drops hook `additional_context`. Native skill\nselection also helps.\n\n> **Distribution parity (follow-up).** The plugin marketplace ships the whole\n> repo (`marketplace.json` `source: \"./\"`), so commands and hooks come with it.\n> `databricks aitools install` currently packages only `skills/`, so CLI-install\n> users don't yet get commands/hooks. Closing that gap is tracked as CLI-side\n> work.\n\n## Structure\n\nEach skill follows the [Agent Skills Specification](https://agentskills.io/specification):\n\n```\nskill-name/\n├── SKILL.md           # Main skill file with frontmatter + instructions\n└── references/        # Additional documentation loaded on demand\n```\n\n## Development\n\n### Adding New Skills\n\nFor a narrower variation of an existing skill, create a subskill that declares\nits parent via frontmatter. This is how the stable skills are organized today\n— each product skill sets `parent: databricks-core`.\n\n```markdown\n---\nname: \"databricks-apps-chatbots\"\ndescription: \"Databricks apps with chatbot features\"\nparent: databricks-apps\n---\n\n# Chatbot Apps\n\n**FIRST**: Use the parent `databricks-apps` skill for app development basics.\n\nThen apply these patterns:\n- Pattern 1\n- Pattern 2\n```\n\nThis approach:\n- Keeps the main skill stable and focused\n- Allows experimentation without modifying core skills\n- Makes it easy to follow the changes in the main skill\n\n### Manifest Management\n\n`manifest.json` is **generated** by `scripts/skills.py` from the skill\ndirectories and frontmatter. Do not edit it by hand. CI rejects manual changes\nvia two checks: content drift (parsed dict doesn't match what `generate` would\nproduce) and canonical form (on-disk bytes don't match\n`json.dumps(..., indent=2, sort_keys=True)`).\n\nBecause the CLI reads `manifest.json` and plugin installs read the generated\ncatalogs and provider bundle live from `main`, `main` must stay a consistent\nindex of its own source between releases. `.github/workflows/self-heal-manifest.yml`\nenforces this: on every push to `main` that touches generation inputs it re-runs\n`scripts/skills.py generate` and commits the refreshed `manifest.json`, plugin\ncatalogs, hook/routing files, and provider bundle back to `main`, so a skill\nadded, deleted, or reshaped in one PR can't leave installs fetching missing\nfiles. The per-PR committed-manifest check is therefore advisory (it surfaces\nstaleness without blocking PRs that merely inherited it from `main`).\n\nSync assets and regenerate the manifest after adding or updating skills:\n\n```bash\npython3 scripts/skills.py\n```\n\nValidate that assets and manifest are up to date (used by CI):\n\n```bash\npython3 scripts/skills.py validate\n```\n\nTo check only that a committed manifest points at files that exist in the repo:\n\n```bash\npython3 scripts/skills.py validate-committed-manifest\n```\n\nThe manifest is consumed by the CLI to discover available skills.\n\n### Plugin manifest management\n\nThe repo ships one plugin to four targets (Claude Code, Codex, Copilot, Cursor).\nEvery agent fetches the built `plugins/databricks/` bundle (a generated copy of\nthe source plus the four per-target `plugin.json`); four `marketplace.json`\ncatalogs at the repo root each point a scoped source at it (tracking `main`). The\nbundle, the catalogs, the four `plugin.json`, and `manifest.json` are all\n**generated** from a single source of truth,\n[`metaplugin/plugin.meta.json`](./metaplugin/plugin.meta.json), by `scripts/skills.py`. Do not\nhand-edit the generated files (each generated directory also carries a\n`README.md` saying so, and `plugins/**` is marked `linguist-generated`) — edit\n`metaplugin/plugin.meta.json` and regenerate:\n\n```bash\npython3 scripts/skills.py generate   # regenerates manifest.json + all plugin manifests\npython3 scripts/skills.py validate   # CI check: fails on any drift\n```\n\n`metaplugin/plugin.meta.json` owns the version (one value, propagated to all four targets),\nname, description, keywords, author/license, per-target display names and\nhook/command/rule wiring, and the skill-to-keyword map. Adding a stable skill\nmeans adding it to the `skills` map there (with a `keyword`); CI fails if a\nshipped skill has no entry. The same source also drives prompt routing: its\n`routing` block is rendered into the prompt router's data\n(`hooks/_routing_data.json`) and the Cursor routing rule\n(`rules/databricks-routing.mdc`) from one table, so they can't drift. See\n[CONTRIBUTING.md](./CONTRIBUTING.md) for the full field reference.\n\n## Security\n\nPlease see [SECURITY](./SECURITY) for vulnerability reporting guidelines.\n\n## Integrity\n\nRelease tags are created by the [Release workflow](./.github/workflows/release.yml)\nand map 1:1 to a published version.\n\n## Contributing\n\nWe welcome feedback and change proposals through [GitHub issues][change-proposal].\nThis repository is published from an internal Databricks source of truth. Pull\nrequest creation is restricted to repository collaborators and is used only to\npublish internal changes. If a proposal is accepted, a Databricks maintainer\nwill implement it internally and publish the change here. See\n[CONTRIBUTING.md](./CONTRIBUTING.md) for details.\n\n[change-proposal]: /databricks/databricks-agent-skills/issues/new/choose\n\n- All changes require approval from a code owner (see [CODEOWNERS](./.github/CODEOWNERS)).\n- Documentation examples must follow least-privilege defaults — avoid suggesting elevated permissions or broad scopes unless explicitly necessary.\n",
  "bytes": 15572,
  "sha": "c4edb7c67c42c65e9b22129fcbf72a026420ed6e1c0e9be7557a74831474b312",
  "repo_slug": "databricks/databricks-agent-skills",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_databricks_databricks_agent_skills_datab_0cb74d69/readme"
}