ov/skills/validate/SKILL.md
MUST be invoked before any work involving: ov image validate command, validation rules, common validation errors, or checking image.yml and layer definitions.
npx skillsauth add overthinkos/overthink-plugins validateInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Invoked as ov image validate. See /ov:image for the family overview.
ov image validate checks image.yml and all layer definitions for errors. Validation collects all errors at once rather than failing on the first.
| Action | Command | Description |
|--------|---------|-------------|
| Validate all | ov image validate | Check image.yml + all layers |
| Check version | ov version | Verify CalVer computation |
| Inspect image | ov image inspect <image> | Show resolved config |
| Code | Meaning | |------|---------| | 0 | Validation passed | | 1 | Validation or user error | | 2 | Internal error |
layer.yml with a non-empty tasks: list or a rpm: / deb: / pac: / aur: packages section; an auto-detected builder manifest (pixi.toml, pyproject.toml, environment.yml, package.json, Cargo.toml); or a layers: composition field (pure composition layers are valid).depends must reference existing layers (local or remote).volumes names must match ^[a-z0-9]+(-[a-z0-9]+)*$.aliases in layer.yml require both name and command.^[a-zA-Z0-9][a-zA-Z0-9._-]*$.PATH directly in env is an error (use path_append).pixi.toml, pyproject.toml, or environment.yml).tasks: RulesSee /ov:layer for the full verb catalog. The validator enforces:
cmd / mkdir / copy / write / link / download / setcap / build. Zero verbs → "task has no action"; multiple → "task has conflicting actions: X and Y".copy → to: (destination) required; copy: value must be relative to the layer directory, no .. traversalwrite → content: required (non-empty)link → target: required (what the symlink points to)download → to: required unless extract: sh (piped install scripts)setcap with non-empty caps: → caps pattern check (cap_name=flags[,cap_name=flags])~/-prefixed, or ${HOME}-prefixed. copy: source must exist under the layer directory at generate time.mode: must match ^0[0-7]{3,4}$ (octal) if present.tar.gz / tar.xz / tar.zst / zip / none / sh or empty.build: value: must be "all" (initial implementation; specific builder names reserved for future use).user: format: must be root, ${USER}, a literal name matching ^[a-z_][a-z0-9_-]*$, or numeric <uid>:<gid>. Unresolved ${VAR} in user: errors.vars: Rules^[A-Z_][A-Z0-9_]*$ (shell identifier).USER, UID, GID, HOME, ARCH, BUILD_ARCH).env: keys.${VAR} Reference Resolutionto, target, etc.), every ${NAME} reference must resolve against vars: ∪ auto-exports. Unresolved references error at validate time.cmd: values, write: content:), references are passed through verbatim and resolved by bash at build time.base must reference a valid external image or another image in image.ymllayers field is requiredbuilder must reference an existing imagebootc: true requires appropriate base imagecommand defaults to name if omittedenv accepts list of KEY=VALUE strings (runtime only)env_file accepts a path string (validated at runtime)security at image level overrides layer-level security (not an error)name and path required, name must match volume name regexhost must be empty; Plain: host requiredgocryptfs not in PATH when encrypted mounts existfqdn requiredbootc: true requires appropriate base imagevm.rootfs must be ext4, xfs, or btrfsvm.backend must be auto, libvirt, or qemuports:ports must be "all" or omittedports: all, the image must have at least one port definedtcp: prefix is supportedLayers form a dependency cycle. Check depends fields.
A depends entry or image.yml layer references a non-existent layer.
Use path_append in layer.yml instead of env: PATH: ....
Volume names must be unique within a layer.
ov image validate && ov image build my-image
ov image validate 2>&1 # See all errors at once
ov image inspect <image> # Check resolved config
ov image list layers # Verify layer exists
ov image validate resolves image.yml via os.Getwd(). Override with -C <dir> / --dir <dir> / OV_PROJECT_DIR=<dir>. See /ov:image "Project directory resolution".
ov image family siblings/ov:image -- Family overview + image.yml composition reference/ov:build -- Building validated images/ov:generate -- Containerfile generation after validation/ov:inspect -- Inspect a specific image after validation/ov:list -- Enumerate images/layers to validate/ov:merge -- Post-build layer consolidation/ov:new -- Scaffold new layers before validation/ov:pull -- Pull prebuilt images (orthogonal to validation)/ov:layer — Canonical reference for the task verb catalog, vars: substitution, YAML anchors, execution order. The validator rules above enforce what's documented there./ov:generate — What the generator emits from validated input (per-verb emitters, cache-mount inheritance, inline-content staging)./ov-dev:generate — Internal architecture of the task emission pipeline./ov:test — ov image validate schema-checks every tests: entry: exactly-one-verb, attribute types, scope/variable consistency (build-scope can't reference runtime-only vars), id: uniqueness per section, matcher operator allowlist, unroutable-check rejection. The five live-container verbs (cdp/wl/dbus/vnc/mcp) also get per-verb method-allowlist + required-modifier enforcement via validateOvVerb (deploy-scope-only; unknown methods rejected with the allowed set listed)./ov:mcp — the standalone reference for the mcp: verb: required modifiers (tool: for call, uri: for read), the 7-method allowlist, and the URL-rewrite / port-publishing behavior that authors occasionally hit./ov:cdp, /ov:wl, /ov:dbus, /ov:vnc — per-verb references for the other four live-container verbs.MUST be invoked when the task involves ov image validate command, validation rules, common validation errors, or checking image.yml and layer definitions. Invoke this skill BEFORE reading source code or launching Explore agents.
Workflow position: Pre-build. Validate before building to catch errors early.
development
Claude Code multi-agent support in Overthink — sub-agents, dynamic workflows, and agent teams, and how each drives the existing `ov eval` disposable beds to test and verify. MUST be invoked before authoring or invoking an ov sub-agent / dynamic workflow / agent team, wiring agent-lifecycle hooks, or asking "which primitive should drive the R10 beds?".
tools
Mounts a virtiofs share tagged `workspace` at /workspace inside a VM guest via a systemd .mount unit. Use when a kind:vm entity shares a host directory into the guest and you need it auto-mounted (and re-mounted at every boot).
development
MUST be invoked before any work involving: the `kind: android` schema kind, a `target: android` deploy, the `apk:` layer package format (installing Android apps declaratively), AndroidDeployTarget, an in-pod emulator OR a remote/physical adb-endpoint device, or nested `pod → android` deployment. The first-class Android device + app surface that sits above `ov eval adb`/`appium`.
tools
Use when committing, branching, pushing, merging, tagging, creating PRs, or approving/merging PRs with gh — the feat/-branch, R10-gated, never-force-push landing workflow across the main repo + the plugins submodule + image/<distro> submodules. Covers sync-to-upstream, branch/worktree pruning, the fork+PR path for contributors without write access, and cross-repo @github landing order.