Reference

Config reference

The dispatch config is TOML. hev reads it from --config PATH, then HEV_DISPATCH_CONFIG, then ~/.config/hev/dispatch.toml. A field hev does not know is an error: unknown config key: KEY.

The same file serves two roles. As a sender, hev dispatch reads it to find and reach hosts. As a target, the host that runs the work reads its own copy for admission, notifications and launch settings. The “Read by” column says which role uses each field.

This page covers the dispatch config only. Capture and search settings live in ~/.hev/config.toml; see install.

Top level

FieldTypeDefaultRead byMeaning
capintegerown legacy host cap, then 2targetPositive capacity in the target default config. A sender cannot raise it.
workspacestring"~/workspace"targetDirectory that relative repo values resolve against on this machine. A sender’s [hosts.NAME].workspace overrides it.
default_hoststringnonesenderHost that hev dispatch run prefers when it is reachable and has a free slot. Must name a defined host.
notifyarray of stringsnonetargetCommand run when a run or validation finishes, as an argv list. No shell. Placeholders: {name}, {state}, {summary}, {reply}.
cap = 2
workspace = "~/workspace"
default_host = "buildbox"
notify = ["notify-send", "dispatch {name}: {state} {summary}"]

{reply} is the order’s reply field. {summary} holds the exit code, the PR URL when there is one, and the validation state and verdict. A failing notify command is saved as notify_error in result.json and does not change the run’s state.

[admission]

FieldTypeDefaultRead byMeaning
reposarray of stringskey absent: admit alltargetOrigin URLs or paths this host accepts. [] admits none.

Read only from the target’s default config (HEV_DISPATCH_CONFIG or ~/.config/hev/dispatch.toml), never from --config or config_path. See admission for how URLs are matched.

[validation]

Settings for browser validation. Only orders with validation: browser use them.

FieldTypeDefaultRead byMeaning
hoststringnonesender, implementer’s hostHost that runs validators. Without it, no validation starts automatically.
harnessstringnonesender, implementer’s hostcodex or claude. Required when validation runs.
modelstringnonesender, implementer’s hostModel for the validator. The harness and model pair must differ from the implementer’s.
allow_same_hostboolfalsesender, implementer’s hostAllow the validator on the implementer’s host. For local testing.

[hosts.NAME]

One table per host. NAME must match ^[a-z0-9][a-z0-9-]*$ and should be the same in every machine’s config.

FieldTypeDefaultRead byMeaning
localboolfalsesenderRun on the calling machine with no SSH.
sshstringnonesenderSSH destination, such as buildbox or dev@buildbox. Required unless local = true. May not start with -.
capintegernonesender, legacy targetOptional request ceiling; omitted or 0 sets no sender ceiling. Can lower target capacity, never raise it. Own host entry is the target fallback when top-level cap is absent.
osstringnonesender"windows" for a Windows host. Anything else is treated as Unix.
workspacestringnonesenderWorkspace for relative repo values on this host. Overrides the host’s top-level workspace. Accepts Windows drive and UNC paths.
path_prefixarray of stringsnonesenderDirectories put in front of PATH for every remote call. Unix only. ~/ expands on the host.
namespacestringnonesenderSet as HEVLAYER_NAMESPACE in the worker’s environment.
harness_wrapperarray of stringsnonetarget, then senderArgv run before the harness, followed by --, the harness and its arguments. The host’s own entry wins. The sender’s is used only when the host has none.
config_pathstringnonesenderDispatch config the host’s supervisor reads, for example an isolated smoke-test file. Relative paths resolve next to the file that names them. ~/ expands on the host. Does not change admission.
envtablenonetargetExtra environment variable names to pass to the worker. Only the keys are used. Values come from the admitting process’s environment.
[hosts.buildbox]
ssh = "buildbox"
cap = 8
namespace = "team-traces"
path_prefix = ["~/.local/bin"]

[hosts.buildbox.env]
NPM_TOKEN = ""

A host entry is invalid when its name does not match the pattern, its cap is negative, or neither local nor ssh is set. A sender stops on any invalid entry. A target only requires its own entry to be valid and prints a warning: for the rest.

workspace, harness_wrapper and config_path need a hev version that supports per-host launch settings on every machine that reads the file. Older versions stop with unknown config key.

Paths on the host

PathWhat it is
~/.config/hev/dispatch.tomlDefault dispatch config.
~/dispatch/NAME/One run’s record: order.md, meta.json, status.md, report.md, log, result.json, inbox.md.
~/dispatch/NAME/wtThe run’s Git worktree, on branch d/NAME.
~/dispatch/NAME-vN/A browser validator’s record for run NAME.