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
Preview migration without making changes
Custom source directory (default: ~/.openclaw)
What Gets Migrated
From OpenClaw
Configuration
- Provider credentials (API keys)
- Model selection
- Channel configuration
- Security settings
OpenClaw and NullClaw use the same config structure, so migration is 1:1.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.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
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:
- Preserves your existing providers
- Adds new providers from OpenClaw
- Merges channel configurations
- 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