Selecting a harness
Images are per-project and per-harness. You choose the harness at build time, and the image tag is the harness name::default alias. At run time the @
shortcut resolves against these tags:
namespace.bundle.component address (a bundled harness):
Setting the default harness
Out of the box the default is the built-inclaude harness. Set the
build.harness key to make any harness the default — in your user-level
clawker.yaml to apply across every project, or in a project’s
clawker.yaml to override it there. The highest layer that sets it wins;
an explicit -t or @:<harness> always beats it.
clawker build builds that harness and stamps its image with
the :default alias, so a bare @ runs it.
Images and containers carry a harness label recording exactly which harness they
were built for — the same spelling you selected.
A container refuses to start if its harness label names a harness that is no
longer declared or cached. This is deliberate: a container never starts with a
weaker egress floor than it was built for. The error names the label and the
remedy.
Where harnesses come from
Harness names resolve across the same three tiers as every component. A bare name resolves user convention directory, then project convention directory, then the built-in floor; a qualified name resolves from an installed bundle. See where components come from for the canonical resolution model.Built-in harnesses
Clawker shipsclaude and codex. They resolve by bare name and update with
the clawker binary. Each declares its own egress floor — the claude harness’s
floor covers Anthropic domains, codex’s covers OpenAI domains — composed with
your project’s security.firewall rules.
Loose local harnesses
Drop a harness directory into a convention directory and it exists immediately, bare-named:clawker harness list.
Bundled harnesses
A harness shipped in a bundle is addressed by its qualified name and becomes available once the bundle is declared and installed. See Bundles.Per-harness project configuration
Container-initialization settings for a harness live under aharnesses.<name>
map in clawker.yaml — environment overlays, post_init/pre_run hooks
(appended after the harness-agnostic agent.* hooks), and host-state staging.
The key is the harness name you build and run.
To add build steps to a single harness’s image — extra stacks, packages, or
Dockerfile injection — use the per-harness build overlay under
build.harnesses.<name>, covered in Image Customization.
Authenticating
Host credentials are never copied into a container. You authenticate once inside the container — browser OAuth flows are proxied to your host browser automatically — and the token persists in the harness’s config volume, so restarts and recreates that reuse the volume stay logged in. See Credential Forwarding.Authoring a harness
Writing your own harness — theharness.yaml manifest, its Dockerfile fragment,
and its stack dependencies — is covered in
Authoring harnesses.