Skip to main content

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

Metadata

Release files for lac-py 2026.6.25

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for lac-py 2026.6.25
File Size Uploaded
lac_py-2026.6.25.tar.gz 35.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for lac-py 2026.6.25
File Interpreter ABI Platform
lac_py-2026.6.25-py3-none-any.whl Python 3 none any Details

Total release size: 62.8 kB

Release files / lac_py-2026.6.25.tar.gz

Download URL lac_py-2026.6.25.tar.gz
Size 35.9 kB
Tags Source
SHA-256 checksum
How to use checksums
532b0a7f0cb00d88e732d190696d4796233c8ed12816282a473ae9a2704612c5
BLAKE2b-256 checksum
How to use checksums
ad9b640064e04d9f6e82955f08b857280a5df824a51fb5032ffb6986d990fcdc
Upload date
Uploaded using Trusted Publishing?
What is 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}

Release files / lac_py-2026.6.25-py3-none-any.whl

Download URL lac_py-2026.6.25-py3-none-any.whl
Size 27.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3ae62c1fac9bf61e0199357c21fafcb0aff4ed326c7dbd1c3032f871d521aa22
BLAKE2b-256 checksum
How to use checksums
32bbc24b936c05f6d3409da0cd9027b7748fac45c5b1fd128157a78b58aff7fb
Upload date
Uploaded using Trusted Publishing?
What is 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}

Release history Release notifications | RSS feed

This release

2026.6.25 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page