nextjs-debug
Next.js Debug
Language: Respond in the same language as the user (中文提问则中文回答).
Execution Flow
Run all steps in order. Steps marked [if project detected] are skipped when no Next.js project is found.
Step 0 · Receive Input
Accept one of:
- Log: raw terminal output pasted by user
- Description: natural-language problem description
- Both: prioritize log for classification; use description to disambiguate
Output one line before starting:
Diagnosing Next.js issue — analyzing [log / description / both]...
Step 1 · Gather Context (run in parallel)
1A · Version Stack [if project detected]
Read package.json and extract:
VersionStack = { next, react, reactDom, typescript, nodeEngine }
Also run node -v or read .nvmrc / .node-version for the active Node.js version.
Compatibility checks (flag as VERSION_COMPAT warning if triggered):
| Condition | Warning |
|---|---|
next ≥ 15 and Node.js < 18.18 |
Node.js too old |
next ≥ 14 and Node.js < 18.17 |
Node.js too old |
next ≥ 15 and react < 19 |
React/Next.js version mismatch |
next ≤ 14 and react ≥ 19 |
React/Next.js version mismatch |
Deprecated API scan (run with rg, conditional on Next.js version):
next≥ 13: grepapp/forgetServerSideProps|getStaticProps→ flag as Pages Router API in App Routernext≥ 13: grep source for<Image layout=|<Image objectFit=→ flag as removednext/imagepropsnext≥ 15: checknext.config.*forwebpack:callback → note Turbopack doesn't run it
1B · Dependency Audit [if project detected]
- Package manager: check for
pnpm-lock.yaml→ pnpm;yarn.lock→ yarn;package-lock.json→ npm - node_modules check: if
node_modules/is absent → output install command and stop (no further diagnosis needed) - Duplicate React: scan lockfile for multiple resolved
reactversions → list them and noteoverrides/resolutionsfix - .next cache: if user description contains "worked yesterday" / "no code changes" → prepend
rm -rf .next && <pm> run devas first fix step
1C · Git Context [if .git directory exists]
git log --oneline -10→ record asRecentCommitsgit status --porcelain→ if any modified/untracked file overlaps with affected files → flag as top suspect, rungit diff -- <file>git log --oneline -3 -- package.json→ if commits found → rungit diff HEAD~N HEAD -- package.jsonand correlate with error class
Step 2 · Project Detection
Check for next.config.js, next.config.ts, next.config.mjs at workspace root, or "next" in package.json dependencies.
- Monorepo: if not found at root, search one level deeper (
apps/*/,packages/*/) - Detected → set
PROJECT_ROOT, activate code-location steps - Not detected → note "No Next.js project detected — code-level location unavailable", proceed with log-only diagnosis
Step 3 · Classify Error
Parse log / description and assign each error to one class:
| Class | Recognition Keywords |
|---|---|
COMPILE_ERROR |
SyntaxError, Type error, Failed to compile, TS\d+: |
MODULE_ERROR |
Module not found, Cannot find module, Cannot resolve |
BOUNDARY_ERROR |
You're importing a component that needs, Event handlers cannot be passed to Client Component, Hooks can only be called inside of the body, async/await is not yet supported in Client Components |
ENV_ERROR |
Missing required environment variable, process.env.* is undefined, NEXT_PUBLIC_ in error |
CONFIG_ERROR |
Invalid next.config, Unrecognized key(s) in object, webpack/turbopack plugin error from config file |
RUNTIME_ERROR |
Hydration failed, Text content did not match, EADDRINUSE, uncaught exception in stack trace |
If multiple classes detected → list all, order by severity (blocking first).
Step 4 · Extract Identifiers & Search Code [if project detected]
Extract from log before searching:
| Type | Pattern Example | Search Action |
|---|---|---|
FileRef |
./src/app/page.tsx:34:12 or app/layout.tsx(18,5) |
Read file at line, extract [line-5, line+5] snippet |
SymbolName |
'UserCard', Cannot find name 'fetchData' |
rg -n "export.*(function|const|class|default) SymbolName" app/ src/ lib/ components/ |
ModulePath |
@/utils/api, ./hooks/useAuth |
Glob **/useAuth.{tsx,ts,jsx,js} + rg "from.*useAuth" for all import sites |
StackFrame |
at fn (filepath:line:col) |
Filter out node_modules frames, Read each project-owned file at indicated line |
Code snippet format (use ▶ for error line):
`src/app/dashboard/page.tsx` line 34
33 | export default function Dashboard() {
▶ 34 | const data = await fetchUserData()
35 | return <div>{data.name}</div>
File too large (>500 lines): read only [line-10, line+20], note range in header.
BOUNDARY_ERROR without file path: glob app/**/*.{tsx,jsx}, check each file for client-only APIs (useState, useEffect, onClick, window., document.) without "use client" on line 1.
Step 5 · Deep Trace [if project detected]
MODULE_ERROR — Import Chain Tracing
- Run
rg -n "from.*<missingPath>"across project source to find all importers - For each importer, check if it is itself imported:
rg -n "from.*<importerFile>"(max 2 levels up) - tsconfig alias resolution: read
tsconfig.json→compilerOptions.paths, resolve@/xxxto real path, re-run search
RUNTIME_ERROR — Stack Trace Mapping
- Parse each non-
node_modulesstack frame →{file, line} - If frame path is
.next/server/...→ map to source file by matching page segment name - Read each source file at
[line-5, line+5], include snippets innermost-first
COMPILE_ERROR — Type Error Scope
If Type error with TS2307 (cannot find module) → treat as MODULE_ERROR and also run import chain tracing.
Step 6 · Generate Diagnostic Report
Output the report using this template. Omit sections that have no findings.
## Version Stack
- Next.js: X.Y.Z | React: X.Y.Z | Node.js: X.Y.Z | TypeScript: X.Y.Z
- [VERSION_COMPAT warnings if any]
## Likely Regression
[git-context findings: uncommitted changes / recent commits / package.json diff]
---
## Error 1: <CLASS> · <severity: blocking | warning>
### Root Cause
One sentence describing the root cause.
### Affected Files
- `path/to/file.tsx` line N
N-1 | ...context...
▶ N | ...error line...
N+1 | ...context...
### Fix Steps
1. Step one (include code diff or exact command)
2. Step two
### Verify Fix
Run: `<command>`
Expected: `<expected output>`
### References
- [Title](https://nextjs.org/docs/...)
Repeat ## Error N block for each error found, ordered blocking → warning.
If no fix can be determined → replace Fix Steps with:
### Next Steps
- Additional info needed: [full log / Next.js version / Node.js version]
- Search: https://github.com/vercel/next.js/issues?q=<error-keywords>
- Community: https://github.com/vercel/next.js/discussions
Examples
Example A — Module not found (with project context)
Input log:
Module not found: Can't resolve './components/UserCard'
./src/app/dashboard/page.tsx
Actions:
- Class:
MODULE_ERROR - FileRef:
src/app/dashboard/page.tsx— read import line - Glob:
**/UserCard.{tsx,ts,jsx,js}— not found - tsconfig paths: check for alias → none
Report excerpt:
## Error 1: MODULE_ERROR · blocking
### Root Cause
`UserCard` component file does not exist at the imported path.
### Affected Files
- `src/app/dashboard/page.tsx` line 3
2 | import { useState } from 'react'
▶ 3 | import UserCard from './components/UserCard'
### Fix Steps
1. Create `src/app/dashboard/components/UserCard.tsx` or correct the import path
2. Check for casing mismatch (e.g., `userCard.tsx` vs `UserCard.tsx`)
### Verify Fix
Run: `npm run build`
Expected: `✓ Compiled successfully`
### References
- [Resolving Modules](https://nextjs.org/docs/app/api-reference/config/typescript)
Example B — Missing "use client"
Input log:
You're importing a component that needs useState. It only works in a Client Component but none of its parents are marked with "use client".
Actions:
- Class:
BOUNDARY_ERROR - No file path → glob
app/**/*.{tsx,jsx}, grep foruseStatewithout"use client"on line 1 - Find offending file
Fix step: Add "use client"; as line 1 of the offending file.
Verify: Run next dev → no You're importing a component... error in terminal.
Example C — ENV_ERROR (NEXT_PUBLIC_ prefix missing)
Input log:
process.env.API_URL is undefined
Actions:
- Class:
ENV_ERROR - Grep source for
process.env.API_URL→ find usage in a client component - Check
.env.local→ variable exists asAPI_URLwithoutNEXT_PUBLIC_
Fix step: Rename .env.local entry to NEXT_PUBLIC_API_URL, update all references.
Verify: Run next build → no undefined reference.
Additional Resources
- For error patterns, version matrix, and code search templates → see reference.md
More from wghust/stark-skills
google-news-seo
Google News Diagnostic Engine — audit and optimize news articles for Google News SEO. Determines Layer 1 index eligibility and Layer 2 ranking competitiveness. Includes NewsArticle Schema review, AI content compliance checks, publisher trust detection, author authority scoring, freshness analysis, topic cluster compatibility, Top Stories detection, competitor gap analysis, and Google E-E-A-T scanning with structured report generation. Use when asked about Google News SEO, why a site is not indexed in Google News, why articles don't rank, NewsArticle Schema optimization, how AI content can get into Google News, or running an EEAT scan / audit. 检查和优化新闻文章的 Google News SEO,包括双层诊断引擎(Layer 1 索引准入 / Layer 2 排名竞争)、NewsArticle Schema 审查与修复、AI 生成内容合规性检查、发布者信任度检测、作者权威性评分、新鲜度分析、话题聚类兼容性、Top Stories 检测、竞争对手差距分析,以及 Google E-E-A-T 全维度扫描。
23openspec-design
Extends OpenSpec with design asset integration. Use when the user asks to "run openspec-design", "enhance openspec design", or "apply openspec-design". When invoked, updates the project's openspec/AGENTS.md to extend the proposal flow with Figma MCP, design asset directory, and design-map.md.
16insight-pdf
Generates professional corporate/business report PDFs from text or Markdown via HTML. Uses ECharts for advanced visualizations (heatmaps, radar, gauge, sankey), rich design system (gradient covers, stat cards, callout boxes, progress bars, timelines), and professional typography. Use when the user wants enterprise-quality report PDFs with modern data storytelling.
16c4-interactive-html
|
13mac-wash
|
12git-intelligence
|
9