Skip to content

scripts(skills): drop SKILL_METADATA descriptions, derive from frontmatter#100

Merged
simonfaltum merged 2 commits into
mainfrom
simonfaltum/drop-skill-metadata
May 28, 2026
Merged

scripts(skills): drop SKILL_METADATA descriptions, derive from frontmatter#100
simonfaltum merged 2 commits into
mainfrom
simonfaltum/drop-skill-metadata

Conversation

@simonfaltum
Copy link
Copy Markdown
Member

@simonfaltum simonfaltum commented May 27, 2026

Follow-up to #95 (per comment).

Why

SKILL_METADATA in scripts/skills.py carried one field per stable skill (description). Each skill already has the same description: in its SKILL.md frontmatter, and _build_experimental_entry already reads from frontmatter via extract_description_from_skill. Stable skills duplicated, and the dict copy won silently. The two had drifted on main (e.g. databricks-apps: dict said "Databricks Apps development and deployment (evaluates analytics vs synced tables data access)" while frontmatter says "Build apps on Databricks Apps platform. Use when ...").

Frontmatter is the natural source of truth: it is what agents see when deciding whether to activate the skill, and the agents/openai.yaml short_description is already derived from it. Making the manifest description follow the same path closes the gap.

Changes

_build_stable_entry now calls synthesize_short_description(skill_dir) (the same helper used to build agents/openai.yaml short_description). It reads from frontmatter and strips the . Use when ... / . Use this ... / . Triggers ... / . ALWAYS ... trigger phrases, leaving a clean marketplace blurb.

The description field is dropped from the SKILL_METADATA dict. The dict stays (per-skill plugin_keyword) because #77's check_plugin_manifest validation looks them up to verify .claude-plugin/plugin.json keyword coverage. Only the duplicated description field goes.

Diff for the 8 stable skill descriptions in manifest.json:

Skill Before (dict) After (synthesized from SKILL.md)
databricks-apps Databricks Apps development and deployment (evaluates analytics vs synced tables data access) Build apps on Databricks Apps platform.
databricks-core Core Databricks skill for CLI, auth, and data exploration Databricks CLI operations: auth, profiles, data exploration, and bundles. Contains up-to-date guidelines for Databricks-related CLI tasks.
databricks-dabs Declarative Automation Bundles (DABs) for deploying and managing Databricks resources Create, configure, validate, deploy, run, and manage Declarative Automation Bundles (DABs, formerly Databricks Asset Bundles).
databricks-jobs Develop and deploy Lakeflow Jobs on Databricks via DABs, Python SDK, or the CLI, covers all task types, triggers, notifications, and worked examples Develop and deploy Lakeflow Jobs on Databricks via DABs, Python SDK, or the CLI.
databricks-lakebase Databricks Lakebase Postgres: projects, scaling, connectivity, synced tables, and Data API Databricks Lakebase Postgres: projects, scaling, connectivity, Lakebase synced tables, and Data API.
databricks-model-serving Databricks Model Serving endpoint management Manage Databricks Model Serving endpoints via CLI.
databricks-pipelines Databricks Spark Declarative Pipelines (SDP) for ETL and streaming Develop Lakeflow Spark Declarative Pipelines (formerly Delta Live Tables) on Databricks.
databricks-serverless-migration Migrate Databricks workloads from classic compute to serverless compute, including compatibility checks and concrete fixes Migrate Databricks workloads from classic compute to serverless compute.

Two stable skills had frontmatter descriptions that didn't synthesize cleanly (long single sentence, no trigger marker, so the 200-char length cap kicked in mid-word). Reshaped both to put the blurb in the first sentence followed by Use when ...:

  • databricks-dabs: split DABs ... for Databricks resources including ... into manage DABs. Use when working with Databricks resources including .... Also dropped em dashes per house style.
  • databricks-serverless-migration: moved the Use for ... trigger list up to the second sentence (rephrased as Use when ...), kept the rest.

Also dropped the unused min_cli_version branch in _build_stable_entry. No stable skill currently sets it; same dead-plumbing rationale as #95.

Experimental skills are untouched, they still use extract_description_from_skill (verbatim frontmatter, including any Use when ... triggers). That contract was deliberate and is out of scope for this change.

Test plan

  • python3 scripts/skills.py generate clean.
  • python3 scripts/skills.py validate passes.
  • All 8 stable descriptions in manifest.json are complete sentences (no mid-word truncation).
  • Experimental descriptions in manifest.json unchanged (git diff manifest.json shows only stable description deltas).
  • CI green on this branch.

… from frontmatter

The SKILL_METADATA dict duplicated the `description:` already present in
each stable skill's SKILL.md frontmatter, and the two had silently
drifted (PR #95 follow-up).

_build_stable_entry now calls synthesize_short_description, the same
helper used to build agents/openai.yaml short_description. It reads from
SKILL.md frontmatter and strips ". Use when ..." / ". Triggers ..." /
". ALWAYS ..." / ". Use this ..." trigger phrases, leaving a clean
marketplace blurb for aitools list.

Two stable skills had frontmatter descriptions that didn't synthesize
cleanly (long single sentence with no trigger marker). Reshaped both
to put the blurb in the first sentence followed by a Use when ...
trigger list:

- databricks-dabs: split "DABs ... for Databricks resources including
  ..." into "manage DABs. Use when working with Databricks resources
  including ...". Also dropped em dashes per house style.
- databricks-serverless-migration: moved the "Use for ..." trigger list
  up to the second sentence (as "Use when ..."), kept the rest.

Also dropped the unused min_cli_version branch in _build_stable_entry
(no stable skill sets it; same dead-plumbing rationale as #95).

Co-authored-by: Isaac
@simonfaltum simonfaltum requested review from a team and lennartkats-db as code owners May 27, 2026 10:40
@simonfaltum simonfaltum requested a review from pkosiec May 27, 2026 11:48
Copy link
Copy Markdown
Member

@pkosiec pkosiec left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Resolves scripts/skills.py conflicts with #91 (unified Codex metadata)
and #77 (plugin manifest validation).

- Strip `description` field from SKILL_METADATA (point of this PR);
  keep `plugin_keyword` field because #77 added a validation that
  consumes it for .claude-plugin/plugin.json keyword coverage checks.
- Drop the openai_yaml existence check from `_build_stable_entry`;
  #91 moved that check into `check_codex_metadata` at validate time.

Co-authored-by: Isaac
@simonfaltum simonfaltum changed the title scripts(skills): drop SKILL_METADATA, derive stable descriptions from frontmatter scripts(skills): drop SKILL_METADATA descriptions, derive from frontmatter May 27, 2026
@simonfaltum simonfaltum merged commit e4bd8c2 into main May 28, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants