Skip to content

Build — Configuration

The build domain reads one section of .goga/config.ymlbuild. The section is optional at the loader level; goga build raises a ClickException when it is absent.

image: qarium/goga-python-3.12:1.3   # top-level image, shared with pipelines (build.image is rejected)
build:
  task_executor:
    agent: claude                    # the agent that runs the build inside the container
    env: {}
  review_executor:
    agent: codex                     # optional: a separate review-pass agent
    roles: [quality, testing]
    base_ref: origin/1.3.x           # review diff base
    patience: 3

build

Field Type Required Description
task_executor mapping Yes AI agent configuration — see build.task_executor
worktree bool No Use an isolated git worktree for builds
skip_finalize bool No Skip the finalization step
session_timeout string No Session timeout (a duration string, e.g. 30m, 1h)
idle_timeout string No Idle timeout (a duration string, e.g. 10m)
wait string No Wait time on rate limit (a duration string, e.g. 5m)
max_iterations int No Maximum task iterations
prompts_dir string No Path to custom build prompts
agents_dir string No Path to custom build agent definitions
codex_review bool No Enable external codex review
proxy string No HTTP/HTTPS proxy URL for the build container. When set, HTTP_PROXY/HTTPS_PROXY/NO_PROXY=localhost,127.0.0.1 are written to the container env-file. Overridden by the --proxy CLI option
hosts mapping No Host→IP mapping for docker run --add-host. Defaults to {}. Augmented by the repeatable --add-host CLI option (CLI wins on key conflict)
review_executor mapping No Review-phase configuration — see build.review_executor

build.task_executor

Field Type Required Description
agent string No AI executor that runs the build inside the container. Optional at the loader level — absent/YAML-null/empty/whitespace resolves to None; goga build raises a ClickException when it is None. Resolved to /home/goga/bin/<agent>-as-claude.sh — no whitelist; any name whose wrapper file exists in the image works. Baseline wrappers: claude, codex, cursor, opencode, qwen. See Agents
env mapping No Environment variables passed to the agent. Keys and values must be strings. Defaults to {}

build.review_executor

Field Type Required Description
skip bool No Skip the review phase entirely — the run executes tasks only. Absent/YAML-null means "not set" (the CLI flag decides); must be a real bool — a YAML 1 is rejected
agent string No Review executor agent name (same resolution mechanic as build.task_executor.agent; its wrapper must exist in the image). When it differs from task_executor.agent, or when a non-empty env is declared alongside it, the build runs two passes: tasks with the task wrapper, then the review pass with the review wrapper. Combining either two-pass form with an active worktree (--worktree or build.worktree: true) is rejected with exit 1 on the host
roles list of string No Reviewer composition for the review prompts: keeps only the {{agent:X}} lines of the selected roles and adapts the counters of the accompanying text. Whitelist: quality, implementation, testing, simplification, documentation. Absent or [] means the full default set (prompts stay byte-identical to the vendored defaults)
env mapping of string No Review-pass environment layer ({str: str}). Keys overlay same-named container variables for the review-pass subprocess only — the tasks pass and the container env-file are unaffected, and the values never reach logs or dry-run output. Absent/YAML-null/{} all resolve to {}. A non-empty env induces a two-pass run like a differing agent does, and requires agent; a skipped run ignores the layer entirely
base_ref string No Review diff base — a branch name or commit hash, stored verbatim (no resolvability or format check; an unresolvable ref is reported at run time). Overrides the detected default review base on review-carrying passes. Overridden by the --base-ref CLI option
patience int No Stop the external review after N consecutive unchanged rounds. Absent/YAML-null resolves to None; a YAML boolean is rejected. Overridden by the --review-patience CLI option

The image itself is configured at the top level (image, dockerfile) — shared with Pipelines. The general file location, loading rules, and the shared example live in Project Configuration; the validation errors of the section are listed there (see validation errors).