Skip to main content

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.

Removing an entry from gaal.yaml doesn’t, by default, delete what gaal previously installed. The leftover files are called orphans. gaal sync --prune cleans them up. Pruning is opt-in because the safe default is “leave alone what I didn’t author this run.” If you removed a skill from gaal.yaml by accident, you don’t want gaal to delete it before you notice.

What gets pruned

ResourcePruned?Notes
SkillsYesSkill directories gaal previously installed and that no longer have a matching skills[] entry.
MCP server entriesYesInside each managed target file, mcpServers keys gaal previously upserted that are no longer in mcps[].
RepositoriesNogaal never deletes repository directories. Remove them by hand if you want them gone.
Other JSON keys in MCP target filesNo--prune only touches keys gaal could have authored.

Always preview a prune

gaal sync --prune --dry-run
The plan marks pruned items with -:
plan:
  skills
    - remove  old-reviewer        ← claude-code (was managed by gaal)
  mcps
    - remove  legacy-server       ← ~/.claude.json

Apply the prune

gaal sync --prune

Incompatible with --service

$ gaal sync --service --prune
error: --prune and --service are incompatible: use one-shot mode for destructive operations
Destructive operations don’t belong in an unattended loop. Run prune as a one-shot after editing gaal.yaml.

How gaal knows what it managed

gaal records what it installed each cycle. A skill or MCP entry is considered gaal-managed if a previous sync wrote it. When you remove it from gaal.yaml and run --prune, that record is what authorises the deletion. If you delete the gaal state file by hand, gaal forgets what it managed and --prune becomes a no-op until you sync again.

Dry-run

gaal sync

MCP servers