Skip to main content

A CLI for managing AI agent config files without committing them to the repo.

Project description

lac

lac

PyPI Python License: MIT CI

A CLI for managing AI agent config files (CLAUDE.md, AGENTS.md, .cursorrules, .mcp.json, …) without committing them to the repo.

  ~/repo/CLAUDE.md  ──→  ~/.local/share/lac/<repo>/CLAUDE.md
       (symlink)              (the actual file)

Files live outside the repo, are symlinked in, and excluded from git via .git/info/exclude. That directory is itself a git repo, so the same configs can be reused on another machine.

Use cases

  • AI configs that differ from team defaults.
  • Personal tweaks that don't belong in shared history.
  • Same configs across multiple machines.

Install

# Homebrew
brew install 2ykwang/2ykwang/lac-py

# pipx
pipx install lac-py

lac --version

Quick Start

In any git repo:

cd ~/projects/my-project

lac register
# ✓ registered

lac link --all
# ✓ CLAUDE.md linked
# ✓ AGENTS.md linked
# ✓ .claude linked
# ✓ .agents linked
# ✓ .cursorrules linked
# ✓ .mcp.json linked

Edit any of these files in your repo as usual — they're symlinks, so changes go to the stored copy too. To stop using lac in this repo, run lac unregister.

How it works

Three pieces:

  • Symlinks — each linked file in the repo is a symlink to its copy in lac's storage directory.
  • Git exclusion — every linked filename is appended to .git/info/exclude between # === lac:start === and # === lac:end === markers. Git ignores them without touching .gitignore.
  • Repo identity — each repo is matched by its git remote URL when available, otherwise by absolute path. The same repo on two machines maps to the same storage subdirectory.

Default files

  • CLAUDE.md
  • AGENTS.md
  • .claude/
  • .agents/
  • .cursorrules
  • .mcp.json

Add others with lac link <filename>.

Sync across machines

The storage directory (printed by lac home) is itself a git repo:

# on machine A — initial push
cd "$(lac home)"
git remote add origin <your-private-remote-url>
git add . && git commit -m "initial" && git push -u origin main

# on machine B — clone BEFORE any lac command runs on this machine
# (lac auto-creates the storage directory on first command, which would block git clone)
git clone <your-private-remote-url> ~/.local/share/lac
# or, if $LAC_HOME is set:
git clone <your-private-remote-url> "$LAC_HOME"

cd ~/projects/repo
lac register
lac link --all

# afterwards, on any machine: pull updates (fast-forward only, never pushes)
lac sync

Commands

Basic

Command What it does
lac register Register the current repo with lac.
lac link Interactive checkbox — pick which files to link.
lac link --all Link all default files at once.
lac link <file> Link a single file by name.
lac status Show registration state of the current repo.
lac unregister Restore files in the repo and back up this repo's storage subdirectory.

Diagnostic & management

Command What it does
lac doctor Check for broken symlinks, orphaned entries, missing targets.
lac list List all registered repos.
lac home Print the storage directory.
lac path [file] Print this repo's storage path (or a file inside it).
lac rename <name> Rename this repo's storage subdirectory.
lac sync Fast-forward the storage directory from its remote (pull-only; never pushes).

Limits

  • macOS and Linux only. Windows is not supported.
  • Python ≥3.11.
  • Single-user. Sharing the storage directory between people isn't supported.
  • Pull updates with lac sync; pushing is manual (git push) by design.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lac_py-2026.6.24.tar.gz (34.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lac_py-2026.6.24-py3-none-any.whl (26.3 kB view details)

Uploaded Python 3

File details

Details for the file lac_py-2026.6.24.tar.gz.

File metadata

  • Download URL: lac_py-2026.6.24.tar.gz
  • Upload date:
  • Size: 34.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for lac_py-2026.6.24.tar.gz
Algorithm Hash digest
SHA256 d3ed8f7304ee3fa17b40886027207861226df63eed1d1ad87acc5076318642bb
MD5 85270a9568e28153fc68b779fab31b1b
BLAKE2b-256 d7117256dcae47ae58f5cac5b73aae565699632877f7b31a7238717453dc2a28

See more details on using hashes here.

File details

Details for the file lac_py-2026.6.24-py3-none-any.whl.

File metadata

  • Download URL: lac_py-2026.6.24-py3-none-any.whl
  • Upload date:
  • Size: 26.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for lac_py-2026.6.24-py3-none-any.whl
Algorithm Hash digest
SHA256 4c448256f01d51233462dfbd3f6409692725ccded8c9d0add8a433f9227b22a4
MD5 69628e10d532a65917d831db04aa672b
BLAKE2b-256 7d1624784807321ff5be036d05ab3a30c059c7a3780a34eabb9e3ea2f9d80149

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page