Act 1 · Import what you already have
Governed Agent Access Layer · v1.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, MCPs, and repos in one file, then applies them to Claude Code, Cursor, Codex, and 14 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. Three resources. Every agent.
gaal reads a single gaal.yaml. It declares three things:
schema: 1
# 1. code repos to keep cloned
repositories:
- source: github.com/getgaal/gaal
path: ~/code/gaal
# 2. AI agent skills
skills:
- source: github.com/obra/superpowers
# auto-detect every installed agent
agents: ["*"]
# shared across projects
global: true
# 3. MCP servers
mcps:
- inline:
mcpServers:
context7:
command: npx
args: ["-y", "@upstash/context7-mcp"]
agents: ["claude-code", "cursor", "codex"]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 JSON. Non-destructive. Your own entries are preserved.
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 JSON 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
Coming in v1.1Install any skill with one command.
gaal install adds skills without ever opening gaal.yaml. Point it at any GitHub repo, or pick a skill from skills.sh, gaal's community registry. gaal resolves the source, updates your YAML, and syncs every agent listed in your config.
From GitHub
Any owner/repo. Full URLs and SSH paths accepted.
From skills.sh
Curated community skills. Signed, reviewed, discoverable.
Pin a version
Tag, branch, or commit. Reproducible installs everywhere.
Shipping in gaal v1.1. Today, declare skills directly in gaal.yaml. The source: field already accepts the same paths.
Coverage
17 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
- Amp
- Cline
- Roo
- Continue
- Gemini CLI
- Goose
- Kilo
- Kiro CLI
- OpenCode
- OpenHands
- Trae
- Warp
- Windsurf
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 JSON. Non-destructive. Your own entries are preserved.
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.
17+ agents
Auto-detected. Extensible via ~/.config/gaal/agents.yaml.
Works everywhere
macOS · Linux · Windows.