Polish plugin manifest + add self-marketplace; rename Claude plugin to 'databricks'#77
Open
jamesbroadhead wants to merge 8 commits into
Open
Polish plugin manifest + add self-marketplace; rename Claude plugin to 'databricks'#77jamesbroadhead wants to merge 8 commits into
jamesbroadhead wants to merge 8 commits into
Conversation
…arketplace submission Polish for submission to the official Anthropic Claude Code marketplace (claude.ai/settings/plugins/submit): - Refresh plugin.json description to match the 8 skills actually shipped today (drop "Unity Catalog", add Lakebase, Jobs, Pipelines, serverless migration). - Add `homepage` and explicit `license` (LicenseRef-Databricks) fields. - Add `author.url` for the marketplace listing. - Bump version 0.1.0 -> 0.2.0 to reflect the additional skills shipped since 0.1.0. Also add a top-level .claude-plugin/marketplace.json so the repo is directly installable in Claude Code without waiting on the official marketplace review: /plugin marketplace add databricks/databricks-agent-skills /plugin install databricks-skills@databricks-agent-skills README updated to document the new install path and to enumerate all 8 shipped skills (was only listing databricks-apps). Co-authored-by: Isaac Signed-off-by: James Broadhead <james.broadhead@databricks.com>
We don't want to advertise marketplace-style install in the README; `databricks experimental aitools install` stays as the recommended, client-agnostic path. The `.claude-plugin/marketplace.json` from the previous commit is still useful (anyone who explicitly wants the plugin-style install can use it, and it's what the Anthropic marketplace submission references), but the README shouldn't push users there. Co-authored-by: Isaac Signed-off-by: James Broadhead <james.broadhead@databricks.com>
When a new skill lands without a corresponding bump in
.claude-plugin/plugin.json / .claude-plugin/marketplace.json, the
Claude Code marketplace listing silently goes stale. Extend the
existing `scripts/skills.py validate` (already a required CI gate via
.github/workflows/validate-manifest.yml) to catch this drift.
What's enforced:
- SKILL_METADATA now carries a `plugin_keyword` per skill. validate
fails if any skill's plugin_keyword is missing from plugin.json
`keywords` — so adding a new skill forces a thoughtful keyword
update.
- plugin.json `description` and marketplace.json plugin entry
`description` must match exactly. They drift independently
otherwise (already happened on this PR — caught and fixed:
"DABs" vs "Declarative Automation Bundles (DABs)").
Also widen the validate-manifest.yml `paths:` filter to cover
.claude-plugin/** so edits to the manifests themselves get checked.
Tested locally:
- clean tree: `python3 scripts/skills.py validate` -> "Everything is up to date."
- drop a keyword: surfaces the missing-keyword error.
- drift the descriptions: surfaces the mismatch error.
Co-authored-by: Isaac
Signed-off-by: James Broadhead <james.broadhead@databricks.com>
Match the github/gitlab/firebase/terraform/linear naming convention in the official Anthropic Claude Code marketplace — a brand-owner plugin gets the brand-owner name. Scoped to .claude-plugin/ only. .cursor-plugin/plugin.json is intentionally left as "databricks-skills" — that's Cursor's marketplace namespace, already published, and a rename there would break existing Cursor installs. Skill names (databricks-core, databricks-apps, ...) are unchanged, so they'll surface in Claude Code as /databricks:databricks-core etc. The prefix doubling is awkward but not user-visible in skill auto-discovery; renaming the skills themselves is a separate, larger change that would need to roll through Cursor too. Co-authored-by: Isaac Signed-off-by: James Broadhead <james.broadhead@databricks.com>
The official `claude plugin validate .` tool rejects `source: "."`: ✘ plugins.0.source: Invalid input ✘ Validation failed The Anthropic canonical convention (anthropics/claude-code, anthropics/claude-plugins-official) is always `./<subdir>` paths. `"./"` is the minimum-touch fix that satisfies the schema while keeping the plugin rooted at the repo root. Caught by two-of-two parallel GPT reviewers via /ace-review against this PR before merge. Co-authored-by: Isaac Signed-off-by: James Broadhead <james.broadhead@databricks.com>
…ide) The name disparity between .claude-plugin (databricks) and .cursor-plugin (databricks-skills) was a footgun for anyone reading the repo. Align them — the Cursor plugin uses the brand name too, matching the github/gitlab/terraform/linear convention used by both marketplaces. Also update the README install instruction: /add-plugin databricks-skills -> /add-plugin databricks TODO (post-merge): re-publish to the Cursor marketplace under the new slug. The existing listing at cursor.com/marketplace/skills/databricks will need updating; Eric Zakariasson (cursor) filed the original .cursor-plugin/plugin.json (PR #14) and is the right contact for whether the rename needs a fresh submission or an in-place update. Tracked as a follow-up issue on this repo. Co-authored-by: Isaac Signed-off-by: James Broadhead <james.broadhead@databricks.com>
3 tasks
Earlier in this PR I renamed .cursor-plugin/plugin.json name from databricks-skills -> databricks to match the Claude side. That was a mistake: the Cursor marketplace listing at cursor.com/marketplace/databricks shows the actual install command as `/add-plugin databricks-skills` — the URL slug `databricks` is a display-only marketing slug Cursor picked, not the install identifier. The install ID has been databricks-skills since the plugin was first listed (~2026-02-12), and multiple Databricks teams have been pointing customers at that listing for months. Renaming the install ID would orphan every existing Cursor user's ~/.cursor/plugins/databricks-skills/ cache from auto-updates until they manually reinstall under the new name. Not worth the consistency win. Restore: .cursor-plugin/plugin.json: name -> "databricks-skills" README.md: /add-plugin databricks-skills Add .cursor-plugin/NOTES.md explaining why the asymmetry between .cursor-plugin (databricks-skills) and .claude-plugin (databricks) is deliberate, with the long-term rename plan deferred to issue #78. Claude side is unchanged — never published anywhere as databricks-skills, so it's free to use the cleaner brand-name identifier. Co-authored-by: Isaac Signed-off-by: James Broadhead <james.broadhead@databricks.com>
Issue #78 closed as not planned. Replace the speculative "future major-version bump" language with an explicit "this asymmetry is permanent; leave it alone." Co-authored-by: Isaac Signed-off-by: James Broadhead <james.broadhead@databricks.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Polish for submitting this repo to the official Anthropic Claude Code marketplace via claude.ai/settings/plugins/submit:
.claude-plugin/plugin.jsondescription to match the 8 skills shipped today (drop the lingering "Unity Catalog" mention; add Lakebase, Jobs, Pipelines, serverless migration explicitly)homepage, explicitlicense: LicenseRef-Databricks,author.urldatabricks-skills→databricksto match the github/gitlab/terraform/linear single-brand-word convention. Claude side only — never published, no breakage..claude-plugin/marketplace.json(withsource: "./", verified against the officialclaude plugin validate .—source: "."was caught by/ace-reviewand fixed).claude-plugin/**intoscripts/skills.py validateso CI fails when (a) a new skill is added without a matchingplugin_keywordinplugin.jsonkeywords, or (b) plugin/marketplace descriptions drift apart. Caught and fixed a real drift on this PR ("DABs" vs "Declarative Automation Bundles (DABs)")Cursor side intentionally NOT renamed.
.cursor-plugin/plugin.jsonnamestays asdatabricks-skillsand the README/add-plugincommand matches. The Cursor marketplace URL slugdatabricksis display-only — actual install command is/add-plugin databricks-skills, and renaming would orphan existing user installs from auto-updates. Documented in new.cursor-plugin/NOTES.md. Long-term rename tracked as #78.Why
Slack thread — fresh ask to release a Databricks Claude plugin in the official Anthropic marketplace. This repo already meets the Anthropic plugin manifest spec; this PR polishes the metadata so a reviewer doesn't bounce it for stale claims (UC) or missing fields (homepage/license), and the new CI check keeps it from drifting again as more skills land.
Review trail
Reviewed with
/ace-review(two parallel GPT models). Both flaggedsource: "."as invalid;claude plugin validate .confirmed → fixed to"./"in commit8841de4. Other findings (type-checking in-tree JSON, alleged install-path breakage from rename) were false positives. The Cursor-side rename was applied and then reverted after manually verifying that the Cursor marketplace install ID isdatabricks-skills, notdatabricks(commit54ec175).Test plan
python3 scripts/skills.py validatepasses (verified locally — clean tree, dropped-keyword negative, description-drift negative all behave correctly)claude plugin validate .passes (verified locally)jq empty .claude-plugin/plugin.json && jq empty .claude-plugin/marketplace.json && jq empty .cursor-plugin/plugin.jsonThis pull request and its description were written by Isaac.