**Version:** 2.0.0 **Updated:** 2026-06-30 **Freshly updated:** v2.0.0 wires in current Respira safety and precision. Pre-migration now inventories source pages with `respira_find_builder_targets`. Every write is preceded by a `respira_get_snapshot`, and the existing
Installs just this skill. Get the whole plugin for auto-invocation.
โก How it fires
How this skill gets triggered: by you, by Claude, or both.
Fires itselfClaude auto-loads it when your prompt matches the work.
You can call itInvoke it directly when you want it.
Slash command/migrate-elementor-to-oxygen
๐๏ธ Context preview
The summary Claude sees to decide when to auto-load this skill.
**Version:** 2.0.0 **Updated:** 2026-06-30 **Freshly updated:** v2.0.0 wires in current Respira safety and precision. Pre-migration now inventories source pages with `respira_find_builder_targets`. Every write is preceded by a `respira_get_snapshot`, and the existing
# Migrate Elementor to Oxygen
**Version:** 2.0.0
**Updated:** 2026-06-30
**Freshly updated:** v2.0.0 wires in current Respira safety and precision. Pre-migration now inventories source pages with `respira_find_builder_targets`. Every write is preceded by a `respira_get_snapshot`, and the existing draft-duplicate path is kept. After the initial `respira_inject_builder_content`, validation issues (column widths, broken refs) are corrected surgically with `respira_find_element` + `respira_update_element` (and `respira_batch_update` for multi-element or multi-page fixes) instead of re-injecting whole pages. Snapshot restore and draft deletion are now explicit rollback paths. Reflects the current 16 supported builders.
Converts Elementor-built WordPress pages to Oxygen Builder. Reads Elementor's JSON widget tree from post meta, maps each widget to its Oxygen component equivalent, generates a migration plan for approval, and writes Oxygen content to the target pages. Use this skill whenever someone wants to move from Elementor to Oxygen, switch to Oxygen's developer-oriented builder, or rebuild Elementor pages in Oxygen.
## What This Skill Does
Oxygen is a fundamentally different kind of builder than Elementor โ it outputs clean HTML/CSS without wrapper divs, gives direct access to CSS properties, and thinks in terms of components rather than widgets. This migration requires not just content transfer but a philosophical shift: Elementor's widget-based approach maps to Oxygen's component-based architecture where you have more control but less hand-holding. Both Elementor and Oxygen are among the 16 page builders Respira reads and writes natively, so extraction and injection run through the same builder-aware tooling Respira uses everywhere else.
**Handles:**
- Section/Column layouts โ Oxygen Section/Columns/Div components
- Text Editor, Heading โ Oxygen Text and Heading components
- Spacer, Divider โ CSS spacing or Oxygen separator
- Google Maps โ Oxygen map component
- Code Block, Custom HTML โ Oxygen Code Block
- Image Gallery โ Oxygen Gallery component
- Custom CSS โ Oxygen's stylesheet or custom CSS fields
- Responsive settings โ Oxygen media query breakpoints
**Preserves:**
- All text content, headings, and inline formatting
- Image URLs, alt text, captions, and links
- Typography settings (mapped to Oxygen's CSS-based typography controls)
- Color values (hex, rgb, rgba)
- Spacing values (margin, padding)
- Background images and gradients
- Border and shadow CSS properties
- Link URLs and targets
- CSS classes
## What This Skill Does NOT Do
- **Third-party Elementor addons** โ Essential Addons, JetElements, Crocoblock widgets are flagged for manual migration. Oxygen has its own ecosystem of components.
- **Elementor Pro dynamic tags** โ Oxygen has powerful dynamic data capabilities but with a completely different interface. Dynamic content is flagged for manual setup.
- **Theme Builder templates** โ Elementor's template system is separate from Oxygen's template system. Templates need to be recreated in Oxygen.
- **Form widgets** โ Elementor forms need Oxygen's form component or a third-party solution.
- **Popup content** โ Must be rebuilt using Oxygen's modal/lightbox functionality.
- **WooCommerce widgets** โ Oxygen has its own WooCommerce components that must be configured independently.
- Reusable parts are stored as `ct_template` post type
- Oxygen disables the theme โ it controls all output directly
Write Oxygen content via `respira_inject_builder_content` with `builder=oxygen`.
## Execution Workflow
### Phase 1: Pre-Migration Audit
1. Verify Respira + MCP connection via `respira_get_site_context`. If unavailable, stop and show setup guidance.
2. Confirm Elementor is active via `respira_list_plugins`.
3. Confirm Oxygen is installed and active via `respira_list_plugins`.
4. **Important**: Note that Oxygen disables the WordPress theme. Verify the user understands this architectural difference.
5. Inventory and scope the source pages with `respira_find_builder_targets` (builder=elementor) โ a fast, ranked list of every Elementor-built page/post before you touch anything. Fall back to `respira_list_pages` / `respira_list_posts` + `respira_get_builder_info` to confirm builder per item where needed.
6. For each Elementor page, extract content via `respira_extract_builder_content` with `builder=elementor`
- Convert Elementor responsive suffixes to Oxygen media query breakpoint keys
- Resolve global widgets to inline content
- Flag unmappable widgets
3. Generate valid Oxygen component structure
4. Create a duplicate via `respira_create_page_duplicate` or `respira_create_post_duplicate`
5. Before writing, take a snapshot with `respira_get_snapshot` so the duplicate's pre-write state can be restored if anything goes wrong
6. Write Oxygen content to the duplicate via `respira_inject_builder_content` with `builder=oxygen`
7. Surgical fix pass โ if the injected page has validation issues (collapsed column widths, broken parent refs, a misconverted component), do not re-inject the whole page. Locate the specific element with `respira_find_element` and correct it with `respira_update_element`. For repeated fixes across many components or several pages, batch them with `respira_batch_update`
- [ ] Verify layout structure and component hierarchy
- [ ] Check responsive at each Oxygen breakpoint (1120px, 992px, 768px, 480px)
- [ ] Verify images and media
- [ ] Test links and buttons
- [ ] Recreate flagged elements manually
- [ ] Set up Oxygen templates for header/footer if not yet done
- [ ] Review Oxygen's clean HTML output
- [ ] Compare with Elementor original side-by-side
## Safety Model
- Read-only analysis first โ full content scan before any changes
- Explicit user confirmation required before creating duplicates
- Original Elementor pages are never modified or deleted
- All migrated content goes to draft duplicates only
- Never auto-publishes migrated pages
- Takes a `respira_get_snapshot` of each duplicate before any write, so its pre-write state can be restored
- Two explicit rollback paths: restore the snapshot with `respira_restore_snapshot`, or delete the draft duplicates entirely with `respira_delete_page` / `respira_delete_post`
- Surgical fixes (`respira_find_element` + `respira_update_element`, or `respira_batch_update`) replace whole-page re-injection, so corrections stay scoped and reversible
- Warns about Oxygen's theme-disabling behavior upfront
## Honest Disclaimer
This skill converts Elementor page content to Oxygen format and creates draft duplicates for review.
It cannot:
- Migrate third-party Elementor addon widgets
- Auto-convert dynamic tags to Oxygen dynamic data
- Guarantee pixel-perfect visual match
- Migrate theme builder templates or popups
- Set up Oxygen's global templates (header, footer, etc.)
- Replace visual QA review
It can:
- Convert 80-90% of standard Elementor widgets to Oxygen components
- Produce cleaner HTML output than Elementor
- Preserve all text content, images, links, and core styling
- Save significant rebuilding time
- Flag everything needing manual attention
- Keep original pages untouched
## Tooling
**Core WordPress tools**
- `respira_get_site_context`
- `respira_list_plugins`
- `respira_list_pages`
- `respira_list_posts`
- `respira_read_page`
- `respira_read_post`
- `respira_get_builder_info`
- `respira_extract_builder_content`
- `respira_inject_builder_content`
- `respira_find_builder_targets`
- `respira_create_page_duplicate`
- `respira_create_post_duplicate`
**Safety and precision tools**
- `respira_get_snapshot`
- `respira_restore_snapshot`
- `respira_find_element`
- `respira_update_element`
- `respira_batch_update`
- `respira_delete_page`
- `respira_delete_post`
## Telemetry
After run completion, send fire-and-forget usage tracking to: