Chock.sh Build your plugin

Write policies

Manifest reference

Every field of a policy's manifest.yaml, with its type, whether it is required and the values it allows, read from the engine's schema at the pinned commit.

manifest.yaml is the policy's identity and its payload: a gate, rule text, a skill or a workflow. chock validate checks it against the engine's JSON schemas. The site generates the tables below from those schemas, as installed at the pinned commit.

From the engine docs: docs/authoring-policies.md

Anatomy of a policy folder

.agents/policies/block-console-log/
├── manifest.yaml            # manifest — always present
├── skill/                   # optional: body.md, and any file the packaged skill should ship
└── evals/
    └── suite.yaml         # trigger / negative / behavior / adversarial cases

Every field

Generated from manifest.schema.json as installed from the pinned engine commit, with every $ref followed into the engine's other schema files. A field a.b is b inside a. A field a[].b is b in each item of the list a. A field a.<name>.b is b under any key of a. Required means required when its parent is present. The first table is the top level. Each object below it has its own table.

The schema file at the pinned commit: src/chock/validation/schemas/manifest.schema.json

FieldTypeRequiredAllowed valuesDescription in the schema
idstringyesPattern ^[a-z][a-z0-9-]{2,63}$
namestringyesMax length 128
versionstringyesA pattern. It holds a backslash, so only the schema file shows it
descriptionstringyesMax length 1024
artifactstringyesOne of: "rule", "hook", "skill", "workflow"
agent_specific_vocabularybooleanno
mandatorybooleanno
enforcementstringyesOne of: "advise", "verify", "block"
effectsArray of stringno
approvalobjectno
provenanceobjectyes
lifecycleobjectyes
optimizationobjectno
evaluationobjectno
dependenciesobjectno
securityobjectno
tagsArray of stringnoMax items 20
changelogArray of objectno
applies_toobjectno
complianceobjectno
validationobjectno
propagationstringnoOne of: "inherit", "local"
concernsArray of stringno
conflicts_withArray of objectno
bundleobjectno
ruleobjectnoV3 rule payload: ambient rule text under 'rule:'.
hookobjectnoV3 hook payload: the compiled gate DSL under 'hook.gate', the event declaration under 'hook.script' for a check no declarative kind can express, or both -- the same control on its git events and its tool_use surface. A script and a shell guard (implementations/<policy_id>.{sh,py}, found by name) never see an Edit/Write; their write-path door is a hook.gate whose 'on' includes tool_use: kind script for logic, or a path gate (content_regex, forbidden_path_regex, content_pattern '(?!)'). DET-6, spec/script-backed-gates.md.
skillobjectnoV3 skill payload under 'skill:'.
workflowobjectnoV3 workflow payload under 'workflow:'.
input_schemaobjectno
output_schemaobjectno
runtimeobjectno
compositionobjectno
categoriesArray of stringno
determinization_reviewedbooleanno
ambient_overridebooleannoSEC-5: a rule below trust_tier community may be wired into ambient context only when this is true and ambient_override_reason says why it is trusted without review.
ambient_override_reasonstringnoMin length 1, max length 500Why the rule is trusted without review, e.g. "authored by the installing user".
scriptsobjectno

approval

FieldTypeRequiredAllowed valuesDescription in the schema
approval.requiredbooleanno
approval.modestringnoOne of: "human", "auto"
approval.justificationstringnoMax length 500

provenance

FieldTypeRequiredAllowed valuesDescription in the schema
provenance.authorstringyes
provenance.author_emailstringnoFormat email
provenance.created_atstringnoFormat date-time
provenance.updated_atstringnoFormat date-time
provenance.source_repostringyes
provenance.licensestringyesOne of: "Apache-2.0", "MIT", "BSD-3-Clause", "proprietary"
provenance.trust_tierstringyesOne of: "sandbox", "community", "verified", "certified"
provenance.signaturestringno
provenance.public_keystringno

lifecycle

FieldTypeRequiredAllowed valuesDescription in the schema
lifecycle.statusstringyesOne of: "draft", "review", "staging", "production", "deprecated", "retired"
lifecycle.reviewed_byArray of stringno
lifecycle.deprecated_atstringnoFormat date-time
lifecycle.replacement_idstringno

optimization

FieldTypeRequiredAllowed valuesDescription in the schema
optimization.optimizablebooleanno
optimization.learning_rate_budgetnumbernoMinimum 0.0, maximum 1.0
optimization.frozen_sectionsArray of stringno
optimization.validation_gatestringnoOne of: "strict", "standard", "permissive"
optimization.min_eval_scorenumbernoMinimum 0.0, maximum 1.0
optimization.rejected_edit_ttl_daysintegerno

evaluation

FieldTypeRequiredAllowed valuesDescription in the schema
evaluation.test_suite_refstringno
evaluation.benchmark_scenariosArray of stringno
evaluation.primary_metricstringno
evaluation.metricsobjectno
evaluation.metrics.<name>.weightnumberno
evaluation.metrics.<name>.thresholdnumberyes
evaluation.metrics.<name>.directionstringyesOne of: "higher_is_better", "lower_is_better"

dependencies

FieldTypeRequiredAllowed valuesDescription in the schema
dependencies.skillsArray of objectno
dependencies.skills[].idstringyes
dependencies.skills[].version_constraintstringno
dependencies.skills[].optionalbooleanno
dependencies.skills[].namestringno
dependencies.skills[].typestringnoOne of: "rest_api", "grpc", "database", "message_queue", "storage"
dependencies.skills[].min_context_tokensintegerno
dependencies.skills[].requiredbooleanno
dependencies.subagentsArray of objectno
dependencies.subagents[].idstringyes
dependencies.subagents[].version_constraintstringno
dependencies.subagents[].optionalbooleanno
dependencies.subagents[].namestringno
dependencies.subagents[].typestringnoOne of: "rest_api", "grpc", "database", "message_queue", "storage"
dependencies.subagents[].min_context_tokensintegerno
dependencies.subagents[].requiredbooleanno
dependencies.servicesArray of objectno
dependencies.services[].idstringyes
dependencies.services[].version_constraintstringno
dependencies.services[].optionalbooleanno
dependencies.services[].namestringno
dependencies.services[].typestringnoOne of: "rest_api", "grpc", "database", "message_queue", "storage"
dependencies.services[].min_context_tokensintegerno
dependencies.services[].requiredbooleanno
dependencies.modelsArray of objectno
dependencies.models[].idstringyes
dependencies.models[].version_constraintstringno
dependencies.models[].optionalbooleanno
dependencies.models[].namestringno
dependencies.models[].typestringnoOne of: "rest_api", "grpc", "database", "message_queue", "storage"
dependencies.models[].min_context_tokensintegerno
dependencies.models[].requiredbooleanno
dependencies.toolsobjectno
dependencies.tools.allowedArray of stringno
dependencies.tools.forbiddenArray of stringno
dependencies.mcp_serversArray of stringno
dependencies.policiesArray of objectno
dependencies.policies[].idstringyes
dependencies.policies[].version_constraintstringno
dependencies.policies[].optionalbooleanno
dependencies.policies[].namestringno
dependencies.policies[].typestringnoOne of: "rest_api", "grpc", "database", "message_queue", "storage"
dependencies.policies[].min_context_tokensintegerno
dependencies.policies[].requiredbooleanno

security

FieldTypeRequiredAllowed valuesDescription in the schema
security.content_instructionsstringnoOne of: "never-obey"
security.prompt_injection_defensestringnoOne of: "strict", "standard", "disabled"
security.input_sanitizationbooleanno
security.output_validationbooleanno
security.pii_handlingstringnoOne of: "block", "redact", "allow"
security.data_residencystringno
security.audit_loggingbooleanno
security.processes_external_contentbooleanno

changelog

FieldTypeRequiredAllowed valuesDescription in the schema
changelog[].versionstringyes
changelog[].datestringyesFormat date
changelog[].changesArray of stringyes
changelog[].breakingbooleanno

applies_to

FieldTypeRequiredAllowed valuesDescription in the schema
applies_to.agentsArray of stringno
applies_to.pathsArray of stringno
applies_to.eventsArray of stringno
applies_to.model_tierArray of stringno

validation

FieldTypeRequiredAllowed valuesDescription in the schema
validation.last_validatedobjectnoEvidence that this policy was validated. Optional -- but when present every field is required, so an empty or partial object is a schema error rather than a way to look validated without being validated.
validation.last_validated.modelstringno
validation.last_validated.datestringyes
validation.last_validated.eval_scorenumberyes
validation.last_validated.chockstringyes
validation.known_goodArray of stringno

conflicts_with

FieldTypeRequiredAllowed valuesDescription in the schema
conflicts_with[].idstringyes
conflicts_with[].reasonstringyes

bundle

FieldTypeRequiredAllowed valuesDescription in the schema
bundle.idstringyes
bundle.shared_assetsArray of stringno

rule

FieldTypeRequiredAllowed valuesDescription in the schema
rule.textstringyesMax length 500

hook

FieldTypeRequiredAllowed valuesDescription in the schema
hook.gateobjectno
hook.gate.kindstringyesOne of: "content_regex", "forbidden_ref", "dependency_allowlist", "test_integrity", "script", "egress_allowlist"
hook.gate.onArray of stringyesMin items 1
hook.gate.outside_repoArray of stringnoMin items 1Globs (absolute or starting with ~) of files outside the repository whose writes this gate may judge, at PreToolUse only. Needs tool_use in 'on'.
hook.gate.actionstringyesOne of: "block", "ask", "warn"
hook.gate.messagestringyesMin length 1, max length 1000
hook.gate.paramsobjectyesPer-kind params are validated by checks_gate.
hook.scriptobjectnoA check that cannot be expressed as a gate kind, run by the installed hook from implementations/<policy_id>-<event>.{sh,py}. No kind and no params: the behaviour is the script's. No message either -- the script prints its own refusal, with the detail only it has. 'on' is authoritative: the compiler wires exactly these events, and the validator fails when a declared event has no script or a script is undeclared. Git events only: a script never runs at tool_use, tool_call, stop or in CI; declare the write path as a hook.gate (DET-6).
hook.script.onArray of stringyesMin items 1

skill

FieldTypeRequiredAllowed valuesDescription in the schema
skill.skill_typestringyesOne of: "nl", "code", "hybrid"
skill.entrystringyes
skill.effectsArray of stringyes
skill.approvalobjectno
skill.approval.requiredbooleanno
skill.approval.modestringnoOne of: "human", "auto"
skill.approval.justificationstringnoMax length 500

workflow

FieldTypeRequiredAllowed valuesDescription in the schema
workflow.effectsArray of stringyes
workflow.approvalobjectyes
workflow.approval.requiredbooleanno
workflow.approval.modestringnoOne of: "human", "auto"
workflow.approval.justificationstringnoMax length 500
workflow.controlstringnoOne of: "deterministic", "llm_driven"
workflow.stepsArray of objectyesMin items 1
workflow.steps[].idstringyes
workflow.steps[].usesstringyes
workflow.steps[].modestringnoOne of: "inline", "delegated"
workflow.steps[].inputobjectno
workflow.steps[].outputobjectno
workflow.steps[].on_errorstringnoOne of: "abort", "continue"
workflow.outputsobjectno
workflow.max_delegation_depthintegernoMinimum 1
workflow.aggregate_checkbooleanno

input_schema

FieldTypeRequiredAllowed valuesDescription in the schema
input_schema.typestringyes
input_schema.propertiesobjectyes
input_schema.properties.<name>.typestringyes
input_schema.properties.<name>.descriptionstringnoMin length 1
input_schema.properties.<name>.formatstringno
input_schema.properties.<name>.defaultno
input_schema.properties.<name>.enumarrayno
input_schema.properties.<name>.itemsno
input_schema.properties.<name>.propertiesobjectno
input_schema.properties.<name>.requiredArray of stringno
input_schema.properties.<name>.additionalPropertiesno
input_schema.properties.<name>.minLengthintegerno
input_schema.properties.<name>.maxLengthintegerno
input_schema.requiredArray of stringno
input_schema.additionalPropertiesbooleanyes

output_schema

FieldTypeRequiredAllowed valuesDescription in the schema
output_schema.typestringyes
output_schema.propertiesobjectyes
output_schema.properties.outcomeobjectyes
output_schema.properties.outcome.typestringyes
output_schema.properties.outcome.enumArray of stringyes
output_schema.properties.outcome.descriptionstringno
output_schema.properties.<name>.typestringyes
output_schema.properties.<name>.descriptionstringnoMin length 1
output_schema.properties.<name>.formatstringno
output_schema.properties.<name>.defaultno
output_schema.properties.<name>.enumarrayno
output_schema.properties.<name>.itemsno
output_schema.properties.<name>.propertiesobjectno
output_schema.properties.<name>.requiredArray of stringno
output_schema.properties.<name>.additionalPropertiesno
output_schema.properties.<name>.minLengthintegerno
output_schema.properties.<name>.maxLengthintegerno
output_schema.requiredArray of stringno
output_schema.additionalPropertiesbooleanyes

runtime

FieldTypeRequiredAllowed valuesDescription in the schema
runtime.max_retriesintegerno
runtime.max_identical_invocationsintegerno

composition

FieldTypeRequiredAllowed valuesDescription in the schema
composition.patternstringno
composition.phasesArray of objectyesMin items 1
composition.phases[].idstringyes
composition.phases[].modestringyes
composition.phases[].sourcestringno
composition.phases[].invokeobjectno
composition.phases[].isolationobjectno
composition.phases[].concurrencyobjectno
composition.phases[].failure_policystringyes
composition.phases[].resultobjectno
composition.phases[].approvalobjectno
composition.phases[].monitoringobjectyes
composition.monitoringobjectyes
composition.handoffobjectyes

scripts

FieldTypeRequiredAllowed valuesDescription in the schema
scripts.entrypointstringno

Built from engine 5a4b6287a46e and catalog 1e60d211c1bb.