Every hard limit, threshold, timeout and built-in default Goa applies, grouped by area.
Where defaults come from
Goa resolves configuration through a cascade — later layers override earlier ones:
embedded defaults (config/configs/default.yaml)
→ home (~/.goa/config.yaml)
→ project (.goa/config.yaml)
→ local (.goa/config.local.yaml)
→ env (GOA_* variables)
→ CLI flags
YAML: use the dotted key shown in each table (nested keys map to YAML paths).
Env: prefix the dotted path with GOA_ and join segments by _, e.g.
GOA_EXECUTION_MAX_TOOL_CALLS=200, GOA_GOALS_STALL_TURNS=3.
/config:set KEY VALUE (or /config menu): applies live where a runtime
sync exists and persists to the config; see /config:set <tab> for supported keys.
CLI flags exist for the main round caps (--max-tool-calls,
--max-stream-rounds, --max-consecutive-tool-rounds, …); a flag value of 0
means "do not override".
Values marked (code) are internal constants not exposed via YAML; values
marked (legacy) are retained in the schema but no longer consumed on current
runtime paths.
Execution & agent rounds (per turn)
Key
Default
Description
execution.max_tool_repeat_total
0 (disabled)
Max total identical tool calls per turn before a loop guard fires.
execution.max_tool_repeat_consecutive
2
Max CONSECUTIVE identical tool calls (same tool + args). State-aware: a successful state-changing call (edit/write/bash/python/terminal) resets the counter, so edit → test(fail) → edit cycles never trip it.
execution.max_tool_calls
200
Max duplicate occurrences of the SAME tool call within the rolling window below. Different tools do not count.
execution.tool_call_limit_reset_window
10
Number of recent calls inspected for duplicate detection above; a successful state-changing call resets the window ("state epoch").
execution.max_tool_error_streak
4
Consecutive failing calls of the SAME tool (any args) tolerated before one guard message tells the model to change approach. Resets on success or tool switch.
execution.max_consecutive_tool_rounds
15
Tool-only LLM rounds with no visible text/thinking before a forced-answer nudge is injected. 0 = disabled (thinking-heavy models may need this).
execution.max_stream_rounds
0 (unlimited)
Hard cap on LLM stream rounds per turn. The turn loop is otherwise convergence-driven — there is deliberately no hidden default.
execution.auto_heal_tool_calls
false
Extract/execute XML-markup tool calls emitted inside content streams by some local models.
Loop & stream guards
Loop detection runs in three independent detectors; all can be disabled individually.
Key
Default
Description
execution.loop_warning
10(SDK default 7)
Repeated-output warning threshold for the generic loop detector.
execution.loop_interrupt
15(SDK default 10)
Threshold at which the generic loop detector interrupts the turn.
execution.disable_thinking_loop_detection
false
Disable the reasoning-text loop detector. Internal thresholds: warn after 4 repeats, interrupt at 6 (code).
execution.disable_tool_loop_detection
false
Disable the tool-loop guards listed under "Execution & agent rounds".
execution.disable_stream_loop_detection
false
Disable the stream-repetition detector.
execution.stream_loop_max_repeats
5(code)
Repeated stream chunk count that counts as one detection.
execution.stream_loop_min_period
50(code)
Minimum period length for stream repetition matching.
execution.stream_loop_max_strikes
5(embedded; code default 3)
Detections after which the whole turn is aborted ("strikes").
execution.disable_thinking_stall_detection
false
Disable the thinking-stall watchdog.
Provider & networking
Key
Default
Description
execution.retries
2
Base retry budget passed to provider streaming; ≤ 0 falls back to 5.
Age beyond which content counts as cache-dead and may be dropped.
context_compression.fresh_window.enabled
false
Full-window compaction with zero summarization (fresh window + preserved tail).
time_context.enabled
false
Per-turn temporal context injection (zoned timestamp). Off by default.
Deprecated fallbacks (legacy): execution.token_critical (90) maps onto the
hard ceiling when no compression thresholds are set; execution.token_warning
(70) and execution.error_threshold (0.5) remain in the schema but are not
consumed by current runtime paths. execution.activity_timeout is NOT one of
them: it is the live stream byte-idle budget ("2m"), with the event-stall
watchdog at 3/4 of it — see the stall-timing section in CONFIGURATION.md.
Goals (budgets & watchdogs)
Key
Default
Description
goals.default_turn_budget
50
Implicit hard turn ceiling given to every newly created goal unless a budget was set explicitly. -1 = unlimited. Editable at /config → Goals; applies live to goals created afterwards.
goals.stall_turns
5
Consecutive continuation turns with an unchanged progress fingerprint (todos + git status) before a stall challenge is injected. 0/-1 disables. Tuning applies live.
Stall challenge limit (code)
2
Unanswered stall challenges before the goal auto-blocks for user review.
goals.max_verify_failures
3
Consecutive machine-verification failures before the goal auto-blocks. -1 = no cap. Any transition out of active or a restart resets the streak.
goals.verify_timeout
"2m"
Hard bound on a single verify-command execution at goal completion. Max 1h; /config:set goals.verify_timeout applies live to the running gate.