Traverse keeps executable capability packages deterministic and colocated.
Use the template under:
examples/templates/executable-capability-package/
It provides:
manifest.template.jsonbuild-fixture.shsrc/implementation.rsartifacts/.gitignore
Every executable capability package should declare:
- one package id and semver package version
- one governed capability contract reference
- any approved workflow references the package participates in
- one colocated source path and entry symbol
- one colocated binary path and declared digest
- explicit execution constraints
- explicit model dependency declarations
- one deterministic local build command
The manifest template follows this pattern:
kind: agent_packageschema_version: 1.0.0package_idversionsummarycapability_refworkflow_refssourcebinaryconstraintsmodel_dependencies
The colocated build command should:
- write the package binary into
./artifacts/ - be deterministic
- avoid hidden external state
- print the artifact path it built
The checked-in template uses a tiny deterministic WASM fixture so packaging, inspection, and smoke validation can stay runnable even when a full external WASM toolchain is not available.
For the broader local runtime-owned layout around generated helper copies, fixture byproducts, and adapter overlays, see:
docs/local-runtime-home.md
- Copy
examples/templates/executable-capability-package/into a new package folder. - Replace the placeholder package and capability ids.
- Point
capability_ref.contract_pathat the governed capability contract. - Replace the placeholder workflow refs with the approved workflow links you need.
- Replace the placeholder model interface with the real abstract dependency.
- Run the colocated
build-fixture.shscript to produce the deterministic binary.
Verify the template path stays complete with:
bash scripts/ci/executable_package_template_smoke.shThat smoke path checks:
- the template manifest exists
- the template build script exists
- the template source stub exists
- the template artifact ignore file exists
- the manifest still contains the governed package fields the repo expects