Act 1 · Import what you already have
Governed Agent Access Layer · v0.3.0
One YAML. Every coding agent. Every machine.
Stop copy-pasting CLAUDE.md into every project, re-registering MCP servers in every agent's JSON, and hoping your laptop and your desktop stay in sync. gaal keeps your skills, content files, MCPs, and repos in one file, then applies them to Claude Code, Cursor, Codex, and 17 other agents with one command.
macOS · Linux · Windows · or go install github.com/getgaal/gaal@latest
The problem
Your AI coding setup is scattered across four tools and three machines.
You run Claude Code for long tasks, Cursor for inline edits, maybe Codex or Copilot in a browser. Each one reads config from a different place.
New machine? Re-clone repos, re-install skills, re-wire every MCP server. Tweak a skill on your laptop and your desktop doesn't know.
4 agents × 2 machines is 8 places where one source of truth should live. No way to answer "is my setup in sync right now?"
Claude Code
CLAUDE.md.claude/settings.json.claude/skills/Cursor
.cursor/rules/Codex
AGENTS.mdMCP servers
redeclared in each agent’s own JSON
See it run
60 seconds. Two machines. Zero copy-paste.
gaal imports an existing setup on one machine and reproduces it on another. No narration. Just the CLI doing its job.
Act 2 · Reproduce on a new machine
waiting…
laptop: gaal discovers skills and MCP across every agent.
No server. No account. No telemetry. A single Go binary and a YAML in your dotfiles.
How it works
One file. Five moving parts. Every agent.
gaal reads a single gaal.yaml. It declares the pieces your agents need:
schema: 1
# 1. code repos to keep cloned
repositories:
src/gaal:
type: git
url: https://github.com/getgaal/gaal.git
version: v0.3.0
# 2. AI agent skills
skills:
- source: obra/superpowers
# auto-detect every installed agent
agents: ["*"]
# shared across projects
global: true
# 3. files agents read directly
content:
- source: ./agent-files
agents: ["claude-code"]
paths:
AGENTS.md: CLAUDE.md
# 4. MCP servers
mcps:
- name: context7
agents: ["claude-code", "cursor", "codex"]
global: true
inline:
command: npx
args: ["-y", "@upstash/context7-mcp"]
# 5. commands around sync
hooks:
post-sync:
- command: git
args: ["-C", "~/docs", "pull"]Repositories
Code repos kept cloned and up-to-date at declared paths. Git, Mercurial, SVN, Bazaar, tar, zip.
Skills
SKILL.md collections installed per-project or globally into every agent's skill directory.
MCP servers
Upserted into each agent's native config. Non-destructive. Your own entries are preserved.
Content
Plain files and directories copied where agents expect them: instructions, rules, commands, hooks, and settings.
Sync hooks
Local commands run before and after sync, with planned resource lists exposed in the environment.
Project vs global
Scope skills per-project (versioned alongside your code) or globally for your user (~/.<agent>/skills/). gaal itself reads config from three merged scopes (system, user, and the current project), so team defaults don't fight per-project overrides.
Run gaal sync. gaal figures out what each agent needs and writes it to the right place: CLAUDE.md and .claude/skills/ for Claude Code, .cursor/rules/ for Cursor, AGENTS.md for Codex, the right config file for MCPs. Commit gaal.yaml to a dotfiles repo. On your next machine, gaal sync makes it identical.
Import
Already using coding agents? gaal imports your setup in one command.
You don't start from a blank YAML. The first time you run gaal init --import-all, gaal scans every coding agent on your machine, collects the skills and MCP servers you've already configured, and writes them to gaal.yaml. Your existing setup becomes one file, version-controlled, ready to sync.
Install gaal
Single Go binary. curl | sh. No dependencies, no account, no server.
Run gaal init --import-all
gaal auto-detects every installed agent and imports each skill and MCP server it finds.
Commit gaal.yaml
Review the generated file, tweak scopes if you want, drop it in your dotfiles repo. That's it.
$ gaal init --import-all
Scanning installed agents...
Detected: Claude Code, Cursor, Codex
→ 8 skills imported from Claude Code
→ 4 skills imported from Cursor
→ 4 MCP servers imported
✓ gaal.yaml generated (47 lines, 12 skills, 4 MCPs)Every agent keeps its current behavior. gaal gives you one source of truth without churn.
Install
New in v0.3.0Sync more than skills and MCPs with one YAML.
v0.3.0 adds generic content sync, skill subdirectories, native HTTP MCP headers, sync hooks, and stricter repository safety checks. The surface is still one file and one command: edit gaal.yaml, then run gaal sync.
From GitHub
Skills still come from GitHub shorthand, full URLs, SSH paths, or local directories.
Content sync
Copy AGENTS.md, rules, commands, hooks, and settings into each agent's expected path.
Sync hooks
Run local commands around sync with planned resources exposed in the environment.
Repository sync is stricter too: gaal now refuses non-empty clone destinations and reports remote URL mismatches instead of guessing.
Coverage
20 coding agents. Auto-detected.
gaal discovers installed agents automatically. Use agents: ["*"] and you're done. Register custom agents by pointing gaal at their skill and MCP paths.
- Claude Code
- Cursor
- Codex
- GitHub Copilot
- Augment
- Amp
- Antigravity
- Cline
- Roo
- Continue
- Gemini CLI
- Goose
- Kilo
- Kiro CLI
- OpenCode
- OpenHands
- Trae
- Warp
- Windsurf
- Zencoder
Repositories
Clone and update local code repos. Git, Mercurial, SVN, Bazaar, tar, zip.
Skills
Install SKILL.md collections per-project or globally. Stay current automatically.
MCP servers
Upsert entries into each agent's native config. Non-destructive. Your own entries are preserved.
Content
Copy instruction files, rules, commands, and settings into workspace or agent roots.
Hooks
Run local commands before and after sync without putting shell logic inside gaal.
Why trust it
Open source
AGPL-3.0. Code on GitHub. Fork it, patch it, send a PR.
Zero telemetry
Off by default. Opt-in is user-scope only.
Single binary
Go. No runtime deps. No account. No server.
20+ agents
Auto-detected. Extensible via ~/.config/gaal/agents.yaml.
Works everywhere
macOS · Linux · Windows.