npx claudepluginhub herbertjulio/specialist-agent --plugin specialist-agentThis skill is limited to using the following tools:
Migrate code from one framework to another while preserving functionality.
Generates migration plans, automated scripts, and strategies for transitioning codebases between frameworks, languages, versions, and platforms.
Generates migration plans, automated scripts, risk assessments, testing strategies, and rollback procedures for transitioning codebases between frameworks, languages, versions, or platforms.
Guides code migrations, framework upgrades (React 17→18, Vue 2→3), language shifts (JS→TS), and tech modernizations with risk assessment, checklists, workflows, and rollback strategies.
Share bugs, ideas, or general feedback.
Migrate code from one framework to another while preserving functionality.
Arguments: $ARGUMENTS (e.g., "react to vue src/components/Button.tsx")
| From | To | Status |
|---|---|---|
| React | Vue 3 | Full |
| React | Svelte | Full |
| Vue 2 | Vue 3 | Full |
| Vue 3 | React | Full |
| Vue 3 | Svelte | Full |
| Angular | React | Partial |
| Angular | Vue 3 | Partial |
| React | Vue 3 |
|---|---|
useState | ref() / reactive() |
useEffect | onMounted, watch |
useMemo | computed() |
useCallback | Regular function |
useContext | provide/inject |
props | defineProps() |
children | <slot /> |
className | class |
onClick | @click |
// React
function Button({ label, onClick }) {
const [count, setCount] = useState(0)
useEffect(() => {
console.log('mounted')
}, [])
return (
<button className="btn" onClick={() => setCount(c => c + 1)}>
{label}: {count}
</button>
)
}
// Vue 3
<script setup lang="ts">
import { ref, onMounted } from 'vue'
const props = defineProps<{ label: string }>()
const emit = defineEmits<{ click: [] }>()
const count = ref(0)
onMounted(() => {
console.log('mounted')
})
</script>
<template>
<button class="btn" @click="count++">
{{ label }}: {{ count }}
</button>
</template>
| Vue 3 | React |
|---|---|
ref() | useState |
reactive() | useState with object |
computed() | useMemo |
watch | useEffect |
onMounted | useEffect(fn, []) |
provide/inject | useContext |
<slot /> | children |
v-if | {condition && ...} |
v-for | .map() |
@click | onClick |
| React | Svelte |
|---|---|
useState | let variable |
useEffect | onMount, $: |
useMemo | $: derived |
props | export let |
children | <slot /> |
className | class |
onClick | on:click |
──── Migration Complete ────
Source: React (src/components/Button.tsx)
Target: Vue 3 (src/components/Button.vue)
Conversions:
✓ useState → ref (2 instances)
✓ useEffect → onMounted (1 instance)
✓ Props interface → defineProps
✓ JSX → Vue template
✓ className → class
Manual review needed:
- Line 15: Complex useEffect dependency array
- Line 23: Custom hook needs separate migration
Files created:
- src/components/Button.vue