Extend the platform
Situation. Your team uses Rust or Kotlin, or needs a Redis resource.
A new shape
Section titled “A new shape”A shape is a registry entry plus a template plus a plugin:
- Add the entry to
shapes.yml(id, plugin, template, deployable, runtime defaults: port, probes, numeric user, volumes, resources, metrics path). - Create
templates/<shape>/(a Copier template with the samedevboxrecipes as the other shapes:quality,test,security, image build). - Add a plugin with coder, tester, deployment, observability and release agents, or reuse an existing plugin.
- Add a sniff rule to
scripts/detect-shape.sh. - Run
uv run scripts/shapes.py check(the contract: registry, templates, plugins and the requirements table agree) and add a smoke job.
Step-by-step with the contract: Adding a new shape.
A new resource
Section titled “A new resource”Resources are declared under resources: in system.yaml and implement a connection contract (the Secret and environment variables components receive). Add an entry to the resource table in templates/gitops-app/scripts/render.py plus a manifest function, tests in tests/cplat, and an ADR. Components never learn the implementation, so it can later be swapped (a spike evaluated kro this way; see ADR-020).
An agent or command
Section titled “An agent or command”Write plugins/<name>/agents/<agent>.md or commands/<command>.md with front matter (description at most 260 characters because it is loaded into every session), bump the plugin version in plugin.json and the marketplace, and keep commands thin: they should run a tested script and relay its output.
Contribute it back
Section titled “Contribute it back”Follow Contributing: conventional commit titles, tests, a changelog line and an ADR for design changes. CI runs the registry contract, every template smoke test and the end-to-end test.