Repository navigation
Expand file tree
/
Copy pathplugin.meta.json
More file actions
244 lines (238 loc) · 15 KB
/
Copy pathplugin.meta.json
File metadata and controls
244 lines (238 loc) · 15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
{
"//": "Single source of truth for the databricks plugin across all targets (Claude, Codex, Copilot, Cursor, Antigravity). Edit this file, then run `python3 scripts/skills.py generate`. Generated from here: the 5 plugin.json (under plugins/databricks/), the 4 marketplace.json catalogs (at the repo root), and the whole plugins/databricks/ bundle. Antigravity generates a native directory for local testing. CI fails on drift. Do not hand-edit the generated files. The release version lives in the sibling version.meta.json (current_version), not here.",
"name": "databricks",
"description": "Databricks skills for the CLI, Apps, Lakebase, Model Serving, Lakeflow Jobs, Spark Declarative Pipelines, Declarative Automation Bundles (DABs), and classic-to-serverless migration.",
"category": "development",
"author": {
"name": "Databricks",
"url": "https://databricks.com"
},
"homepage": "https://github.com/databricks/databricks-agent-skills",
"repository": "https://github.com/databricks/databricks-agent-skills",
"license": "LicenseRef-Databricks",
"keywords_lead": ["databricks"],
"keywords_tail": ["data-engineering"],
"marketplace": {
"name": "databricks-agent-skills",
"description": "Databricks agent skills for AI coding assistants.",
"owner": { "name": "Databricks" },
"displayName": "Databricks Agent Skills",
"//source": "How each catalog points at the built bundle. The four plugin.json live under <subdir>/<target-dir>/, so agents fetch only <subdir> (a scoped/sparse clone). ref_template is the git ref the ref-capable catalogs (Claude/Codex/Copilot) use; it is `main`, where the committed bundle lives, so installs follow the latest committed bundle. The catalogs are not pinned to release tags by design. Cursor cannot pin a ref anyway and tracks the default branch. NOTE: the Codex entry still needs its `policy` block + a remote git-subdir-at-a-tag smoke test (open question in the proposal); add `codex_policy` here once verified.",
"source": {
"subdir": "plugins/databricks",
"repo": "databricks/databricks-agent-skills",
"git_url": "https://github.com/databricks/databricks-agent-skills.git",
"ref_template": "main"
}
},
"targets": {
"claude": {
"dir": ".claude-plugin",
"commands": "./commands/",
"hooks_render": {
"out": "hooks/hooks.json",
"dialect": "nested",
"env_root": "${CLAUDE_PLUGIN_ROOT}",
"tool_matcher": "Bash",
"description": true
}
},
"codex": {
"dir": ".codex-plugin",
"hooks_render": {
"out": "hooks/codex-hooks.json",
"dialect": "nested",
"env_root": "${PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}",
"tool_matcher": "(?i)bash|shell|exec",
"description": false
},
"interface": {
"displayName": "Databricks",
"shortDescription": "Databricks skills and hooks for Codex.",
"category": "development",
"brandColor": "#FF3621",
"logo": "./assets/databricks.png",
"composerIcon": "./assets/databricks.svg"
}
},
"copilot": {
"dir": ".github/plugin",
"displayName": "Databricks",
"hooks_render": {
"out": "hooks/copilot-hooks.json",
"dialect": "copilot",
"tool_matcher": "(?i)bash|shell|terminal"
}
},
"antigravity": {
"dir": ".",
"displayName": "Databricks",
"logo": "./assets/databricks.png"
},
"cursor": {
"dir": ".cursor-plugin",
"displayName": "Databricks Skills",
"commands": "./commands/",
"rules": "./rules/",
"hooks_render": {
"out": "hooks/cursor-hooks.json",
"dialect": "cursor",
"tool_matcher": "Shell",
"platform_flag": "--platform cursor"
}
}
},
"//skills": "Per-skill plugin metadata. Insertion order defines the keyword order in plugin.json: keywords = keywords_lead + [each skill's keyword] + keywords_tail. Repo-owned (does NOT live in SKILL.md frontmatter, which syncs from the internal source). Prompt-routing config lives in the separate routing block below.",
"skills": {
"databricks-core": { "keyword": "cli" },
"databricks-data-discovery": { "keyword": "data-discovery" },
"databricks-apps": { "keyword": "apps" },
"databricks-app-design": { "keyword": "app-design" },
"databricks-lakebase": { "keyword": "lakebase" },
"databricks-model-serving": { "keyword": "model-serving" },
"databricks-jobs": { "keyword": "jobs" },
"databricks-pipelines": { "keyword": "pipelines" },
"databricks-dabs": { "keyword": "dabs" },
"databricks-serverless": { "keyword": "serverless-compute" },
"databricks-serverless-migration": { "keyword": "serverless" },
"databricks-vector-search": { "keyword": "vector-search" },
"databricks-ai-functions": { "keyword": "ai-functions" },
"databricks-ai-runtime": { "keyword": "ai-runtime" },
"databricks-aibi-dashboards": { "keyword": "aibi-dashboards" },
"databricks-apps-python": { "keyword": "apps-python" },
"databricks-dbsql": { "keyword": "dbsql" },
"databricks-docs": { "keyword": "docs" },
"databricks-execution-compute": { "keyword": "execution-compute" },
"databricks-genie-agents": { "keyword": "genie-agents" },
"databricks-iceberg": { "keyword": "iceberg" },
"databricks-lakeflow-connect": { "keyword": "lakeflow-connect" },
"databricks-metric-views": { "keyword": "metric-views" },
"databricks-ml-training": { "keyword": "ml-training" },
"databricks-mlflow-evaluation": { "keyword": "mlflow-evaluation" },
"databricks-mlflow-tracing": { "keyword": "mlflow-tracing" },
"databricks-python-sdk": { "keyword": "python-sdk" },
"databricks-sandbox": { "keyword": "sandbox" },
"databricks-setup-local": { "keyword": "setup-local" },
"databricks-spark-structured-streaming": { "keyword": "structured-streaming" },
"databricks-synthetic-data-gen": { "keyword": "synthetic-data" },
"databricks-unity-catalog": { "keyword": "unity-catalog" },
"databricks-unity-gateway": { "keyword": "unity-gateway" },
"databricks-unstructured-pdf-generation": { "keyword": "pdf-generation" },
"databricks-zerobus-ingest": { "keyword": "zerobus" }
},
"//routing": "Prompt-router, Cursor, and Antigravity routing config, rendered by scripts/skills.py. strong/ambiguous/suppress are regex patterns (backslashes are doubled for JSON). The router loads hooks/_routing_data.json; the Cursor rule (rules/databricks-routing.mdc) and Antigravity rule (rendered directly into plugins/databricks/antigravity/rules/databricks-routing.md) use the same product-skill table.",
"routing": {
"strong": [
"\\bdatabricks\\b",
"\\bunity\\s+catalog\\b",
"\\bunity\\s+(?:ai\\s+)?gateway\\b",
"\\blakeflow\\b",
"\\blakebase\\b",
"\\bdbfs\\b",
"\\bdbutils\\b",
"\\bdbsql\\b",
"\\bdatabricks\\.yml\\b",
"\\basset\\s+bundle\\b",
"\\bdabs\\b",
"\\b(?:lakeflow|spark)\\s+declarative\\s+pipelines?\\b",
"\\bdelta\\s+live\\s+tables?\\b",
"\\bmosaic\\s+ai\\b",
"\\bdelta\\s+sharing\\b",
"\\bcloudfiles\\b"
],
"ambiguous": [
"\\bgenie\\b",
"\\bdelta\\s+(lake|tables?)\\b",
"\\bdeclarative\\s+pipelines?\\b",
"\\bmodel\\s+serving\\b",
"\\b(?:ai|vector)\\s+search\\b|(?<![\\w/.-])(?:ai|vector)-search(?![\\w/-])",
"\\bmlflow\\b",
"\\bpyspark\\b",
"\\bspark\\s*\\.\\s*(sql|read|write|table)\\b",
"\\bserverless\\s+(compute|warehouse|migration)\\b",
"\\bmedallion\\s+(architecture|tables?)\\b",
"\\bsql\\s+warehouse\\b",
"\\bauto\\s+loader\\b",
"\\bwhat\\s+tables?\\b",
"\\bwhich\\s+(catalog|schema)\\b",
"\\b(list|show|find)\\s+(the\\s+)?tables?\\b",
"\\bwhere\\s+does\\s+.{1,40}\\s+(data|table|live)\\b",
"\\binformation_schema\\b"
],
"//suppress": "Each pattern skips routing unless a strong term matched. Other vendors' search products (Azure AI Search, Vertex AI (Vector) Search, Bing (AI) search, Perplexity) are not suppress terms: the router blanks them before ambiguous matching (hooks/databricks-router.py _VENDOR_SEARCH_RE), so \"evaluate my azure ai search retriever with mlflow\" still routes via mlflow.",
"suppress": [
"\\bbigquery\\b",
"\\bredshift\\b",
"\\bsynapse\\b",
"\\bsnowflake\\b",
"\\bgit\\s+(commit|push|pull|status|log|diff|branch|rebase|merge|clone|stash)\\b",
"\\b(read|edit|open|write|create|delete)\\s+(the\\s+|this\\s+|a\\s+|that\\s+)?file\\b",
"\\bunit\\s+tests?\\b",
"\\bnpm\\b",
"\\bpip\\s+install\\b",
"\\bdocker\\b",
"\\bkubernetes\\b",
"\\bjenkins(?:file)?\\b"
],
"//table": "Ordered product-skill routing table shared by the router instruction, Cursor rule, and Antigravity rule. A skill's `note` is appended after the skill name.",
"table": [
{ "label": "Jobs / Lakeflow / workflows", "skill": "databricks-jobs" },
{ "label": "Pipelines / Lakeflow Spark Declarative Pipelines (formerly DLT)", "skill": "databricks-pipelines" },
{ "label": "Apps / AppKit", "skill": "databricks-apps" },
{ "label": "Asset Bundles / DABs / databricks.yml", "skill": "databricks-dabs" },
{ "label": "Model Serving / endpoints", "skill": "databricks-model-serving" },
{ "label": "Lakebase / Postgres", "skill": "databricks-lakebase" },
{ "label": "AI Search (formerly Vector Search) / RAG", "skill": "databricks-vector-search" },
{ "label": "Compute for new jobs and pipelines / serverless vs classic / STANDARD vs PERFORMANCE_OPTIMIZED", "skill": "databricks-serverless" },
{ "label": "Classic-to-serverless migration", "skill": "databricks-serverless-migration" },
{ "label": "Data discovery / finding & exploring data / natural-language data Q&A / SQL generation (Genie)", "skill": "databricks-data-discovery" },
{ "label": "Genie Agents (formerly Genie Spaces): building, managing & tuning a curated Genie Agent over tables and documents; document Q&A / chat with PDFs; replaces Knowledge Assistant & Supervisor Agent (legacy)", "skill": "databricks-genie-agents" },
{ "label": "AI Functions (ai_query, ai_classify, ai_extract, ai_parse_document)", "skill": "databricks-ai-functions" },
{ "label": "AI Runtime (AIR) / serverless GPU training / custom training Docker images", "skill": "databricks-ai-runtime" },
{ "label": "AI/BI dashboards", "skill": "databricks-aibi-dashboards" },
{ "label": "Python data apps (Streamlit, Dash, Gradio, Flask, FastAPI)", "skill": "databricks-apps-python" },
{ "label": "Databricks SQL warehouses", "skill": "databricks-dbsql" },
{ "label": "Databricks documentation lookup (llms.txt)", "skill": "databricks-docs" },
{ "label": "Executing code on Databricks compute", "skill": "databricks-execution-compute" },
{ "label": "Databricks Sandbox: serverless sandboxes for untrusted / agent-generated code (Databricks SDK)", "skill": "databricks-sandbox" },
{ "label": "Local Python environment matched to Databricks compute (setup-local, Databricks Connect)", "skill": "databricks-setup-local" },
{ "label": "Apache Iceberg tables / UniForm / Iceberg REST Catalog", "skill": "databricks-iceberg" },
{ "label": "Lakeflow Connect managed ingestion connectors", "skill": "databricks-lakeflow-connect" },
{ "label": "Metric Views / governed metrics", "skill": "databricks-metric-views" },
{ "label": "ML model training", "skill": "databricks-ml-training" },
{ "label": "MLflow agent evaluation / scorers / optimization", "skill": "databricks-mlflow-evaluation" },
{ "label": "MLflow tracing / observability / trace analysis / metrics", "skill": "databricks-mlflow-tracing" },
{ "label": "Python SDK / Databricks Connect / REST API", "skill": "databricks-python-sdk" },
{ "label": "Spark Structured Streaming", "skill": "databricks-spark-structured-streaming" },
{ "label": "Synthetic / test data generation (Faker)", "skill": "databricks-synthetic-data-gen" },
{ "label": "Unity Catalog governance, access control & system tables", "skill": "databricks-unity-catalog" },
{ "label": "Unity Gateway (formerly Unity AI Gateway): model services, MCP services & model provider services", "skill": "databricks-unity-gateway" },
{ "label": "Synthetic PDF generation for RAG", "skill": "databricks-unstructured-pdf-generation" },
{ "label": "Zerobus streaming ingest", "skill": "databricks-zerobus-ingest" }
],
"instruction_preamble": "[DATABRICKS] This request is Databricks-related. Handle it through the Databricks skills rather than ad hoc commands. Use the Skill tool to load `databricks-core` first (the parent skill: CLI, auth, profile selection, data exploration), then load the product skill that matches the request:",
"instruction_closing": "Then follow the skill's guidance (it drives the `databricks` CLI). If no product skill fits, databricks-core alone is enough.",
"reminder": "[DATABRICKS] Databricks-related prompt: keep routing through the Databricks skills (databricks-core plus the matching product skill); load any that are not already loaded.",
"rule_description": "Routing for any Databricks task -- CLI, auth, profiles, data exploration, Jobs/Lakeflow, Spark Declarative Pipelines (formerly DLT), Apps/AppKit, Asset Bundles/DABs, Model Serving, Unity Gateway, Lakebase/Postgres, AI Search (formerly Vector Search)/RAG, Genie, and classic-to-serverless migration. Apply when the request is Databricks-related so the Databricks skills are loaded instead of ad hoc commands.",
"rule_preamble": [
"This request is Databricks-related. Handle it through the Databricks skills",
"rather than ad hoc commands. Load the `databricks-core` skill first (the parent:",
"CLI, auth, profile selection, data exploration), then load the product skill",
"that matches the request:"
],
"rule_closing": [
"Then follow the skill's guidance (it drives the `databricks` CLI). If no product",
"skill fits, databricks-core alone is enough."
]
},
"//hooks": "Canonical hook wiring, rendered into each target's dialect by scripts/skills.py: hooks/hooks.json (Claude, auto-loaded), codex-hooks.json, copilot-hooks.json, cursor-hooks.json. The shared content (the scripts, their events, the description, the session-start matcher) lives here once; per-target dialect knobs (schema shape, event casing, env var, command form, tool matcher, whether the router is wired) live under targets.*.hooks_render. The router is wired only on Claude + Codex (the other two cannot inject context from a prompt-submit hook).",
"hooks": {
"description": "Databricks plugin hooks: route Databricks prompts into the skills, prime session context, and hint on auth failures.",
"session_start_matcher": "startup|clear|compact",
"entries": [
{ "id": "router", "event": "prompt_submit", "script": "databricks-router.py" },
{ "id": "context", "event": "session_start", "script": "databricks-context.py" },
{ "id": "auth", "event": "post_tool", "script": "databricks-auth-helper.py" }
]
}
}