Configuration Overview¶
Engineering Runtime is configured by two documents you own, plus context that somebody else owns, plus the environment. Runtime creates none of them. A document Runtime writes is a document Runtime appears to own, and these are not its to own.
Your runtime carries its own contract
This site gets you installed, gets your first capabilities running, and
explains how the pieces fit. Any Runtime command prepares the Home
automatically; runtime bootstrap is the optional explicit report. Start at
<Runtime Home>/RUNTIME-AGENT.md (the contract) and manifest.json
(this binary's providers and operations). Specs and command cheatsheets
for your installed version live in <Runtime Home>/specs/ and
commands/. Read those for precise operational detail — they describe
the binary you actually have. Come back here for concepts, upgrades,
and anything not yet installed.
| Document | Governs | Who owns it | Reference |
|---|---|---|---|
config.yaml |
Auth providers, base URLs, binary→auth-provider mapping, capability sources, optional control-plane client | you | config.yaml |
policy-config.yaml |
What may execute at all | you | Policy |
| Context | Where operations run — org, project, namespace | kubectl, oc, gcloud, CI |
Where operations run |
Both documents carry schema_version (absence means legacy v1). Config is v2;
policy is v3 as of Runtime 0.9.1, which added
command_policy.admitted_helpers. A v2 policy document is still read — the
2→3 migration is behaviour-preserving and rewrites nothing. The running binary publishes the version window and executable
floor at <Runtime Home>/specs/schema-contract.json, with strict document
shapes beside it in config-schema.json and policy-schema.json.
runtime config migrate --surface config|policy --file <path> inspects a
rewrite; --write applies it only outside the Runtime Home. Context has no
Runtime schema — kubectl, oc, gcloud and CI own it.
Start from the compiled defaults, to a path you choose:
runtime config init config --output ~/.config/engineering-runtime/config.yaml
runtime config init policy --output ~/.config/engineering-runtime/policy.yaml
export RUNTIME_CONFIG_FILE=~/.config/engineering-runtime/config.yaml
export RUNTIME_POLICY_FILE=~/.config/engineering-runtime/policy.yaml
Neither is required. With no documents at all, the compiled default and the compiled safety profile are in force — a fresh install is governed, not ungoverned.
How a value is resolved¶
Exactly three layers, in this order, and no merging between them:
A document supplies the keys it actually sets; everything it does not
mention keeps the compiled default. Collections replace whole — a sources list
in your file is the entire list, not an addition to one.
Only keys listed in Environment Variables can be set from the environment. That is a closed list, not a rule: a key nobody registered is settable by nothing, which is deliberate — an ambient variable that can change governance is one anything in the process environment can change.
Plus environment variables for locations and credentials — see Environment Variables.
Everything above works with no server and no account. An optional control plane can publish policy to a fleet and collect audit records centrally; it is disabled by default and nothing on these pages depends on it.
Where they live¶
The first lines of that report tell you exactly which files are active, including any relocated by environment variable:
Config: compiled default
Policy: compiled safety profile
Context: owned by the tool that runs the operation (`runtime context show`)
Capabilities: /Users/you/.engineering-runtime/capabilities
Portal: disabled (local policy only)
The Portal: line names the optional control plane when one is
configured, and the published policy version last applied — a synced policy
file is otherwise indistinguishable from one you edited yourself.
Precedence¶
| Setting | Resolution order |
|---|---|
| Runtime Home | $RUNTIME_HOME → $HOME/.engineering-runtime |
| Capability source | $RUNTIME_CAPABILITIES_DIR selects one authoritative directory; configured capabilities.sources add an ordered set; otherwise <home>/capabilities is the non-authoritative fallback |
| Config file | $RUNTIME_CONFIG_FILE → <home>/config.yaml |
| Policy file | $RUNTIME_POLICY_FILE → <home>/policy-config.yaml |
| A registered config key | Its documented environment variable → the value in config.yaml → compiled default |
| A policy rule | The policy file only — never an env var |
Policy has no environment overrides¶
Only config keys with an explicitly registered environment variable can be
overridden (RUNTIME_AUTHENTICATION_GITHUB_BASE_URL, for example).
Policy deliberately cannot be.
An environment variable must never be able to widen governance. If a pipeline
needs different rules, it points RUNTIME_POLICY_FILE at a different file —
a reviewable artifact — rather than exporting a variable that loosens a rule
invisibly.
Editing configuration¶
Config and policy are hand-edited external documents. There is no runtime
config set verb. Context is selected with the owning native tool, not a Runtime
file or context create verb.
$EDITOR ~/.config/engineering-runtime/config.yaml
runtime config validate # confirm the change resolved as you intended
The runtime will not write its own configuration
runtime files write is a real operation, but the File Engine refuses to
read or write Runtime's selected config/policy, evidence or release-owned
contracts, whether they are inside Home or elsewhere. Without that refusal a
single command could rewrite policy and the next command would run under
the new rules. Native credential stores are protected too; ordinary files
are still bounded by file_policy grants.
There is exactly one sanctioned exception:
runtime portal sync replaces policy-config.yaml with a
control plane's published copy. It is opt-in, off by default, and — unlike
the write the File Engine refuses — it is audited, so the change is never
silent.
Configuration in CI¶
Pipelines usually ship their own config and policy rather than editing a home:
env:
RUNTIME_HOME: ${{ github.workspace }}/runtime-home
RUNTIME_CONSUMER: ci
# Set these only when the repository actually carries reviewed documents:
# RUNTIME_CONFIG_FILE: ${{ github.workspace }}/.runtime/config.yaml
# RUNTIME_POLICY_FILE: ${{ github.workspace }}/.runtime/policy.yaml
See CI/CD for the full job contract.
Operational examples on this site were verified against Runtime 0.9.8. After bootstrap, the version-exact files in Runtime Home win.