Help us improve
Share bugs, ideas, or general feedback.
From opensaas-migration
Find and replace all @keystone-6 import paths across every file in the project. Invoke as a forked subagent, passing the project root path.
npx claudepluginhub opensaasau/stack --plugin opensaas-migrationHow this skill is triggered — by the user, by Claude, or both
Slash command
/opensaas-migration:migrate-importsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Find and replace all KeystoneJS import paths with their OpenSaaS Stack equivalents across the project described below. This is a mechanical find-and-replace across every TypeScript/JavaScript file.
Migrates a mcp-ts-template fork to use @cyanheads/mcp-ts-core as a dependency, rewriting imports and removing bundled framework files.
Generates jscodeshift or ts-morph codemods for design system migrations: token renames, component API changes, prop deprecations, import updates.
Guides framework and language migrations: version upgrades, breaking changes, dependency audits, codemods, rollbacks. For React 19, Next.js App Router, Python 3.12, Node 22, etc.
Share bugs, ideas, or general feedback.
Find and replace all KeystoneJS import paths with their OpenSaaS Stack equivalents across the project described below. This is a mechanical find-and-replace across every TypeScript/JavaScript file.
$ARGUMENTS
| Keystone import (remove/replace) | OpenSaaS import |
|---|---|
@keystone-6/core | @opensaas/stack-core |
@keystone-6/core/fields | @opensaas/stack-core/fields |
@keystone-6/auth | @opensaas/stack-auth |
@keystone-6/fields-document | @opensaas/stack-tiptap/fields (see note) |
.keystone/types or '.keystone/types' | @opensaas/stack-core |
@keystone-6/core/session | Remove entirely (handled by authPlugin) |
Note on @keystone-6/fields-document: Replace with @opensaas/stack-tiptap/fields and change document() → richText(). If document field migration is complex, note it for the user and leave a // TODO: migrate document field comment.
Note on .keystone/types: Common imports to update:
// Before
import type { Session } from '.keystone/types'
import type { KeystoneContext } from '.keystone/types'
import type { Lists } from '.keystone/types'
// After
import type { AccessControl } from '@opensaas/stack-core'
// KeystoneContext and Lists are no longer needed — use context from getContext()
If the project has keystone.ts or keystone.config.ts, it should be renamed to opensaas.config.ts. Check if it has already been renamed before doing so.
.ts and .tsx files in the project (exclude node_modules, .next, dist)@keystone-6 or .keystone/types imports.keystone/types imports, update the specific type names (Session → AccessControl, etc.)
d. Edit the file with the changeskeystone.ts or keystone.config.ts exists and rename to opensaas.config.ts if needed (and if not already done)