From better-dev
Use when a product needs a live deploy surface that does not exist yet - "deploy this" or "get it live" on a greenfield product with no platform project, repo connection, domain, or per-environment config - when /release-promotion finds no recorded deploy rules and /guardrails-install has nothing to observe because nothing was ever created, or when a feature needs a product service provisioned (a database, an auth provider, transactional email, a domain). The deploy-surface sibling of /browser-capability - the same source-a-capability-on-a-gap practice.
How this skill is triggered — by the user, by Claude, or both
Slash command
/better-dev:deploy-capabilityThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Every deployment-adjacent skill reads a deploy surface; none of them creates one. `/guardrails-install`
Every deployment-adjacent skill reads a deploy surface; none of them creates one. /guardrails-install
records only what it can observe, and /release-promotion with no recorded rules settles NEEDS_INPUT
naming the recorder - which, on a greenfield product, observes nothing and sends the question straight
back. The circle breaks only when someone creates the surface: a platform project, the repo connected
to it, a domain answering, the environment config uploaded. That is a capability gap, not a missing
line of code, and it fills the way /browser-capability fills a missing browser: compose what the host
already wires, walk the operator through what only they can create, source a tool for the rest.
One distinction runs first. deploy-surface: none is the correct record for a library or a CLI - a
deliberate no, settled once. This skill is for the other case: a product that should deploy and has no
surface yet. Unsure which this repo is? That is the operator's question, asked before anything is
created - creating a surface nobody wanted is as wrong as recording none on a product that ships.
Read .better-dev/overrides.md first. A repo may already pin its platform, forbid new infrastructure,
or name the team that owns provisioning - honor that before any rung below.
Write the missing surface as the probe it has to pass: "the app answers 200 at a public URL," "a push
to the integration branch produces a deployment," "https://<domain> serves the landing page." That
line is the acceptance test for whichever rung fills the gap, and later the premise-verify
/guardrails-install runs before recording - so it names a URL and an expected response, not "set up
hosting."
whoami
answers). Where one exists, compose it - it creates the project, connects the repo, and returns the
URLs this skill needs. Its output is a premise to verify, not a fact: fetch the URL it reports and
read the status yourself./tool-sourcing and
let it run its course - discover, vet, try ephemerally, risk-gate, adopt. Don't reimplement its
judgment or safety gate here.A created surface the rest of better-dev cannot see is the same dead-end one step later. On success,
run /guardrails-install with what was just observed - the platform, the production URL, the health
probe, how previews resolve - so it premise-verifies and records the deploy-* rules exactly as it
would on a repo where the surface predated it. This skill creates; the recorder records; nothing
downstream ever reads a value this skill wrote by hand. /release-promotion's next run then finds
recorded rules where its dead-end used to be. And a surface that now exists can now be seen -
/observability-install wires the error tracking and alert channel the first release will need.
A deploy surface is rarely the only thing a greenfield product has to provision. A database, an auth
provider, transactional email whose deliverability actually holds, a purchased domain and its DNS -
each is the same three-rung shape, per service. The per-service specifics - connection-string handoff,
SPF/DKIM checks, DNS verification - live in provisioning.md; read it when the gap is a service
rather than the surface itself.
npx claudepluginhub yoelgal/better-devCreates, edits, and verifies skills using a test-driven development approach with pressure scenarios and subagents.