验证编辑应用代码后的 Next.js 运行时行为。使用此技能 确认更改在实际运行的应用中有效——而不仅仅是编译或类型检查通过。 结合 /_next/mcp(Next.js 的视角)和 agent-browser(浏览器的视角)。 需要正在运行的 `next dev`。
next-dev-loop
在 next dev 期间的编辑/验证节奏——进行更改,然后确认它在运行时实际有效,而不仅仅是类型或构建通过。
你通过同一运行应用的两个视角进行验证:
/_next/mcp—— Next.js 暴露的关于自身的 HTTP 端点。了解框架特定信息:路由、片段、RSC、服务器操作、服务器日志以及 Next.js 看到的错误。调用tools/list获取当前表面。agent-browser—— 驱动真实 Chrome 的 CLI。了解框架无关的浏览器信息:DOM、控制台、网络、React fiber、性能指标。在驱动之前,运行agent-browser skills get core一次以获取版本匹配的使用指南——不要凭记忆猜测子命令。
两个视角相互交叉验证。
要求
- Next.js 16.3+ 且使用 Turbopack ——
/_next/mcp加上通过get_compilation_issues的主动编译检查。 agent-browser>= 0.31.1 —— React 内省、工作树作用域的session id、幂等的--restore以及启动标志协调。
这些是硬性下限,而非软性偏好。如果缺少任何一项,请告知用户如何升级并停止。不要回退到 grep 源代码或使用较弱的探测——此技能假定两个视角都以以上版本运行。
- 升级 Next.js:
pnpm next upgrade(或npx next upgrade)。
文档:https://nextjs.org/docs/app/getting-started/upgrading
(版本 16 指南:
https://nextjs.org/docs/app/guides/upgrading/version-16) - 安装或升级
agent-browser:npm i -g agent-browser@latest。
如果 CLI 不在PATH中,请先安装再继续——预检期望直接调用它。
预检
每个会话一次,确认两个视角都处于活动状态。
-
在目标 URL 打开
agent-browser,并在存在时恢复已保存的登录状态。 首先为此检出派生一个稳定的会话 ID,并将其用于每个agent-browser命令:SESSION="$(agent-browser session id --scope worktree --prefix next-dev-loop)" export AGENT_BROWSER_SESSION="$SESSION" export AGENT_BROWSER_RESTORE="$SESSION"然后打开目标 URL:
agent-browser --session "$SESSION" --restore --headed --enable react-devtools open <url>--scope worktree防止并行工作树和复制的检出冲突。裸--restore将会话 ID 作为持久化键,在导航前加载已保存的 cookie/localStorage(如果存在),并在关闭时自动保存状态。始终在open上传递所需的启动标志;agent-browser 将根据需要重用、重新启动或重新启动其作用域后台状态。浏览器是用户的。如果状态未恢复(首次运行、会话过期)且页面有访问限制,用户自行登录——暂停直到用户确认。登录后,继续使用相同的会话和恢复上下文;
agent-browser close保存 cookie 状态,以便下次open恢复。 -
探测
/_next/mcp(tools/list)——确认它可访问并列出get_compilation_issues:- 不可访问 → 要么
next dev未运行,要么 Next.js 低于 16.3。检查package.json以区分,然后拒绝。 get_compilation_issues不在列表中 → Next.js 低于 16.3。拒绝并告知用户升级。
- 不可访问 → 要么
-
get_compilation_issues同时作为 Turbopack 探测。错误响应"Turbopack project is not available..."表示用户在使用 webpack。拒绝——需要 Turbopack。 -
get_routes→ 会话剩余部分的路由映射。
循环
编辑前——缩小范围
询问运行中的应用,而非代码库。/_next/mcp 知道哪些文件渲染了当前路由;将这些作为搜索范围。运行时内省在代码库增长时保持低成本;代理搜索则不然。
编辑后——验证
四种失败模式。检查每一种:
- 编译通过 ——
get_compilation_issues。 - 无错误运行 ——
/_next/mcp(服务器错误和冒泡的浏览器错误都会在此显示)。 - 行为符合预期 ——
agent-browser驱动页面;断言用户实际看到的内容。 - React 级别行为 —— 启用 react-devtools 的
agent-browser暴露组件树、props、state 和渲染次数。在此锚定框架级别检查(额外渲染、服务器/客户端边界变化、Suspense 回退)——仅 DOM 断言会遗漏它们。
从 tools/list 或 agent-browser 手册中选择具体工具,而非凭记忆。
注意事项
- 每个
agent-browser命令必须知道你的会话和恢复键,否则可能使用空的默认浏览器或无法保存登录状态。 最简单的方法:在每个运行 agent-browser 的 shell 顶部导出AGENT_BROWSER_SESSION="$SESSION"和AGENT_BROWSER_RESTORE="$SESSION"。如果不导出,请在每个命令上传递--session "$SESSION" --restore。 - 当两个视角不一致时,首先怀疑工具问题。 如果
agent-browser说路由损坏,但/_next/mcp和服务器说它渲染正常,则过时或错误定向的浏览器会话更可能是原因,而非真正的错误——在调试应用前先协调视角。 - 确认点击或导航:页面稍后才会稳定,因此使用
wait --load networkidle(没有路径会出错)等待,然后截图/读取以确认页面。避免使用wait --url,除非你传递链接的确切 href——猜测或占位符路径不会匹配真实 URL,并在 25 秒后超时。 - 空白读取、空截图、
about:blank或“无浏览器会话”错误——在open之后或点击之后(即使open报告了页面)——是浏览器丢弃了页面(过时会话),而非路由损坏。使用--session "$SESSION" --restore在 URL 处重新打开会话并重新截图;如果仍然空白,运行agent-browser --session "$SESSION" --restore close,然后再次打开。不要回退到curl;它会绕过你正在测试的浏览器。 - React 内省输出在导航后过时。重新运行。
/_next/mcp回复是 SSE——使用sed -n 's/^data: //p'从data:行读取 JSON(普通的sed 's/^data: //'会保留event:行,导致解析失败)。- 非 3000 端口的开发服务器:读取
next dev横幅;设置NEXT_MCP_URL=http://localhost:<port>/_next/mcp。 get_errors和get_page_metadata需要至少一次导航才能填充。
参考
一旦预检通过,以下所有工具都存在。如果 tools/list 缺少其中任何一个,预检本应拒绝——重新检查。
# /_next/mcp 备注
get_project_metadata projectPath, devServerUrl, bundler
get_routes 文件系统扫描;无需浏览器会话
get_errors 运行时 + 构建;需要浏览器会话;
包括开发服务器捕获的浏览器端错误
get_page_metadata 片段树 + routerType;需要浏览器
会话;用作发现哪些文件驱动路由的快捷方式
get_logs 返回 logFilePath
get_server_action_by_id 哈希 ID → 文件 + 函数名
get_compilation_issues 仅 Turbopack;webpack 上报错
("Turbopack project is not available")
清理
使用相同的会话和恢复上下文关闭会话:agent-browser --session "$SESSION" --restore close。close 保存该会话的 cookie 和存储,以便下一个循环的 --restore 打开保持用户登录状态。保持 next dev 运行以供下一个循环使用。
next-dev-loop-<topic> 兄弟技能(例如 next-dev-loop-rsc、next-dev-loop-debug)假定此预检已运行;它们从循环开始。






