cli dependency does not install it, and declaring a local_write safety class does not authorize the mutation. Both constructs exist to make the skill’s assumptions explicit and inspectable.
Commands
Commands are named instruction templates. They belong in thecommands mapping and are referenced by states, rules (after_success), recipes (run_command), and route checks.
Safety Classes
Safety class is a declaration, not enforcement. It gives the harness a concrete pre-tool-call classification.
Rules can route around unsafe commands. Commands must not route around rules.
Command Templates
template is a string pattern, not a shell command. v0 does not mandate a template engine. Implementations should treat the template as a concrete example unless they explicitly support rendering with a variable substitution syntax.
Dependencies
Dependencies declare tools, files, environment variables, services, adapters, browsers, or packages needed by commands or routes. They belong in the top-leveldependencies mapping and are referenced by commands, code blocks, recipes, and dependency provision elicitations.
Dependency Kinds
The
check sub-field describes how to determine presence:
permission sub-field describes whether use needs user approval:
provision sub-field describes install or connection options that must be selected through elicitation before mutation:
Checking Dependencies
cli, file, and env dependencies. package, service, adapter, and browser dependencies are reported as requiring harness-level checks.
Artifacts
Artifacts name the files or data products that commands, code blocks, and recipes consume or produce. They make dataflow explicit without requiring a workflow engine.Artifact Kinds
produced_by and consumed_by take executable refs only. Valid kind values are command, code, and recipe. Routes and rules can require checks, schedule recipes, or reference imports and resources, but they are not artifact producers or consumers.
Recipes
Recipes are structured procedures — especially useful for multi-step workflows where the order and conditions of import loading, command execution, and artifact production matter.ordered is true, the harness should execute steps in sequence. When false or absent, the harness may choose execution order.
Recipe Steps
Each step is a single-key object naming the step kind and its target id:Code Blocks
Code blocks preserve executable knowledge extracted from source material or written inline. They live in the top-levelcode mapping.
source is either inline YAML (source.inline: |) or a file reference (source.file: path/to/script.sh). Code safety uses a separate sub-object with boolean flags (mutates_input, writes_files, network) rather than the string safety class used by commands.
Snippets
Snippets carry prose that should remain prose: questions, user-facing copy, completion prompts, or short explanations. They belong in the top-levelsnippets mapping and are referenced by states.
SKILL.md loaders can stay small without losing product voice. It also makes user-facing copy reviewable and testable independently of routing logic.
Closures
closures is an open mapping for post-task behavior. Common closure names describe actions like summarizing cost, writing a digest, asking to remember, or asking to share with a team.
Rule.after_success, which ties them to the rule that made them necessary:
Complete Command Example
The following shows a command with a safety class, dependency requirement, and parse hints:safety: read_only declaration tells the harness this command reads without mutating state. The requires block declares that skillspec_cli must be present and skill.spec.yml must exist before the command can run. parse provides extraction hints a harness can use to pull structured values from command output without needing to re-parse the raw text.