Compatibility: Pactmark 0.1.x. Configuration is constructor input, not ambient magic. There is no global config object, no environment-variable convention, and no hidden default client.

The principle

Long, and deliberately so. Every line is a decision you can point at during a review.

Development versus production

Deny-all defaults exist for a reason

core exports explicit deny-all implementations:
Use them wherever a capability is genuinely not needed. They make “we do not do that here” an explicit, greppable statement instead of an absence. Similarly, createDenyAllEgressBroker() is the correct egress broker for a runtime whose tools declare egress: { mode: "none" }.

Runtime capabilities

Declare honestly. An agent that requires a capability the runtime does not provide fails with KAF_RUNTIME_CAPABILITY_MISSING before the run starts — which only works if your declaration is true.

Readiness profiles

Environment variables

Pactmark itself reads none. Your host may:
Read environment variables at request time inside the adapter, not at module scope. Module-scope reads can be captured into a build artefact, and they make a value that should be a per-request decision into a per-deploy one.

A configuration review checklist

1

Is every capability declaration true?

A false durableStorage: true disables the protection that would have caught the problem.
2

Is the authority issuer host-owned?

createLocalAuthorityIssuer in a production path is a critical finding.
3

Is the egress broker restrictive?

Deny-all unless a tool declares an allowlist.
4

Are unused credential ports explicitly deny-all?

Rather than absent or permissive.
5

Does readiness pass in the target environment?

Run doctor --profile production there, not on a laptop.

Agent API

CreateRuntimeInput and the facade it returns.

Readiness checklist

The operational form of this page.