Skip to content

Overrides

File overrides let you provide tool-specific files that take priority over generated content.

Place files in tool-specific directories within .ai/:

.ai/
├── .claude/ # Claude Code file overrides
├── .codex/ # Codex file overrides
├── .cursor/ # Cursor file overrides
├── .gemini/ # Gemini CLI file overrides
├── .opencode/ # OpenCode file overrides
├── .windsurf/ # Windsurf file overrides
└── .copilot/ # GitHub Copilot file overrides

Files are symlinked to the tool’s output directory:

SourceTarget
.ai/.claude/<path>.claude/<path>
.ai/.codex/<path>.codex/<path>
.ai/.cursor/<path>.cursor/<path>
.ai/.gemini/<path>.gemini/<path>
.ai/.opencode/<path>.opencode/<path>
.ai/.windsurf/<path>.windsurf/<path>
.ai/.copilot/<path>.github/<path>

When a file override exists at the same path as a generated file, the override takes priority. The generated file is replaced with a symlink to the override.

Given this structure:

.ai/
├── settings.json # Shared settings
└── .claude/
└── settings.json # Claude-specific override

After lnai sync:

.claude/
├── CLAUDE.md # symlink → ../.ai/AGENTS.md
└── settings.json # symlink → ../.ai/.claude/settings.json (override wins)

The generated settings.json is replaced by a symlink to the override file.

Override the generated settings file with custom configuration:

.ai/.claude/settings.json

Add tool-specific commands that aren’t part of the unified config:

.ai/.claude/
└── commands/
└── deploy.md

Add GitHub Actions or other tool-specific files:

.ai/.copilot/
└── workflows/
└── ci.yml

After sync, this becomes .github/workflows/ci.yml.