The purity an author DECLARES for a skill/agent — the floor compile
enforces against the tool contract (see purityViolations in
core/effects.ts). Mirrors the analysis PurityLevel for the two meaningful
rungs, so what you DECLARE and what scan REPORTS share one vocabulary:
"pure": only read-only tools — no side effects at all.
"bounded": decidable side-effecting tools (Write, Edit, …) are allowed,
but not Bash / unknown-effect / inherits-all (the unbounded cells).
"dangerously-unrestricted": the explicit escape hatch — no enforcement.
Deliberately loud (cf. React's dangerouslySetInnerHTML) so opting OUT of
the guardrail stands out in review. Omitting purity is the same
(unenforced) default WITHOUT typing the loud word — you write it only when
you mean to override a stricter level.
The purity an author DECLARES for a skill/agent — the floor
compileenforces against the tool contract (seepurityViolationsincore/effects.ts). Mirrors the analysisPurityLevelfor the two meaningful rungs, so what you DECLARE and whatscanREPORTS share one vocabulary:"pure": only read-only tools — no side effects at all."bounded": decidable side-effecting tools (Write, Edit, …) are allowed, but notBash/ unknown-effect / inherits-all (the unbounded cells)."dangerously-unrestricted": the explicit escape hatch — no enforcement. Deliberately loud (cf. React'sdangerouslySetInnerHTML) so opting OUT of the guardrail stands out in review. Omittingpurityis the same (unenforced) default WITHOUT typing the loud word — you write it only when you mean to override a stricter level.