optional-skills/migration/openclaw-migration/SKILL.md
Migrate a user's OpenClaw customization footprint into Hermes Agent. Imports Hermes-compatible memories, SOUL.md, command allowlists, user skills, and selected workspace assets from ~/.openclaw, then reports exactly what could not be migrated and why.
npx skillsauth add garrettroi/open-manus openclaw-migrationInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Use this skill when a user wants to move their OpenClaw setup into Hermes Agent with minimal manual cleanup.
It uses scripts/openclaw_to_hermes.py to:
SOUL.md into the Hermes home directory as SOUL.mdMEMORY.md and USER.md into Hermes memory entriescommand_allowlistTELEGRAM_ALLOWED_USERS and MESSAGING_CWD~/.hermes/skills/openclaw-imports/workspace/tts/ into ~/.hermes/tts/The helper script lives in this skill directory at:
scripts/openclaw_to_hermes.pyWhen this skill is installed from the Skills Hub, the normal location is:
~/.hermes/skills/migration/openclaw-migration/scripts/openclaw_to_hermes.pyDo not guess a shorter path like ~/.hermes/skills/openclaw-migration/....
Before running the helper:
~/.hermes/skills/migration/openclaw-migration/.SKILL.md.find as a fallback if the installed location is missing or the skill was moved manually.workdir: "~". Use an absolute directory such as the user's home directory, or omit workdir entirely.With --migrate-secrets, it will also import a small allowlisted set of Hermes-compatible secrets, currently:
TELEGRAM_BOT_TOKENclarify tool is available, use it for user decisions instead of asking for a free-form prose reply.Hermes CLI supports the clarify tool for interactive prompts, but it is limited to:
Other free-text optionIt does not support true multi-select checkboxes in a single prompt.
For every clarify call:
questionchoices only for real selectable promptschoices to 2-4 plain string options...enter directory here, blank lines to fill in, or underscores like _____If a clarify call returns an error, inspect the error text, correct the payload, and retry once with a valid question and clean choices.
When clarify is available and the dry run reveals any required user decision, your next action must be a clarify tool call.
Do not end the turn with a normal assistant message such as:
If a user decision is required, collect it via clarify before producing more prose.
If multiple unresolved decisions remain, do not insert an explanatory assistant message between them. After one clarify response is received, your next action should usually be the next required clarify call.
Treat workspace-agents as an unresolved decision whenever the dry run reports:
kind="workspace-agents"status="skipped"No workspace target was providedIn that case, you must ask about workspace instructions before execution. Do not silently treat that as a decision to skip.
Because of that limitation, use this simplified decision flow:
SOUL.md conflicts, use clarify with choices such as:
keep existingoverwrite with backupreview firstkind="skill" items with status="conflict", use clarify with choices such as:
keep existing skillsoverwrite conflicting skills with backupimport conflicting skills under renamed foldersclarify with choices such as:
skip workspace instructionscopy to a workspace pathdecide laterclarify question requesting an absolute path.skip workspace instructions or decide later, proceed without --workspace-target.clarify with these 3 choices:
user-data onlyfull compatible migrationcanceluser-data only means: migrate user data and compatible config, but do not import allowlisted secrets.full compatible migration means: migrate the same compatible user data plus the allowlisted secrets when present.clarify is not available, ask the same question in normal text, but still constrain the answer to user-data only, full compatible migration, or cancel.Execution gate:
workspace-agents skip caused by No workspace target was provided remains unresolved.skip workspace instructionsdecide latercopy to a workspace pathclarify decision remains unresolved.Use these exact clarify payload shapes as the default pattern:
{"question":"Your existing SOUL.md conflicts with the imported one. What should I do?","choices":["keep existing","overwrite with backup","review first"]}{"question":"One or more imported OpenClaw skills already exist in Hermes. How should I handle those skill conflicts?","choices":["keep existing skills","overwrite conflicting skills with backup","import conflicting skills under renamed folders"]}{"question":"Choose migration mode: migrate only user data, or run the full compatible migration including allowlisted secrets?","choices":["user-data only","full compatible migration","cancel"]}{"question":"Do you want to copy the OpenClaw workspace instructions file into a Hermes workspace?","choices":["skip workspace instructions","copy to a workspace path","decide later"]}{"question":"Please provide an absolute path where the workspace instructions should be copied."}Map user decisions to command flags exactly:
keep existing for SOUL.md, do not add --overwrite.overwrite with backup, add --overwrite.review first, stop before execution and review the relevant files.keep existing skills, add --skill-conflict skip.overwrite conflicting skills with backup, add --skill-conflict overwrite.import conflicting skills under renamed folders, add --skill-conflict rename.user-data only, execute with --preset user-data and do not add --migrate-secrets.full compatible migration, execute with --preset full --migrate-secrets.--workspace-target if the user explicitly provided an absolute workspace path.skip workspace instructions or decide later, do not add --workspace-target.Before executing, restate the exact command plan in plain language and make sure it matches the user's choices.
After execution, treat the script's JSON output as the source of truth.
report.summary.status is exactly migrated.migrated.SOUL.md was overwritten unless the report item for kind="soul" has status="migrated".report.summary.conflict > 0, include a conflict section instead of silently implying success.output_dir path from the report when available so the user can inspect report.json, summary.md, backups, and archived files.details.overflow_file exists, say the full overflow list was exported there.details.renamed_from.report.skill_conflict_mode is present, use it as the source of truth for the selected imported-skill conflict policy.status="skipped", do not describe it as overwritten, backed up, migrated, or resolved.kind="soul" has status="skipped" with reason Target already matches source, say it was left unchanged and do not mention a backup.details.backup, do not imply the existing Hermes skill was renamed or backed up. Say only that the imported copy was placed in the new destination and reference details.renamed_from as the pre-existing folder that remained in place.Prefer these two presets in normal use:
user-datafulluser-data includes:
soulworkspace-agentsmemoryuser-profilemessaging-settingscommand-allowlistskillstts-assetsarchivefull includes everything in user-data plus:
secret-settingsThe helper script still supports category-level --include / --exclude, but treat that as an advanced fallback rather than the default UX.
Dry run with full discovery:
python3 ~/.hermes/skills/migration/openclaw-migration/scripts/openclaw_to_hermes.py
When using the terminal tool, prefer an absolute invocation pattern such as:
{"command":"python3 /home/USER/.hermes/skills/migration/openclaw-migration/scripts/openclaw_to_hermes.py","workdir":"/home/USER"}
Dry run with the user-data preset:
python3 ~/.hermes/skills/migration/openclaw-migration/scripts/openclaw_to_hermes.py --preset user-data
Execute a user-data migration:
python3 ~/.hermes/skills/migration/openclaw-migration/scripts/openclaw_to_hermes.py --execute --preset user-data --skill-conflict skip
Execute a full compatible migration:
python3 ~/.hermes/skills/migration/openclaw-migration/scripts/openclaw_to_hermes.py --execute --preset full --migrate-secrets --skill-conflict skip
Execute with workspace instructions included:
python3 ~/.hermes/skills/migration/openclaw-migration/scripts/openclaw_to_hermes.py --execute --preset user-data --skill-conflict rename --workspace-target "/absolute/workspace/path"
Do not use $PWD or the home directory as the workspace target by default. Ask for an explicit workspace path first.
~/.openclaw/workspace/) over workspace.default/. Only use the default workspace as fallback when the primary files are missing.SOUL.md, or overflowed memory entries, call those out separately before execution.user-data only if the user is unsure.workspace-agents when the user has explicitly provided a destination workspace path.--include / --exclude as an advanced escape hatch, not the normal flow.clarify is available. Use structured follow-up prompts instead.clarify prompt when a real choice prompt would work. Prefer selectable choices first, then free text only for absolute paths or file review requests.clarify immediately for the highest-priority blocking decision.SOUL.md conflictclarify.workspace-agents is still unresolved. If it is, your next action must be the workspace-instructions clarify call.clarify answer, if another required decision remains, do not narrate what was just decided. Ask the next required question immediately.After a successful run, the user should have:
~/.hermes/skills/openclaw-imports/development
# Voice Sanitizer This skill cleans up text before it is sent to the Text-to-Speech (TTS) engine. It removes technical jargon, code blocks, and long URLs to ensure the agent sounds natural and conversational in voice chat. ## Usage To sanitize text for speech, run the following command in the terminal: ```bash python3 /app/skills/voice_sanitizer/sanitizer.py "Your long, technical text with `code` and https://links.com/long-url" ``` ### Example Output ```text Your long, technical text with a
tools
Professional AI video production workflow. Use when creating videos, short films, commercials, or any video content using AI generation tools.
tools
Secure API key access from the centralized vault. Fetch keys on-demand without storing them in environment variables.
testing
# Task Board — Persistent Task Tracking for Open Manus This skill provides a shared task board backed by Redis. Harmony uses it to track delegated work across all agents, and agents use it to report progress and completion. ## When to Use - **Harmony**: Use this whenever you delegate a task to an agent. Add the task to the board, then check the board periodically to follow up. - **Worker Agents**: Use this to update your task status or mark tasks as complete. ## Commands ### Add a new task