Cloud Sync Guide
The Basic Memory Cloud CLI provides seamless integration between local and cloud knowledge bases using project-scoped synchronization. Each project can optionally sync with the cloud, giving you fine-grained control over what syncs and where.
Overview
The cloud CLI enables you to:
- Toggle cloud mode - All regular
bmcommands work with cloud when enabled - Project-scoped sync - Each project independently manages its sync configuration
- Explicit operations - Sync only what you want, when you want
- Bidirectional sync - Keep local and cloud in sync with rclone bisync
- Offline access - Work locally, sync when ready
Prerequisites
Before using Basic Memory Cloud sync, you need:
- Active Subscription: An active Basic Memory Cloud subscription
- Subscribe: Visit basicmemory.com/subscribe
- Basic Memory CLI: See Getting Started for installation
When to Use Sync
- You want to edit notes locally in your preferred editor
- You need bidirectional sync (changes flow both ways automatically)
- You're working with large knowledge bases
- You want offline access with periodic syncing
- Web Editor: Upload and edit files in the Cloud web interface
- MCP Tools Only: Use AI assistants to manage notes entirely in cloud
Architecture: Project-Scoped Sync
How It Works
Projects can exist in three states:
- Cloud-only - Project exists on cloud, no local copy
- Cloud + Local (synced) - Project has a local working directory that syncs
- Local-only - Project exists locally (when cloud mode is disabled)
Example:
# You have 3 projects on cloud:
# - research: wants local sync at ~/Documents/research
# - work: wants local sync at ~/work-notes
# - temp: cloud-only, no local sync needed
bm project add research --local-path ~/Documents/research
bm project add work --local-path ~/work-notes
bm project add temp # No local sync
# Now you can sync individually (after initial --resync):
bm project bisync --name research
bm project bisync --name work
# temp stays cloud-only
What happens under the covers:
- Config stores
cloud_projectsdict mapping project names to local paths - Each project gets its own bisync state in
~/.basic-memory/bisync-state/{project}/ - Rclone syncs using single remote:
basic-memory-cloud - Projects can live anywhere on your filesystem
Quick Start
1. Enable Cloud Mode
Authenticate and enable cloud mode:
bm cloud login
What this does:
- Opens browser to Basic Memory Cloud authentication page
- Stores authentication token
- Enables cloud mode - all CLI commands now work against cloud
- Validates your subscription status
2. Set Up Sync
Install rclone and configure credentials:
bm cloud setup
What this does:
- Installs rclone automatically (if needed)
- Fetches your tenant information from cloud
- Generates scoped S3 credentials for sync
- Configures single rclone remote:
basic-memory-cloud
3. Add Projects with Sync
Create projects with optional local sync paths:
# Create cloud project without local sync
bm project add research
# Create cloud project WITH local sync
bm project add research --local-path ~/Documents/research
# Or configure sync for existing project
bm project sync-setup research ~/Documents/research
4. Sync Your Project
Establish the initial sync baseline. Always preview with --dry-run first:
# Step 1: Preview the initial sync
bm project bisync --name research --resync --dry-run
# Step 2: If all looks good, run the actual sync
bm project bisync --name research --resync
--resync? This is an rclone requirement for the first bisync run. It establishes the initial state that future syncs will compare against. After the first sync, don't use --resync unless you need to force a new baseline.5. Subsequent Syncs
After the first sync, just run bisync without --resync:
bm project bisync --name research
What happens:
- Rclone compares local and cloud states
- Syncs changes in both directions
- Auto-resolves conflicts (newer file wins)
- Basic Memory reindexes all changed files
- Updates
last_synctimestamp in config
6. Verify Setup
bm cloud status
You should see:
Mode: Cloud (enabled)Cloud instance is healthy
File Synchronization
Understanding the Sync Commands
| Command | Direction | Use Case |
|---|---|---|
bm project bisync | Local ↔ Cloud | Two-way sync (recommended) |
bm project sync | Local → Cloud | One-way, make cloud match local |
bm project check | Verify | Check if files match |
Two-Way Sync (Recommended)
# First time - establish baseline
bm project bisync --name research --resync
# Subsequent syncs
bm project bisync --name research
Conflict resolution: When the same file is edited both locally and in cloud, the newer file wins (based on modification time).
One-Way Sync
bm project sync --name research
Makes cloud identical to local. Use when local is the source of truth.
Preview Changes (Dry Run)
bm project bisync --name research --dry-run
Shows what would change without actually syncing.
Verify Integrity
bm project check --name research
Compares file checksums without making changes.
Multiple Projects
Syncing Multiple Projects
# Setup multiple projects
bm project add research --local-path ~/Documents/research
bm project add work --local-path ~/work-notes
bm project add personal --local-path ~/personal
# Establish baselines
bm project bisync --name research --resync
bm project bisync --name work --resync
bm project bisync --name personal --resync
# Daily workflow: sync everything
bm project bisync --name research
bm project bisync --name work
bm project bisync --name personal
Mixed Usage
# Projects with sync
bm project add research --local-path ~/Documents/research
bm project add work --local-path ~/work
# Cloud-only projects
bm project add archive
bm project add temp-notes
# Sync only the configured ones
bm project bisync --name research
bm project bisync --name work
# archive and temp-notes stay cloud-only
Filter Configuration
Understanding .bmignore
Basic Memory uses .bmignore for global ignore patterns (similar to .gitignore).
Location: ~/.basic-memory/.bmignore
Default patterns:
# Version control
.git/**
# Python
__pycache__/**
*.pyc
.venv/**
# Node.js
node_modules/**
# Basic Memory internals
memory.db/**
memory.db-shm/**
memory.db-wal/**
# OS files
.DS_Store/**
# Environment files
.env/**
.gitignore files in your projects. Use .bmignore for global patterns across all projects.Troubleshooting
Authentication Issues
Problem: Authentication failed or Invalid token
Solution:
bm cloud logout
bm cloud login
First Bisync Requires --resync
Problem: Bisync fails on first run
Solution:
bm project bisync --name research --resync
This establishes the initial baseline state.
Empty Directory Issues
Problem: "Empty prior Path1 listing. Cannot sync to an empty directory"
Solution: Add at least one file before running --resync:
echo "# Research Notes" > ~/Documents/research/README.md
bm project bisync --name research --resync
Bisync State Corruption
Problem: Bisync fails with errors about corrupted state
Solution:
bm project bisync-reset research
bm project bisync --name research --resync
Too Many Deletes
Problem: "max delete limit (25) exceeded"
Solution: Review what's being deleted, then force resync if correct:
bm project bisync --name research --dry-run
bm project bisync --name research --resync
Project Not Configured for Sync
Problem: "Project has no local_sync_path configured"
Solution:
bm project sync-setup research ~/Documents/research
bm project bisync --name research --resync
Disable Cloud Mode
Return to local mode:
bm cloud logout
All bm commands now work with local projects.
Security
- Authentication: OAuth 2.1 with PKCE flow
- Tokens: Stored securely in
~/.basic-memory/basic-memory-cloud.json - Transport: All data encrypted in transit (HTTPS)
- Credentials: Scoped S3 credentials (read-write to your tenant only)
- Isolation: Your data isolated from other tenants
- Ignore patterns: Sensitive files excluded via
.bmignore
Command Reference
Cloud Mode Management
bm cloud login # Authenticate and enable cloud mode
bm cloud logout # Disable cloud mode
bm cloud status # Check cloud mode and instance health
Setup
bm cloud setup # Install rclone and configure credentials
Project Management
bm project list # List cloud projects
bm project add <name> # Create cloud project (no sync)
bm project add <name> --local-path <path> # Create with local sync
bm project sync-setup <name> <path> # Add sync to existing project
bm project rm <name> # Delete project
File Synchronization
# Two-way sync (recommended)
bm project bisync --name <project> # After first --resync
bm project bisync --name <project> --resync # First time / force baseline
bm project bisync --name <project> --dry-run
bm project bisync --name <project> --verbose
# One-way sync (local → cloud)
bm project sync --name <project>
bm project sync --name <project> --dry-run
# Integrity check
bm project check --name <project>
# List remote files
bm project ls --name <project>
Summary
Basic Memory Cloud uses project-scoped sync:
- Enable cloud mode -
bm cloud login - Install rclone -
bm cloud setup - Add projects with sync -
bm project add research --local-path ~/Documents/research - Preview first sync -
bm project bisync --name research --resync --dry-run - Establish baseline -
bm project bisync --name research --resync - Daily workflow -
bm project bisync --name research
Key benefits:
- Each project independently syncs (or doesn't)
- Projects can live anywhere on disk
- Explicit sync operations (no magic)
- Safe by design (max delete limits, conflict resolution)
- Full offline access (work locally, sync when ready)

