Skip to content

Creating & Sharing Overlays

This guide covers how to create overlays from existing files and share them with others.

The create command packages files from your current repository into an overlay and saves them to your overlay repository:

Terminal window
# Auto-detect org/repo from git remote
repoverlay create my-overlay
# Explicit target path
repoverlay create microsoft/vscode/ai-config

Use --include to specify which files to include:

Terminal window
repoverlay create my-overlay --include .claude/ --include CLAUDE.md --include .envrc

Without --include, repoverlay launches an interactive file selector that detects AI configs, gitignored files, and untracked files as candidates.

Terminal window
# See what would be created without writing anything
repoverlay create my-overlay --dry-run
# Overwrite an existing overlay
repoverlay create my-overlay --force

If you don't have an overlay repository set up, or want to create an overlay in a local directory:

Terminal window
repoverlay create --output ./my-overlay
repoverlay create --output ./output --include .envrc --include .claude/

This writes the overlay files to the specified directory without pushing anywhere.

Create a repoverlay.ccl in the root of your overlay directory to control how files are applied:

overlay =
name = my-config
/= Rename files when applying
mappings =
.envrc.template = .envrc
vscode-settings.json = .vscode/settings.json
/= Symlink entire directories as a unit
directories =
= .claude
= scratch

The overlay.name field sets the name used in status, remove, and other commands. If omitted, the directory name is used.

The mappings section renames files during apply. Each entry maps a source filename to a destination path. This is useful when the overlay uses different filenames than the target repo expects.

The directories section lists directories to symlink (or copy) as a unit rather than walking individual files. This is important for directories like .claude/ where the entire tree should be managed atomically.

repoverlay uses CCL (Categorical Configuration Language) for configuration files. CCL uses = for key-value pairs and indentation for nesting. Lines starting with /= are comments.

An overlay repository organizes overlays by target project:

my-overlays/
├── microsoft/
│ └── FluidFramework/
│ ├── claude-config/
│ │ ├── CLAUDE.md
│ │ └── .claude/
│ └── dev-tools/
│ └── .envrc
└── tylerbutler/
└── tools-monorepo/
└── ai-config/
└── CLAUDE.md

The structure is <target-org>/<target-repo>/<overlay-name>/. When someone runs repoverlay apply org/repo/overlay-name, repoverlay resolves the overlay from this directory structure.

Once you've created overlays in a repository, push it to GitHub:

Terminal window
cd ~/my-overlays
git push origin main

Others can then apply your overlays using your GitHub username:

Terminal window
# Interactive selection
repoverlay apply tylerbutler
# Direct reference
repoverlay apply tylerbutler/my-overlays/ai-config

Or browse without applying:

Terminal window
repoverlay browse tylerbutler