Harness Specification v0alpha1
The source format is YAML 1.2. The Rust scaffold uses noyalib as the parser and immediately
deserializes into typed structs. Unknown-field rejection is a future compatibility decision; the
current alpha favors explicit schema evolution over clever extension semantics.
Minimal manifest
apiVersion: prismoid.dev/v0alpha1
kind: Harness
metadata:
name: hello-prime
version: 0.1.0
contexts:
- workspace.directory
capabilities:
- fs.write_text
policies: []
verifiers:
- math.prime_file
protocol:
instructions:
- Produce a durable artifact.
limits:
max_steps: 8
Fields
apiVersion
Must be prismoid.dev/v0alpha1 for this scaffold.
kind
Must be Harness.
metadata
name: stable package-local name.version: semantic version string. Package resolution is not implemented yet.
contexts
Names of ContextProvider ports that the application/environment must bind before execution.
capabilities
Names of capabilities the model may propose. The runtime refuses unbound or undeclared capabilities.
policies
Policies evaluated for every proposed action. The most restrictive result wins.
verifiers
Required verifiers. At least one verifier is mandatory. Completion requires every verifier to return pass; fail becomes feedback
for another inference step while budget remains. uncertain and requires_human stop automatic
completion.
protocol.instructions
Ordered method guidance passed to the model. Protocol composition will become a compiler concern; it is intentionally not a workflow graph in v0alpha1.
limits.max_steps
Maximum model turns. It is a safety boundary, not merely a cost setting.
Future compilation pipeline
source manifests
-> package resolution
-> inheritance/composition
-> conflict checking
-> capability requirement solving
-> policy lattice merge
-> verifier union
-> protocol composition
-> normalized Harness IR
-> lockfile + digest
The runtime must never own these source-level merge rules.