Provides updates for Auth.js v5 changes post-training: Next.js 16 proxy.ts migration, idToken behavioral shift, WebAuthn/Passkeys provider setup. Use before Auth.js v5 work.
npx claudepluginhub nevaberry/nevaberry-plugins --plugin authjs-knowledge-patchThis skill uses the workspace's default tool permissions.
Implements structured self-debugging workflow for AI agent failures: capture errors, diagnose patterns like loops or context overflow, apply contained recoveries, and generate introspection reports.
Designs and optimizes AI agent action spaces, tool definitions, observation formats, error recovery, and context for higher task completion rates.
Compares coding agents like Claude Code and Aider on custom YAML-defined codebase tasks using git worktrees, measuring pass rate, cost, time, and consistency.
Claude Opus 4.6 knows Auth.js (NextAuth.js) through v4 and early v5 betas. This skill covers v5 changes that postdate training.
| Topic | Reference | Key features |
|---|---|---|
| v5 migration | references/v5-migration.md | Next.js 16 proxy.ts, idToken: false behavioral change |
| WebAuthn / Passkeys | references/webauthn-passkeys.md | Passkey provider, SimpleWebAuthn setup, Authenticator table, custom signin |
Next.js 16 renames middleware.ts to proxy.ts. Auth.js setup changes accordingly:
// Simple
export { auth as proxy } from "@/auth"
// Advanced: wrap with custom logic
import { auth } from "@/auth"
export const proxy = auth((req) => {
// req.auth contains the session
})
export const config = {
matcher: ["/((?!api|_next/static|_next/image|favicon.ico).*)"],
}
For Next.js < 16, keep using middleware.ts with export { auth as middleware }.
In v5, idToken: false on a provider no longer disables ID token processing entirely. It now signals Auth.js to also visit the userinfo_endpoint for final user data. Previously it opted out of id_token validity checking altogether.
Requires next-auth@5.0.0-beta.8+, @auth/prisma-adapter@1.3.0+, Node 20+.
Peer dependencies:
npm install @simplewebauthn/server@9.0.3 @simplewebauthn/browser@9.0.1
@simplewebauthn/browser is only needed for custom signin pages.
Auth config:
import Passkey from "next-auth/providers/passkey"
import { PrismaAdapter } from "@auth/prisma-adapter"
export default {
adapter: PrismaAdapter(prisma),
providers: [Passkey],
experimental: { enableWebAuthn: true },
}
Custom signin page — signIn("passkey") to login, signIn("passkey", { action: "register" }) to register:
"use client"
import { signIn } from "next-auth/webauthn"
import { useSession } from "next-auth/react"
export default function Login() {
const { status } = useSession()
return (
<div>
{status === "authenticated" ? (
<button onClick={() => signIn("passkey", { action: "register" })}>
Register new Passkey
</button>
) : status === "unauthenticated" ? (
<button onClick={() => signIn("passkey")}>Sign in with Passkey</button>
) : null}
</div>
)
}
See references/webauthn-passkeys.md for the required Authenticator table schema.
| File | Contents |
|---|---|
| v5-migration.md | Next.js 16 proxy.ts setup, idToken: false behavioral change |
| webauthn-passkeys.md | Passkey provider setup, SimpleWebAuthn deps, Authenticator table DDL, custom signin page |