Your agent’s setup, in every repo.
Committed to none of them.
Apply a profile and repoverlay drops the right skills, tools, instructions, and dotfiles into a repo for your AI assistant. All git-excluded, so none of it lands in history.
Clone a repo, apply a profile, and your agent has its tools and conventions, scoped to that checkout.
One profile bundles overlays and agent capabilities.
$ repoverlay profile apply rust-dev --harness claude
Placing skills, an agent, an MCP server, and instructions.
Repo-local files excluded via .git/info/exclude.
✓ Applied rust-dev · 4 capabilities, 0 files committed
$ - skillsrustfmt + clippy skills
.claude/skills/rust/ - agentcargo-review agent
.claude/agents/cargo-review/ - mcpcrates.io MCP server
.mcp.json - rulesRust house style
CLAUDE.md
Your config, not the repo’s.
The AI instructions, editor preferences, local env, and tooling overrides you carry from repo to repo. You want them in every checkout, including forks and other people’s projects, but they don’t belong in the commit history, and git clean wipes them.
- AI assistants
CLAUDE.local.md · .claude/settings.local.json - Editor settings
.vscode/settings.json - Environment
.env.local · .envrc - Dev tooling
.mise.local.toml · lefthook-local.yml
Install once, then overlay any repo. Pick your package manager:
How an overlay works, in four steps.
repoverlay places files, hides them from git, and can put them back. Browse a source to see what’s available:
$ repoverlay browse tylerbutler/overlays- Source
Point at a source
Name an overlay by owner, repo, and path, or browse a source to see what is available.
tylerbutler/overlays/claude - Place
Files land in the working tree
repoverlay symlinks each file into place, or copies it on Windows and whenever you ask.
.claude/settings.json - Exclude
Git never sees them
Every placed path is added to .git/info/exclude, so .gitignore and history stay untouched.
.git/info/exclude - Restore
Survives git clean
State is backed up outside the repo, so repoverlay restore re-applies everything after a wipe.
~/.local/share/repoverlay/applied/
Skip the browser and apply it directly.
$ repoverlay apply tylerbutler/overlays/claudeThe details that make it practical.
Symlink or copy
--copySymlinked by default on macOS and Linux for instant edits; copied on Windows or on request.
GitHub-aware sources
owner/repo@tagPull overlays from repos, branches, tags, or subdirectories, cached with shallow clones.
Fork inheritance
origin → upstreamOn a fork, repoverlay falls back to the upstream repo’s overlays until yours exist.
Nothing you can’t undo.
Overlays live outside committed history, so you can pull them back out or rebuild them at any time. Two commands cover the whole lifecycle:
$ repoverlay restoreRe-applies every overlay after git clean wipes the working tree. State is backed up outside the repo, so nothing is lost.
$ repoverlay remove rust-devPulls a profile’s files back out and clears its .git/info/exclude entries. Your committed history never changes.
Added on apply, stripped on remove. Your committed .gitignore is never touched.
Set up your configs once.
Define your overlays once, apply them anywhere, recover them anytime.