Add or resolve an `availability` frontmatter field for a docs.getdbt.com page, so the page renders the correct applicability badge (where a feature runs, what plan/access it needs, which dbt engine version). Use when asked to add an availability badge, mark a page as platform/local/Enterprise-only, or figure out what availability value a feature needs.
npx skills add https://github.com/dbt-labs/docs.getdbt.com --skill add-availability-badge
Add the availability field to a page's frontmatter so it renders the right
applicability badge (engine, surface, access/plan). Source of truth:
Notion: How to use and add applicability badges
and src/components/availability/availabilityPresets.js (paths below are
relative to website/, the repo root for this project). The spec is inlined
below — re-fetching the Notion doc on every run wastes tokens on a stable,
code-backed spec. If something here looks wrong, check
src/components/availability/availabilityPresets.js first — it's the actual
render logic — before trusting the Notion doc or this file.
platform_login") — validate it existsin the preset table below, insert as-is.
feature", "CLI-only, no platform") — resolve it to a preset if one
fits, otherwise build a custom object from the field reference. Ask a
clarifying question ONLY when genuinely ambiguous — for example, if the
feature skips a plan tier (needs plans array, not minPlan), or you
can't tell if login is required outside the platform surface.
availability. This skillinserts; it doesn't audit or fix existing badges. If asked to fix an
existing one, say so and stop — that's out of scope.
availability key in the page's YAMLfrontmatter block — same level as title, description, etc.
without opening a browser — see rendering rules below.
Presets bundle surface/access/engine into one name. Confirmed current
list from availabilityPresets.js:
| Preset | Resolves to | Renders as |
|---|---|---|
| all_users | access: free (no surface/engine) | *(no badge — applies to everyone)* |
| platform_login | surface: platform, access: login_required | "dbt platform" (login segment suppressed on platform) |
| local_free | surface: local, access: free | "Local development" |
| local_all | surface: local_development | "Local development" |
| everywhere_usage | access: usage_based | "Usage-based" (+ "Login required" if not platform) |
---
title: Managing environments
availability: platform_login
---
Preset vs. location name: a bare location value (local,
local_development, platform) used alone as availability: local is
valid too — it sets surface only, nothing else. Don't use bare platform
alone, though — it renders identically to platform_login but doesn't
document the login requirement for future editors. Always use the
platform_login preset instead of typing platform by itself.
---
availability:
surface: platform # local | local_development | platform | omit = every surface
access: paid_plan # free | login_required | usage_based | paid_plan | omit = every access level
minPlan: enterprise # only with access: paid_plan. starter | enterprise | enterprise_plus
# plans: [starter, enterprise_plus] # alternative to minPlan — use ONE, never both
engine: v2 # v1 | v2 | omit (or "all") = both engines
---
Only include fields the page actually needs — every field is independently
optional.
| Field | Values | Notes |
|---|---|---|
| surface | local, local_development, platform | Omit = every surface. local = CLI-only, no platform equivalent. local_development = local tool that also works with platform-connected projects. |
| access | free, login_required, usage_based, paid_plan | Omit = every access level. free only renders a badge segment when paired with surface: platform (elsewhere free is assumed, no badge). login_required is hidden on surface: platform (login is already implied). |
| minPlan | starter, enterprise, enterprise_plus | Only with access: paid_plan. Expands upward — minPlan: starter renders "Starter, Enterprise, Enterprise+". Pick the lowest tier that has the feature. |
| plans | array, e.g. [starter, enterprise_plus] | Alternative to minPlan, for the rare case that skips a tier in the ladder. Use one or the other, never both. |
| engine | v1, v2 | Omit or all = both. v1 = dbt Core 1.x. v2 = dbt Fusion engine 2.0+. |
"Available in v2 \| dbt platform \| Enterprise, Enterprise+" — regardless
of the order fields appear in the YAML.
\| denotes a rendered separator in the badge text, not <VersionBlock> or <Tabs> — don't insert literal <VersionBlock>/<Tabs> for this.
paid_plan always spells out every tier minPlan expands to (e.g."Enterprise, Enterprise+"), never just the highest or lowest one.
engine → "Version", surface → "Where",access → "Access".
CLI-only, dbt Core 1.x only:
availability:
surface: local
engine: v1
Renders: "Available in v1 \| Local development"
Applies to literally everyone:
availability: all_users
Renders: nothing — intentional, a badge here would be noise.
Enterprise+ platform feature:
availability:
surface: platform
access: paid_plan
minPlan: enterprise
Renders: "dbt platform \| Enterprise, Enterprise+"
Billed on usage, not plan-gated:
availability:
surface: platform
access: usage_based
Renders: "dbt platform \| Usage-based"
Skips a tier (Starter and Enterprise+, not plain Enterprise):
availability:
surface: platform
access: paid_plan
plans: [starter, enterprise_plus]
Renders: "dbt platform \| Starter, Enterprise+"
Fusion-only, also works on platform-connected projects:
availability:
surface: local_development
engine: v2
Renders: "Available in v2 \| Local development"
minPlan and plans — pick one.availability: platform bare — use the platform_loginpreset so the login requirement is documented for future editors, even
though both render identically.
local,local_development, platform) — the renderer tells them apart by
checking if the value matches a known surface first. If you invent a new
preset name later, don't name it after a surface value.
availability blocks thatalready exist on a page. Flag it to the user and stop instead of editing.
.vscode/docs.code-snippets autocomplete snippet mentioned in theNotion doc (from PR #9677) wasn't found in this checkout as of this
writing — don't assume it's present; check before telling a user to rely
on it.
Integration with protocols.io API for managing scientific protocols. This skill should be used when working with protocols.io to search, create, update, or publish protocols; manage protocol steps and materials; handle discussions and comments; organize workspaces; upload and manage files; or integrate protocols.io functionality into workflows. Applicable for protocol discovery, collaborative protocol development, experiment tracking, lab protocol management, and scientific documentation.
Analyzes job descriptions and generates tailored resumes that highlight relevant experience, skills, and achievements to maximize interview chances
Generate Excalidraw diagrams from natural language descriptions. Use when asked to "create a diagram", "make a flowchart", "visualize a process", "draw a system architecture", "create a mind map", or "generate an Excalidraw file". Supports flowcharts, relationship diagrams, mind maps, and system architecture diagrams. Outputs .excalidraw JSON files that can be opened directly in Excalidraw.
Build and distribute Expo development clients locally or via TestFlight
Use when you have a written implementation plan to execute in a separate session with review checkpoints
Data structure for annotated matrices in single-cell analysis. Use when working with .h5ad files or integrating with the scverse ecosystem. This is the data format skill—for analysis workflows use scanpy; for probabilistic models use scvi-tools; for population-scale queries use cellxgene-census.
Benchling R&D platform integration. Access registry (DNA, proteins), inventory, ELN entries, workflows via API, build Benchling Apps, query Data Warehouse, for lab data management automation.
Comprehensive molecular biology toolkit. Use for sequence manipulation, file parsing (FASTA/GenBank/PDB), phylogenetics, and programmatic NCBI/PubMed access (Bio.Entrez). Best for batch processing, custom bioinformatics pipelines, BLAST automation. For quick lookups use gget; for multi-service integration use bioservices.
Take dbt-labs/add-availability-badge from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.