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.
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.