Configure
Adjust how a Loop runs — its checks, its human gate, its re-attempt strategy, and its stop limits — without changing its structure.
- Audience
- Operators running durable agent work
- Focus
- Loops guidance shaped for scanability, day-two clarity, and operator context.
Configure is the middle commitment layer: change how a Loop runs without forking it. It opens as a sheet over the detail view and writes a per-Loop config overlay — the Loop's structure is untouched.
What you can tune
The sheet has four groups, all scoped to the checks and limits the Loop already declares:
- Verification checks — enable or disable each declared check, and for a generic
commandcheck, set the project command it runs (a test suite, a linter). Disabling a command check disables its command field. A gate that judges (anagent-judgeacceptance review) cannot be removed here — that is structure. - Human approval gate — a single switch to require, or drop, a human approval before the Loop finishes.
- Re-attempt strategy —
failed-only(the default; retry only what failed) orfull-body(re-run the whole body). This is where re-attempt granularity is chosen, not on the run form. - Model defaults — the worker model used by
run-agentactions that omitparams.model, and the judge model used byagent-judgecriteria that omitmodel. Empty values leave provider defaults in control. - Stop limits — the same six numeric limits as the run form's Advanced panel, each clamped at its daemon ceiling. Configure sets the per-Loop default; the run form can still override per run.
Reset to defaults restores the definition defaults and failed-only. Save persists the
overlay.
What needs a fork
Configure never changes structure. These belong to the visual editor or a definition edit:
- node order or DAG structure;
- node kinds;
- input declarations;
- the contract's terminal states or shape;
- the goal or definition-of-done.
How it stores and merges
Configure writes a separate per-Loop config store keyed (workspace_id, loop_name) — distinct from
the definition, which stays filesystem-as-truth. It is read and written through GET/PUT /loops/:name/config, agh loop configure, and agh__loop_configure.
The effective config a run actually uses is a four-layer merge, each layer bounded by the compile-time ceilings:
- the definition's own defaults,
[loops.defaults.*]inconfig.toml,- this per-Loop configure overlay,
- any per-run overrides from the run form.
GET /loops/:name/config returns the stored per-Loop override as config and the daemon-resolved
first three layers as effective_config. A missing override is config: null; it is not a missing
Loop and does not prevent clients from reading the effective values.
Loop run-agent workers use the Loop action runtime. They do not read
[[tasks.run.task_runtime_rules]]; that table remains scoped to normal task worker profile
routing. The Loop runtime resolves the model into the ACP session bind request, then the provider
adapter decides what an empty model means.
From an agent
Configure is fully agent-manageable — the same overlay, written structurally:
| Action | CLI | HTTP | Native tool |
|---|---|---|---|
| Read config | — | GET /loops/:name/config | agh__loop_inspect (definition) |
| Write config | agh loop configure --set k=v | PUT /loops/:name/config | agh__loop_configure |
Operate a Goal from a session
Start, inspect, replace, pause, resume, draft, and audit a durable Goal through session commands, native tools, and Run history.
Authoring loop
The safe path to change a Loop — describe, validate, dry-run, then publish with a compare-and-swap version — with no LLM spend before you run.