gaal.yaml checked into source control can never escalate machine-wide settings.
The three scopes
Higher-priority files override lower ones field by field.
What overrides what
Most fields are merged with workspace winning over user winning over system:repositories, workspace entries replace user entries with the same map key.skills, the workspace list replaces the user list (no per-entry merging, pick one scope or the other).mcps, same as skills: workspace list replaces user list.
telemetry, which is scope-restricted.
Scope-restricted fields
telemetry can be set in the user or system file but not in a workspace file. If a workspace gaal.yaml sets telemetry:, gaal ignores the value and prints a warning.
This rule exists so that committing a gaal.yaml to a public repo can never opt anyone in to telemetry. Telemetry is a per-user choice, made explicitly on first run.
Where you’d put what
Inspecting the merged config
gaal status reports the resolved configuration as gaal sees it after merging. gaal doctor reports the source file for each entry.
Overriding the lookup
Force a specific file with--config:
--config is set, the user and system files are still merged underneath unless the file you passed sets the same fields.