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.

curl -fsSL https://raw.githubusercontent.com/getgaal/gaal/main/scripts/install.sh | sh

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.md
  • MCP 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.

laptoprunning

Act 1 · Import what you already have

desktopidle

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:

gaal.yaml
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"]
1

Repositories

Code repos kept cloned and up-to-date at declared paths. Git, Mercurial, SVN, Bazaar, tar, zip.

2

Skills

SKILL.md collections installed per-project or globally into every agent's skill directory.

3

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.

    1

    Install gaal

    Single Go binary. curl | sh. No dependencies, no account, no server.

    2

    Run gaal init --import-all

    gaal auto-detects every installed agent and imports each skill and MCP server it finds.

    3

    Commit gaal.yaml

    Review the generated file, tweak scopes if you want, drop it in your dotfiles repo. That's it.

gaal init
$ 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.1

Install 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

gaal install obra/superpowers

Any owner/repo. Full URLs and SSH paths accepted.

From skills.sh

gaal install effective-testing

Curated community skills. Signed, reviewed, discoverable.

Pin a version

gaal install obra/superpowers@v2.1.0

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
1

Repositories

Clone and update local code repos. Git, Mercurial, SVN, Bazaar, tar, zip.

2

Skills

Install SKILL.md collections per-project or globally. Stay current automatically.

3

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.

Ready

Install gaal. Star the repo.

curl -fsSL https://raw.githubusercontent.com/getgaal/gaal/main/scripts/install.sh | sh
Star on GitHub

Community Edition

Working on a team? Team sync is next.

Today gaal syncs from a local YAML you commit to your dotfiles. gaal Community Edition adds a server. Point the same gaal CLI at a shared instance and every teammate syncs from the same source. Same binary, same YAML; a server instead of a git repo.

No spam. One email when Community Edition ships. One update per month at most.