[{"data":1,"prerenderedAt":909},["ShallowReactive",2],{"search-dialog-posts":3,"post-\u002Fposts\u002Fclaude-codex-agents-subagents":316,"post-surround-\u002Fposts\u002Fclaude-codex-agents-subagents":902},[4,12,21,29,37,47,57,67,77,85,96,104,112,121,129,137,147,155,164,173,181,188,195,207,215,224,236,241,247,254,260,266,272,279,286,291,298,304,310],{"path":5,"title":6,"description":7,"category":8,"tags":9},"\u002Fposts\u002Fgit-commands-cheatsheet","Git 常用指令與終端機筆記","2018 年整理的 Git 學習筆記，包含基本終端機指令、Git 操作、分支、reset、SourceTree、Vim 與一些常用設定。","notes",[10,11],"Git","版本控制",{"path":13,"title":14,"description":15,"category":16,"tags":17},"\u002Fposts\u002Fjs-prototype-inheritance","JavaScript 物件導向：建構函式、prototype 與繼承三步驟","整理 ES5 時代用建構函式加 prototype 手刻物件導向的完整流程——封裝屬性與方法、共用函式為什麼要掛在 prototype 上、以及繼承的三個步驟（call 借用母類別建構子、Object.create 接上原型鏈、修正 constructor 指向），並附上物件縮寫與計算屬性這兩個順便學到的 ES6 寫法。","frontend",[18,19,20],"JavaScript","物件導向","prototype",{"path":22,"title":23,"description":24,"category":16,"tags":25},"\u002Fposts\u002Fflexbox-notes","Flexbox 對齊與彈性尺寸筆記","記錄 Flexbox 的主軸與交錯軸對齊、flex-direction、flex-wrap，以及 flex-grow、flex-shrink、flex-basis 等常用屬性。",[26,27,28],"CSS","Flexbox","版面",{"path":30,"title":31,"description":32,"category":16,"tags":33},"\u002Fposts\u002Fscreen-orientation-api","screen.orientation：現在判斷與鎖定螢幕方向的做法","整理現在 JavaScript 判斷螢幕方向的方式，包括 screen.orientation、change 事件與 lock()，並說明 RWD 使用 matchMedia 或 CSS orientation 會更適合。",[18,34,35,36],"RWD","螢幕方向","PWA",{"path":38,"title":39,"description":40,"category":16,"tags":41},"\u002Fposts\u002Fpinia-vuex-state-management","Pinia \u002F Vuex 狀態管理及差異","紀錄 Vuex、Pinia 的狀態管理概念、差異與用法。",[42,43,44,45,46],"Pinia","Vuex","Vue3","狀態管理","Nuxt",{"path":48,"title":49,"description":50,"category":8,"tags":51},"\u002Fposts\u002Fpyenv-python-version-management","Python 多版本管理 pyenv","紀錄 macOS 與 Windows 使用 pyenv 管理 Python 版本的方式。",[52,53,54,55,56],"Python","pyenv","macOS","Windows","版本管理",{"path":58,"title":59,"description":60,"category":8,"tags":61},"\u002Fposts\u002Fnpm-publish-vue2-component","npm 發布流程","紀錄 Vue 2 元件的 npm 發布、dist-tag 與打包流程。",[62,63,64,65,66],"npm","Vue2","Vue CLI","套件發布","MIT",{"path":68,"title":69,"description":70,"category":8,"tags":71},"\u002Fposts\u002Fmobile-debugging-today","現在怎麼 debug 手機網頁：從裝一堆工具到幾乎不用裝","對照 2022 年那套 scoop、iTunes、remotedebug-ios-webkit-adapter 的繁瑣設定，整理現在偵錯手機網頁的做法：Android 無線偵錯、iOS 的實際選項、on-device console、Playwright 裝置模擬，以及本機 HTTPS 的處理。",[72,73,74,75,76],"debug","iOS","Android","Chrome DevTools","Playwright",{"path":78,"title":79,"description":80,"category":16,"tags":81},"\u002Fposts\u002Fplaywright-vs-cypress","E2E 測試現在選什麼：Playwright 與 Cypress 的實際差異","對照幾年前用 Cypress 的做法，說明 Playwright 為什麼變成多數新專案的預設選擇：真正的多瀏覽器支援、免費的平行執行、trace viewer 除錯，以及兩者在架構上的根本差異與各自仍然適合的場景。",[76,82,83,84],"Cypress","E2E","測試",{"path":86,"title":87,"description":88,"category":89,"tags":90},"\u002Fposts\u002Fjs-encoding-today","現在處理編碼：TextEncoder、Uint8Array 的 Base64 方法與 URLSearchParams","整理 JavaScript 現代編碼方式，使用 TextEncoder、TextDecoder 與 Uint8Array 處理 UTF-8 與 Base64，並說明 Base64URL、URLSearchParams 與 encodeURIComponent 的差異。","research",[91,92,93,94,95,18],"編碼","TextEncoder","Base64","URLSearchParams","Uint8Array",{"path":97,"title":98,"description":99,"category":16,"tags":100},"\u002Fposts\u002Fdart-sass-migration","Dart Sass 遷移筆記：node-sass 之後怎麼裝 Sass","node-sass 與 LibSass 已停止維護，現在改用 Dart Sass。整理 webpack 與 Vite 的安裝方式，以及為什麼不再像 node-sass 一樣容易遇到 Node.js 版本與原生編譯問題。",[101,102,103],"Sass","Webpack","Vite",{"path":105,"title":106,"description":107,"category":16,"tags":108},"\u002Fposts\u002Fdayjs-vue3-computed","day.js 搭配 Vue 3 的日期格式化","整理 Vue 3 日期格式化的常見做法，使用 day.js 取代舊專案常見的 moment.js，並以 method 或 computed 取代 Vue 2 filter，也補充原生 Intl.DateTimeFormat 的使用方式。",[44,109,110,111],"day.js","日期","Intl",{"path":113,"title":114,"description":115,"category":16,"tags":116},"\u002Fposts\u002Fes-modules-today","ES Module 現在的樣子：Node ESM、exports 與 import maps","整理現代 JavaScript ES Module 的常見用法，包括 Node.js 原生 ESM、package.json exports、瀏覽器 import maps、JSON import attributes，以及 Vite 動態載入的注意事項。",[117,118,119,120,103,18],"ES Module","Node.js","import maps","exports",{"path":122,"title":123,"description":124,"category":89,"tags":125},"\u002Fposts\u002Fstructured-clone","structuredClone()：終於有內建的深層拷貝","整理 JavaScript structuredClone() 的深層拷貝用法，說明 Date、Map、Set、循環參考的處理方式，以及 Function、class 與 Vue reactive Proxy 的注意事項。",[18,126,127,128],"structuredClone","深拷貝","Vue",{"path":130,"title":131,"description":132,"category":16,"tags":133},"\u002Fposts\u002Fdynamic-import","JavaScript 動態載入：import() 與 Vue 非同步元件","整理靜態 import、動態 import() 與 Vue defineAsyncComponent 的使用方式，並簡單補充 Vite import.meta.glob 的用途。",[18,134,135,103,136],"ES Modules","Vue 3","Code Splitting",{"path":138,"title":139,"description":140,"category":16,"tags":141},"\u002Fposts\u002Fscreen-wake-lock-api","Screen Wake Lock API：不用套件也能讓頁面保持亮著","整理 Screen Wake Lock API 的基本用法，說明 HTTPS、頁面可見性、切換分頁後重新取得 wake lock，以及 Vue／Nuxt 計時器使用時的注意事項。",[142,128,143,144,145,146],"Wake Lock","Nuxt4","行動裝置","計時器","Web API",{"path":148,"title":149,"description":150,"category":16,"tags":151},"\u002Fposts\u002Fhtml-meta-boilerplate-today","現在的 HTML meta 標籤怎麼寫","整理現在一個新頁面該有的 meta 標籤骨架——viewport 補上 viewport-fit=cover 因應瀏海與圓角螢幕、color-scheme 讓表單控制項跟著深色模式換色、theme-color 決定行動瀏覽器工具列顏色，以及基本的 SEO 與 Open Graph 標籤。",[152,153,154],"HTML","meta","SEO",{"path":156,"title":157,"description":158,"category":8,"tags":159},"\u002Fposts\u002Fdocker-node-postgres","把 Node + PostgreSQL 的 backend 裝進 Docker：Dockerfile、.dockerignore 與 compose","從「本機裝了就跑」到打包成容器的通用做法——Dockerfile 每一行的理由與 layer cache 為什麼決定了指令順序、.dockerignore 漏掉 node_modules 對原生模組是災難級的問題、容器之間為什麼不能用 localhost 互相找到對方，以及怎麼驗證資料真的寫進了 volume。",[160,161,118,162,163],"Docker","Docker Compose","PostgreSQL","Express",{"path":165,"title":166,"description":167,"category":16,"tags":168},"\u002Fposts\u002Fnuxt-server-proxy","Nuxt 3 \u002F 4 用 Server API 做代理與轉發","整理 Nuxt 3 與 Nuxt 4 使用 server\u002Fapi 轉發第三方 API 的方式，可以避免瀏覽器 CORS 問題、隱藏 API Key，也能在伺服器端加入快取。",[169,143,170,171,172],"Nuxt3","CORS","Nitro","API",{"path":174,"title":175,"description":176,"category":16,"tags":177},"\u002Fposts\u002Fnuxt4-project-setup","Nuxt 4 建立專案：和 Nuxt 3 有哪些不同","整理 Nuxt 4 建立專案的基本流程與目錄結構，並對照 Nuxt 3 的差異，包括 app\u002F 目錄、路徑別名、TypeScript，以及目前常用的 ESLint 與 Tailwind CSS 4 設定。",[143,44,178,179,180],"TypeScript","ESLint","Tailwind CSS 4",{"path":182,"title":183,"description":184,"category":16,"tags":185},"\u002Fposts\u002Fnuxt3-route-middleware","Nuxt 3 \u002F 4 的 Route Middleware：進頁面前先做判斷","整理 Nuxt 3 與 Nuxt 4 的 Route Middleware，用 defineNuxtRouteMiddleware 在進入頁面前檢查登入狀態，搭配 navigateTo 重新導向，並說明一般 middleware、global middleware 與 definePageMeta 的用法。",[169,143,186,187],"Middleware","驗證",{"path":189,"title":190,"description":191,"category":16,"tags":192},"\u002Fposts\u002Fnuxt-route-rules-redirect","Nuxt 3 \u002F 4 的 routeRules：重新導向與頁面設定","整理 Nuxt 3 與 Nuxt 4 的 routeRules 用法，可以依照不同網址設定重新導向、預渲染、SSR 與快取，並簡單對照 Nuxt 2 的舊做法。",[169,143,193,194],"routeRules","重新導向",{"path":196,"title":197,"description":198,"category":16,"tags":199},"\u002Fposts\u002Fios-iframe-google-login-blank-page","iOS iframe 串接 Google 登入出現空白頁：Popup 與頁面回收問題排查紀錄","記錄 iframe 內串接 Google 第三方登入時，部分 iOS 裝置因背景頁面遭到回收並重新載入，導致 Popup 登入流程中斷，以及最後透過 Redirect 分流與登入狀態接回機制處理的過程。",[73,200,201,202,203,204,205,206],"Safari","iframe","Google Login","GIS","OAuth","Popup","Redirect",{"path":208,"title":209,"description":210,"category":16,"tags":211},"\u002Fposts\u002Fios-login-tab-return-behavior","iOS 第三方登入後回不到原頁？分頁開啟關係與回頁行為實測","記錄 iOS Safari 與 Chrome 在多分頁第三方登入流程中，登入頁關閉後不一定回到原頁的實測，以及分頁開啟關係、window.close 與 window.focus 的限制。",[73,200,212,202,204,201,213,214],"Chrome","window.close","window.focus",{"path":216,"title":217,"description":218,"category":16,"tags":219},"\u002Fposts\u002Fgoogle-app-about-blank-placeholder","Google App 內建瀏覽器：about:blank 佔位頁被關閉的排查紀錄","記錄 iOS Google App 內建瀏覽器在非同步開啟外部頁面時，about:blank 佔位分頁被自動關閉，導致第三方登入或外部導轉失敗的排查與解法。",[73,220,221,222,204,223],"Google App","window.open","about:blank","WebView",{"path":225,"title":226,"description":227,"category":228,"tags":229},"\u002Fposts\u002Fclaude-code-codex-cli-init-basics","AI 相關紀錄 v1｜Claude Code \u002F Codex CLI 初始化與基本概念","從 Claude Code 與 Codex CLI 開始，整理 CLI、Coding Agent、Context、\u002Finit 與 CLAUDE.md／AGENTS.md 這幾個一開始最容易搞混的概念，以及在既有專案中的安裝與啟動方式。","ai",[230,231,232,233,234,235],"AI","Claude Code","Codex CLI","Coding Agent","CLAUDE.md","AGENTS.md",{"path":237,"title":238,"description":239,"category":228,"tags":240},"\u002Fposts\u002Fclaude-agents-md-project-guidelines","AI 相關紀錄 v2｜CLAUDE.md \u002F AGENTS.md 怎麼寫？專案規範與實際範例","整理 CLAUDE.md 與 AGENTS.md 的用途、適合記錄的專案規範，以及可直接參考的設定範例。",[230,231,232,234,235],{"path":242,"title":243,"description":244,"category":228,"tags":245},"\u002Fposts\u002Fclaude-codex-config-locations","AI 相關紀錄 v3｜Claude Code `.claude\u002F` \u002F Codex CLI 設定位置：全域與專案設定基本概要介紹","整理 Claude Code 與 Codex CLI 的使用者層級、專案層級設定位置，以及 rules、skills、agents 等目錄的用途。",[230,231,232,246],"設定檔",{"path":248,"title":249,"description":250,"category":228,"tags":251},"\u002Fposts\u002Fclaude-settings-codex-config","AI 相關紀錄 v4｜Claude Code settings \u002F Codex config 基本設定","整理 Claude Code settings.json 與 Codex config.toml 的設定層級、權限控制和常見基本設定。",[230,231,232,252,253],"settings.json","config.toml",{"path":255,"title":256,"description":257,"category":228,"tags":258},"\u002Fposts\u002Fclaude-codex-rules-structure","AI 相關紀錄 v5｜Rules：專案規則多了之後怎麼拆？","整理 Claude Code Rules 與 Codex AGENTS.md 的拆分方式，說明何時該拆、怎麼依目錄管理專案規則。",[230,231,232,259,235],"Rules",{"path":261,"title":262,"description":263,"category":228,"tags":264},"\u002Fposts\u002Fclaude-codex-slash-commands","AI 相關紀錄 v6｜Commands \u002F Slash Commands：CLI 裡的 `\u002F` 指令是什麼？","介紹 Claude Code 與 Codex CLI 的 Slash Commands，整理常用內建指令、自訂指令與 Skills 的差異。",[230,231,232,265],"Slash Commands",{"path":267,"title":268,"description":269,"category":228,"tags":270},"\u002Fposts\u002Fclaude-codex-skills","AI 相關紀錄 v7｜Skills：把重複工作流程整理起來","介紹 Claude Code 與 Codex Skills，整理適合保存成 Skill 的重複流程、基本結構與使用方式。",[230,231,232,271],"Skills",{"path":273,"title":274,"description":275,"category":228,"tags":276},"\u002Fposts\u002Fclaude-codex-agents-subagents","AI 相關紀錄 v8｜Agent \u002F Subagent：什麼時候真的需要分工？","整理 Agent、Subagent 與 Custom Agent 的用途，說明何時適合分工，以及它們和 Rules、Skills 的差異。",[230,231,232,277,278],"Agent","Subagent",{"path":280,"title":281,"description":282,"category":228,"tags":283},"\u002Fposts\u002Fmcp-basics","AI 相關紀錄 v9｜MCP：讓 AI 使用其他工具與資料","介紹 MCP 如何讓 AI 使用外部工具與資料，並以 Pencil MCP 說明實際用途、權限風險及與 Skill 的差異。",[230,284,231,232,285],"MCP","Pencil",{"path":287,"title":288,"description":289,"category":228,"tags":290},"\u002Fposts\u002Fai-coding-agent-concepts-summary","AI 相關紀錄 v10｜基本概念小結論","用一篇快速整理 CLAUDE.md、AGENTS.md、設定檔、Rules、Commands、Skills、Agent 與 MCP 的角色和差異。",[230,231,232,284,271,277],{"path":292,"title":293,"description":294,"category":228,"tags":295},"\u002Fposts\u002Fclaude-code-codex-model-selection","Claude Code 與 Codex：不同模型怎麼選？","比較 Claude Code 與 Codex 不同模型的速度、能力與成本取捨，依工作難度整理實用的選擇方向。",[230,231,296,297],"Codex","模型選擇",{"path":299,"title":300,"description":301,"category":228,"tags":302},"\u002Fposts\u002Fclaude-model-selection","Claude 模型簡單怎麼選？","整理 Claude 各模型在速度、能力與使用情境上的差異，提供從輕量工作到複雜任務的選擇方向。",[230,231,303,297],"Claude",{"path":305,"title":306,"description":307,"category":228,"tags":308},"\u002Fposts\u002Fcodex-model-selection","Codex 模型簡單怎麼選？","整理 Codex 各模型在速度、能力與使用情境上的差異，提供從簡單修改到大型端到端任務的選擇方向。",[230,296,309,297],"OpenAI",{"path":311,"title":312,"description":313,"category":228,"tags":314},"\u002Fposts\u002Fclaude-code-codex-cli-command-cheatsheet","Claude Code \u002F Codex CLI 常用指令速查表","整理 Claude Code 與 Codex CLI 的常用斜線指令、快捷操作與進階功能，方便需要時快速查找。",[230,231,232,265,315],"速查表",{"id":317,"title":274,"body":318,"category":228,"description":275,"draft":891,"extension":892,"image":893,"meta":894,"navigation":895,"path":273,"publishedAt":896,"relatedExperiments":897,"seo":898,"stem":899,"tags":900,"updatedAt":893,"__hash__":901},"posts\u002Fposts\u002F20260908.claude-codex-agents-subagents.md",{"type":319,"value":320,"toc":875},"minimark",[321,325,328,339,342,348,351,357,360,363,366,371,374,377,383,386,389,392,398,401,404,413,415,419,422,425,431,434,440,443,445,449,452,459,462,468,471,477,480,486,489,492,498,501,507,510,512,516,519,525,528,534,537,543,546,552,555,557,561,564,570,573,580,583,589,592,595,597,600,603,609,612,617,620,625,627,631,634,637,643,645,651,654,660,663,665,671,674,677,683,686,688,692,695,701,703,709,712,714,718,721,724,727,733,736,739,745,748,751,753,757,760,762,768,771,777,780,783,789,792,795,801,803,807,810,813,819,822,828,831,833,836,839,845,848,854,857,863,866,873],[322,323,324],"p",{},"前面整理過 Skill。",[322,326,327],{},"可以先簡單理解：",[329,330,336],"pre",{"className":331,"code":333,"language":334,"meta":335},[332],"language-text","Skill\n↓\n告訴 AI「這件事情怎麼做」\n","text","",[337,338,333],"code",{"__ignoreMap":335},[322,340,341],{},"而 Agent \u002F Subagent 比較像：",[329,343,346],{"className":344,"code":345,"language":334,"meta":335},[332],"Agent \u002F Subagent\n↓\n把某一部分工作交給另一個 AI 處理\n",[337,347,345],{"__ignoreMap":335},[322,349,350],{},"例如主 Agent 正在處理一個功能，但中途需要：",[329,352,355],{"className":353,"code":354,"language":334,"meta":335},[332],"搜尋大量程式碼\n分析測試失敗\n檢查某一塊問題\n",[337,356,354],{"__ignoreMap":335},[322,358,359],{},"這些工作可以交給 Subagent 處理。",[322,361,362],{},"完成後，再把結果交回主 Agent。",[364,365],"hr",{},[367,368,370],"h2",{"id":369},"不一定要自己建立-agent","不一定要自己建立 Agent",[322,372,373],{},"這點我一開始也很容易誤會。",[322,375,376],{},"看到 Agent \u002F Subagent 之後，很容易想成：",[329,378,381],{"className":379,"code":380,"language":334,"meta":335},[332],"Code Review\n→ 建立 Reviewer Agent\n\nDebug\n→ 建立 Debugger Agent\n\nTest\n→ 建立 Tester Agent\n\nDocumentation\n→ 建立 Documentation Agent\n",[337,382,380],{"__ignoreMap":335},[322,384,385],{},"但其實不用。",[322,387,388],{},"一般開發時，主 Agent 本身就可以處理很多工作。",[322,390,391],{},"Claude Code 也已經內建一些 Subagent，例如：",[329,393,396],{"className":394,"code":395,"language":334,"meta":335},[332],"Explore\nPlan\nGeneral-purpose\n",[337,397,395],{"__ignoreMap":335},[322,399,400],{},"它會在適合的情況下協助搜尋程式碼、分析專案或處理較複雜的工作。",[322,402,403],{},"所以 Custom Agent 比較像：",[405,406,407],"blockquote",{},[322,408,409],{},[410,411,412],"strong",{},"真的有固定的特殊分工需求時，再另外建立。",[364,414],{},[367,416,418],{"id":417},"subagent-有什麼不同","Subagent 有什麼不同？",[322,420,421],{},"Subagent 會有自己的 Context。",[322,423,424],{},"可以先想成：",[329,426,429],{"className":427,"code":428,"language":334,"meta":335},[332],"主 Agent\n↓\n目前主要工作\n\n        ↓ 委派某個任務\n\nSubagent\n↓\n在自己的 Context 中\n搜尋 \u002F 分析 \u002F 執行工作\n\n        ↓\n\n整理結果\n\n        ↓\n\n回傳主 Agent\n",[337,430,428],{"__ignoreMap":335},[322,432,433],{},"例如主 Agent正在修改功能，但需要調查大量程式碼：",[329,435,438],{"className":436,"code":437,"language":334,"meta":335},[332],"主 Agent\n↓\n「我要修改這個功能」\n\nExplore Subagent\n↓\n搜尋相關檔案\n了解目前架構\n整理重要資訊\n\n↓\n回傳摘要\n\n主 Agent\n↓\n繼續實作\n",[337,439,437],{"__ignoreMap":335},[322,441,442],{},"這樣大量搜尋過程就不一定全部塞進主要對話的 Context。",[364,444],{},[367,446,448],{"id":447},"什麼時候才需要-custom-agent","什麼時候才需要 Custom Agent？",[322,450,451],{},"我目前會先把它理解成：",[405,453,454],{},[322,455,456],{},[410,457,458],{},"當某一類工作需要一個固定角色，而且這個角色會重複使用時，再考慮建立。",[322,460,461],{},"例如：",[329,463,466],{"className":464,"code":465,"language":334,"meta":335},[332],"只允許讀取、不允許修改的 Reviewer\n",[337,467,465],{"__ignoreMap":335},[322,469,470],{},"或者：",[329,472,475],{"className":473,"code":474,"language":334,"meta":335},[332],"專門分析大量 Log 的 Debugger\n",[337,476,474],{"__ignoreMap":335},[322,478,479],{},"又或者：",[329,481,484],{"className":482,"code":483,"language":334,"meta":335},[332],"只能使用特定工具的 Agent\n",[337,485,483],{"__ignoreMap":335},[322,487,488],{},"這時 Custom Agent 才開始比較有意義。",[322,490,491],{},"如果只是：",[329,493,496],{"className":494,"code":495,"language":334,"meta":335},[332],"幫我修 Bug\n",[337,497,495],{"__ignoreMap":335},[322,499,500],{},"通常不需要特別建立：",[329,502,505],{"className":503,"code":504,"language":334,"meta":335},[332],"debugger agent\n",[337,506,504],{"__ignoreMap":335},[322,508,509],{},"直接讓目前的 Agent 處理即可。",[364,511],{},[367,513,515],{"id":514},"claude-code-的-custom-subagent","Claude Code 的 Custom Subagent",[322,517,518],{},"如果真的需要自訂 Subagent，Claude Code 的專案 Agent 可以放在：",[329,520,523],{"className":521,"code":522,"language":334,"meta":335},[332],"my-project\u002F\n└─ .claude\u002F\n   └─ agents\u002F\n      └─ reviewer.md\n",[337,524,522],{"__ignoreMap":335},[322,526,527],{},"使用者自己的跨專案 Agent 則可以放在：",[329,529,532],{"className":530,"code":531,"language":334,"meta":335},[332],"~\u002F.claude\u002F\n└─ agents\u002F\n   └─ reviewer.md\n",[337,533,531],{"__ignoreMap":335},[322,535,536],{},"可以先記：",[329,538,541],{"className":539,"code":540,"language":334,"meta":335},[332],".claude\u002Fagents\u002F\n↓\n目前專案使用\n\n\n~\u002F.claude\u002Fagents\u002F\n↓\n自己的多個專案都可以使用\n",[337,542,540],{"__ignoreMap":335},[322,544,545],{},"Claude Code 的 Subagent 可以設定：",[329,547,550],{"className":548,"code":549,"language":334,"meta":335},[332],"工作說明\n可以使用哪些 Tools\n使用哪個 Model\nPermission\n其他 Agent 行為\n",[337,551,549],{"__ignoreMap":335},[322,553,554],{},"但剛開始其實不用先研究這些細節。",[364,556],{},[367,558,560],{"id":559},"不知道怎麼建立也可以直接讓-claude-幫忙","不知道怎麼建立，也可以直接讓 Claude 幫忙",[322,562,563],{},"Claude Code 本身有：",[329,565,568],{"className":566,"code":567,"language":334,"meta":335},[332],"\u002Fagents\n",[337,569,567],{"__ignoreMap":335},[322,571,572],{},"可以管理 Subagents。",[322,574,575,576,579],{},"如果真的發現某類工作很適合獨立成 Agent，可以直接進入 ",[337,577,578],{},"\u002Fagents","，再讓 Claude 幫忙產生設定。",[322,581,582],{},"例如描述：",[329,584,587],{"className":585,"code":586,"language":334,"meta":335},[332],"我想建立一個只負責檢查程式碼的 Agent。\n\n它可以讀取與搜尋程式，\n但不要直接修改檔案。\n\n完成後整理發現的問題交回主 Agent。\n",[337,588,586],{"__ignoreMap":335},[322,590,591],{},"再讓 Claude 協助產生即可。",[322,593,594],{},"所以不需要先自己研究完整 Agent 檔案格式。",[364,596],{},[367,598,599],{"id":599},"一個簡單的分工概念",[322,601,602],{},"假設真的建立一個 Reviewer：",[329,604,607],{"className":605,"code":606,"language":334,"meta":335},[332],"主 Agent\n↓\n負責功能開發\n\n        ↓\n\nReviewer\n↓\n只負責檢查問題\n\n        ↓\n\n回傳 Review 結果\n\n        ↓\n\n主 Agent\n↓\n決定怎麼修改\n",[337,608,606],{"__ignoreMap":335},[322,610,611],{},"這時 Reviewer 的價值在於：",[405,613,614],{},[322,615,616],{},"它有一個很明確、固定的工作角色。",[322,618,619],{},"而不是單純為了：",[405,621,622],{},[322,623,624],{},"多建立一個 AI。",[364,626],{},[367,628,630],{"id":629},"skill-和-agent-有什麼不同","Skill 和 Agent 有什麼不同？",[322,632,633],{},"這兩個很容易混在一起。",[322,635,636],{},"可以先簡單記：",[329,638,641],{"className":639,"code":640,"language":334,"meta":335},[332],"Skill\n↓\n一套工作方法\n\n\nAgent\n↓\n負責工作的角色\n",[337,642,640],{"__ignoreMap":335},[322,644,461],{},[329,646,649],{"className":647,"code":648,"language":334,"meta":335},[332],"Security Review Skill\n↓\n定義 Security Review 要檢查什麼\n",[337,650,648],{"__ignoreMap":335},[322,652,653],{},"而：",[329,655,658],{"className":656,"code":657,"language":334,"meta":335},[332],"Security Reviewer Agent\n↓\n負責執行 Security Review 的角色\n",[337,659,657],{"__ignoreMap":335},[322,661,662],{},"兩者也可以搭配。",[322,664,461],{},[329,666,669],{"className":667,"code":668,"language":334,"meta":335},[332],"Reviewer Agent\n↓\n使用 Review Skill\n↓\n執行固定檢查流程\n",[337,670,668],{"__ignoreMap":335},[322,672,673],{},"但也不是所有 Skill 都需要搭配 Agent。",[322,675,676],{},"很多情況：",[329,678,681],{"className":679,"code":680,"language":334,"meta":335},[332],"主 Agent\n+\nSkill\n",[337,682,680],{"__ignoreMap":335},[322,684,685],{},"就已經足夠。",[364,687],{},[367,689,691],{"id":690},"rules-skill-agent-怎麼分","Rules \u002F Skill \u002F Agent 怎麼分？",[322,693,694],{},"可以先這樣整理：",[329,696,699],{"className":697,"code":698,"language":334,"meta":335},[332],"Rules\n↓\n平常工作必須遵守什麼\n\n\nSkill\n↓\n某件事情應該怎麼做\n\n\nAgent\n↓\n誰負責去做某一部分工作\n",[337,700,698],{"__ignoreMap":335},[322,702,461],{},[329,704,707],{"className":705,"code":706,"language":334,"meta":335},[332],"Rule\n↓\n新增 Dependency 前需要確認\n\n\nSkill\n↓\nRelease 時有哪些固定步驟\n\n\nAgent\n↓\n把某個獨立調查任務交給另一個工作者\n",[337,708,706],{"__ignoreMap":335},[322,710,711],{},"我覺得先記住這個差異，就已經很夠用了。",[364,713],{},[367,715,717],{"id":716},"codex-的-multi-agent","Codex 的 Multi-agent",[322,719,720],{},"Codex 也有 Multi-agent 的工作方式，可以讓多個 Agent 平行處理不同任務。",[322,722,723],{},"但 Codex 與 Claude Code 的 Agent 結構與管理方式並不完全一樣。",[322,725,726],{},"所以不要直接把：",[329,728,731],{"className":729,"code":730,"language":334,"meta":335},[332],".claude\u002Fagents\u002F\n",[337,732,730],{"__ignoreMap":335},[322,734,735],{},"套用到 Codex。",[322,737,738],{},"這篇先只理解：",[329,740,743],{"className":741,"code":742,"language":334,"meta":335},[332],"主 Agent\n↓\n將部分工作委派出去\n↓\n其他 Agent 處理\n↓\n結果再回到主要工作\n",[337,744,742],{"__ignoreMap":335},[322,746,747],{},"這個概念即可。",[322,749,750],{},"真的開始使用 Codex 的 Multi-agent 工作流時，再另外研究它目前的設定方式。",[364,752],{},[367,754,756],{"id":755},"什麼時候不用-agent","什麼時候不用 Agent？",[322,758,759],{},"其實大部分簡單工作都不用。",[322,761,461],{},[329,763,766],{"className":764,"code":765,"language":334,"meta":335},[332],"修改一個 Component\n修一個 Bug\n補一個 API\n更新一份文件\n執行測試\n",[337,767,765],{"__ignoreMap":335},[322,769,770],{},"通常：",[329,772,775],{"className":773,"code":774,"language":334,"meta":335},[332],"目前的主 Agent\n",[337,776,774],{"__ignoreMap":335},[322,778,779],{},"就可以處理。",[322,781,782],{},"就算是固定流程，也可以先考慮：",[329,784,787],{"className":785,"code":786,"language":334,"meta":335},[332],"Skill\n",[337,788,786],{"__ignoreMap":335},[322,790,791],{},"而不是馬上建立新的 Agent。",[322,793,794],{},"可以先這樣判斷：",[329,796,799],{"className":797,"code":798,"language":334,"meta":335},[332],"只是固定流程？\n↓\n先考慮 Skill\n\n\n只是一般任務？\n↓\n主 Agent 直接做\n\n\n真的需要獨立 Context\n或固定角色 \u002F Tool 限制？\n↓\n再考慮 Agent\n",[337,800,798],{"__ignoreMap":335},[364,802],{},[367,804,806],{"id":805},"不知道需不需要-agent也可以問-ai","不知道需不需要 Agent，也可以問 AI",[322,808,809],{},"跟 Rules、Skills 一樣，不一定要自己先判斷。",[322,811,812],{},"例如可以問：",[329,814,817],{"className":815,"code":816,"language":334,"meta":335},[332],"請檢查目前的工作流程。\n\n哪些工作主 Agent 直接處理就好？\n哪些適合做成 Skill？\n有沒有真的值得獨立成 Subagent 的工作？\n\n先提出建議，不要直接建立 Agent。\n",[337,818,816],{"__ignoreMap":335},[322,820,821],{},"AI 分析後，也可能得到：",[329,823,826],{"className":824,"code":825,"language":334,"meta":335},[332],"目前完全不需要自訂 Agent\n",[337,827,825],{"__ignoreMap":335},[322,829,830],{},"這也是很正常的結果。",[364,832],{},[367,834,835],{"id":835},"最後簡單整理",[322,837,838],{},"可以先把前面的功能整理成：",[329,840,843],{"className":841,"code":842,"language":334,"meta":335},[332],"CLAUDE.md \u002F AGENTS.md\n↓\n專案基本規則\n\n\nRules\n↓\n規則變多後再分類\n\n\nCommands\n↓\n快速控制 CLI \u002F Session\n\n\nSkills\n↓\n保存重複工作流程\n\n\nAgent \u002F Subagent\n↓\n真的有分工需求時\n再把部分工作交給另一個 AI\n",[337,844,842],{"__ignoreMap":335},[322,846,847],{},"Agent 並不是：",[329,849,852],{"className":850,"code":851,"language":334,"meta":335},[332],"每一種工作\n↓\n都建立一個 Agent\n",[337,853,851],{"__ignoreMap":335},[322,855,856],{},"比較自然的方式反而是：",[329,858,861],{"className":859,"code":860,"language":334,"meta":335},[332],"先讓主 Agent 工作\n↓\n真的遇到需要分工的情況\n↓\n再考慮 Subagent\n↓\n同一種角色一直重複使用\n↓\n才考慮建立 Custom Agent\n",[337,862,860],{"__ignoreMap":335},[322,864,865],{},"對我來說，先知道：",[405,867,868],{},[322,869,870],{},[410,871,872],{},"Agent \u002F Subagent 是用來分工，而不是每個專案都必須準備很多 AI 角色。",[322,874,685],{},{"title":335,"searchDepth":876,"depth":876,"links":877},3,[878,880,881,882,883,884,885,886,887,888,889,890],{"id":369,"depth":879,"text":370},2,{"id":417,"depth":879,"text":418},{"id":447,"depth":879,"text":448},{"id":514,"depth":879,"text":515},{"id":559,"depth":879,"text":560},{"id":599,"depth":879,"text":599},{"id":629,"depth":879,"text":630},{"id":690,"depth":879,"text":691},{"id":716,"depth":879,"text":717},{"id":755,"depth":879,"text":756},{"id":805,"depth":879,"text":806},{"id":835,"depth":879,"text":835},false,"md",null,{},true,"2026-09-08",[],{"title":274,"description":275},"posts\u002F20260908.claude-codex-agents-subagents",[230,231,232,277,278],"vVIXUl0JVJZO2_biLJQk5ocXUKqnFcS7-H4Fx656xIw",[903,906],{"title":281,"path":280,"stem":904,"description":282,"category":228,"publishedAt":905,"children":-1},"posts\u002F20260909.mcp-basics","2026-09-09",{"title":268,"path":267,"stem":907,"description":269,"category":228,"publishedAt":908,"children":-1},"posts\u002F20260907.claude-codex-skills","2026-09-07",1791786900564]