Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/nullclaw/nullclaw/llms.txt

Use this file to discover all available pages before exploring further.

The nullclaw migrate command imports data from other AI assistant systems, preserving your memory, conversations, and configuration.

Supported Sources

OpenClaw

Migrate from OpenClaw (TypeScript implementation):
nullclaw migrate openclaw

Usage

# Dry run (show what would be imported)
nullclaw migrate openclaw --dry-run

# Import with custom source path
nullclaw migrate openclaw --source ~/openclaw-data

# Full import
nullclaw migrate openclaw

Options

--dry-run
boolean
Preview migration without making changes
--source
string
Custom source directory (default: ~/.openclaw)

What Gets Migrated

From OpenClaw

1

Configuration

  • Provider credentials (API keys)
  • Model selection
  • Channel configuration
  • Security settings
OpenClaw and NullClaw use the same config structure, so migration is 1:1.
2

Memory

  • All stored memories
  • Conversation history
  • Memory categories (core, daily, conversation)
  • Timestamps and metadata
Converted from OpenClaw’s format to NullClaw’s SQLite or markdown backend.
3

Identity

  • IDENTITY.md (OpenClaw format)
  • Converted to NullClaw’s identity format

Migration Process

Step 1: Dry Run

First, run a dry run to see what will be migrated:
nullclaw migrate openclaw --dry-run
Example output:
Migration Preview (Dry Run)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Source: /Users/alice/.openclaw
Destination: /Users/alice/.nullclaw

Configuration:
  ✓ models.providers.openrouter
  ✓ agents.defaults.model
  ✓ channels.telegram (1 account)
  ✓ channels.discord (1 account)

Memory:
  ✓ 147 memories
  ✓ 23 conversations
  ✓ 5 core facts
  Total size: 2.3 MB

Identity:
  ✓ IDENTITY.md (1.2 KB)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
No changes made (dry run)
Run without --dry-run to perform migration

Step 2: Backup

Before migrating, back up your existing NullClaw data:
cp -r ~/.nullclaw ~/.nullclaw.backup

Step 3: Migrate

Run the migration:
nullclaw migrate openclaw
Example output:
Migrating from OpenClaw...
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

[1/3] Migrating configuration...
  ✓ Imported provider config
  ✓ Imported channel config
  ✓ Merged with existing config

[2/3] Migrating memory...
  ✓ Converted 147 memories to SQLite
  ✓ Preserved timestamps and categories
  ✓ Created vector embeddings (147/147)

[3/3] Migrating identity...
  ✓ Converted IDENTITY.md

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Migration complete! ✓

Next steps:
  1. Verify: nullclaw doctor
  2. Test: nullclaw agent -m "Recall recent memories"
  3. Check: nullclaw status

Step 4: Verify

Verify the migration:
# Check configuration
nullclaw doctor

# Test memory recall
nullclaw agent -m "What do you remember about me?"

# Check status
nullclaw status

Memory Format Conversion

OpenClaw stores memories in markdown files:
# Memory: core/name.md

Alice prefers to be called by her full name.

---
Timestamp: 2024-01-15T10:30:00Z
Category: core
NullClaw converts to SQLite:
INSERT INTO memories (content, category, timestamp) VALUES (
  'Alice prefers to be called by her full name.',
  'core',
  '2024-01-15T10:30:00Z'
);
With vector embeddings:
INSERT INTO memory_embeddings (memory_id, embedding) VALUES (
  1,
  BLOB(...) -- 1536-dim vector
);

Config Merging

If you already have a NullClaw config, the migration:
  1. Preserves your existing providers
  2. Adds new providers from OpenClaw
  3. Merges channel configurations
  4. Does not overwrite existing channels
Example: Existing NullClaw config:
{
  "models": {
    "providers": {
      "anthropic": {"api_key": "sk-ant-..."}
    }
  }
}
OpenClaw config:
{
  "models": {
    "providers": {
      "openrouter": {"api_key": "sk-or-..."}
    }
  }
}
Merged result:
{
  "models": {
    "providers": {
      "anthropic": {"api_key": "sk-ant-..."},
      "openrouter": {"api_key": "sk-or-..."}
    }
  }
}

Troubleshooting

Source directory not found

Error: Source directory not found: /Users/alice/.openclaw
Fix: Specify custom path:
nullclaw migrate openclaw --source ~/path/to/openclaw

Memory conversion failed

Error: Failed to convert memory: invalid timestamp
Fix: Check OpenClaw memory files for invalid data:
# Find problematic files
grep -r "Timestamp:" ~/.openclaw/memory/

Config merge conflict

Warning: Channel 'telegram.main' already exists, skipping
This is expected. The migration preserves your existing channels.

Examples

Full OpenClaw migration

# 1. Dry run
nullclaw migrate openclaw --dry-run

# 2. Backup
cp -r ~/.nullclaw ~/.nullclaw.backup

# 3. Migrate
nullclaw migrate openclaw

# 4. Verify
nullclaw doctor
nullclaw agent -m "What memories do you have?"

Migrate from custom location

nullclaw migrate openclaw --source ~/backups/openclaw-2024-01-15

Preview before migrating

# See what would be imported
nullclaw migrate openclaw --dry-run > migration-preview.txt

# Review
cat migration-preview.txt

# Proceed if satisfied
nullclaw migrate openclaw

See Also