backend-endpoint
Create REST/GraphQL API endpoint with validation, error handling, and tests. Auto-invoke when user says "add endpoint", "create…
Create database migration with schema changes and rollback. Auto-invoke when user says "create migration", "add table", "modify schema", or "change database".
Claude Code
$ npx -y skills add qf-studio/navigator --skill database-migration --agent claude-code
Codex
$ npx skills add qf-studio/navigator --skill database-migration -a codex -y
Cursor
$ npx skills add qf-studio/navigator --skill database-migration -a cursor -y
Gemini CLI
$ npx skills add qf-studio/navigator --skill database-migration -a gemini-cli -y
GitHub Copilot
$ npx skills add qf-studio/navigator --skill database-migration -a github-copilot -y
OpenCode
$ npx skills add qf-studio/navigator --skill database-migration -a opencode -y
Windsurf
$ npx skills add qf-studio/navigator --skill database-migration -a windsurf -y
name: database-migration description: Create database migration with schema changes and rollback. Auto-invoke when user says "create migration", "add table", "modify schema", or "change database". allowed-tools: Read, Write, Edit, Grep, Glob, Bash version: 2.0.0
Generate database migrations with rollback capability for schema changes, with built-in ToM verification for safe database operations.
> **Implementation note**: This skill uses direct `Write()` calls with inline templates (see Steps 3–4 and "Schema Change Templates" section below). Unlike `frontend-component` and `backend-endpoint`, there are no Python helper functions — the skill is prose-driven by design, since migration generation is highly schema-specific and benefits from inline framework templates. Future work (tracked for v6.6.0) may extract a timestamp generator and per-framework templates.
Auto-invoke when user mentions:
1. Detects migration framework (Knex, Prisma, TypeORM, raw SQL) 2. Gathers migration requirements 3. **Verifies understanding before generating** (ToM checkpoint - critical for DB changes) 4. Generates migration file with timestamp 5. Creates schema change (up migration) 6. Creates rollback (down migration) 7. Validates migration safety 8. Shows migration summary
Before detecting the framework, query the knowledge graph for what we already know about database work in this project. For migrations — the highest-stakes execution path — Phase 0 is especially valuable because past pitfalls (failed NOT NULL adds, bad rollback assumptions, naming collisions) often repeat.
PLUGIN_DIR="${CLAUDE_PLUGIN_ROOT:-$(cat "${NAVIGATOR_CONFIG_HOME:-${XDG_CONFIG_HOME:-$HOME/.config}/navigator}/plugin-root" 2>/dev/null)}"
[ -d "$PLUGIN_DIR/skills" ] || PLUGIN_DIR="$HOME/.claude/plugins/marketplaces/navigator-marketplace"
python3 "$PLUGIN_DIR/skills/nav-graph/functions/graph_manager.py" \
--action query --concept database \
--graph-path .agent/knowledge/graph.json 2>/dev/null | head -40Also check `migration`, `schema`, and `performance` (for index decisions).
If memories surface (`PATTERN`, `PITFALL`, `DECISION` entries), read the full memory files for any relevant ones:
ls .agent/knowledge/memories/{patterns,pitfalls,decisions}/ 2>/dev/null**What to do with what you find**:
Skip this step only if the knowledge graph is disabled in `.agent/.nav-config.json`.
**Check project for migration tool**:
# Check for Knex if [ -f "knexfile.js" ] || [ -f "knexfile.ts" ] || grep -q '"knex"' package.json 2>/dev/null; then echo "Knex detected" fi # Check for Prisma if [ -f "prisma/schema.prisma" ]; then echo "Prisma detected" fi # Check for TypeORM if [ -f "ormconfig.json" ] || [ -f "ormconfig.ts" ] || grep -q '"typeorm"' package.json 2>/dev/null; then echo "TypeORM detected" fi # Check for Drizzle if grep -q '"drizzle-orm"' package.json 2>/dev/null; then echo "Drizzle detected" fi
**Framework detection result**:
Detected: {FRAMEWORK}
Migration directory: {MIGRATION_PATH}
Naming convention: {CONVENTION}**If no framework detected**:
⚠️ No migration framework detected Options: 1. Generate raw SQL migrations 2. Set up Knex (recommended for flexibility) 3. Set up Prisma (recommended for type safety) Your choice [1-3]:
**Ask user for migration details**:
Migration name: [e.g., add_user_verification_columns] Change type: - create_table (new table) - add_column (add to existing table) - modify_column (change existing column) - drop_column (remove column) - rename (rename table or column) - add_index (create index) - add_constraint (foreign key, unique, etc.) Target table: [e.g., users] Schema details: [describe the changes]
**CRITICAL**: This step MUST ALWAYS be executed for database migrations. No exceptions.
**Database migrations are high-stakes - ALWAYS verify before generating**.
**Display verification**:
I understood you want:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Migration: {MIGRATION_NAME}
Framework: {FRAMEWORK} (detected)
Type: {CHANGE_TYPE}
Target: {TABLE_NAME}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Schema Changes (UP):
{SCHEMA_CHANGE_PREVIEW}
Rollback (DOWN):
{ROLLBACK_PREVIEW}
⚠️ Database migrations affect production data
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Assumptions I'm making:
- Column types match existing conventions
- Indexes will use default naming
- No data migration needed (schema only)
Proceed with generation? [Y/n]**Never skip verification for database migrations** - they can cause data loss.
**Based on detected framework**:
# Generate filename
TIMESTAMP=$(date +%Y%m%d%H%M%S)
FILENAME="${TIMESTAMP}_${MIGRATION_NAME}.ts"
# Create migration file
Write(
file_path: "migrations/${FILENAME}",
content: [knex migration template]
)**Knex template**:
import { Knex } from 'knex';
export async function up(knex: Knex): Promise<void> {
${UP_MIGRATION}
}
export async function down(knex: Knex): Promise<void> {
${DOWN_MIGRATION}
}# Prisma uses schema.prisma + migrate commands # Update schema.prisma with new
Create REST/GraphQL API endpoint with validation, error handling, and tests. Auto-invoke when user says "add endpoint", "create…
Generate backend tests (unit, integration, mocks) for existing code. Auto-invoke when user says "write test for", "add test",…
Create React/Vue component with TypeScript, tests, and styles. Auto-invoke when user says "create component", "add component",…
Generate frontend component tests (React Testing Library, Vue Test Utils, snapshot) for existing components. Auto-invoke when…
Render a one-screen intent brief (Goal/Scope/Approach/Limits/Verify/Won't-do/Contradiction) before implementing ambiguous…
Clear conversation context while preserving knowledge via context marker. Use when user says "clear context", "start fresh",…
Use your assigned AgentMail inbox to read email tasks, explicitly send or reply, and check delivery. Provided automatically by…
Create a new Architecture Decision Record with sequential numbering and AgentDB registration