Commands
push
push-version
push is addressed at a slug and creates the skill when that slug is unknown. push-version is addressed at a skill that already exists — by id or by slug — and answers 404 not_found when it does not. A release pipeline pinned to a skill id wants this one, so a rename cannot silently mint a second skill.
An unknown skill is a hard error rather than a create — that is the entire difference from
push:
client.skills.pushVersion in the SDK and POST /v1/skills/{id}/versions in the API reference.
Attaching to an agent
Skills are referenced on the agent by slug. A bare slug floats to the latest version at session start; aslug@N reference pins an immutable version that never moves when someone pushes a new SKILL.md:
refund-policy@3 is frozen to version 3 for reproducibility, while escalation-matrix resolves to the latest version at session start. Use vetta skill versions <slug> to see the pinnable version numbers.
A naive/ prefix names the platform catalogue instead of your organization’s skills: naive/landing-page-copy floats and naive/landing-page-copy@1 pins, with the same rules. Your own landing-page-copy and the platform’s never collide.
catalog
The platform publishes a small catalogue of skills any agent can reference asnaive/<slug>. Without a slug, catalog lists the newest version of each; --tag narrows it to one family (agency, seo, media, …) and --search is free text over the slug, name and description.
naive/<slug> ref hands an agent today. The version in the answer is the number to pin.
The same reads are
client.skills.catalog.list(), client.skills.catalog.get() and client.skills.catalog.retrieve() in the SDK and GET /v1/skills/catalog in the API reference.
version
vetta skill versions lists the version numbers; vetta skill version returns one of them in full,
and it is the only command that returns the skill’s content. That split is deliberate — a
history listing stays small no matter how large the skills are.
sha256 is over the content exactly as stored, so a pin of slug@N is reproducible: re-pushing
identical bytes is a no-op and mints no new version.