mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-21 22:19:21 +00:00
* refactor: remove stale file-backed shims * fix: harden sqlite state ci boundaries * refactor: store matrix idb snapshots in sqlite * fix: satisfy rebased CI guardrails * refactor: store current conversation bindings in sqlite table * refactor: store tui last sessions in sqlite table * refactor: reset sqlite schema history * refactor: drop unshipped sqlite table migration * refactor: remove plugin index file rollback * refactor: drop unshipped sqlite sidecar migrations * refactor: remove runtime commitments kv migration * refactor: preserve kysely sync result types * refactor: drop unshipped sqlite schema migration table * test: keep session usage coverage sqlite-backed * refactor: keep sqlite migration doctor-only * refactor: isolate device legacy imports * refactor: isolate push voicewake legacy imports * refactor: isolate remaining runtime legacy imports * refactor: tighten sqlite migration guardrails * test: cover sqlite persisted enum parsing * refactor: isolate legacy update and tui imports * refactor: tighten sqlite state ownership * refactor: move legacy imports behind doctor * refactor: remove legacy session row lookup * refactor: canonicalize memory transcript locators * refactor: drop transcript path scope fallbacks * refactor: drop runtime legacy session delivery pruning * refactor: store tts prefs only in sqlite * refactor: remove cron store path runtime * refactor: use cron sqlite store keys * refactor: rename telegram message cache scope * refactor: read memory dreaming status from sqlite * refactor: rename cron status store key * refactor: stop remembering transcript file paths * test: use sqlite locators in agent fixtures * refactor: remove file-shaped commitments and cron store surfaces * refactor: keep compaction transcript handles out of session rows * refactor: derive transcript handles from session identity * refactor: derive runtime transcript handles * refactor: remove gateway session locator reads * refactor: remove transcript locator from session rows * refactor: store raw stream diagnostics in sqlite * refactor: remove file-shaped transcript rotation * refactor: hide legacy trajectory paths from runtime * refactor: remove runtime transcript file bridges * refactor: repair database-first rebase fallout * refactor: align tests with database-first state * refactor: remove transcript file handoffs * refactor: sync post-compaction memory by transcript scope * refactor: run codex app-server sessions by id * refactor: bind codex runtime state by session id * refactor: pass memory transcripts by sqlite scope * refactor: remove transcript locator cleanup leftovers * test: remove stale transcript file fixtures * refactor: remove transcript locator test helper * test: make cron sqlite keys explicit * test: remove cron runtime store paths * test: remove stale session file fixtures * test: use sqlite cron keys in diagnostics * refactor: remove runtime delivery queue backfill * test: drop fake export session file mocks * refactor: rename acp session read failure flag * refactor: rename acp row session key * refactor: remove session store test seams * refactor: move legacy session parser tests to doctor * refactor: reindex managed memory in place * refactor: drop stale session store wording * refactor: rename session row helpers * refactor: rename sqlite session entry modules * refactor: remove transcript locator leftovers * refactor: trim file-era audit wording * refactor: clean managed media through sqlite * fix: prefer explicit agent for exports * fix: use prepared agent for session resets * fix: canonicalize legacy codex binding import * test: rename state cleanup helper * docs: align backup docs with sqlite state * refactor: drop legacy Pi usage auth fallback * refactor: move legacy auth profile imports to doctor * refactor: keep Pi model discovery auth in memory * refactor: remove MSTeams legacy learning key fallback * refactor: store model catalog config in sqlite * refactor: use sqlite model catalog at runtime * refactor: remove model json compatibility aliases * refactor: store auth profiles in sqlite * refactor: seed copied auth profiles in sqlite * refactor: make auth profile runtime sqlite-addressed * refactor: migrate hermes secrets into sqlite auth store * refactor: move plugin install config migration to doctor * refactor: rename plugin index audit checks * test: drop auth file assumptions * test: remove legacy transcript file assertions * refactor: drop legacy cli session aliases * refactor: store skill uploads in sqlite * refactor: keep subagent attachments in sqlite vfs * refactor: drop subagent attachment cleanup state * refactor: move legacy session aliases to doctor * refactor: require node 24 for sqlite state runtime * refactor: move provider caches into sqlite state * fix: harden virtual agent filesystem * refactor: enforce database-first runtime state * refactor: rename compaction transcript rotation setting * test: clean sqlite refactor test types * refactor: consolidate sqlite runtime state * refactor: model session conversations in sqlite * refactor: stop deriving cron delivery from session keys * refactor: stop classifying sessions from key shape * refactor: hydrate announce targets from typed delivery * refactor: route heartbeat delivery from typed sqlite context * refactor: tighten typed sqlite session routing * refactor: remove session origin routing shadow * refactor: drop session origin shadow fixtures * perf: query sqlite vfs paths by prefix * refactor: use typed conversation metadata for sessions * refactor: prefer typed session routing metadata * refactor: require typed session routing metadata * refactor: resolve group tool policy from typed sessions * refactor: delete dead session thread info bridge * Show Codex subscription reset times in channel errors (#80456) * feat(plugin-sdk): consolidate session workflow APIs * fix(agents): allow read-only agent mount reads * [codex] refresh plugin regression fixtures * fix(agents): restore compaction gateway logs * test: tighten gateway startup assertions * Redact persisted secret-shaped payloads [AI] (#79006) * test: tighten device pair notify assertions * test: tighten hermes secret assertions * test: assert matrix client error shapes * test: assert config compat warnings * fix(heartbeat): remap cron-run exec events to session keys (#80214) * fix(codex): route btw through native side threads * fix(auth): accept friendly OpenAI order for Codex profiles * fix(codex): rotate auth profiles inside harness * fix: keep browser status page probe within timeout * test: assert agents add outputs * test: pin cron read status * fix(agents): avoid Pi resource discovery stalls Co-authored-by: dataCenter430 <titan032000@gmail.com> * fix: retire timed-out codex app-server clients * test: tighten qa lab runtime assertions * test: check security fix outputs * test: verify extension runtime messages * feat(wake): expose typed sessionKey on wake protocol + system event CLI * fix(gateway): await session_end during shutdown drain and track channel + compaction lifecycle paths (#57790) * test: guard talk consult call helper * fix(codex): scale context engine projection (#80761) * fix(codex): scale context engine projection * fix: document Codex context projection scaling * fix: document Codex context projection scaling * fix: document Codex context projection scaling * fix: document Codex context projection scaling * chore: align Codex projection changelog * chore: realign Codex projection changelog * fix: isolate Codex projection patch --------- Co-authored-by: Eva (agent) <eva+agent-78055@100yen.org> Co-authored-by: Josh Lehman <josh@martian.engineering> * refactor: move agent runtime state toward piless * refactor: remove cron session reaper * refactor: move session management to sqlite * refactor: finish database-first state migration * chore: refresh generated sqlite db types * refactor: remove stale file-backed shims * test: harden kysely type coverage # Conflicts: # .agents/skills/kysely-database-access/SKILL.md # src/infra/kysely-sync.types.test.ts # src/proxy-capture/store.sqlite.test.ts # src/state/openclaw-agent-db.test.ts # src/state/openclaw-state-db.test.ts * refactor: remove cron store path runtime * refactor: keep compaction transcript handles out of session rows * refactor: derive embedded transcripts from sqlite identity * refactor: remove embedded transcript locator handoff * refactor: remove runtime transcript file bridges * refactor: remove transcript file handoffs * refactor: remove MSTeams legacy learning key fallback * refactor: store model catalog config in sqlite * refactor: use sqlite model catalog at runtime # Conflicts: # docs/cli/secrets.md # docs/gateway/authentication.md # docs/gateway/secrets.md * fix: keep oauth sibling sync sqlite-local # Conflicts: # src/commands/onboard-auth.test.ts * refactor: remove task session store maintenance # Conflicts: # src/commands/tasks.ts * refactor: keep diagnostics in state sqlite * refactor: enforce database-first runtime state * refactor: consolidate sqlite runtime state * Show Codex subscription reset times in channel errors (#80456) * fix(codex): refresh subscription limit resets * fix(codex): format reset times for channels * Update CHANGELOG with latest changes and fixes Updated CHANGELOG with recent fixes and improvements. * fix(codex): keep command load failures on codex surface * fix(codex): format account rate limits as rows * fix(codex): summarize account limits as usage status * fix(codex): simplify account limit status * test: tighten subagent announce queue assertion * test: tighten session delete lifecycle assertions * test: tighten cron ops assertions * fix: track cron execution milestones * test: tighten hermes secret assertions * test: assert matrix sync store payloads * test: assert config compat warnings * fix(codex): align btw side thread semantics * fix(codex): honor codex fallback blocking * fix(agents): avoid Pi resource discovery stalls * test: tighten codex event assertions * test: tighten cron assertions * Fix Codex app-server OAuth harness auth * refactor: move agent runtime state toward piless * refactor: move device and push state to sqlite * refactor: move runtime json state imports to doctor * refactor: finish database-first state migration * chore: refresh generated sqlite db types * refactor: clarify cron sqlite store keys * refactor: remove stale file-backed shims * refactor: bind codex runtime state by session id * test: expect sqlite trajectory branch export * refactor: rename session row helpers * fix: keep legacy device identity import in doctor * refactor: enforce database-first runtime state * refactor: consolidate sqlite runtime state * build: align pi contract wrappers * chore: repair database-first rebase * refactor: remove session file test contracts * test: update gateway session expectations * refactor: stop routing from session compatibility shadows * refactor: stop persisting session route shadows * refactor: use typed delivery context in clients * refactor: stop echoing session route shadows * refactor: repair embedded runner rebase imports # Conflicts: # src/agents/pi-embedded-runner/run/attempt.tool-call-argument-repair.ts * refactor: align pi contract imports * refactor: satisfy kysely sync helper guard * refactor: remove file transcript bridge remnants * refactor: remove session locator compatibility * refactor: remove session file test contracts * refactor: keep rebase database-first clean * refactor: remove session file assumptions from e2e * docs: clarify database-first goal state * test: remove legacy store markers from sqlite runtime tests * refactor: remove legacy store assumptions from runtime seams * refactor: align sqlite runtime helper seams * test: update memory recall sqlite audit mock * refactor: align database-first runtime type seams * test: clarify doctor cron legacy store names * fix: preserve sqlite session route projections * test: fix copilot token cache test syntax * docs: update database-first proof status * test: align database-first test fixtures * docs: update database-first proof status * refactor: clean extension database-first drift * test: align agent session route proof * test: clarify doctor legacy path fixtures * chore: clean database-first changed checks * chore: repair database-first rebase markers * build: allow baileys git subdependency * chore: repair exp-vfs rebase drift * chore: finish exp-vfs rebase cleanup * chore: satisfy rebase lint drift * chore: fix qqbot rebase type seam * chore: fix rebase drift leftovers * fix: keep auth profile oauth secrets out of sqlite * fix: repair rebase drift tests * test: stabilize pairing request ordering * test: use source manifests in plugin contract checks * fix: restore gateway session metadata after rebase * fix: repair database-first rebase drift * fix: clean up database-first rebase fallout * test: stabilize line quick reply receipt time * fix: repair extension rebase drift * test: keep transcript redaction tests sqlite-backed * fix: carry injected transcript redaction through sqlite * chore: clean database branch rebase residue * fix: repair database branch CI drift * fix: repair database branch CI guard drift * fix: stabilize oauth tls preflight test * test: align database branch fast guards * test: repair build artifact boundary guards * chore: clean changelog rebase markers --------- Co-authored-by: pashpashpash <nik@vault77.ai> Co-authored-by: Eva <eva@100yen.org> Co-authored-by: stainlu <stainlu@newtype-ai.org> Co-authored-by: Jason Zhou <jason.zhou.design@gmail.com> Co-authored-by: Ruben Cuevas <hi@rubencu.com> Co-authored-by: Pavan Kumar Gondhi <pavangondhi@gmail.com> Co-authored-by: Shakker <shakkerdroid@gmail.com> Co-authored-by: Kaspre <36520309+Kaspre@users.noreply.github.com> Co-authored-by: dataCenter430 <titan032000@gmail.com> Co-authored-by: Kaspre <kaspre@gmail.com> Co-authored-by: pandadev66 <nova.full.stack@outlook.com> Co-authored-by: Eva <admin@100yen.org> Co-authored-by: Eva (agent) <eva+agent-78055@100yen.org> Co-authored-by: Josh Lehman <josh@martian.engineering> Co-authored-by: jeffjhunter <support@aipersonamethod.com>
293 lines
15 KiB
Markdown
293 lines
15 KiB
Markdown
---
|
|
summary: "CLI reference for `openclaw migrate` (import state from another agent system)"
|
|
read_when:
|
|
- You want to migrate from Hermes or another agent system into OpenClaw
|
|
- You are adding a plugin-owned migration provider
|
|
title: "Migrate"
|
|
---
|
|
|
|
# `openclaw migrate`
|
|
|
|
Import state from another agent system through a plugin-owned migration provider. Bundled providers cover Codex CLI state, [Claude](/install/migrating-claude), and [Hermes](/install/migrating-hermes); third-party plugins can register additional providers.
|
|
|
|
Legacy OpenClaw file-to-database imports are doctor-owned. Run
|
|
`openclaw doctor --fix` after upgrading an older state directory so doctor can
|
|
create the database and import legacy files in one migration pass.
|
|
|
|
<Tip>
|
|
For user-facing walkthroughs, see [Migrating from Claude](/install/migrating-claude) and [Migrating from Hermes](/install/migrating-hermes). The [migration hub](/install/migrating) lists all paths.
|
|
</Tip>
|
|
|
|
## Commands
|
|
|
|
```bash
|
|
openclaw migrate list
|
|
openclaw migrate claude --dry-run
|
|
openclaw migrate codex --dry-run
|
|
openclaw migrate codex --skill gog-vault77-google-workspace
|
|
openclaw migrate codex --plugin google-calendar --dry-run
|
|
openclaw migrate codex --plugin google-calendar --verify-plugin-apps --dry-run
|
|
openclaw migrate hermes --dry-run
|
|
openclaw migrate hermes
|
|
openclaw migrate apply codex --yes --skill gog-vault77-google-workspace
|
|
openclaw migrate apply codex --yes --plugin google-calendar
|
|
openclaw migrate apply codex --yes
|
|
openclaw migrate apply claude --yes
|
|
openclaw migrate apply hermes --yes
|
|
openclaw migrate apply hermes --include-secrets --yes
|
|
openclaw onboard --flow import
|
|
openclaw onboard --import-from claude --import-source ~/.claude
|
|
openclaw onboard --import-from hermes --import-source ~/.hermes
|
|
```
|
|
|
|
<ParamField path="<provider>" type="string">
|
|
Name of a registered migration provider, for example `hermes`. Run `openclaw migrate list` to see installed providers.
|
|
</ParamField>
|
|
<ParamField path="--dry-run" type="boolean">
|
|
Build the plan and exit without changing state.
|
|
</ParamField>
|
|
<ParamField path="--from <path>" type="string">
|
|
Override the source state directory. Hermes defaults to `~/.hermes`.
|
|
</ParamField>
|
|
<ParamField path="--include-secrets" type="boolean">
|
|
Import supported credentials. Off by default.
|
|
</ParamField>
|
|
<ParamField path="--overwrite" type="boolean">
|
|
Allow apply to replace existing targets when the plan reports conflicts.
|
|
</ParamField>
|
|
<ParamField path="--yes" type="boolean">
|
|
Skip the confirmation prompt. Required in non-interactive mode.
|
|
</ParamField>
|
|
<ParamField path="--skill <name>" type="string">
|
|
Select one skill copy item by skill name or item id. Repeat the flag to migrate multiple skills. When omitted, interactive Codex migrations show a checkbox selector and non-interactive migrations keep all planned skills.
|
|
</ParamField>
|
|
<ParamField path="--plugin <name>" type="string">
|
|
Select one Codex plugin install item by plugin name or item id. Repeat the flag to migrate multiple Codex plugins. When omitted, interactive Codex migrations show a native Codex plugin checkbox selector and non-interactive migrations keep all planned plugins. This only applies to source-installed `openai-curated` Codex plugins discovered by the Codex app-server inventory.
|
|
</ParamField>
|
|
<ParamField path="--verify-plugin-apps" type="boolean">
|
|
Codex only. Force a fresh source Codex app-server `app/list` traversal before planning native plugin activation. Off by default to keep migration planning fast.
|
|
</ParamField>
|
|
<ParamField path="--no-backup" type="boolean">
|
|
Skip the pre-apply backup. Requires `--force` when local OpenClaw state exists.
|
|
</ParamField>
|
|
<ParamField path="--force" type="boolean">
|
|
Required alongside `--no-backup` when apply would otherwise refuse to skip backup.
|
|
</ParamField>
|
|
<ParamField path="--json" type="boolean">
|
|
Print the plan or apply result as JSON. With `--json` and no `--yes`, apply prints the plan and does not mutate state.
|
|
</ParamField>
|
|
|
|
## Safety model
|
|
|
|
`openclaw migrate` is preview-first.
|
|
|
|
<AccordionGroup>
|
|
<Accordion title="Preview before apply">
|
|
The provider returns an itemized plan before anything changes, including conflicts, skipped items, and sensitive items. JSON plans, apply output, and migration reports redact nested secret-looking keys such as API keys, tokens, authorization headers, cookies, and passwords.
|
|
|
|
`openclaw migrate apply <provider>` previews the plan and prompts before changing state unless `--yes` is set. In non-interactive mode, apply requires `--yes`.
|
|
|
|
</Accordion>
|
|
<Accordion title="Backups">
|
|
Apply creates and verifies an OpenClaw backup before applying the migration. If no local OpenClaw state exists yet, the backup step is skipped and the migration can continue. To skip a backup when state exists, pass both `--no-backup` and `--force`.
|
|
</Accordion>
|
|
<Accordion title="Conflicts">
|
|
Apply refuses to continue when the plan has conflicts. Review the plan, then rerun with `--overwrite` if replacing existing targets is intentional. Providers may still write item-level backups for overwritten files in the migration report directory.
|
|
</Accordion>
|
|
<Accordion title="Secrets">
|
|
Secrets are never imported by default. Use `--include-secrets` to import supported credentials.
|
|
</Accordion>
|
|
</AccordionGroup>
|
|
|
|
## Claude provider
|
|
|
|
The bundled Claude provider detects Claude Code state at `~/.claude` by default. Use `--from <path>` to import a specific Claude Code home or project root.
|
|
|
|
<Tip>
|
|
For a user-facing walkthrough, see [Migrating from Claude](/install/migrating-claude).
|
|
</Tip>
|
|
|
|
### What Claude imports
|
|
|
|
- Project `CLAUDE.md` and `.claude/CLAUDE.md` into the OpenClaw agent workspace.
|
|
- User `~/.claude/CLAUDE.md` appended to workspace `USER.md`.
|
|
- MCP server definitions from project `.mcp.json`, Claude Code `~/.claude.json`, and Claude Desktop `claude_desktop_config.json`.
|
|
- Claude skill directories that include `SKILL.md`.
|
|
- Claude command Markdown files converted into OpenClaw skills with manual invocation only.
|
|
|
|
### Archive and manual-review state
|
|
|
|
Claude hooks, permissions, environment defaults, local memory, path-scoped rules, subagents, caches, plans, and project history are preserved in the migration report or reported as manual-review items. OpenClaw does not execute hooks, copy broad allowlists, or import OAuth/Desktop credential state automatically.
|
|
|
|
## Codex provider
|
|
|
|
The bundled Codex provider detects Codex CLI state at `~/.codex` by default, or
|
|
at `CODEX_HOME` when that environment variable is set. Use `--from <path>` to
|
|
inventory a specific Codex home.
|
|
|
|
Use this provider when moving to the OpenClaw Codex harness and you want to
|
|
promote useful personal Codex CLI assets deliberately. Local Codex app-server
|
|
launches use per-agent `CODEX_HOME` and `HOME` directories, so they do not read
|
|
your personal Codex CLI state by default.
|
|
|
|
Running `openclaw migrate codex` in an interactive terminal previews the full
|
|
plan, then opens checkbox selectors before the final apply confirmation. Skill
|
|
copy items are prompted first. Use `Toggle all on` or `Toggle all off` for bulk
|
|
selection. Press Space to toggle rows, or press Enter to activate the highlighted
|
|
row and continue. Planned skills start checked, conflict skills start unchecked, and
|
|
`Skip for now` skips skill copies for this run while still continuing to plugin
|
|
selection. When source-installed curated Codex plugins are migratable and
|
|
`--plugin` was not supplied, migration then prompts for native Codex plugin
|
|
activation by plugin name. Plugin items
|
|
start checked unless the target OpenClaw Codex plugin config already has that
|
|
plugin. Existing target plugins start unchecked and show a conflict hint such as
|
|
`conflict: plugin exists`; choose `Toggle all off` to migrate no native Codex
|
|
plugins in that run, or `Skip for now` to stop before applying. For scripted or
|
|
exact runs, pass `--skill <name>` once per skill, for example:
|
|
|
|
```bash
|
|
openclaw migrate codex --dry-run --skill gog-vault77-google-workspace
|
|
openclaw migrate apply codex --yes --skill gog-vault77-google-workspace
|
|
```
|
|
|
|
Use `--plugin <name>` to limit native Codex plugin migration non-interactively
|
|
to one or more source-installed curated plugins:
|
|
|
|
```bash
|
|
openclaw migrate codex --dry-run --plugin google-calendar
|
|
openclaw migrate apply codex --yes --plugin google-calendar
|
|
```
|
|
|
|
### What Codex imports
|
|
|
|
- Codex CLI skill directories under `$CODEX_HOME/skills`, excluding Codex's
|
|
`.system` cache.
|
|
- Personal AgentSkills under `$HOME/.agents/skills`, copied into the current
|
|
OpenClaw agent workspace when you want per-agent ownership.
|
|
- Source-installed `openai-curated` Codex plugins discovered through Codex
|
|
app-server `plugin/list`. Planning reads `plugin/read` for each enabled
|
|
installed plugin. App-backed plugins require the source Codex app-server
|
|
account response to be a ChatGPT subscription account; non-ChatGPT or missing
|
|
account responses are skipped with `codex_subscription_required`. By default,
|
|
migration does not call source `app/list`, so app-backed plugins that pass the
|
|
account gate are planned without source app accessibility verification, and
|
|
account lookup transport failures skip with `codex_account_unavailable`. Pass
|
|
`--verify-plugin-apps` when you want migration to force a fresh source
|
|
`app/list` snapshot and require every owned app to be present, enabled, and
|
|
accessible before planning native activation. In that mode, account lookup
|
|
transport failures fall through to source app inventory verification. The
|
|
source app inventory snapshot is kept in memory for the current process; it
|
|
is not written to migration output or target config. Disabled plugins,
|
|
unreadable plugin details, subscription-gated source accounts, and, when
|
|
verification is requested, missing apps, disabled apps, inaccessible apps, or
|
|
source app inventory failures become manual skipped items with typed reasons
|
|
instead of target config entries.
|
|
Apply calls app-server `plugin/install` for each selected eligible plugin,
|
|
even if the target app-server already reports that plugin as installed and
|
|
enabled. Migrated Codex plugins are usable only in sessions that select the
|
|
native Codex harness; they are not exposed to Pi, normal OpenAI provider runs,
|
|
ACP conversation bindings, or other harnesses.
|
|
|
|
### Manual-review Codex state
|
|
|
|
Codex `config.toml`, native `hooks/hooks.json`, non-curated marketplaces, cached
|
|
plugin bundles that are not source-installed curated plugins, and source-installed
|
|
plugins that fail the source subscription gate are not activated automatically.
|
|
When `--verify-plugin-apps` is set, plugins that fail the source app-inventory
|
|
gate are also skipped. They are copied or reported in the migration report for
|
|
manual review.
|
|
|
|
For migrated source-installed curated plugins, apply writes:
|
|
|
|
- `plugins.entries.codex.enabled: true`
|
|
- `plugins.entries.codex.config.codexPlugins.enabled: true`
|
|
- `plugins.entries.codex.config.codexPlugins.allow_destructive_actions: false`
|
|
- one explicit plugin entry with `marketplaceName: "openai-curated"` and
|
|
`pluginName` for each selected plugin
|
|
|
|
Migration never writes `plugins["*"]` and never stores local marketplace cache
|
|
paths. Source-side subscription failures are reported on manual items with typed
|
|
reasons such as `codex_subscription_required`, `codex_account_unavailable`,
|
|
`plugin_disabled`, or `plugin_read_unavailable`. With `--verify-plugin-apps`,
|
|
source app-inventory failures can also appear as `app_inaccessible`,
|
|
`app_disabled`, `app_missing`, or `app_inventory_unavailable`. Skipped plugins
|
|
are not written to target config.
|
|
Target-side auth-required installs are reported on the affected plugin item with
|
|
`status: "skipped"`, `reason: "auth_required"`, and sanitized app identifiers.
|
|
Their explicit config entries are written disabled until you reauthorize and
|
|
enable them. Other install failures are item-scoped `error` results.
|
|
|
|
If Codex app-server plugin inventory is unavailable during planning, migration
|
|
falls back to cached bundle advisory items instead of failing the whole
|
|
migration.
|
|
|
|
## Hermes provider
|
|
|
|
The bundled Hermes provider detects state at `~/.hermes` by default. Use `--from <path>` when Hermes lives elsewhere.
|
|
|
|
### What Hermes imports
|
|
|
|
- Default model configuration from `config.yaml`.
|
|
- Configured model providers and custom OpenAI-compatible endpoints from `providers` and `custom_providers`.
|
|
- MCP server definitions from `mcp_servers` or `mcp.servers`.
|
|
- `SOUL.md` and `AGENTS.md` into the OpenClaw agent workspace.
|
|
- `memories/MEMORY.md` and `memories/USER.md` appended to workspace memory files.
|
|
- Memory config defaults for OpenClaw file memory, plus archive or manual-review items for external memory providers such as Honcho.
|
|
- Skills that include a `SKILL.md` file under `skills/<name>/`.
|
|
- Per-skill config values from `skills.config`.
|
|
- Supported API keys from `.env`, only with `--include-secrets`.
|
|
|
|
### Supported `.env` keys
|
|
|
|
`OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `OPENROUTER_API_KEY`, `GOOGLE_API_KEY`, `GEMINI_API_KEY`, `GROQ_API_KEY`, `XAI_API_KEY`, `MISTRAL_API_KEY`, `DEEPSEEK_API_KEY`.
|
|
|
|
### Archive-only state
|
|
|
|
Hermes state that OpenClaw cannot safely interpret is copied into the migration report for manual review, but it is not loaded into live OpenClaw config or credentials. This preserves opaque or unsafe state without pretending OpenClaw can execute or trust it automatically:
|
|
|
|
- `plugins/`
|
|
- `sessions/`
|
|
- `logs/`
|
|
- `cron/`
|
|
- `mcp-tokens/`
|
|
- `auth.json`
|
|
- `state.db`
|
|
|
|
### After applying
|
|
|
|
```bash
|
|
openclaw doctor
|
|
```
|
|
|
|
## Plugin contract
|
|
|
|
Migration sources are plugins. A plugin declares its provider ids in `openclaw.plugin.json`:
|
|
|
|
```json
|
|
{
|
|
"contracts": {
|
|
"migrationProviders": ["hermes"]
|
|
}
|
|
}
|
|
```
|
|
|
|
At runtime the plugin calls `api.registerMigrationProvider(...)`. The provider implements `detect`, `plan`, and `apply`. Core owns CLI orchestration, backup policy, prompts, JSON output, and conflict preflight. Core passes the reviewed plan into `apply(ctx, plan)`, and providers may rebuild the plan only when that argument is absent for compatibility.
|
|
|
|
Provider plugins can use `openclaw/plugin-sdk/migration` for item construction and summary counts, plus `openclaw/plugin-sdk/migration-runtime` for conflict-aware file copies, archive-only report copies, cached config-runtime wrappers, and migration reports.
|
|
|
|
## Onboarding integration
|
|
|
|
Onboarding can offer migration when a provider detects a known source. Both `openclaw onboard --flow import` and `openclaw setup --wizard --import-from hermes` use the same plugin migration provider and still show a preview before applying.
|
|
|
|
<Note>
|
|
Onboarding imports require a fresh OpenClaw setup. Reset config, credentials, sessions, and the workspace first if you already have local state. Backup-plus-overwrite or merge imports are feature-gated for existing setups.
|
|
</Note>
|
|
|
|
## Related
|
|
|
|
- [Migrating from Hermes](/install/migrating-hermes): user-facing walkthrough.
|
|
- [Migrating from Claude](/install/migrating-claude): user-facing walkthrough.
|
|
- [Migrating](/install/migrating): move OpenClaw to a new machine.
|
|
- [Doctor](/gateway/doctor): health check after applying a migration.
|
|
- [Plugins](/tools/plugin): plugin install and registration.
|