Documentation Index
Fetch the complete documentation index at: https://docs.getgaal.com/llms.txt
Use this file to discover all available pages before exploring further.
gaal doctor is the diagnostic command. Run it any time gaal isn’t behaving the way you expect, it’s faster than reading the source.
What doctor checks
- Config validity, does
gaal.yamlparse? Does it conform to the schema? Are scope-restricted fields used in the wrong scope? - Source reachability, every
skills[*].sourceand everymcps[*].sourceURL is contacted (HEAD only, no download). - MCP target writability, every
mcps[*].targetfile is checked for read/write permission. Missing files are OK; the target will be created on sync. - Tool presence, every entry under top-level
tools:and per-skilltools:is looked up onPATHwithexec.LookPath. Missing tools warn (exit code 1) and show thehintwhen one is declared. Seeschema/tools. - Agent installation, for each agent in the registry, doctor reports whether gaal detects it on this machine.
- Telemetry status, opt-in / opt-out, plus the source file the value came from.
Exit codes
| Code | Meaning |
|---|---|
0 | Everything passed. |
1 | Warnings only, gaal will function, but something is suboptimal (e.g. an unreachable optional source). |
2 | Errors, gaal cannot operate as configured. |
Useful flags
--offline is what you want in CI environments without internet access, or when running over a metered connection.
Reading doctor output
The output is grouped by check category. Within each category, lines are prefixed with:| Prefix | Severity |
|---|---|
✓ | Passed. |
! | Warning, not blocking, but worth attention. |
✗ | Error, blocks sync. |
Common things doctor catches
- A workspace
gaal.yamltrying to settelemetry:. - An
mcps[].targetwhose parent directory doesn’t exist and isn’t writable by the current user. - A
skills[].sourceURL that 404s or requires authentication you haven’t set up. - An MCP target file that’s not valid JSON (someone hand-edited it incorrectly).
- A custom agents file at
~/.config/gaal/agents.yamlthat overrides a built-in entry.