CLI Reference
Use bm (short) or basic-memory (full). Examples below use bm.
Core commands
bm status
Show sync status between files and database.
bm status
bm status --verbose
bm status --json
bm status --project research
| Flag | Description |
|---|---|
--project | Target a specific project |
--verbose, -v | Show detailed file information |
--json | Machine-readable JSON output |
--local | Force local routing (ignore cloud mode) |
--cloud | Force cloud routing |
bm doctor
Run local consistency checks to verify file/database sync. Defaults to local routing since it scans the local filesystem.
bm doctor
| Flag | Description |
|---|---|
--local | Force local routing (ignore cloud mode) |
--cloud | Force cloud routing |
bm mcp
Run the MCP server with configurable transport options. The server handles initialization, file sync, and cleanup automatically.
# Default: stdio transport (for Claude Desktop, Claude Code, etc.)
bm mcp
# Lock to a single project
bm mcp --project main
# HTTP transport for web deployments
bm mcp --transport streamable-http --port 8000
# SSE transport for compatibility with existing clients
bm mcp --transport sse
| Flag | Description |
|---|---|
--transport | Transport type: stdio (default), streamable-http, sse |
--host | Host for HTTP transports (default 0.0.0.0) |
--port | Port for HTTP transports (default 8000) |
--path | Path prefix for streamable-http transport (default /mcp) |
--project | Restrict MCP server to a single project |
bm reindex
Rebuild search indexes and/or vector embeddings without dropping the database.
# Rebuild everything (search + embeddings)
bm reindex
# Rebuild only full-text search index
bm reindex --search
bm reindex -s
# Rebuild only vector embeddings
bm reindex --embeddings
bm reindex -e
# Reindex a specific project
bm reindex -p main
| Flag | Description |
|---|---|
--search, -s | Rebuild only the full-text search index |
--embeddings, -e | Rebuild only vector embeddings |
--project, -p | Target a specific project (default: all projects) |
When neither --search nor --embeddings is specified, both are rebuilt.
bm reset
Reset database — drops all tables and recreates them. Files are never deleted.
bm reset
bm reset --reindex
| Flag | Description |
|---|---|
--reindex | Rebuild the database index from filesystem after reset |
bm format
Format files using configured formatters. Uses the formatter_command or formatters settings from your config. By default, formats all .md, .json, and .canvas files in the current project.
bm format # Format all files in current project
bm format --project research # Format files in specific project
bm format notes/meeting.md # Format a specific file
bm format notes/ # Format all files in a directory
| Flag | Description |
|---|---|
--project, -p | Target a specific project |
Project management
bm project list
List projects from local config and (when available) cloud.
bm project list
bm project list --json
bm project list --workspace my-workspace
| Flag | Description |
|---|---|
--json | Machine-readable JSON output |
--workspace | Cloud workspace name or tenant ID |
--local | Force local routing |
--cloud | Force cloud routing |
bm project info
Display detailed information and statistics about a project. Shows an htop-inspired compact dashboard with horizontal bar charts for note types, embedding coverage bars, and colored status dots.
bm project info main
bm project info main --json
| Flag | Description |
|---|---|
--json | Machine-readable JSON output |
--local | Force local routing (ignore cloud mode) |
--cloud | Force cloud routing |
bm project add
Add a new project.
# Local project
bm project add research ~/Documents/research
# Cloud project (no local sync)
bm project add research --cloud
# Cloud project with local sync path
bm project add research --cloud --local-path ~/docs
# Add and set as default
bm project add research ~/Documents/research --default
| Flag | Description |
|---|---|
--local-path | Local sync path for cloud mode |
--default | Set as default project |
--local | Force local routing |
--cloud | Force cloud routing |
bm project remove
Remove a project from configuration.
bm project remove research
bm project remove research --delete-notes
| Flag | Description |
|---|---|
--delete-notes | Also delete project files from disk |
--local | Force local routing |
--cloud | Force cloud routing |
bm project default
Set the default project used as fallback when no project is specified.
bm project default main
bm project move
Move a local project to a new filesystem location. Updates the configured path in the database.
bm project move research /new/path/to/research
bm project ls
List files in a project directory.
bm project ls --name research
bm project ls --name research subfolder
bm project ls --name research --local
bm project ls --name research --cloud
| Flag | Description |
|---|---|
--name | Project name (required) |
--local | List files from local instance |
--cloud | List files from cloud instance |
Routing modes (per project)
Route specific projects through cloud while keeping others local:
bm project set-cloud research
bm project set-local research
Cloud commands
Authentication and status
bm cloud login
bm cloud status
bm cloud logout
API keys
bm cloud api-key save bmc_...
bm cloud api-key create "my-laptop"
bm cloud api-key create requires an active OAuth session. Run bm cloud login first.Setup and upload
bm cloud setup
bm cloud upload ~/my-notes --project research --create-project
Sync
# One-way sync: local → cloud
bm cloud sync
# Two-way sync: local ↔ cloud
bm cloud bisync
# Verify file integrity between local and cloud
bm cloud check
# Clear bisync state
bm cloud bisync-reset
# Configure local sync for an existing cloud project
bm cloud sync-setup research ~/Documents/research
Snapshots
bm cloud snapshot create "Before migration"
bm cloud snapshot list
bm cloud snapshot show <snapshot-id>
bm cloud snapshot browse <snapshot-id>
bm cloud snapshot delete <snapshot-id>
Restore
bm cloud restore <path> --snapshot <snapshot-id>
Workspaces
bm cloud workspace list
Promo controls
bm cloud promo --off
bm cloud promo --on
Schema commands
Tools for defining, validating, and evolving note structure. See Schema System for concepts and workflow.
bm schema validate
Validate notes against their schema definition. Pass a note type to validate all notes of that type, a specific file path to validate one note, or omit to validate all notes that have schemas.
# Validate all notes with schemas
bm schema validate
# Validate all notes of a type
bm schema validate person
# Validate one specific note
bm schema validate people/ada-lovelace.md
# Strict mode — treat warnings as errors
bm schema validate person --strict
# Machine-readable output
bm schema validate person --json
# Target a specific project
bm schema validate person --project research
| Flag | Description |
|---|---|
--strict | Treat validation warnings as errors (exit code 1 on any issue) |
--json | Machine-readable JSON output |
--project | Target a specific project |
--local | Force local routing |
--cloud | Force cloud routing |
bm schema infer
Analyze existing notes of a type and suggest a schema based on common observation categories, relation types, and frontmatter fields. Fields present in 95%+ of notes become required; fields above the threshold become optional.
# Infer schema for a note type
bm schema infer person
# Lower the threshold to include less common fields
bm schema infer person --threshold 0.1
# Save the inferred schema directly as a schema note
bm schema infer person --save
# Machine-readable output
bm schema infer person --json
# Target a specific project
bm schema infer person --project research
| Flag | Description |
|---|---|
--threshold | Minimum field frequency for inclusion (default 0.25 — fields in 25%+ of notes) |
--save | Save the inferred schema as a schema note in the schemas/ directory |
--json | Machine-readable JSON output |
--project | Target a specific project |
--local | Force local routing |
--cloud | Force cloud routing |
bm schema diff
Compare a schema definition against actual note usage to detect drift. Shows new fields appearing, old fields disappearing, and cardinality changes.
# Check drift for a note type
bm schema diff person
# Machine-readable output
bm schema diff person --json
# Target a specific project
bm schema diff person --project research
| Flag | Description |
|---|---|
--json | Machine-readable JSON output |
--project | Target a specific project |
--local | Force local routing |
--cloud | Force cloud routing |
Tool commands (CLI wrapper for MCP tools)
Command group: bm tool (singular). This provides CLI access to the same MCP tools that AI assistants use, useful for scripting, debugging, and quick operations from the terminal.
bm tool write-note
# Create a note with inline content
bm tool write-note --title "API Notes" --folder specs --content "# API Notes"
# Pipe content from stdin
echo "# My Note" | bm tool write-note --title "My Note" --folder notes
| Flag | Description |
|---|---|
--title | Note title (required) |
--folder | Destination folder (required) |
--content | Note content (reads from stdin if omitted) |
--tags | Tags to apply |
--project | Target project |
--local | Force local routing |
--cloud | Force cloud routing |
bm tool read-note
bm tool read-note "specs/api-notes"
bm tool read-note my-note --include-frontmatter
bm tool read-note my-note --page 2 --page-size 5
| Flag | Description |
|---|---|
--include-frontmatter | Include YAML frontmatter in output |
--page | Page number for pagination (default 1) |
--page-size | Results per page (default 10) |
--project | Target project |
--local | Force local routing |
--cloud | Force cloud routing |
bm tool edit-note
bm tool edit-note my-note --operation append --content "new content"
bm tool edit-note my-note --operation find_replace --find-text "old" --content "new"
bm tool edit-note my-note --operation replace_section --section "## Notes" --content "updated"
| Flag | Description |
|---|---|
--operation | Edit operation: append, prepend, find_replace, replace_section (required) |
--content | Content for the edit (required) |
--find-text | Text to find (required for find_replace) |
--section | Section heading (required for replace_section) |
--expected-replacements | Expected replacement count for find_replace (default 1) |
--project | Target project |
--local | Force local routing |
--cloud | Force cloud routing |
bm tool search-notes
# Text search (query is a positional argument)
bm tool search-notes "authentication"
# Tag and metadata filters (query is optional)
bm tool search-notes --tag python --tag async
bm tool search-notes --meta status=draft
bm tool search-notes --type person --type meeting
# Search modes
bm tool search-notes "how to speed up the app" --hybrid
bm tool search-notes "how to speed up the app" --vector
bm tool search-notes --permalink "specs/*"
bm tool search-notes --title "API Design"
# Advanced metadata filter (JSON)
bm tool search-notes --filter '{"priority": {"$in": ["high", "critical"]}}'
# Pagination
bm tool search-notes "api" --page 2 --page-size 20
| Flag | Description |
|---|---|
--hybrid | Use hybrid search (keyword + semantic) |
--vector | Use vector (semantic-only) search |
--permalink | Search permalink values |
--title | Search title values |
--tag | Filter by frontmatter tag (repeatable) |
--status | Filter by frontmatter status |
--type | Filter by frontmatter type (repeatable) |
--entity-type | Filter by result type: entity, observation, relation (repeatable) |
--meta | Filter by frontmatter key=value (repeatable) |
--filter | JSON metadata filter (advanced) |
--after_date | Date filter (e.g., 2d, 1 week) |
--page | Page number (default 1) |
--page-size | Results per page (default 10) |
--project | Target project |
--local | Force local routing |
--cloud | Force cloud routing |
bm tool build-context
bm tool build-context memory://specs/search
bm tool build-context specs/search --depth 2 --timeframe 30d
| Flag | Description |
|---|---|
--depth | Traversal depth (default 1) |
--timeframe | Time window filter (default 7d) |
--page | Page number (default 1) |
--page-size | Results per page (default 10) |
--max-related | Maximum related items (default 10) |
--project | Target project |
--local | Force local routing |
--cloud | Force cloud routing |
bm tool recent-activity
bm tool recent-activity
bm tool recent-activity --timeframe 30d --page-size 20
bm tool recent-activity --type entity --type observation
| Flag | Description |
|---|---|
--type | Filter by item type (repeatable) |
--depth | Context depth (default 1) |
--timeframe | Time window (default 7d) |
--page | Page number (default 1) |
--page-size | Results per page (default 50) |
--project | Target project |
--local | Force local routing |
--cloud | Force cloud routing |
Schema tool commands
These are CLI wrappers around the schema MCP tools with JSON output:
bm tool schema-validate --entity-type person
bm tool schema-infer person
bm tool schema-diff person
bm tool list-projects
bm tool list-workspaces
Import commands
bm import claude conversations
bm import chatgpt
bm import memory-json /path/to/export.json
Notes on defaults
- If
--projectis omitted, Basic Memory falls back todefault_projectwhen configured. - All
bm toolsubcommands support--workspacefor cloud workspace targeting. --localand--cloudflags are available on most commands for routing overrides.

