Skip to main content
silo env validate checks an environment without running anything in it — the resources line up, and the TypeScript compiles.
Machine-readable output for CI:

It runs a real compile

This is the part that matters more than it sounds. Validation does not just check that files exist — it builds a TypeScript program over the environment and reports the diagnostics. Type-only imports are erased before execution, so an environment can load and run perfectly while being uncompilable. “It ran” is not evidence that it is correct.
The compiler settings come from .silo/tsconfig.json, written by silo init and never overwritten if you already have one. The validator and tsc -p .silo/tsconfig.json always agree, so there is no second source of truth about whether your environment is sound.

What it checks

Beyond compilation, validation catches the wiring mistakes that only show up mid-run: A real example — scaffolding VER-007 against a task that already has a grader:
Note the counts still print on failure. They are a quick sanity check in their own right: if you added three tools and the number did not move, they are not registered in the barrel.

Validate before you conclude anything

Make this the stopping condition when building an environment, rather than “the run worked”:
A passing run tells you one path through the environment executed. Validation tells you the whole thing is consistent — including the tools that task never called and the verifiers that task never used. This is especially true when a coding agent is building the environment for you. “It ran” is the easiest possible thing to satisfy and the weakest possible evidence.

In the SDK

Same shape as --json, same checks. The CLI and the SDK are two interfaces over one implementation.

Exit codes

env validate exits non-zero when validation fails, so it drops straight into a pipeline:
Pair it with a recorded run baseline for the stronger gate. Validation proves the environment is sound; a baseline proves its behaviour has not changed. Neither substitutes for the other.