Creating & Sharing Overlays
This guide covers how to create overlays from existing files and share them with others.
Creating an overlay
Section titled “Creating an overlay”The create command packages files from your current repository into an overlay and saves them to your overlay repository:
# Auto-detect org/repo from git remoterepoverlay create my-overlay
# Explicit target pathrepoverlay create microsoft/vscode/ai-configSelecting files
Section titled “Selecting files”Use --include to specify which files to include:
repoverlay create my-overlay --include .claude/ --include CLAUDE.md --include .envrcWithout --include, repoverlay launches an interactive file selector that detects AI configs, gitignored files, and untracked files as candidates.
Preview and overwrite
Section titled “Preview and overwrite”# See what would be created without writing anythingrepoverlay create my-overlay --dry-run
# Overwrite an existing overlayrepoverlay create my-overlay --forceLocal output
Section titled “Local output”If you don't have an overlay repository set up, or want to create an overlay in a local directory:
repoverlay create --output ./my-overlayrepoverlay create --output ./output --include .envrc --include .claude/This writes the overlay files to the specified directory without pushing anywhere.
Overlay configuration (advanced)
Section titled “Overlay configuration (advanced)”Create a repoverlay.ccl in the root of your overlay directory to control how files are applied:
overlay = name = my-config
/= Rename files when applyingmappings = .envrc.template = .envrc vscode-settings.json = .vscode/settings.json
/= Symlink entire directories as a unitdirectories = = .claude = scratchOverlay name
Section titled “Overlay name”The overlay.name field sets the name used in status, remove, and other commands. If omitted, the directory name is used.
Mappings
Section titled “Mappings”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.
Directories
Section titled “Directories”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.
Configuration format
Section titled “Configuration format”repoverlay uses CCL (Categorical Configuration Language) for configuration files. CCL uses = for key-value pairs and indentation for nesting. Lines starting with /= are comments.
Overlay repository structure
Section titled “Overlay repository structure”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.mdThe 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.
Sharing overlays
Section titled “Sharing overlays”Once you've created overlays in a repository, push it to GitHub:
cd ~/my-overlaysgit push origin mainOthers can then apply your overlays using your GitHub username:
# Interactive selectionrepoverlay apply tylerbutler
# Direct referencerepoverlay apply tylerbutler/my-overlays/ai-configOr browse without applying:
repoverlay browse tylerbutler