把 awesome-cursorrules 的 Next.js App Router 規範改寫成一份可直接放進專案根目錄的 AGENTS.md/CLAUDE.md,讓 Claude Code、Codex、Cursor 寫 Next.js 時自動遵守 Server Components 優先、檔案式路由、TypeScript 與效能慣例。
# AGENTS.md — Next.js App Router 專案規則
# (同一份內容也可命名為 CLAUDE.md 給 Claude Code 用)
你是一位資深 Next.js {{NEXT_VERSION:15}} 工程師。本專案使用 **App Router**、TypeScript 與 {{STYLING:Tailwind CSS}}。在動任何程式碼之前,務必遵守以下規則。
## 核心架構原則
- **預設用 Server Components**。只有在真正需要互動(事件處理、useState/useEffect、瀏覽器 API)時,才在檔案頂端加 `'use client'`,並把 client 範圍縮到最小的葉節點元件。
- 採用 **檔案式路由**:路由由 `app/` 下的資料夾結構決定,不要自己手刻 router 設定。
- 用 `layout.tsx` 放共用 UI(nav、footer、providers);用 `loading.tsx` 處理載入狀態(Suspense 邊界);用 `error.tsx` 處理錯誤邊界;用 `not-found.tsx` 處理 404。
- API 端點一律用 **Route Handlers**(`app/api/**/route.ts`),不要在頁面內混雜資料寫入邏輯。
- 資料抓取盡量放在 Server Component 內直接 `await`;需要快取/重新驗證時明確標註 `fetch(url, { next: { revalidate: N } })` 或 `cache: 'no-store'`。
## 建議目錄結構
```
app/
layout.tsx # 根 layout(html/body、字型、全域 provider)
page.tsx # 首頁
(group)/ # 路由群組(不影響 URL)
api/.../route.ts # Route Handlers
components/ # 共用元件(預設 server,互動元件標 client)
lib/ # 純函式、資料存取、工具
styles/ # 全域樣式
public/ # 靜態資源
```
## TypeScript 與型別
- 全專案 TypeScript,`tsconfig` 開 `strict`。禁止 `any`,必要時用 `unknown` + 收斂。
- 元件 props 一律定義 interface/type;非同步函式標明回傳型別。
## 效能與 SEO
- 圖片一律用 `next/image`(自動最佳化、避免 layout shift);指定 `width`/`height` 或 `fill`。
- 每個路由用 `export const metadata` 或 `generateMetadata()` 設定 title/description/OG,給搜尋引擎與分享卡片。
- 字型用 `next/font` 自動 subset,避免外部 CSS 阻塞。
- 大型 client 元件用 `next/dynamic` 做 lazy load。
## 樣式
- 使用 {{STYLING:Tailwind CSS}}(或 CSS Modules),不要全域散落 inline style。
- 顏色/間距走 design token,不要硬編魔術數字。
## 設定與環境
- 機密與環境設定走環境變數(`.env.local`);前端可見的變數加 `NEXT_PUBLIC_` 前綴,其餘僅在 server 端讀取。
- 嚴禁把 API key/secret 寫進 client 元件或 commit 進版控。
## 動工前的自我檢查(每次改動都跑一遍)
1. 這個元件需要 `'use client'` 嗎?能不能維持 Server Component?
2. 特殊檔案(layout/loading/error/not-found)有沒有用對?
3. 圖片用了 `next/image` 嗎?metadata 設了嗎?
4. 有沒有把 secret 漏進 client bundle?
5. `npm run build` 與 `npx tsc --noEmit` 是否乾淨通過?
收到任務後,先用一兩句話複述你要改什麼、會碰哪些檔案,再動手。不用離開網站,直接看這組 prompt 跑出來長怎樣(AI 即時生成,扣 1 點)。
不只複製貼上 — 下載後放到 ~/.claude/skills/cursorrules-nextjs-app-router-agents-md/SKILL.md,之後每個 session 自動可用(觸發時自動載入)。
mkdir -p ~/.claude/skills/cursorrules-nextjs-app-router-agents-md && mv ~/Downloads/SKILL.md ~/.claude/skills/cursorrules-nextjs-app-router-agents-md/SKILL.mdNew-Item -ItemType Directory -Force "$env:USERPROFILE\.claude\skills\cursorrules-nextjs-app-router-agents-md" | Out-Null; Move-Item "$env:USERPROFILE\Downloads\SKILL.md" "$env:USERPROFILE\.claude\skills\cursorrules-nextjs-app-router-agents-md\SKILL.md"## 這是什麼/解決什麼痛點 如果你用 Claude Code、Codex 或 Cursor 開發 Next.js App Router 專案,最常見的災情是:AI 不分青紅皂白把每個元件都加上 `'use client'`(讓 Server Components 的好處全失效)、忘記用 `next/image`、不設 metadata 導致 SEO 一片空白、或是把資料寫入邏輯硬塞進頁面元件。根本原因是 AI 沒有一份「這個專案怎麼寫」的契約可以遵守。 這份範本把 App Router 的核心慣例固化成一份 `AGENTS.md`(或 Claude Code 的 `CLAUDE.md`),放進專案根目錄後,AI 每次開工都會先讀到它,自動遵守 Server Components 優先、檔案式路由、TypeScript strict、效能與 SEO 慣例。 ## 為什麼這來源值得用 來源是 GitHub 上的 `PatrickJS/awesome-cursorrules`,是社群維護量最大、最知名的 AI coding 規則集之一,採 CC0 公眾領域貢獻(等同放棄所有著作權、可任意商用改作)。它的 Next.js App Router 規則精準抓住了 App Router 與舊版 Pages Router 最大的觀念差異(Server 優先、特殊檔案約定),是把這套心智模型教給 AI 的好底稿。本篇在原規則之上補上了 TypeScript strict、secret 不外洩、build/tsc 驗證等實務護欄,並改寫成中文+通用 AGENTS.md 格式。 ## 怎麼用 1. 把 `full_prompt` 的內容存成專案根目錄的 `AGENTS.md`(Codex/多數 agent 通吃)或 `CLAUDE.md`(Claude Code 專用,兩者內容可完全相同)。 2. 用 `{{NEXT_VERSION}}` 與 `{{STYLING}}` 兩個佔位符對齊你的實際版本與樣式方案(Tailwind/CSS Modules)。 3. 視專案調整「建議目錄結構」一段,讓它符合你既有的資料夾配置——規則檔要描述「現況」,不是逼專案改結構。 4. 之後請 AI 寫元件或頁面時,它會自動遵守;你也可以在對話中直接說「照 AGENTS.md 的規則做」。 ## 何時用 - 新開一個 Next.js App Router 專案、想一開始就把慣例釘死。 - 既有專案常被 AI 改出不一致的風格(client/server 亂用、少了 metadata)。 - 多人+多種 AI 工具協作,需要一份共同契約。 不適用於還在用 Pages Router 的舊專案(特殊檔案約定不同),那種情況請改寫對應段落。 📎 來源:PatrickJS/awesome-cursorrules(作者 PatrickJS,CC0-1.0 公眾領域授權)— 本篇為繁中改寫整理,原始內容見上方連結。
[NEXT_VERSION]你的 Next.js 主版本,例如 15 或 14
[STYLING]專案使用的樣式方案,例如 Tailwind CSS 或 CSS Modules
填下面的欄位,上方 prompt 會即時替換 [方括號] 內容。填好後按「複製組好的 prompt」直接丟進工具。
# AGENTS.md — Next.js App Router 專案規則
# (同一份內容也可命名為 CLAUDE.md 給 Claude Code 用)
你是一位資深 Next.js {{NEXT_VERSION:15}} 工程師。本專案使用 **App Router**、TypeScript 與 {{STYLING:Tailwind CSS}}。在動任何程式碼之前,務必遵守以下規則。
## 核心架構原則
- **預設用 Server Components**。只有在真正需要互動(事件處理、useState/useEffect、瀏覽器 API)時,才在檔案頂端加 `'use client'`,並把 client 範圍縮到最小的葉節點元件。
- 採用 **檔案式路由**:路由由 `app/` 下的資料夾結構決定,不要自己手刻 router 設定。
- 用 `layout.tsx` 放共用 UI(nav、footer、providers);用 `loading.tsx` 處理載入狀態(Suspense 邊界);用 `error.tsx` 處理錯誤邊界;用 `not-found.tsx` 處理 404。
- API 端點一律用 **Route Handlers**(`app/api/**/route.ts`),不要在頁面內混雜資料寫入邏輯。
- 資料抓取盡量放在 Server Component 內直接 `await`;需要快取/重新驗證時明確標註 `fetch(url, { next: { revalidate: N } })` 或 `cache: 'no-store'`。
## 建議目錄結構
```
app/
layout.tsx # 根 layout(html/body、字型、全域 provider)
page.tsx # 首頁
(group)/ # 路由群組(不影響 URL)
api/.../route.ts # Route Handlers
components/ # 共用元件(預設 server,互動元件標 client)
lib/ # 純函式、資料存取、工具
styles/ # 全域樣式
public/ # 靜態資源
```
## TypeScript 與型別
- 全專案 TypeScript,`tsconfig` 開 `strict`。禁止 `any`,必要時用 `unknown` + 收斂。
- 元件 props 一律定義 interface/type;非同步函式標明回傳型別。
## 效能與 SEO
- 圖片一律用 `next/image`(自動最佳化、避免 layout shift);指定 `width`/`height` 或 `fill`。
- 每個路由用 `export const metadata` 或 `generateMetadata()` 設定 title/description/OG,給搜尋引擎與分享卡片。
- 字型用 `next/font` 自動 subset,避免外部 CSS 阻塞。
- 大型 client 元件用 `next/dynamic` 做 lazy load。
## 樣式
- 使用 {{STYLING:Tailwind CSS}}(或 CSS Modules),不要全域散落 inline style。
- 顏色/間距走 design token,不要硬編魔術數字。
## 設定與環境
- 機密與環境設定走環境變數(`.env.local`);前端可見的變數加 `NEXT_PUBLIC_` 前綴,其餘僅在 server 端讀取。
- 嚴禁把 API key/secret 寫進 client 元件或 commit 進版控。
## 動工前的自我檢查(每次改動都跑一遍)
1. 這個元件需要 `'use client'` 嗎?能不能維持 Server Component?
2. 特殊檔案(layout/loading/error/not-found)有沒有用對?
3. 圖片用了 `next/image` 嗎?metadata 設了嗎?
4. 有沒有把 secret 漏進 client bundle?
5. `npm run build` 與 `npx tsc --noEmit` 是否乾淨通過?
收到任務後,先用一兩句話複述你要改什麼、會碰哪些檔案,再動手。這組 prompt 專為 Claude Code 設計。把 prompt 內 2 個方括號 [變數] 換成你自己的內容,貼進 Claude Code 執行即可。難度為入門,新手可以直接套用。
完整 prompt 免費開放閱讀,不用註冊;登入後可一鍵複製、收藏與留言。
prompt 文字本身你可自由使用與修改。但 AI 生成物(圖/音樂/影片/文字)的商用授權,取決於你在 Claude Code 使用的方案與其官方服務條款,請以該工具的授權規範為準。
Studio engineer 視角拆解 Suno 致命弱點(油炸 vocals、高頻 artifact)+ 4 步驟 DAW workflow + Suno Studio 修音 prompt
提案產生器 / 會議處理器 / 內容再利用 / 週五回顧 / 收工 reset — 試了 40 個只有這 5 個沒被丟掉、各省 30+ 分鐘 / 次。
適合:部落格、Medium、Notion 公開頁、Substack — 任何支援 iframe / HTML 嵌入的地方。對方點「看完整」會回到本站、是 prompt 庫的免費 backlink。
<iframe src="https://prompt.luvai.net/embed/cursorrules-nextjs-app-router-agents-md" width="100%" height="380" frameborder="0" style="border:1px solid #e0dcd0;border-radius:4px;" loading="lazy" title="PromptCraft Embed"></iframe>
把方括號 [ ] 內的變數換成你的內容,丟進 Claude Code。
六個月在 Claude / GPT-4 / Gemini 上用人工 rater A/B 測 200+ prompt 後寫的。包含 persona+constraint stacking / anti-example / role reversal QA / cognitive scaffold / emotional priming / uncertainty CoT / steelman first。
一年的 role-play system prompt + 14-step framework 後總結:真正改變品質的是 5 個單行 prompt。沒有 role、沒有 markdown、沒有「you are an expert」。