Files
everything-claude-code/commands/pm2.md
Skyler Anderson 6b424e31ff feat: add pm2 and multi-agent orchestration commands
Add 6 new command files:
- pm2.md: PM2 process management for running multiple services
- multi-plan.md: Multi-agent planning orchestration
- multi-execute.md: Multi-agent parallel execution
- multi-backend.md: Backend-focused multi-agent workflow
- multi-frontend.md: Frontend-focused multi-agent workflow
- multi-workflow.md: General multi-agent workflow coordination

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 05:57:58 -08:00

6.5 KiB

PM2 Init

Auto-analyze project and generate PM2 service commands.

Command: $ARGUMENTS


Workflow

  1. Check PM2 (install via npm install -g pm2 if missing)
  2. Scan project to identify services (frontend/backend/database)
  3. Generate config files and individual command files

Service Detection

Type Detection Default Port
Vite vite.config.* 5173
Next.js next.config.* 3000
Nuxt nuxt.config.* 3000
CRA react-scripts in package.json 3000
Express/Node server/backend/api directory + package.json 3000
FastAPI/Flask requirements.txt / pyproject.toml 8000
Go go.mod / main.go 8080

Port Detection Priority: User specified > .env > config file > scripts args > default port


Generated Files

project/
├── ecosystem.config.cjs              # PM2 config
├── {backend}/start.cjs               # Python wrapper (if applicable)
└── .claude/
    ├── commands/
    │   ├── pm2-all.md                # Start all + monit
    │   ├── pm2-all-stop.md           # Stop all
    │   ├── pm2-all-restart.md        # Restart all
    │   ├── pm2-{port}.md             # Start single + logs
    │   ├── pm2-{port}-stop.md        # Stop single
    │   ├── pm2-{port}-restart.md     # Restart single
    │   ├── pm2-logs.md               # View all logs
    │   └── pm2-status.md             # View status
    └── scripts/
        ├── pm2-logs-{port}.ps1       # Single service logs
        └── pm2-monit.ps1             # PM2 monitor

Windows Configuration (IMPORTANT)

ecosystem.config.cjs

Must use .cjs extension

module.exports = {
  apps: [
    // Node.js (Vite/Next/Nuxt)
    {
      name: 'project-3000',
      cwd: './packages/web',
      script: 'node_modules/vite/bin/vite.js',
      args: '--port 3000',
      interpreter: 'C:/Program Files/nodejs/node.exe',
      env: { NODE_ENV: 'development' }
    },
    // Python
    {
      name: 'project-8000',
      cwd: './backend',
      script: 'start.cjs',
      interpreter: 'C:/Program Files/nodejs/node.exe',
      env: { PYTHONUNBUFFERED: '1' }
    }
  ]
}

Framework script paths:

Framework script args
Vite node_modules/vite/bin/vite.js --port {port}
Next.js node_modules/next/dist/bin/next dev -p {port}
Nuxt node_modules/nuxt/bin/nuxt.mjs dev --port {port}
Express src/index.js or server.js -

Python Wrapper Script (start.cjs)

const { spawn } = require('child_process');
const proc = spawn('python', ['-m', 'uvicorn', 'app.main:app', '--host', '0.0.0.0', '--port', '8000', '--reload'], {
  cwd: __dirname, stdio: 'inherit', windowsHide: true
});
proc.on('close', (code) => process.exit(code));

Command File Templates (Minimal Content)

pm2-all.md (Start all + monit)

Start all services and open PM2 monitor.
\`\`\`bash
cd "{PROJECT_ROOT}" && pm2 start ecosystem.config.cjs && start wt.exe -d "{PROJECT_ROOT}" pwsh -NoExit -c "pm2 monit"
\`\`\`

pm2-all-stop.md

Stop all services.
\`\`\`bash
cd "{PROJECT_ROOT}" && pm2 stop all
\`\`\`

pm2-all-restart.md

Restart all services.
\`\`\`bash
cd "{PROJECT_ROOT}" && pm2 restart all
\`\`\`

pm2-{port}.md (Start single + logs)

Start {name} ({port}) and open logs.
\`\`\`bash
cd "{PROJECT_ROOT}" && pm2 start ecosystem.config.cjs --only {name} && start wt.exe -d "{PROJECT_ROOT}" pwsh -NoExit -c "pm2 logs {name}"
\`\`\`

pm2-{port}-stop.md

Stop {name} ({port}).
\`\`\`bash
cd "{PROJECT_ROOT}" && pm2 stop {name}
\`\`\`

pm2-{port}-restart.md

Restart {name} ({port}).
\`\`\`bash
cd "{PROJECT_ROOT}" && pm2 restart {name}
\`\`\`

pm2-logs.md

View all PM2 logs.
\`\`\`bash
cd "{PROJECT_ROOT}" && pm2 logs
\`\`\`

pm2-status.md

View PM2 status.
\`\`\`bash
cd "{PROJECT_ROOT}" && pm2 status
\`\`\`

PowerShell Scripts (pm2-logs-{port}.ps1)

Set-Location "{PROJECT_ROOT}"
pm2 logs {name}

PowerShell Scripts (pm2-monit.ps1)

Set-Location "{PROJECT_ROOT}"
pm2 monit

Key Rules

  1. Config file: ecosystem.config.cjs (not .js)
  2. Node.js: Specify bin path directly + interpreter
  3. Python: Node.js wrapper script + windowsHide: true
  4. Open new window: start wt.exe -d "{path}" pwsh -NoExit -c "command"
  5. Minimal content: Each command file has only 1-2 lines description + bash block
  6. Direct execution: No AI parsing needed, just run the bash command

Execute

Based on $ARGUMENTS, execute init:

  1. Scan project for services
  2. Generate ecosystem.config.cjs
  3. Generate {backend}/start.cjs for Python services (if applicable)
  4. Generate command files in .claude/commands/
  5. Generate script files in .claude/scripts/
  6. Update project CLAUDE.md with PM2 info (see below)
  7. Display completion summary with terminal commands

Post-Init: Update CLAUDE.md

After generating files, append PM2 section to project's CLAUDE.md (create if not exists):

## PM2 Services

| Port | Name | Type |
|------|------|------|
| {port} | {name} | {type} |

**Terminal Commands:**
```bash
pm2 start ecosystem.config.cjs   # First time
pm2 start all                    # After first time
pm2 stop all / pm2 restart all
pm2 start {name} / pm2 stop {name}
pm2 logs / pm2 status / pm2 monit
pm2 save                         # Save process list
pm2 resurrect                    # Restore saved list

**Rules for CLAUDE.md update:**
- If PM2 section exists, replace it
- If not exists, append to end
- Keep content minimal and essential

---

## Post-Init: Display Summary

After all files generated, output:

PM2 Init Complete

Services:

Port Name Type
{port} {name} {type}

Claude Commands: /pm2-all, /pm2-all-stop, /pm2-{port}, /pm2-{port}-stop, /pm2-logs, /pm2-status

Terminal Commands:

First time (with config file)

pm2 start ecosystem.config.cjs && pm2 save

After first time (simplified)

pm2 start all # Start all pm2 stop all # Stop all pm2 restart all # Restart all pm2 start {name} # Start single pm2 stop {name} # Stop single pm2 logs # View logs pm2 monit # Monitor panel pm2 resurrect # Restore saved processes

Tip: Run pm2 save after first start to enable simplified commands.