Thanks for your interest. memsync is designed to be easy to extend — adding a new provider requires touching exactly one new file and one line in __init__.py.
git clone https://github.com/EdgeCaser/memsync
cd memsync
pip install -e ".[dev]"Run tests:
pytest tests/ -vThe most common contribution is adding support for a new cloud storage provider (Dropbox, Box, Synology Drive, etc.). See docs/adding-a-provider.md for a complete guide with a worked example.
- Python 3.11+. Use
Patheverywhere,from __future__ import annotationsat the top of every module. - Type hints on all functions.
- No dependencies beyond
anthropic(stdlib only, except dev deps). - See STYLE.md for the full style guide.
Each module has one job:
sync.py— calls the API, returns text. Does not write files.cli.py— handles I/O. Does not contain business logic.providers/— detect paths. Do not create directories or write files.config.py— loads and saves config. Does not call the API.
- All tests use
tmp_pathfor filesystem isolation — never touch~/.config,~/.claude, or any cloud folder. - All tests mock the Anthropic API — never make real API calls.
- Tests run on macOS, Windows, and Linux via CI. If your change is platform-specific, add a
pytest.mark.skipifguard.
- Open an issue first for anything beyond a small bug fix.
- PRs require CI green on all 6 matrix combinations (3 OS × 2 Python versions).
- Squash merge — keep the commit history clean.
- Commit style:
feat:,fix:,refactor:,test:,docs:,chore:prefix, present tense, no period.
- Never hardcode the model string. Always read from
config.model. - Never hardcode paths. Always go through the provider or config system.
- Hard constraints in GLOBAL_MEMORY.md are append-only. This is enforced in Python in
sync.py— do not remove that check. - Backups before every write. No exceptions.
- Read PITFALLS.md before touching
sync.pyor any provider.