jeremylongshore/claude-code-plugins-plus-skills
clerk-pack
plugins/saas-packs/clerk-pack/skills/clerk-incident-runbook/SKILL.md
January 22, 2026
Select agents to install to:
npx add-skill https://github.com/jeremylongshore/claude-code-plugins-plus-skills/blob/main/plugins/saas-packs/clerk-pack/skills/clerk-incident-runbook/SKILL.md -a claude-code --skill clerk-incident-runbookInstallation paths:
.claude/skills/clerk-incident-runbook/# Clerk Incident Runbook
## Overview
Procedures for responding to Clerk-related incidents in production.
## Prerequisites
- Access to Clerk dashboard
- Access to application logs
- Emergency contact list
- Rollback procedures documented
## Incident Categories
### Category 1: Complete Auth Outage
**Symptoms:** All users unable to sign in, middleware returning errors
**Immediate Actions:**
```bash
# 1. Check Clerk status
curl -s https://status.clerk.com/api/v1/status | jq
# 2. Check your endpoint
curl -I https://yourapp.com/api/health/clerk
# 3. Check environment variables
vercel env ls | grep CLERK
```
**Mitigation Steps:**
```typescript
// Emergency bypass mode (use with caution)
// middleware.ts
import { clerkMiddleware } from '@clerk/nextjs/server'
import { NextResponse } from 'next/server'
const EMERGENCY_BYPASS = process.env.CLERK_EMERGENCY_BYPASS === 'true'
export default clerkMiddleware(async (auth, request) => {
if (EMERGENCY_BYPASS) {
// Log for audit
console.warn('[EMERGENCY] Auth bypass active', {
path: request.nextUrl.pathname,
timestamp: new Date().toISOString()
})
return NextResponse.next()
}
// Normal auth flow
await auth.protect()
})
```
### Category 2: Webhook Processing Failure
**Symptoms:** User data out of sync, missing user records
**Diagnosis:**
```bash
# Check webhook endpoint
curl -X POST https://yourapp.com/api/webhooks/clerk \
-H "Content-Type: application/json" \
-d '{"type":"ping"}' \
-w "\n%{http_code}"
# Check Clerk dashboard for failed webhooks
# Dashboard > Webhooks > Failed Deliveries
```
**Recovery:**
```typescript
// scripts/resync-users.ts
import { clerkClient } from '@clerk/nextjs/server'
import { db } from '../lib/db'
async function resyncAllUsers() {
const client = await clerkClient()
let offset = 0
const limit = 100
while (true) {
const { data: users, totalCount } = await client.users.getUserList({
limit,
offset
})
for (const user of use