Skip to content

Toggle

A feature toggle: one capability turned on for a targeted cohort and killable fleet-wide at the next kill-list poll, without a new release.

Generated from schemas/toggle.schema.json; do not edit. Nested fields use dotted paths, [] marks array items and .* map values.

Field Type Required Default Allowed values Constraints Description
apiVersion string yes const halos.dev/v1 Document version.
axis string yes client, traffic client: a settings fragment in the signed release. traffic: a model route switch at the gateway.
client object Payload of a client-axis toggle.
client.harnesses object yes Fragment per harness name.
client.harnesses.* object What the toggle adds to this harness’s resolved profile when on. Goes through the profile guardrails (override allowlist, secrets, reserved env, no bypassPermissions).
client.harnesses.*.env object Environment variables to add (no reserved renderer prefixes, no literal secrets).
client.harnesses.*.env.* string
client.harnesses.*.hooks array of object Hooks to add. Give them a matcher of their own.
client.harnesses.*.hooks[] object
client.harnesses.*.hooks[].command string yes
client.harnesses.*.hooks[].event string yes PreToolUse, PostToolUse, SessionStart, Stop, UserPromptSubmit
client.harnesses.*.hooks[].matcher string
client.harnesses.*.mcpServers array of object MCP servers to add: exactly one of url (https) or command.
client.harnesses.*.mcpServers[] object
client.harnesses.*.mcpServers[].auth object How clients authorize to a remote server (ADR-0029).
client.harnesses.*.mcpServers[].auth.clientID string Pre-registered OAuth client id (oauth, enterprise).
client.harnesses.*.mcpServers[].auth.clientIDMetadataURL string format uri; pattern ^https:// https URL of an org-hosted Client ID Metadata Document (oauth); the URL is the client id.
client.harnesses.*.mcpServers[].auth.issuer string format uri; pattern ^https:// Authorization server issuer (oauth, enterprise).
client.harnesses.*.mcpServers[].auth.mode string none, oauth, enterprise, halos none (default) | oauth (the server’s authorization server) | enterprise (Enterprise-Managed Authorization: an ID-JAG from identity.issuer) | halos (halo-server mints audience-bound tokens).
client.harnesses.*.mcpServers[].auth.scopes array of string Scopes to request (oauth, enterprise).
client.harnesses.*.mcpServers[].auth.scopes[] string pattern ^\S+$
client.harnesses.*.mcpServers[].command array of string
client.harnesses.*.mcpServers[].command[] string
client.harnesses.*.mcpServers[].headers object Use ${VAR} references, never literal credentials.
client.harnesses.*.mcpServers[].headers.* string
client.harnesses.*.mcpServers[].name string yes
client.harnesses.*.mcpServers[].tools object Narrows the server’s tools (ADR-0029). deny wins over allow; empty allow = every tool.
client.harnesses.*.mcpServers[].tools.allow array of string Only these tools (where the harness supports an allowlist; else a manifest warning).
client.harnesses.*.mcpServers[].tools.allow[] string pattern ^[A-Za-z0-9_.-]{1,128}$
client.harnesses.*.mcpServers[].tools.deny array of string Never these tools.
client.harnesses.*.mcpServers[].tools.deny[] string pattern ^[A-Za-z0-9_.-]{1,128}$
client.harnesses.*.mcpServers[].url string pattern ^https://
client.harnesses.*.overrides object Harness-native keys, restricted to the same allowlist as profile overrides.
default boolean State when no rule matches.
description string What the toggle does.
expires string pattern ^\d{4}-\d{2}-\d{2}$ Removal date (YYYY-MM-DD); past it, validate warns that the toggle is stale.
kind string yes const Toggle Document kind.
labels object Free-form labels.
labels.* string
name string yes pattern ^[a-z0-9][a-zA-Z0-9._-]*$ Unique name within its kind.
owner string yes Team or person who answers for the toggle.
rules array of object Evaluated in order; the first match decides.
rules[] object Matches when every condition it sets holds; the first matching rule decides.
rules[].effect string on, off State when the rule matches (default on).
rules[].groups array of string Match subjects in any of these IdP groups.
rules[].groups[] string
rules[].name string
rules[].percent number minimum 0; maximum 100 Percent (0-100) of matching subjects, hashed under the salt halos/toggles/<name>. Omitted = no percent condition; an explicit 0 matches nobody.
rules[].rings array of string Match subjects in any of these rings.
rules[].rings[] string
rules[].users array of string Match these user ids.
rules[].users[] string
traffic object Payload of a traffic-axis toggle.
traffic.routes object yes Gateway model alias -> route used while the toggle is on.
traffic.routes.* object A single upstream+model.
traffic.routes.*.model string
traffic.routes.*.targets array of object Ordered/weighted targets (mutually exclusive with upstream+model).
traffic.routes.*.targets[] object
traffic.routes.*.targets[].model string yes
traffic.routes.*.targets[].priority integer
traffic.routes.*.targets[].timeoutSeconds integer
traffic.routes.*.targets[].upstream string yes
traffic.routes.*.targets[].weight number
traffic.routes.*.upstream string