Skip to main content
Imports are v0’s runtime-loadable instruction layer. They exist for Markdown or text that the harness should deliberately read while executing a skill: shared operating policy, branch-specific references, procedure documents, examples, or another skill document. Importing Markdown is not inheritance — it never merges another spec into the current document, never creates routes, rules, commands, or tests implicitly, and never weakens forbids. The current skill.spec.yml remains the only grammar tree.

Import Fields

Import Roles

Choosing the right role tells the harness — and future readers — how to treat the imported content.
Rules that apply before any task action. Always load at startup. Use for plugin-level or team-wide policies that every skill in a package must obey.
Reference documents loaded only when a particular route, rule, or recipe is active. Connect via used_by or requires.imports.
Procedure documents describe how to execute a task path. Connect them to a recipe that uses load_import steps, or via used_by.
Worked examples of correct behavior. On-demand only; connect to a code block or recipe that references them.
A full skill document loaded as active guidance. Useful for skills that hand off to or compose with another skill’s prose without merging its spec structure.

Load Modes

Use always sparingly. Every always import adds to the agent’s context window before a single task action runs. Reserve it for authoritative policy documents, not convenience references.

Sections

section narrows an import to a single named heading and its child content until the next heading at the same or higher level.
When section is absent, the whole file is the import body.
If section is declared but the heading cannot be found in the file, the harness must fail closed with a clear missing-import error. It must not silently load the whole file or fall back to a nearby heading. Ambiguous section resolution is harder to debug than a clear validation error.

Nested Imports

requires.imports is the only v0 nesting mechanism. It forms a directed acyclic graph of import ids. All imports live in the main spec’s top-level imports map; nesting is declared as references between those ids, not as declarations inside imported Markdown. When a harness loads an import:
  1. Resolve the import id in the current spec’s imports map.
  2. Load every id in requires.imports first, in listed order (topological).
  3. Then load the requested import.
  4. Skip duplicate loads during one decision run.
All three paths (a.md, references/b.md, ../shared/c.md) resolve relative to the directory containing skill.spec.yml, even when b is loaded because a requires it. Cycles are invalid. The following will fail skillspec validate:

Path Resolution

Import paths resolve relative to the directory containing skill.spec.yml. That rule applies to all imports, including nested ones.
From skill/skill.spec.yml:
Do not use:
  • ~ home directory expansion
  • Environment variable substitution ($VAR, ${VAR})
  • Shell command substitution
  • Markdown links as import paths
  • Absolute paths (harness-specific behavior only)
  • URLs (harness-specific behavior only)
Relative paths using ../ are allowed so a skill can import plugin-level shared guidance. Harnesses may still apply package-root or sandbox policy before reading the file.

Validating Imports

This command validates:
  • Declared import paths resolve to existing files
  • Declared sections exist in those files
  • Explicit nesting is consistent (no cycles, all ids exist)
  • Dependency-first load order is satisfiable
It does not inject imported content into an agent context. Runtime loading remains the harness’s responsibility.

Example: Import Graph

The following is the conformance fixture for imports, from conformance/valid/imports.skill.spec.yml:
shared_policy uses load: always — it is loaded at startup with no used_by required. task_reference is on_demand and declares used_by pointing at the local route, satisfying the reference closure requirement.

Resources vs. Imports

The decision between imports and resources determines whether a file becomes active guidance or preserved provenance. A source file, fixture, evidence document, or script that supports code provenance but should not appear in the agent’s context window belongs in resources. A shared policy document, procedure guide, or branch-specific reference that the agent must read during a run belongs in imports.