{
  "schemaVersion": "1.0",
  "item": {
    "slug": "clawdbot-backup",
    "name": "Clawdbot Backup",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/Sebastian-Buitrag0/clawdbot-backup",
    "canonicalUrl": "https://clawhub.ai/Sebastian-Buitrag0/clawdbot-backup",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/clawdbot-backup",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=clawdbot-backup",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/clawdbot-backup"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/clawdbot-backup",
    "agentPageUrl": "https://openagent3.xyz/skills/clawdbot-backup/agent",
    "manifestUrl": "https://openagent3.xyz/skills/clawdbot-backup/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/clawdbot-backup/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "ClawdBot Backup Skill",
        "body": "Backup, restore, and sync your ClawdBot configuration across devices directly from Clawdbot."
      },
      {
        "title": "Overview",
        "body": "This skill helps you:\n\nBackup all ClawdBot data and settings\nRestore from backups\nSync between multiple machines\nVersion control your configuration\nAutomate backup routines\nMigrate to new devices"
      },
      {
        "title": "Key Locations",
        "body": "~/.claude/                    # Main ClawdBot directory\n├── settings.json             # Global settings\n├── settings.local.json       # Local overrides (machine-specific)\n├── projects.json             # Project configurations\n├── skills/                   # Your custom skills\n│   ├── skill-name/\n│   │   ├── SKILL.md\n│   │   └── supporting-files/\n│   └── another-skill/\n├── commands/                 # Custom slash commands (legacy)\n│   └── command-name.md\n├── contexts/                 # Saved contexts\n├── templates/                # Response templates\n└── mcp/                      # MCP server configurations\n    └── servers.json\n\n~/projects/                   # Your projects (optional backup)\n├── project-1/\n│   └── .claude/              # Project-specific config\n│       ├── settings.json\n│       └── skills/\n└── project-2/"
      },
      {
        "title": "What to Backup",
        "body": "ESSENTIAL (Always backup):\n✓ ~/.claude/skills/           # Custom skills\n✓ ~/.claude/commands/         # Custom commands\n✓ ~/.claude/settings.json     # Global settings\n✓ ~/.claude/mcp/              # MCP configurations\n\nRECOMMENDED (Usually backup):\n✓ ~/.claude/contexts/         # Saved contexts\n✓ ~/.claude/templates/        # Templates\n✓ Project .claude/ folders    # Project configs\n\nOPTIONAL (Case by case):\n○ ~/.claude/settings.local.json  # Machine-specific\n○ Cache directories              # Can be rebuilt\n○ Log files                      # Usually not needed"
      },
      {
        "title": "Full Backup",
        "body": "# Create timestamped backup\nBACKUP_DIR=\"$HOME/clawdbot-backups\"\nTIMESTAMP=$(date +%Y%m%d_%H%M%S)\nBACKUP_NAME=\"clawdbot_backup_$TIMESTAMP\"\n\nmkdir -p \"$BACKUP_DIR\"\n\ntar -czvf \"$BACKUP_DIR/$BACKUP_NAME.tar.gz\" \\\n  -C \"$HOME\" \\\n  .claude/skills \\\n  .claude/commands \\\n  .claude/settings.json \\\n  .claude/mcp \\\n  .claude/contexts \\\n  .claude/templates \\\n  2>/dev/null\n\necho \"Backup created: $BACKUP_DIR/$BACKUP_NAME.tar.gz\""
      },
      {
        "title": "Quick Skills-Only Backup",
        "body": "# Backup just skills\ntar -czvf ~/clawdbot_skills_$(date +%Y%m%d).tar.gz \\\n  -C \"$HOME\" .claude/skills .claude/commands"
      },
      {
        "title": "Restore from Backup",
        "body": "# Restore full backup\nBACKUP_FILE=\"$HOME/clawdbot-backups/clawdbot_backup_20260129.tar.gz\"\n\n# Preview contents first\ntar -tzvf \"$BACKUP_FILE\"\n\n# Restore (will overwrite existing)\ntar -xzvf \"$BACKUP_FILE\" -C \"$HOME\"\n\necho \"Restore complete!\""
      },
      {
        "title": "Full-Featured Backup Script",
        "body": "#!/bin/bash\n# clawdbot-backup.sh - Comprehensive ClawdBot backup tool\n\nset -e\n\n# Configuration\nBACKUP_ROOT=\"${CLAWDBOT_BACKUP_DIR:-$HOME/clawdbot-backups}\"\nCLAUDE_DIR=\"$HOME/.claude\"\nMAX_BACKUPS=10  # Keep last N backups\nTIMESTAMP=$(date +%Y%m%d_%H%M%S)\n\n# Colors\nRED='\\033[0;31m'\nGREEN='\\033[0;32m'\nYELLOW='\\033[1;33m'\nNC='\\033[0m'\n\nlog_info() { echo -e \"${GREEN}[INFO]${NC} $1\"; }\nlog_warn() { echo -e \"${YELLOW}[WARN]${NC} $1\"; }\nlog_error() { echo -e \"${RED}[ERROR]${NC} $1\"; }\n\n# Check if ClawdBot directory exists\ncheck_claude_dir() {\n    if [ ! -d \"$CLAUDE_DIR\" ]; then\n        log_error \"ClawdBot directory not found: $CLAUDE_DIR\"\n        exit 1\n    fi\n}\n\n# Create backup\ncreate_backup() {\n    local backup_type=\"${1:-full}\"\n    local backup_name=\"clawdbot_${backup_type}_${TIMESTAMP}\"\n    local backup_path=\"$BACKUP_ROOT/$backup_name.tar.gz\"\n    \n    mkdir -p \"$BACKUP_ROOT\"\n    \n    log_info \"Creating $backup_type backup...\"\n    \n    case $backup_type in\n        full)\n            tar -czvf \"$backup_path\" \\\n                -C \"$HOME\" \\\n                .claude/skills \\\n                .claude/commands \\\n                .claude/settings.json \\\n                .claude/settings.local.json \\\n                .claude/projects.json \\\n                .claude/mcp \\\n                .claude/contexts \\\n                .claude/templates \\\n                2>/dev/null || true\n            ;;\n        skills)\n            tar -czvf \"$backup_path\" \\\n                -C \"$HOME\" \\\n                .claude/skills \\\n                .claude/commands \\\n                2>/dev/null || true\n            ;;\n        settings)\n            tar -czvf \"$backup_path\" \\\n                -C \"$HOME\" \\\n                .claude/settings.json \\\n                .claude/settings.local.json \\\n                .claude/mcp \\\n                2>/dev/null || true\n            ;;\n        *)\n            log_error \"Unknown backup type: $backup_type\"\n            exit 1\n            ;;\n    esac\n    \n    if [ -f \"$backup_path\" ]; then\n        local size=$(du -h \"$backup_path\" | cut -f1)\n        log_info \"Backup created: $backup_path ($size)\"\n    else\n        log_error \"Backup failed!\"\n        exit 1\n    fi\n}\n\n# List backups\nlist_backups() {\n    log_info \"Available backups in $BACKUP_ROOT:\"\n    echo \"\"\n    \n    if [ -d \"$BACKUP_ROOT\" ]; then\n        ls -lh \"$BACKUP_ROOT\"/*.tar.gz 2>/dev/null | \\\n            awk '{print $9, $5, $6, $7, $8}' || \\\n            echo \"No backups found.\"\n    else\n        echo \"Backup directory doesn't exist.\"\n    fi\n}\n\n# Restore backup\nrestore_backup() {\n    local backup_file=\"$1\"\n    \n    if [ -z \"$backup_file\" ]; then\n        log_error \"Please specify backup file\"\n        list_backups\n        exit 1\n    fi\n    \n    if [ ! -f \"$backup_file\" ]; then\n        # Try relative path in backup dir\n        backup_file=\"$BACKUP_ROOT/$backup_file\"\n    fi\n    \n    if [ ! -f \"$backup_file\" ]; then\n        log_error \"Backup file not found: $backup_file\"\n        exit 1\n    fi\n    \n    log_warn \"This will overwrite existing configuration!\"\n    read -p \"Continue? (y/N) \" confirm\n    \n    if [ \"$confirm\" != \"y\" ] && [ \"$confirm\" != \"Y\" ]; then\n        log_info \"Restore cancelled.\"\n        exit 0\n    fi\n    \n    log_info \"Restoring from: $backup_file\"\n    tar -xzvf \"$backup_file\" -C \"$HOME\"\n    log_info \"Restore complete!\"\n}\n\n# Clean old backups\ncleanup_backups() {\n    log_info \"Cleaning old backups (keeping last $MAX_BACKUPS)...\"\n    \n    cd \"$BACKUP_ROOT\" 2>/dev/null || return\n    \n    local count=$(ls -1 *.tar.gz 2>/dev/null | wc -l)\n    \n    if [ \"$count\" -gt \"$MAX_BACKUPS\" ]; then\n        local to_delete=$((count - MAX_BACKUPS))\n        ls -1t *.tar.gz | tail -n \"$to_delete\" | xargs rm -v\n        log_info \"Removed $to_delete old backup(s)\"\n    else\n        log_info \"No cleanup needed ($count backups)\"\n    fi\n}\n\n# Show backup stats\nshow_stats() {\n    log_info \"ClawdBot Backup Statistics\"\n    echo \"\"\n    \n    echo \"=== Directory Sizes ===\"\n    du -sh \"$CLAUDE_DIR\"/skills 2>/dev/null || echo \"Skills: N/A\"\n    du -sh \"$CLAUDE_DIR\"/commands 2>/dev/null || echo \"Commands: N/A\"\n    du -sh \"$CLAUDE_DIR\"/mcp 2>/dev/null || echo \"MCP: N/A\"\n    du -sh \"$CLAUDE_DIR\" 2>/dev/null || echo \"Total: N/A\"\n    \n    echo \"\"\n    echo \"=== Skills Count ===\"\n    find \"$CLAUDE_DIR/skills\" -name \"SKILL.md\" 2>/dev/null | wc -l | xargs echo \"Skills:\"\n    find \"$CLAUDE_DIR/commands\" -name \"*.md\" 2>/dev/null | wc -l | xargs echo \"Commands:\"\n    \n    echo \"\"\n    echo \"=== Backup Directory ===\"\n    if [ -d \"$BACKUP_ROOT\" ]; then\n        du -sh \"$BACKUP_ROOT\"\n        ls -1 \"$BACKUP_ROOT\"/*.tar.gz 2>/dev/null | wc -l | xargs echo \"Backup files:\"\n    else\n        echo \"No backups yet\"\n    fi\n}\n\n# Usage\nusage() {\n    cat << EOF\nClawdBot Backup Tool\n\nUsage: $(basename $0) <command> [options]\n\nCommands:\n    backup [type]   Create backup (types: full, skills, settings)\n    restore <file>  Restore from backup file\n    list            List available backups\n    cleanup         Remove old backups (keep last $MAX_BACKUPS)\n    stats           Show backup statistics\n    help            Show this help\n\nExamples:\n    $(basename $0) backup              # Full backup\n    $(basename $0) backup skills       # Skills only\n    $(basename $0) restore latest.tar.gz\n    $(basename $0) list\n    $(basename $0) cleanup\n\nEnvironment:\n    CLAWDBOT_BACKUP_DIR    Backup directory (default: ~/clawdbot-backups)\n\nEOF\n}\n\n# Main\nmain() {\n    check_claude_dir\n    \n    case \"${1:-help}\" in\n        backup)\n            create_backup \"${2:-full}\"\n            ;;\n        restore)\n            restore_backup \"$2\"\n            ;;\n        list)\n            list_backups\n            ;;\n        cleanup)\n            cleanup_backups\n            ;;\n        stats)\n            show_stats\n            ;;\n        help|--help|-h)\n            usage\n            ;;\n        *)\n            log_error \"Unknown command: $1\"\n            usage\n            exit 1\n            ;;\n    esac\n}\n\nmain \"$@\""
      },
      {
        "title": "Save and Use",
        "body": "# Save script\ncat > ~/.local/bin/clawdbot-backup << 'SCRIPT'\n# Paste script content here\nSCRIPT\n\nchmod +x ~/.local/bin/clawdbot-backup\n\n# Usage\nclawdbot-backup backup          # Full backup\nclawdbot-backup backup skills   # Skills only\nclawdbot-backup list            # List backups\nclawdbot-backup restore <file>  # Restore"
      },
      {
        "title": "Initialize Git Repo",
        "body": "cd ~/.claude\n\n# Initialize git\ngit init\n\n# Create .gitignore\ncat > .gitignore << 'EOF'\n# Machine-specific settings\nsettings.local.json\n\n# Cache and temp files\ncache/\n*.tmp\n*.log\n\n# Large files\n*.tar.gz\n*.zip\n\n# Sensitive data (if any)\n*.pem\n*.key\ncredentials/\nEOF\n\n# Initial commit\ngit add .\ngit commit -m \"Initial ClawdBot configuration backup\""
      },
      {
        "title": "Push to Remote",
        "body": "# Add remote (GitHub, GitLab, etc)\ngit remote add origin git@github.com:username/clawdbot-config.git\n\n# Push\ngit push -u origin main"
      },
      {
        "title": "Daily Workflow",
        "body": "# After making changes to skills/settings\ncd ~/.claude\ngit add .\ngit commit -m \"Updated skill: trading-bot\"\ngit push"
      },
      {
        "title": "Auto-Commit Script",
        "body": "#!/bin/bash\n# auto-commit-claude.sh - Auto commit changes\n\ncd ~/.claude || exit 1\n\n# Check for changes\nif git diff --quiet && git diff --staged --quiet; then\n    echo \"No changes to commit\"\n    exit 0\nfi\n\n# Get changed files for commit message\nCHANGED=$(git status --short | head -5 | awk '{print $2}' | tr '\\n' ', ')\n\ngit add .\ngit commit -m \"Auto-backup: $CHANGED ($(date +%Y-%m-%d))\"\ngit push 2>/dev/null || echo \"Push failed (offline?)\""
      },
      {
        "title": "Method 1: Git Sync",
        "body": "# On new device\ngit clone git@github.com:username/clawdbot-config.git ~/.claude\n\n# Pull latest changes\ncd ~/.claude && git pull\n\n# Push local changes\ncd ~/.claude && git add . && git commit -m \"Update\" && git push"
      },
      {
        "title": "Method 2: Rsync",
        "body": "# Sync to remote server\nrsync -avz --delete \\\n    ~/.claude/ \\\n    user@server:~/clawdbot-backup/\n\n# Sync from remote server\nrsync -avz --delete \\\n    user@server:~/clawdbot-backup/ \\\n    ~/.claude/"
      },
      {
        "title": "Method 3: Cloud Storage",
        "body": "# Backup to cloud folder (Dropbox, Google Drive, etc)\nCLOUD_DIR=\"$HOME/Dropbox/ClawdBot\"\n\n# Sync skills\nrsync -avz ~/.claude/skills/ \"$CLOUD_DIR/skills/\"\nrsync -avz ~/.claude/commands/ \"$CLOUD_DIR/commands/\"\n\n# Copy settings\ncp ~/.claude/settings.json \"$CLOUD_DIR/\""
      },
      {
        "title": "Sync Script",
        "body": "#!/bin/bash\n# sync-clawdbot.sh - Sync ClawdBot config between devices\n\nSYNC_DIR=\"${CLAWDBOT_SYNC_DIR:-$HOME/Dropbox/ClawdBot}\"\nCLAUDE_DIR=\"$HOME/.claude\"\n\nsync_to_cloud() {\n    echo \"Syncing to cloud...\"\n    mkdir -p \"$SYNC_DIR\"\n    \n    rsync -avz --delete \"$CLAUDE_DIR/skills/\" \"$SYNC_DIR/skills/\"\n    rsync -avz --delete \"$CLAUDE_DIR/commands/\" \"$SYNC_DIR/commands/\"\n    rsync -avz \"$CLAUDE_DIR/mcp/\" \"$SYNC_DIR/mcp/\" 2>/dev/null\n    cp \"$CLAUDE_DIR/settings.json\" \"$SYNC_DIR/\" 2>/dev/null\n    \n    echo \"Sync complete!\"\n}\n\nsync_from_cloud() {\n    echo \"Syncing from cloud...\"\n    \n    rsync -avz \"$SYNC_DIR/skills/\" \"$CLAUDE_DIR/skills/\"\n    rsync -avz \"$SYNC_DIR/commands/\" \"$CLAUDE_DIR/commands/\"\n    rsync -avz \"$SYNC_DIR/mcp/\" \"$CLAUDE_DIR/mcp/\" 2>/dev/null\n    \n    # Don't overwrite local settings by default\n    if [ ! -f \"$CLAUDE_DIR/settings.json\" ]; then\n        cp \"$SYNC_DIR/settings.json\" \"$CLAUDE_DIR/\" 2>/dev/null\n    fi\n    \n    echo \"Sync complete!\"\n}\n\ncase \"$1\" in\n    push) sync_to_cloud ;;\n    pull) sync_from_cloud ;;\n    *)\n        echo \"Usage: $0 {push|pull}\"\n        echo \"  push - Upload local config to cloud\"\n        echo \"  pull - Download cloud config to local\"\n        ;;\nesac"
      },
      {
        "title": "Cron Job (Linux/Mac)",
        "body": "# Edit crontab\ncrontab -e\n\n# Add daily backup at 2 AM\n0 2 * * * /home/user/.local/bin/clawdbot-backup backup full\n\n# Add weekly cleanup on Sundays\n0 3 * * 0 /home/user/.local/bin/clawdbot-backup cleanup\n\n# Add git auto-commit every 6 hours\n0 */6 * * * cd ~/.claude && git add . && git commit -m \"Auto-backup $(date +\\%Y-\\%m-\\%d)\" && git push 2>/dev/null"
      },
      {
        "title": "Systemd Timer (Linux)",
        "body": "# Create service: ~/.config/systemd/user/clawdbot-backup.service\ncat > ~/.config/systemd/user/clawdbot-backup.service << 'EOF'\n[Unit]\nDescription=ClawdBot Backup\n\n[Service]\nType=oneshot\nExecStart=/home/user/.local/bin/clawdbot-backup backup full\nEOF\n\n# Create timer: ~/.config/systemd/user/clawdbot-backup.timer\ncat > ~/.config/systemd/user/clawdbot-backup.timer << 'EOF'\n[Unit]\nDescription=Daily ClawdBot Backup\n\n[Timer]\nOnCalendar=daily\nPersistent=true\n\n[Install]\nWantedBy=timers.target\nEOF\n\n# Enable\nsystemctl --user enable clawdbot-backup.timer\nsystemctl --user start clawdbot-backup.timer"
      },
      {
        "title": "Launchd (macOS)",
        "body": "# Create plist: ~/Library/LaunchAgents/com.clawdbot.backup.plist\ncat > ~/Library/LaunchAgents/com.clawdbot.backup.plist << 'EOF'\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n    <key>Label</key>\n    <string>com.clawdbot.backup</string>\n    <key>ProgramArguments</key>\n    <array>\n        <string>/Users/username/.local/bin/clawdbot-backup</string>\n        <string>backup</string>\n        <string>full</string>\n    </array>\n    <key>StartCalendarInterval</key>\n    <dict>\n        <key>Hour</key>\n        <integer>2</integer>\n        <key>Minute</key>\n        <integer>0</integer>\n    </dict>\n</dict>\n</plist>\nEOF\n\n# Load\nlaunchctl load ~/Library/LaunchAgents/com.clawdbot.backup.plist"
      },
      {
        "title": "Migrate to New Machine",
        "body": "# === On OLD machine ===\n\n# 1. Create full backup\nclawdbot-backup backup full\n\n# 2. Copy backup file to new machine\nscp ~/clawdbot-backups/clawdbot_full_*.tar.gz newmachine:~/\n\n# Or use git\ncd ~/.claude\ngit add . && git commit -m \"Pre-migration backup\"\ngit push\n\n\n# === On NEW machine ===\n\n# Method A: From backup file\ntar -xzvf ~/clawdbot_full_*.tar.gz -C ~\n\n# Method B: From git\ngit clone git@github.com:username/clawdbot-config.git ~/.claude\n\n# 3. Verify\nls -la ~/.claude/skills/"
      },
      {
        "title": "Export Single Skill",
        "body": "# Export one skill for sharing\nSKILL_NAME=\"my-awesome-skill\"\ntar -czvf \"${SKILL_NAME}.tar.gz\" -C ~/.claude/skills \"$SKILL_NAME\"\n\n# Import skill\ntar -xzvf \"${SKILL_NAME}.tar.gz\" -C ~/.claude/skills/"
      },
      {
        "title": "Export All Skills for Sharing",
        "body": "# Create shareable skills bundle (no personal settings)\ntar -czvf clawdbot-skills-share.tar.gz \\\n    -C ~/.claude \\\n    skills \\\n    --exclude='*.local*' \\\n    --exclude='*personal*'"
      },
      {
        "title": "Verify Backup Integrity",
        "body": "# Test backup without extracting\ntar -tzvf backup.tar.gz > /dev/null && echo \"Backup OK\" || echo \"Backup CORRUPT\"\n\n# List contents\ntar -tzvf backup.tar.gz\n\n# Verify specific file exists\ntar -tzvf backup.tar.gz | grep \"skills/my-skill/SKILL.md\""
      },
      {
        "title": "Compare Backup to Current",
        "body": "# Extract to temp dir\nTEMP_DIR=$(mktemp -d)\ntar -xzf backup.tar.gz -C \"$TEMP_DIR\"\n\n# Compare\ndiff -rq ~/.claude/skills \"$TEMP_DIR/.claude/skills\"\n\n# Cleanup\nrm -rf \"$TEMP_DIR\""
      },
      {
        "title": "Common Issues",
        "body": "# Issue: Permission denied\nchmod -R u+rw ~/.claude\n\n# Issue: Backup too large\n# Exclude cache and logs\ntar --exclude='cache' --exclude='*.log' -czvf backup.tar.gz ~/.claude\n\n# Issue: Restore overwrote settings\n# Keep settings.local.json for machine-specific config\n# It won't be overwritten if using proper backup\n\n# Issue: Git conflicts after sync\ncd ~/.claude\ngit stash\ngit pull\ngit stash pop\n# Resolve conflicts manually if needed"
      },
      {
        "title": "Recovery from Corruption",
        "body": "# If ~/.claude is corrupted\n\n# 1. Move corrupted dir\nmv ~/.claude ~/.claude.corrupted\n\n# 2. Restore from backup\nclawdbot-backup restore latest.tar.gz\n\n# 3. Or restore from git\ngit clone git@github.com:username/clawdbot-config.git ~/.claude\n\n# 4. Compare and recover anything missing\ndiff -rq ~/.claude ~/.claude.corrupted/"
      },
      {
        "title": "Essential Commands",
        "body": "# Backup\ntar -czvf ~/clawdbot-backup.tar.gz -C ~ .claude/skills .claude/commands .claude/settings.json\n\n# Restore\ntar -xzvf ~/clawdbot-backup.tar.gz -C ~\n\n# List backup contents\ntar -tzvf ~/clawdbot-backup.tar.gz\n\n# Git backup\ncd ~/.claude && git add . && git commit -m \"Backup\" && git push\n\n# Git restore\ncd ~/.claude && git pull"
      },
      {
        "title": "Backup Checklist",
        "body": "Before major changes:\n□ Create backup\n□ Verify backup integrity\n□ Note what you're changing\n\nRegular maintenance:\n□ Weekly full backup\n□ Daily git commits (if using)\n□ Monthly cleanup of old backups\n□ Test restore procedure quarterly"
      },
      {
        "title": "Related Skills",
        "body": "- skill-creator - Create new skills\n- mcp-builder - Configure MCP servers\n- dotfiles - General dotfile management"
      },
      {
        "title": "Documentation",
        "body": "- ClawdBot Docs: docs.clawdbot.com\n- Skills Guide: docs.clawdbot.com/skills\n- MCP Setup: docs.clawdbot.com/mcp\n\nTip: Always test your backup restoration process before you actually need it. A backup you can't restore is worthless!"
      }
    ],
    "body": "ClawdBot Backup Skill\n\nBackup, restore, and sync your ClawdBot configuration across devices directly from Clawdbot.\n\nOverview\n\nThis skill helps you:\n\nBackup all ClawdBot data and settings\nRestore from backups\nSync between multiple machines\nVersion control your configuration\nAutomate backup routines\nMigrate to new devices\nClawdBot Directory Structure\nKey Locations\n~/.claude/                    # Main ClawdBot directory\n├── settings.json             # Global settings\n├── settings.local.json       # Local overrides (machine-specific)\n├── projects.json             # Project configurations\n├── skills/                   # Your custom skills\n│   ├── skill-name/\n│   │   ├── SKILL.md\n│   │   └── supporting-files/\n│   └── another-skill/\n├── commands/                 # Custom slash commands (legacy)\n│   └── command-name.md\n├── contexts/                 # Saved contexts\n├── templates/                # Response templates\n└── mcp/                      # MCP server configurations\n    └── servers.json\n\n~/projects/                   # Your projects (optional backup)\n├── project-1/\n│   └── .claude/              # Project-specific config\n│       ├── settings.json\n│       └── skills/\n└── project-2/\n\nWhat to Backup\nESSENTIAL (Always backup):\n✓ ~/.claude/skills/           # Custom skills\n✓ ~/.claude/commands/         # Custom commands\n✓ ~/.claude/settings.json     # Global settings\n✓ ~/.claude/mcp/              # MCP configurations\n\nRECOMMENDED (Usually backup):\n✓ ~/.claude/contexts/         # Saved contexts\n✓ ~/.claude/templates/        # Templates\n✓ Project .claude/ folders    # Project configs\n\nOPTIONAL (Case by case):\n○ ~/.claude/settings.local.json  # Machine-specific\n○ Cache directories              # Can be rebuilt\n○ Log files                      # Usually not needed\n\nQuick Backup Commands\nFull Backup\n# Create timestamped backup\nBACKUP_DIR=\"$HOME/clawdbot-backups\"\nTIMESTAMP=$(date +%Y%m%d_%H%M%S)\nBACKUP_NAME=\"clawdbot_backup_$TIMESTAMP\"\n\nmkdir -p \"$BACKUP_DIR\"\n\ntar -czvf \"$BACKUP_DIR/$BACKUP_NAME.tar.gz\" \\\n  -C \"$HOME\" \\\n  .claude/skills \\\n  .claude/commands \\\n  .claude/settings.json \\\n  .claude/mcp \\\n  .claude/contexts \\\n  .claude/templates \\\n  2>/dev/null\n\necho \"Backup created: $BACKUP_DIR/$BACKUP_NAME.tar.gz\"\n\nQuick Skills-Only Backup\n# Backup just skills\ntar -czvf ~/clawdbot_skills_$(date +%Y%m%d).tar.gz \\\n  -C \"$HOME\" .claude/skills .claude/commands\n\nRestore from Backup\n# Restore full backup\nBACKUP_FILE=\"$HOME/clawdbot-backups/clawdbot_backup_20260129.tar.gz\"\n\n# Preview contents first\ntar -tzvf \"$BACKUP_FILE\"\n\n# Restore (will overwrite existing)\ntar -xzvf \"$BACKUP_FILE\" -C \"$HOME\"\n\necho \"Restore complete!\"\n\nBackup Script\nFull-Featured Backup Script\n#!/bin/bash\n# clawdbot-backup.sh - Comprehensive ClawdBot backup tool\n\nset -e\n\n# Configuration\nBACKUP_ROOT=\"${CLAWDBOT_BACKUP_DIR:-$HOME/clawdbot-backups}\"\nCLAUDE_DIR=\"$HOME/.claude\"\nMAX_BACKUPS=10  # Keep last N backups\nTIMESTAMP=$(date +%Y%m%d_%H%M%S)\n\n# Colors\nRED='\\033[0;31m'\nGREEN='\\033[0;32m'\nYELLOW='\\033[1;33m'\nNC='\\033[0m'\n\nlog_info() { echo -e \"${GREEN}[INFO]${NC} $1\"; }\nlog_warn() { echo -e \"${YELLOW}[WARN]${NC} $1\"; }\nlog_error() { echo -e \"${RED}[ERROR]${NC} $1\"; }\n\n# Check if ClawdBot directory exists\ncheck_claude_dir() {\n    if [ ! -d \"$CLAUDE_DIR\" ]; then\n        log_error \"ClawdBot directory not found: $CLAUDE_DIR\"\n        exit 1\n    fi\n}\n\n# Create backup\ncreate_backup() {\n    local backup_type=\"${1:-full}\"\n    local backup_name=\"clawdbot_${backup_type}_${TIMESTAMP}\"\n    local backup_path=\"$BACKUP_ROOT/$backup_name.tar.gz\"\n    \n    mkdir -p \"$BACKUP_ROOT\"\n    \n    log_info \"Creating $backup_type backup...\"\n    \n    case $backup_type in\n        full)\n            tar -czvf \"$backup_path\" \\\n                -C \"$HOME\" \\\n                .claude/skills \\\n                .claude/commands \\\n                .claude/settings.json \\\n                .claude/settings.local.json \\\n                .claude/projects.json \\\n                .claude/mcp \\\n                .claude/contexts \\\n                .claude/templates \\\n                2>/dev/null || true\n            ;;\n        skills)\n            tar -czvf \"$backup_path\" \\\n                -C \"$HOME\" \\\n                .claude/skills \\\n                .claude/commands \\\n                2>/dev/null || true\n            ;;\n        settings)\n            tar -czvf \"$backup_path\" \\\n                -C \"$HOME\" \\\n                .claude/settings.json \\\n                .claude/settings.local.json \\\n                .claude/mcp \\\n                2>/dev/null || true\n            ;;\n        *)\n            log_error \"Unknown backup type: $backup_type\"\n            exit 1\n            ;;\n    esac\n    \n    if [ -f \"$backup_path\" ]; then\n        local size=$(du -h \"$backup_path\" | cut -f1)\n        log_info \"Backup created: $backup_path ($size)\"\n    else\n        log_error \"Backup failed!\"\n        exit 1\n    fi\n}\n\n# List backups\nlist_backups() {\n    log_info \"Available backups in $BACKUP_ROOT:\"\n    echo \"\"\n    \n    if [ -d \"$BACKUP_ROOT\" ]; then\n        ls -lh \"$BACKUP_ROOT\"/*.tar.gz 2>/dev/null | \\\n            awk '{print $9, $5, $6, $7, $8}' || \\\n            echo \"No backups found.\"\n    else\n        echo \"Backup directory doesn't exist.\"\n    fi\n}\n\n# Restore backup\nrestore_backup() {\n    local backup_file=\"$1\"\n    \n    if [ -z \"$backup_file\" ]; then\n        log_error \"Please specify backup file\"\n        list_backups\n        exit 1\n    fi\n    \n    if [ ! -f \"$backup_file\" ]; then\n        # Try relative path in backup dir\n        backup_file=\"$BACKUP_ROOT/$backup_file\"\n    fi\n    \n    if [ ! -f \"$backup_file\" ]; then\n        log_error \"Backup file not found: $backup_file\"\n        exit 1\n    fi\n    \n    log_warn \"This will overwrite existing configuration!\"\n    read -p \"Continue? (y/N) \" confirm\n    \n    if [ \"$confirm\" != \"y\" ] && [ \"$confirm\" != \"Y\" ]; then\n        log_info \"Restore cancelled.\"\n        exit 0\n    fi\n    \n    log_info \"Restoring from: $backup_file\"\n    tar -xzvf \"$backup_file\" -C \"$HOME\"\n    log_info \"Restore complete!\"\n}\n\n# Clean old backups\ncleanup_backups() {\n    log_info \"Cleaning old backups (keeping last $MAX_BACKUPS)...\"\n    \n    cd \"$BACKUP_ROOT\" 2>/dev/null || return\n    \n    local count=$(ls -1 *.tar.gz 2>/dev/null | wc -l)\n    \n    if [ \"$count\" -gt \"$MAX_BACKUPS\" ]; then\n        local to_delete=$((count - MAX_BACKUPS))\n        ls -1t *.tar.gz | tail -n \"$to_delete\" | xargs rm -v\n        log_info \"Removed $to_delete old backup(s)\"\n    else\n        log_info \"No cleanup needed ($count backups)\"\n    fi\n}\n\n# Show backup stats\nshow_stats() {\n    log_info \"ClawdBot Backup Statistics\"\n    echo \"\"\n    \n    echo \"=== Directory Sizes ===\"\n    du -sh \"$CLAUDE_DIR\"/skills 2>/dev/null || echo \"Skills: N/A\"\n    du -sh \"$CLAUDE_DIR\"/commands 2>/dev/null || echo \"Commands: N/A\"\n    du -sh \"$CLAUDE_DIR\"/mcp 2>/dev/null || echo \"MCP: N/A\"\n    du -sh \"$CLAUDE_DIR\" 2>/dev/null || echo \"Total: N/A\"\n    \n    echo \"\"\n    echo \"=== Skills Count ===\"\n    find \"$CLAUDE_DIR/skills\" -name \"SKILL.md\" 2>/dev/null | wc -l | xargs echo \"Skills:\"\n    find \"$CLAUDE_DIR/commands\" -name \"*.md\" 2>/dev/null | wc -l | xargs echo \"Commands:\"\n    \n    echo \"\"\n    echo \"=== Backup Directory ===\"\n    if [ -d \"$BACKUP_ROOT\" ]; then\n        du -sh \"$BACKUP_ROOT\"\n        ls -1 \"$BACKUP_ROOT\"/*.tar.gz 2>/dev/null | wc -l | xargs echo \"Backup files:\"\n    else\n        echo \"No backups yet\"\n    fi\n}\n\n# Usage\nusage() {\n    cat << EOF\nClawdBot Backup Tool\n\nUsage: $(basename $0) <command> [options]\n\nCommands:\n    backup [type]   Create backup (types: full, skills, settings)\n    restore <file>  Restore from backup file\n    list            List available backups\n    cleanup         Remove old backups (keep last $MAX_BACKUPS)\n    stats           Show backup statistics\n    help            Show this help\n\nExamples:\n    $(basename $0) backup              # Full backup\n    $(basename $0) backup skills       # Skills only\n    $(basename $0) restore latest.tar.gz\n    $(basename $0) list\n    $(basename $0) cleanup\n\nEnvironment:\n    CLAWDBOT_BACKUP_DIR    Backup directory (default: ~/clawdbot-backups)\n\nEOF\n}\n\n# Main\nmain() {\n    check_claude_dir\n    \n    case \"${1:-help}\" in\n        backup)\n            create_backup \"${2:-full}\"\n            ;;\n        restore)\n            restore_backup \"$2\"\n            ;;\n        list)\n            list_backups\n            ;;\n        cleanup)\n            cleanup_backups\n            ;;\n        stats)\n            show_stats\n            ;;\n        help|--help|-h)\n            usage\n            ;;\n        *)\n            log_error \"Unknown command: $1\"\n            usage\n            exit 1\n            ;;\n    esac\n}\n\nmain \"$@\"\n\nSave and Use\n# Save script\ncat > ~/.local/bin/clawdbot-backup << 'SCRIPT'\n# Paste script content here\nSCRIPT\n\nchmod +x ~/.local/bin/clawdbot-backup\n\n# Usage\nclawdbot-backup backup          # Full backup\nclawdbot-backup backup skills   # Skills only\nclawdbot-backup list            # List backups\nclawdbot-backup restore <file>  # Restore\n\nGit Version Control\nInitialize Git Repo\ncd ~/.claude\n\n# Initialize git\ngit init\n\n# Create .gitignore\ncat > .gitignore << 'EOF'\n# Machine-specific settings\nsettings.local.json\n\n# Cache and temp files\ncache/\n*.tmp\n*.log\n\n# Large files\n*.tar.gz\n*.zip\n\n# Sensitive data (if any)\n*.pem\n*.key\ncredentials/\nEOF\n\n# Initial commit\ngit add .\ngit commit -m \"Initial ClawdBot configuration backup\"\n\nPush to Remote\n# Add remote (GitHub, GitLab, etc)\ngit remote add origin git@github.com:username/clawdbot-config.git\n\n# Push\ngit push -u origin main\n\nDaily Workflow\n# After making changes to skills/settings\ncd ~/.claude\ngit add .\ngit commit -m \"Updated skill: trading-bot\"\ngit push\n\nAuto-Commit Script\n#!/bin/bash\n# auto-commit-claude.sh - Auto commit changes\n\ncd ~/.claude || exit 1\n\n# Check for changes\nif git diff --quiet && git diff --staged --quiet; then\n    echo \"No changes to commit\"\n    exit 0\nfi\n\n# Get changed files for commit message\nCHANGED=$(git status --short | head -5 | awk '{print $2}' | tr '\\n' ', ')\n\ngit add .\ngit commit -m \"Auto-backup: $CHANGED ($(date +%Y-%m-%d))\"\ngit push 2>/dev/null || echo \"Push failed (offline?)\"\n\nSync Between Devices\nMethod 1: Git Sync\n# On new device\ngit clone git@github.com:username/clawdbot-config.git ~/.claude\n\n# Pull latest changes\ncd ~/.claude && git pull\n\n# Push local changes\ncd ~/.claude && git add . && git commit -m \"Update\" && git push\n\nMethod 2: Rsync\n# Sync to remote server\nrsync -avz --delete \\\n    ~/.claude/ \\\n    user@server:~/clawdbot-backup/\n\n# Sync from remote server\nrsync -avz --delete \\\n    user@server:~/clawdbot-backup/ \\\n    ~/.claude/\n\nMethod 3: Cloud Storage\n# Backup to cloud folder (Dropbox, Google Drive, etc)\nCLOUD_DIR=\"$HOME/Dropbox/ClawdBot\"\n\n# Sync skills\nrsync -avz ~/.claude/skills/ \"$CLOUD_DIR/skills/\"\nrsync -avz ~/.claude/commands/ \"$CLOUD_DIR/commands/\"\n\n# Copy settings\ncp ~/.claude/settings.json \"$CLOUD_DIR/\"\n\nSync Script\n#!/bin/bash\n# sync-clawdbot.sh - Sync ClawdBot config between devices\n\nSYNC_DIR=\"${CLAWDBOT_SYNC_DIR:-$HOME/Dropbox/ClawdBot}\"\nCLAUDE_DIR=\"$HOME/.claude\"\n\nsync_to_cloud() {\n    echo \"Syncing to cloud...\"\n    mkdir -p \"$SYNC_DIR\"\n    \n    rsync -avz --delete \"$CLAUDE_DIR/skills/\" \"$SYNC_DIR/skills/\"\n    rsync -avz --delete \"$CLAUDE_DIR/commands/\" \"$SYNC_DIR/commands/\"\n    rsync -avz \"$CLAUDE_DIR/mcp/\" \"$SYNC_DIR/mcp/\" 2>/dev/null\n    cp \"$CLAUDE_DIR/settings.json\" \"$SYNC_DIR/\" 2>/dev/null\n    \n    echo \"Sync complete!\"\n}\n\nsync_from_cloud() {\n    echo \"Syncing from cloud...\"\n    \n    rsync -avz \"$SYNC_DIR/skills/\" \"$CLAUDE_DIR/skills/\"\n    rsync -avz \"$SYNC_DIR/commands/\" \"$CLAUDE_DIR/commands/\"\n    rsync -avz \"$SYNC_DIR/mcp/\" \"$CLAUDE_DIR/mcp/\" 2>/dev/null\n    \n    # Don't overwrite local settings by default\n    if [ ! -f \"$CLAUDE_DIR/settings.json\" ]; then\n        cp \"$SYNC_DIR/settings.json\" \"$CLAUDE_DIR/\" 2>/dev/null\n    fi\n    \n    echo \"Sync complete!\"\n}\n\ncase \"$1\" in\n    push) sync_to_cloud ;;\n    pull) sync_from_cloud ;;\n    *)\n        echo \"Usage: $0 {push|pull}\"\n        echo \"  push - Upload local config to cloud\"\n        echo \"  pull - Download cloud config to local\"\n        ;;\nesac\n\nAutomated Backups\nCron Job (Linux/Mac)\n# Edit crontab\ncrontab -e\n\n# Add daily backup at 2 AM\n0 2 * * * /home/user/.local/bin/clawdbot-backup backup full\n\n# Add weekly cleanup on Sundays\n0 3 * * 0 /home/user/.local/bin/clawdbot-backup cleanup\n\n# Add git auto-commit every 6 hours\n0 */6 * * * cd ~/.claude && git add . && git commit -m \"Auto-backup $(date +\\%Y-\\%m-\\%d)\" && git push 2>/dev/null\n\nSystemd Timer (Linux)\n# Create service: ~/.config/systemd/user/clawdbot-backup.service\ncat > ~/.config/systemd/user/clawdbot-backup.service << 'EOF'\n[Unit]\nDescription=ClawdBot Backup\n\n[Service]\nType=oneshot\nExecStart=/home/user/.local/bin/clawdbot-backup backup full\nEOF\n\n# Create timer: ~/.config/systemd/user/clawdbot-backup.timer\ncat > ~/.config/systemd/user/clawdbot-backup.timer << 'EOF'\n[Unit]\nDescription=Daily ClawdBot Backup\n\n[Timer]\nOnCalendar=daily\nPersistent=true\n\n[Install]\nWantedBy=timers.target\nEOF\n\n# Enable\nsystemctl --user enable clawdbot-backup.timer\nsystemctl --user start clawdbot-backup.timer\n\nLaunchd (macOS)\n# Create plist: ~/Library/LaunchAgents/com.clawdbot.backup.plist\ncat > ~/Library/LaunchAgents/com.clawdbot.backup.plist << 'EOF'\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n    <key>Label</key>\n    <string>com.clawdbot.backup</string>\n    <key>ProgramArguments</key>\n    <array>\n        <string>/Users/username/.local/bin/clawdbot-backup</string>\n        <string>backup</string>\n        <string>full</string>\n    </array>\n    <key>StartCalendarInterval</key>\n    <dict>\n        <key>Hour</key>\n        <integer>2</integer>\n        <key>Minute</key>\n        <integer>0</integer>\n    </dict>\n</dict>\n</plist>\nEOF\n\n# Load\nlaunchctl load ~/Library/LaunchAgents/com.clawdbot.backup.plist\n\nMigration Guide\nMigrate to New Machine\n# === On OLD machine ===\n\n# 1. Create full backup\nclawdbot-backup backup full\n\n# 2. Copy backup file to new machine\nscp ~/clawdbot-backups/clawdbot_full_*.tar.gz newmachine:~/\n\n# Or use git\ncd ~/.claude\ngit add . && git commit -m \"Pre-migration backup\"\ngit push\n\n\n# === On NEW machine ===\n\n# Method A: From backup file\ntar -xzvf ~/clawdbot_full_*.tar.gz -C ~\n\n# Method B: From git\ngit clone git@github.com:username/clawdbot-config.git ~/.claude\n\n# 3. Verify\nls -la ~/.claude/skills/\n\nExport Single Skill\n# Export one skill for sharing\nSKILL_NAME=\"my-awesome-skill\"\ntar -czvf \"${SKILL_NAME}.tar.gz\" -C ~/.claude/skills \"$SKILL_NAME\"\n\n# Import skill\ntar -xzvf \"${SKILL_NAME}.tar.gz\" -C ~/.claude/skills/\n\nExport All Skills for Sharing\n# Create shareable skills bundle (no personal settings)\ntar -czvf clawdbot-skills-share.tar.gz \\\n    -C ~/.claude \\\n    skills \\\n    --exclude='*.local*' \\\n    --exclude='*personal*'\n\nBackup Verification\nVerify Backup Integrity\n# Test backup without extracting\ntar -tzvf backup.tar.gz > /dev/null && echo \"Backup OK\" || echo \"Backup CORRUPT\"\n\n# List contents\ntar -tzvf backup.tar.gz\n\n# Verify specific file exists\ntar -tzvf backup.tar.gz | grep \"skills/my-skill/SKILL.md\"\n\nCompare Backup to Current\n# Extract to temp dir\nTEMP_DIR=$(mktemp -d)\ntar -xzf backup.tar.gz -C \"$TEMP_DIR\"\n\n# Compare\ndiff -rq ~/.claude/skills \"$TEMP_DIR/.claude/skills\"\n\n# Cleanup\nrm -rf \"$TEMP_DIR\"\n\nTroubleshooting\nCommon Issues\n# Issue: Permission denied\nchmod -R u+rw ~/.claude\n\n# Issue: Backup too large\n# Exclude cache and logs\ntar --exclude='cache' --exclude='*.log' -czvf backup.tar.gz ~/.claude\n\n# Issue: Restore overwrote settings\n# Keep settings.local.json for machine-specific config\n# It won't be overwritten if using proper backup\n\n# Issue: Git conflicts after sync\ncd ~/.claude\ngit stash\ngit pull\ngit stash pop\n# Resolve conflicts manually if needed\n\nRecovery from Corruption\n# If ~/.claude is corrupted\n\n# 1. Move corrupted dir\nmv ~/.claude ~/.claude.corrupted\n\n# 2. Restore from backup\nclawdbot-backup restore latest.tar.gz\n\n# 3. Or restore from git\ngit clone git@github.com:username/clawdbot-config.git ~/.claude\n\n# 4. Compare and recover anything missing\ndiff -rq ~/.claude ~/.claude.corrupted/\n\nQuick Reference\nEssential Commands\n# Backup\ntar -czvf ~/clawdbot-backup.tar.gz -C ~ .claude/skills .claude/commands .claude/settings.json\n\n# Restore\ntar -xzvf ~/clawdbot-backup.tar.gz -C ~\n\n# List backup contents\ntar -tzvf ~/clawdbot-backup.tar.gz\n\n# Git backup\ncd ~/.claude && git add . && git commit -m \"Backup\" && git push\n\n# Git restore\ncd ~/.claude && git pull\n\nBackup Checklist\nBefore major changes:\n□ Create backup\n□ Verify backup integrity\n□ Note what you're changing\n\nRegular maintenance:\n□ Weekly full backup\n□ Daily git commits (if using)\n□ Monthly cleanup of old backups\n□ Test restore procedure quarterly\n\nResources\nRelated Skills\n- skill-creator - Create new skills\n- mcp-builder - Configure MCP servers\n- dotfiles - General dotfile management\n\nDocumentation\n- ClawdBot Docs: docs.clawdbot.com\n- Skills Guide: docs.clawdbot.com/skills\n- MCP Setup: docs.clawdbot.com/mcp\n\n\nTip: Always test your backup restoration process before you actually need it. A backup you can't restore is worthless!"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/Sebastian-Buitrag0/clawdbot-backup",
    "publisherUrl": "https://clawhub.ai/Sebastian-Buitrag0/clawdbot-backup",
    "owner": "Sebastian-Buitrag0",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/clawdbot-backup",
    "downloadUrl": "https://openagent3.xyz/downloads/clawdbot-backup",
    "agentUrl": "https://openagent3.xyz/skills/clawdbot-backup/agent",
    "manifestUrl": "https://openagent3.xyz/skills/clawdbot-backup/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/clawdbot-backup/agent.md"
  }
}