Sync your AI stuff and keep it away from your main codebase.
Keep AI files, folders, and any custom patterns out of the repository without losing them. Dotlore syncs them across your machines through your own cloud — iCloud, Google Drive, Dropbox, OneDrive, MEGA, or any folder your cloud app syncs.
macOS is the current priority. Windows & Linux are coming soon.
What it does
- Files stay put: not moved, not symlinked, not added to the project's git history.
-
A project is a folder with a synced include-list.
.claude/,CLAUDE.md,.agents/,docs/, and~/.claudeare entries inside it. - Sync through any local folder your cloud app keeps in sync — a folder path, not a cloud API.
- Each Mac publishes an immutable git bundle. Nothing in the cloud folder is rewritten or deleted.
- Conflicts: the newer commit wins on every device; the loser's bytes stay beside it as a sibling file.
-
Desktop app, menu bar status item, and a CLI
(
add,sync,status,daemon).
How it works
Both Macs share one folder that a cloud app (iCloud, Google Drive, Dropbox, OneDrive, …) already syncs. Each writes its own history there and reads the other's.
-
A change becomes a commit
-
Chosen entries go into a private git repo at
~/Library/Application Support/dotlore/. - A save becomes a commit. File watch, or a poll every 30 seconds.
-
Chosen entries go into a private git repo at
-
That commit is the next bundle
<cloud>/dotlore/<project>/ manifest.json devices/ <this Mac>/ 000001.bundle 000002.bundle <other Mac>/ 000001.bundle-
One new file, in this Mac's
devices/<id>/. Left as written. - Inside: commits of the include-list — file contents, plus the path list.
-
000001.bundleis the full snapshot. Later files hold only the commits since.
-
One new file, in this Mac's
-
The other Mac reads it back
- The cloud folder copies the new file across.
-
The other Mac fetches bundles it has not applied, in order,
and writes the merge back with system
git. - The first link on the second Mac reads every bundle already there.
-
Same file on both Macs: the newer commit wins. The other copy
stays as
CLAUDE.conflict-<device>-<hash>.md.