[{"data":1,"prerenderedAt":1514},["ShallowReactive",2],{"search-dialog-posts":3,"post-\u002Fposts\u002Fclaude-codex-slash-commands":316,"post-surround-\u002Fposts\u002Fclaude-codex-slash-commands":1507},[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":262,"body":318,"category":228,"description":263,"draft":1498,"extension":585,"image":1499,"meta":1500,"navigation":602,"path":261,"publishedAt":1501,"relatedExperiments":1502,"seo":1503,"stem":1504,"tags":1505,"updatedAt":1499,"__hash__":1506},"posts\u002Fposts\u002F20260906.claude-codex-slash-commands.md",{"type":319,"value":320,"toc":1472},"minimark",[321,325,350,353,363,366,372,379,382,388,391,396,399,402,408,410,416,419,422,428,431,434,440,442,446,449,451,457,460,466,469,472,474,480,483,489,492,498,501,503,509,511,516,519,522,524,530,533,536,541,544,547,553,555,562,565,568,574,581,641,644,650,653,656,661,664,666,673,676,678,684,687,692,697,700,706,708,712,715,721,724,730,733,736,742,745,748,771,774,776,780,783,788,791,793,799,802,805,811,814,817,823,826,828,831,834,836,842,845,850,853,855,860,863,868,871,874,880,883,889,895,897,902,904,909,912,914,920,926,929,943,946,951,954,956,962,965,970,973,976,981,984,990,993,995,1001,1007,1010,1013,1015,1019,1022,1025,1031,1034,1039,1048,1051,1057,1060,1062,1068,1071,1077,1080,1082,1088,1091,1097,1100,1106,1109,1115,1118,1120,1124,1127,1132,1135,1141,1143,1149,1152,1157,1159,1165,1168,1171,1177,1180,1183,1189,1191,1195,1341,1343,1347,1350,1353,1358,1360,1366,1369,1371,1377,1379,1384,1386,1392,1395,1400,1402,1405,1408,1414,1416,1422,1425,1428,1434,1436,1442,1444,1450,1453,1459,1462,1468],[322,323,324],"p",{},"前面已經整理過：",[326,327,328,337,345,348],"ul",{},[329,330,331,334,335],"li",{},[332,333,234],"code",{}," \u002F ",[332,336,235],{},[329,338,339,334,342],{},[332,340,341],{},".claude\u002F",[332,343,344],{},".codex\u002F",[329,346,347],{},"settings \u002F config",[329,349,259],{},[322,351,352],{},"接下來是在實際使用 Claude Code、Codex CLI 時很常碰到的：",[354,355,361],"pre",{"className":356,"code":358,"language":359,"meta":360},[357],"language-text","\u002Fxxx\n","text","",[332,362,358],{"__ignoreMap":360},[322,364,365],{},"例如：",[354,367,370],{"className":368,"code":369,"language":359,"meta":360},[357],"\u002Finit\n\u002Fhelp\n\u002Fmodel\n\u002Fcompact\n",[332,371,369],{"__ignoreMap":360},[322,373,374,375,378],{},"這類通常稱為 ",[376,377,265],"strong",{},"。",[322,380,381],{},"可以先簡單理解成：",[383,384,385],"blockquote",{},[322,386,387],{},"在互動式 CLI Session 裡，快速控制目前工作階段或執行特定功能的指令。",[389,390],"hr",{},[392,393,395],"h3",{"id":394},"slash-commands-可以做什麼","Slash Commands 可以做什麼？",[322,397,398],{},"不同工具提供的 Slash Commands 不完全一樣。",[322,400,401],{},"常見用途包括：",[354,403,406],{"className":404,"code":405,"language":359,"meta":360},[357],"初始化專案設定\n切換 Model\n查看 Session 狀態\n整理 Context\n管理權限\n執行 Code Review\n管理 MCP\n執行 Skill\n",[332,407,405],{"__ignoreMap":360},[322,409,365],{},[354,411,414],{"className":412,"code":413,"language":359,"meta":360},[357],"\u002Fmodel\n",[332,415,413],{"__ignoreMap":360},[322,417,418],{},"通常用來切換目前 Session 使用的 Model。",[322,420,421],{},"而：",[354,423,426],{"className":424,"code":425,"language":359,"meta":360},[357],"\u002Fcompact\n",[332,427,425],{"__ignoreMap":360},[322,429,430],{},"則可以在對話變長時，壓縮目前 Context，保留重要資訊並釋放 Context Window。",[322,432,433],{},"所以 Slash Commands 比較像：",[354,435,438],{"className":436,"code":437,"language":359,"meta":360},[357],"目前正在使用 CLI\n        ↓\n想快速執行某個功能\n        ↓\n輸入 \u002Fxxx\n",[332,439,437],{"__ignoreMap":360},[389,441],{},[443,444,231],"h2",{"id":445},"claude-code",[322,447,448],{},"Claude Code 本身提供很多內建 Slash Commands。",[322,450,365],{},[354,452,455],{"className":453,"code":454,"language":359,"meta":360},[357],"\u002Finit\n\u002Fhelp\n\u002Fmodel\n\u002Fcompact\n\u002Fpermissions\n\u002Fmcp\n\u002Fagents\n\u002Fskills\n\u002Freview\n",[332,456,454],{"__ignoreMap":360},[322,458,459],{},"輸入：",[354,461,464],{"className":462,"code":463,"language":359,"meta":360},[357],"\u002F\n",[332,465,463],{"__ignoreMap":360},[322,467,468],{},"就可以查看目前環境中可使用的 Commands。",[322,470,471],{},"實際能看到哪些指令，也可能依 Claude Code 版本、平台或方案有所不同。",[389,473],{},[392,475,477],{"id":476},"init",[332,478,479],{},"\u002Finit",[322,481,482],{},"前面已經介紹過：",[354,484,487],{"className":485,"code":486,"language":359,"meta":360},[357],"\u002Finit\n",[332,488,486],{"__ignoreMap":360},[322,490,491],{},"第一次進入專案時，可以讓 Claude Code 幫忙建立：",[354,493,496],{"className":494,"code":495,"language":359,"meta":360},[357],"CLAUDE.md\n",[332,497,495],{"__ignoreMap":360},[322,499,500],{},"作為專案工作指示的起點。",[389,502],{},[392,504,506],{"id":505},"model",[332,507,508],{},"\u002Fmodel",[322,510,365],{},[354,512,514],{"className":513,"code":413,"language":359,"meta":360},[357],[332,515,413],{"__ignoreMap":360},[322,517,518],{},"可以切換目前 Session 使用的 Model。",[322,520,521],{},"不用離開 Claude Code 再重新啟動。",[389,523],{},[392,525,527],{"id":526},"compact",[332,528,529],{},"\u002Fcompact",[322,531,532],{},"當 Session 越來越長，Context 也會跟著增加。",[322,534,535],{},"這時可以使用：",[354,537,539],{"className":538,"code":425,"language":359,"meta":360},[357],[332,540,425],{"__ignoreMap":360},[322,542,543],{},"讓 Claude 將目前對話整理成較精簡的摘要，再繼續工作。",[322,545,546],{},"可以簡單理解：",[354,548,551],{"className":549,"code":550,"language":359,"meta":360},[357],"很長的 Session\n↓\n\u002Fcompact\n↓\n整理重要資訊\n↓\n釋放部分 Context\n↓\n繼續目前工作\n",[332,552,550],{"__ignoreMap":360},[389,554],{},[443,556,558,559],{"id":557},"claude-code-可以建立自己的-xxx","Claude Code 可以建立自己的 ",[332,560,561],{},"\u002Fxxx",[322,563,564],{},"除了內建 Command，Claude Code 也可以建立自己的工作指令。",[322,566,567],{},"例如以前很常使用：",[354,569,572],{"className":570,"code":571,"language":359,"meta":360},[357],".claude\u002F\n└─ commands\u002F\n   └─ review.md\n",[332,573,571],{"__ignoreMap":360},[322,575,576,577,580],{},"假設 ",[332,578,579],{},"review.md"," 裡寫著：",[354,582,586],{"className":583,"code":584,"language":585,"meta":360,"style":360},"language-md shiki shiki-themes github-light github-dark-default","請檢查目前修改內容：\n\n1. 是否有明顯 Bug\n2. 是否影響既有功能\n3. 是否缺少錯誤處理\n4. 是否有不必要的修改\n","md",[332,587,588,597,604,614,623,632],{"__ignoreMap":360},[589,590,593],"span",{"class":591,"line":592},"line",1,[589,594,596],{"class":595},"szmH1","請檢查目前修改內容：\n",[589,598,600],{"class":591,"line":599},2,[589,601,603],{"emptyLinePlaceholder":602},true,"\n",[589,605,607,611],{"class":591,"line":606},3,[589,608,610],{"class":609},"sjlk-","1.",[589,612,613],{"class":595}," 是否有明顯 Bug\n",[589,615,617,620],{"class":591,"line":616},4,[589,618,619],{"class":609},"2.",[589,621,622],{"class":595}," 是否影響既有功能\n",[589,624,626,629],{"class":591,"line":625},5,[589,627,628],{"class":609},"3.",[589,630,631],{"class":595}," 是否缺少錯誤處理\n",[589,633,635,638],{"class":591,"line":634},6,[589,636,637],{"class":609},"4.",[589,639,640],{"class":595}," 是否有不必要的修改\n",[322,642,643],{},"就可以在 Claude Code 中使用：",[354,645,648],{"className":646,"code":647,"language":359,"meta":360},[357],"\u002Freview\n",[332,649,647],{"__ignoreMap":360},[322,651,652],{},"執行這份 Prompt。",[322,654,655],{},"這適合把：",[383,657,658],{},[322,659,660],{},"經常重複輸入的 Prompt",[322,662,663],{},"變成可以反覆使用的 Command。",[389,665],{},[443,667,669,672],{"id":668},"claudecommands-現在還能用嗎",[332,670,671],{},".claude\u002Fcommands\u002F"," 現在還能用嗎？",[322,674,675],{},"可以。",[322,677,365],{},[354,679,682],{"className":680,"code":681,"language":359,"meta":360},[357],".claude\u002Fcommands\u002Freview.md\n",[332,683,681],{"__ignoreMap":360},[322,685,686],{},"仍然可以建立：",[354,688,690],{"className":689,"code":647,"language":359,"meta":360},[357],[332,691,647],{"__ignoreMap":360},[322,693,694,695,378],{},"不過 Claude Code 現在已經把 Custom Commands 的能力整合進 ",[376,696,271],{},[322,698,699],{},"所以如果現在才開始建立新的工作流程，官方比較建議使用：",[354,701,704],{"className":702,"code":703,"language":359,"meta":360},[357],".claude\u002F\n└─ skills\u002F\n   └─ review\u002F\n      └─ SKILL.md\n",[332,705,703],{"__ignoreMap":360},[389,707],{},[443,709,711],{"id":710},"claude-skill-也可以直接變成-slash-command","Claude Skill 也可以直接變成 Slash Command",[322,713,714],{},"假設建立：",[354,716,719],{"className":717,"code":718,"language":359,"meta":360},[357],".claude\u002F\n└─ skills\u002F\n   └─ review-code\u002F\n      └─ SKILL.md\n",[332,720,718],{"__ignoreMap":360},[322,722,723],{},"那這個 Skill 可以直接使用：",[354,725,728],{"className":726,"code":727,"language":359,"meta":360},[357],"\u002Freview-code\n",[332,729,727],{"__ignoreMap":360},[322,731,732],{},"呼叫。",[322,734,735],{},"所以可以先這樣理解：",[354,737,740],{"className":738,"code":739,"language":359,"meta":360},[357],"舊方式\n\n.claude\u002Fcommands\u002Freview.md\n↓\n\u002Freview\n\n\n現在建議\n\n.claude\u002Fskills\u002Freview\u002FSKILL.md\n↓\n\u002Freview\n",[332,741,739],{"__ignoreMap":360},[322,743,744],{},"兩種方式目前都能使用。",[322,746,747],{},"但 Skills 可以加入更多功能，例如：",[326,749,750,753,756,759,762,765,768],{},[329,751,752],{},"Supporting files",[329,754,755],{},"Script",[329,757,758],{},"Reference",[329,760,761],{},"Frontmatter 設定",[329,763,764],{},"控制是否允許 AI 自動呼叫",[329,766,767],{},"指定 Agent",[329,769,770],{},"指定工具",[322,772,773],{},"所以新的重複工作流程，比較適合直接從 Skill 開始。",[389,775],{},[443,777,779],{"id":778},"內建-slash-command-和-skill-有什麼差別","內建 Slash Command 和 Skill 有什麼差別？",[322,781,782],{},"雖然使用起來可能都是：",[354,784,786],{"className":785,"code":358,"language":359,"meta":360},[357],[332,787,358],{"__ignoreMap":360},[322,789,790],{},"但背後其實不一定是同一種東西。",[322,792,365],{},[354,794,797],{"className":795,"code":796,"language":359,"meta":360},[357],"\u002Fhelp\n\u002Fmodel\n\u002Fcompact\n",[332,798,796],{"__ignoreMap":360},[322,800,801],{},"這類主要是 Claude Code 本身提供的功能。",[322,803,804],{},"而自己建立：",[354,806,809],{"className":807,"code":808,"language":359,"meta":360},[357],"\u002Freview-code\n\u002Fdeploy\n\u002Fcheck-api\n",[332,810,808],{"__ignoreMap":360},[322,812,813],{},"則可能是 Skill。",[322,815,816],{},"可以先簡單理解：",[354,818,821],{"className":819,"code":820,"language":359,"meta":360},[357],"內建 Slash Command\n↓\n控制 Claude Code 本身\n\n\nSkill\n↓\n定義可以重複使用的 AI 工作流程\n",[332,822,820],{"__ignoreMap":360},[322,824,825],{},"使用方式看起來相似，但目的不太一樣。",[389,827],{},[443,829,232],{"id":830},"codex-cli",[322,832,833],{},"Codex CLI 同樣提供 Slash Commands。",[322,835,365],{},[354,837,840],{"className":838,"code":839,"language":359,"meta":360},[357],"\u002Finit\n\u002Fmodel\n\u002Fstatus\n\u002Fcompact\n\u002Freview\n\u002Fskills\n\u002Fmcp\n\u002Fpermissions\n",[332,841,839],{"__ignoreMap":360},[322,843,844],{},"一樣可以直接輸入：",[354,846,848],{"className":847,"code":463,"language":359,"meta":360},[357],[332,849,463],{"__ignoreMap":360},[322,851,852],{},"打開目前可用的 Slash Command 清單。",[389,854],{},[392,856,858],{"id":857},"init-1",[332,859,479],{},[322,861,862],{},"Codex 的：",[354,864,866],{"className":865,"code":486,"language":359,"meta":360},[357],[332,867,486],{"__ignoreMap":360},[322,869,870],{},"用途和 Claude Code 類似，但產生的文件不同。",[322,872,873],{},"Claude Code：",[354,875,878],{"className":876,"code":877,"language":359,"meta":360},[357],"\u002Finit\n↓\nCLAUDE.md\n",[332,879,877],{"__ignoreMap":360},[322,881,882],{},"Codex：",[354,884,887],{"className":885,"code":886,"language":359,"meta":360},[357],"\u002Finit\n↓\nAGENTS.md\n",[332,888,886],{"__ignoreMap":360},[322,890,891,892,894],{},"所以同樣叫 ",[332,893,479],{},"，實際產生的是各自工具使用的專案指示文件。",[389,896],{},[392,898,900],{"id":899},"model-1",[332,901,508],{},[322,903,365],{},[354,905,907],{"className":906,"code":413,"language":359,"meta":360},[357],[332,908,413],{"__ignoreMap":360},[322,910,911],{},"可以切換目前 Codex Session 使用的 Model。",[389,913],{},[392,915,917],{"id":916},"status",[332,918,919],{},"\u002Fstatus",[354,921,924],{"className":922,"code":923,"language":359,"meta":360},[357],"\u002Fstatus\n",[332,925,923],{"__ignoreMap":360},[322,927,928],{},"可以查看目前 Session 的一些狀態，例如：",[326,930,931,934,937,940],{},[329,932,933],{},"Model",[329,935,936],{},"Approval",[329,938,939],{},"Writable roots",[329,941,942],{},"Context 使用狀況",[322,944,945],{},"在想確認：",[383,947,948],{},[322,949,950],{},"現在 Codex 到底是用什麼設定執行？",[322,952,953],{},"時很方便。",[389,955],{},[392,957,959],{"id":958},"review",[332,960,961],{},"\u002Freview",[322,963,964],{},"Codex 還有：",[354,966,968],{"className":967,"code":647,"language":359,"meta":360},[357],[332,969,647],{"__ignoreMap":360},[322,971,972],{},"可以讓 Codex Review 目前 Working Tree 的修改。",[322,974,975],{},"例如完成一個功能後，可以先：",[354,977,979],{"className":978,"code":647,"language":359,"meta":360},[357],[332,980,647],{"__ignoreMap":360},[322,982,983],{},"再搭配：",[354,985,988],{"className":986,"code":987,"language":359,"meta":360},[357],"\u002Fdiff\n",[332,989,987],{"__ignoreMap":360},[322,991,992],{},"查看實際修改內容。",[389,994],{},[392,996,998],{"id":997},"mcp",[332,999,1000],{},"\u002Fmcp",[354,1002,1005],{"className":1003,"code":1004,"language":359,"meta":360},[357],"\u002Fmcp\n",[332,1006,1004],{"__ignoreMap":360},[322,1008,1009],{},"可以查看目前 Codex Session 可以使用的 MCP Server 與 Tool。",[322,1011,1012],{},"如果之後開始加入外部工具，這個 Command 會很常看到。",[389,1014],{},[443,1016,1018],{"id":1017},"codex-的-skill-呼叫方式和-claude-不太一樣","Codex 的 Skill 呼叫方式和 Claude 不太一樣",[322,1020,1021],{},"這裡是我覺得最容易搞混的地方。",[322,1023,1024],{},"Claude Code 的 Skill：",[354,1026,1029],{"className":1027,"code":1028,"language":359,"meta":360},[357],".claude\u002Fskills\u002Freview\u002FSKILL.md\n",[332,1030,1028],{"__ignoreMap":360},[322,1032,1033],{},"可以直接使用：",[354,1035,1037],{"className":1036,"code":647,"language":359,"meta":360},[357],[332,1038,647],{"__ignoreMap":360},[322,1040,1041,1042,378],{},"但是 Codex 的 Skill ",[376,1043,1044,1045],{},"不是直接變成 ",[332,1046,1047],{},"\u002Fskill-name",[322,1049,1050],{},"Codex 可以使用：",[354,1052,1055],{"className":1053,"code":1054,"language":359,"meta":360},[357],"\u002Fskills\n",[332,1056,1054],{"__ignoreMap":360},[322,1058,1059],{},"開啟 Skill 選擇器。",[322,1061,365],{},[354,1063,1066],{"className":1064,"code":1065,"language":359,"meta":360},[357],"\u002Fskills\n↓\n選擇需要的 Skill\n↓\n將 Skill 加入目前工作\n",[332,1067,1065],{"__ignoreMap":360},[322,1069,1070],{},"另外，也可以直接使用：",[354,1072,1075],{"className":1073,"code":1074,"language":359,"meta":360},[357],"$skill-name\n",[332,1076,1074],{"__ignoreMap":360},[322,1078,1079],{},"指定某個 Skill。",[322,1081,365],{},[354,1083,1086],{"className":1084,"code":1085,"language":359,"meta":360},[357],"$skill-creator\n",[332,1087,1085],{"__ignoreMap":360},[322,1089,1090],{},"或：",[354,1092,1095],{"className":1093,"code":1094,"language":359,"meta":360},[357],"$my-review-skill\n",[332,1096,1094],{"__ignoreMap":360},[322,1098,1099],{},"所以兩邊的差異可以簡單記成：",[354,1101,1104],{"className":1102,"code":1103,"language":359,"meta":360},[357],"Claude Code\n\nSkill\n↓\n\u002Fskill-name\n",[332,1105,1103],{"__ignoreMap":360},[322,1107,1108],{},"而 Codex：",[354,1110,1113],{"className":1111,"code":1112,"language":359,"meta":360},[357],"Codex\n\nSkill\n↓\n\u002Fskills\n\n或\n\n$skill-name\n",[332,1114,1112],{"__ignoreMap":360},[322,1116,1117],{},"這也是為什麼不能直接把 Claude Code 的 Slash Command 用法完全套到 Codex 上。",[389,1119],{},[443,1121,1123],{"id":1122},"codex-需要自己建立-slash-command-嗎","Codex 需要自己建立 Slash Command 嗎？",[322,1125,1126],{},"如果目的是：",[383,1128,1129],{},[322,1130,1131],{},"建立一套可以重複使用的 AI 工作流程",[322,1133,1134],{},"目前比較適合使用：",[354,1136,1139],{"className":1137,"code":1138,"language":359,"meta":360},[357],"Skill\n",[332,1140,1138],{"__ignoreMap":360},[322,1142,365],{},[354,1144,1147],{"className":1145,"code":1146,"language":359,"meta":360},[357],".agents\u002F\n└─ skills\u002F\n   └─ code-review\u002F\n      └─ SKILL.md\n",[332,1148,1146],{"__ignoreMap":360},[322,1150,1151],{},"然後透過：",[354,1153,1155],{"className":1154,"code":1054,"language":359,"meta":360},[357],[332,1156,1054],{"__ignoreMap":360},[322,1158,1090],{},[354,1160,1163],{"className":1161,"code":1162,"language":359,"meta":360},[357],"$code-review\n",[332,1164,1162],{"__ignoreMap":360},[322,1166,1167],{},"來使用。",[322,1169,1170],{},"所以一般不需要另外設計一套：",[354,1172,1175],{"className":1173,"code":1174,"language":359,"meta":360},[357],"\u002Fcustom-command\n",[332,1176,1174],{"__ignoreMap":360},[322,1178,1179],{},"格式來保存重複 Prompt。",[322,1181,1182],{},"可以先把兩個概念分開：",[354,1184,1187],{"className":1185,"code":1186,"language":359,"meta":360},[357],"Slash Commands\n↓\n控制目前 CLI \u002F Session\n\n\nSkills\n↓\n保存可以重複使用的 AI 工作流程\n",[332,1188,1186],{"__ignoreMap":360},[389,1190],{},[443,1192,1194],{"id":1193},"claude-code-codex-簡單比較","Claude Code \u002F Codex 簡單比較",[1196,1197,1198,1212],"table",{},[1199,1200,1201],"thead",{},[1202,1203,1204,1208,1210],"tr",{},[1205,1206,1207],"th",{},"功能",[1205,1209,231],{},[1205,1211,296],{},[1213,1214,1215,1230,1248,1261,1274,1287,1301,1311,1328],"tbody",{},[1202,1216,1217,1221,1226],{},[1218,1219,1220],"td",{},"查看可用 Command",[1218,1222,1223],{},[332,1224,1225],{},"\u002F",[1218,1227,1228],{},[332,1229,1225],{},[1202,1231,1232,1235,1242],{},[1218,1233,1234],{},"初始化專案規則",[1218,1236,1237,1239,1240],{},[332,1238,479],{}," → ",[332,1241,234],{},[1218,1243,1244,1239,1246],{},[332,1245,479],{},[332,1247,235],{},[1202,1249,1250,1253,1257],{},[1218,1251,1252],{},"切換 Model",[1218,1254,1255],{},[332,1256,508],{},[1218,1258,1259],{},[332,1260,508],{},[1202,1262,1263,1266,1270],{},[1218,1264,1265],{},"壓縮 Context",[1218,1267,1268],{},[332,1269,529],{},[1218,1271,1272],{},[332,1273,529],{},[1202,1275,1276,1279,1283],{},[1218,1277,1278],{},"Code Review",[1218,1280,1281],{},[332,1282,961],{},[1218,1284,1285],{},[332,1286,961],{},[1202,1288,1289,1292,1297],{},[1218,1290,1291],{},"查看 Skill",[1218,1293,1294],{},[332,1295,1296],{},"\u002Fskills",[1218,1298,1299],{},[332,1300,1296],{},[1202,1302,1303,1306,1309],{},[1218,1304,1305],{},"自訂重複工作流程",[1218,1307,1308],{},"Skill",[1218,1310,1308],{},[1202,1312,1313,1316,1320],{},[1218,1314,1315],{},"直接指定 Skill",[1218,1317,1318],{},[332,1319,1047],{},[1218,1321,1322,1325,1326],{},[332,1323,1324],{},"$skill-name"," 或 ",[332,1327,1296],{},[1202,1329,1330,1333,1338],{},[1218,1331,1332],{},"舊式 Custom Command",[1218,1334,1335],{},[332,1336,1337],{},".claude\u002Fcommands\u002F*.md",[1218,1339,1340],{},"不使用相同結構",[389,1342],{},[443,1344,1346],{"id":1345},"slash-command-和-skill-怎麼分","Slash Command 和 Skill 怎麼分？",[322,1348,1349],{},"我自己會先用一個很簡單的方式判斷。",[322,1351,1352],{},"如果是：",[383,1354,1355],{},[322,1356,1357],{},"我現在想控制 CLI 本身。",[322,1359,365],{},[354,1361,1364],{"className":1362,"code":1363,"language":359,"meta":360},[357],"切換 Model\n查看狀態\n壓縮 Context\n調整 Permission\n初始化專案\n",[332,1365,1363],{"__ignoreMap":360},[322,1367,1368],{},"通常使用 Slash Command。",[322,1370,365],{},[354,1372,1375],{"className":1373,"code":1374,"language":359,"meta":360},[357],"\u002Fmodel\n\u002Fstatus\n\u002Fcompact\n\u002Fpermissions\n\u002Finit\n",[332,1376,1374],{"__ignoreMap":360},[322,1378,1352],{},[383,1380,1381],{},[322,1382,1383],{},"我有一套工作流程，之後想重複使用。",[322,1385,365],{},[354,1387,1390],{"className":1388,"code":1389,"language":359,"meta":360},[357],"Code Review 流程\n建立 Commit 流程\n部署流程\n檢查 API 流程\n產生文件流程\n",[332,1391,1389],{"__ignoreMap":360},[322,1393,1394],{},"比較適合做成：",[354,1396,1398],{"className":1397,"code":1138,"language":359,"meta":360},[357],[332,1399,1138],{"__ignoreMap":360},[389,1401],{},[443,1403,1404],{"id":1404},"最後簡單整理",[322,1406,1407],{},"Slash Commands 可以先理解成：",[354,1409,1412],{"className":1410,"code":1411,"language":359,"meta":360},[357],"\u002Fxxx\n↓\n快速控制目前 CLI Session\n或執行某個功能\n",[332,1413,1411],{"__ignoreMap":360},[322,1415,365],{},[354,1417,1420],{"className":1418,"code":1419,"language":359,"meta":360},[357],"\u002Finit\n\u002Fmodel\n\u002Fcompact\n\u002Freview\n\u002Fstatus\n",[332,1421,1419],{"__ignoreMap":360},[322,1423,1424],{},"如果只是偶爾需要某個功能，直接使用內建 Command 就好。",[322,1426,1427],{},"如果某段 Prompt 或工作流程開始一直重複：",[354,1429,1432],{"className":1430,"code":1431,"language":359,"meta":360},[357],"每次都重新貼 Prompt\n        ↓\n開始覺得麻煩\n        ↓\n整理成 Skill\n",[332,1433,1431],{"__ignoreMap":360},[322,1435,873],{},[354,1437,1440],{"className":1438,"code":1439,"language":359,"meta":360},[357],".claude\u002Fskills\u002F\n↓\n可以使用 \u002Fskill-name\n",[332,1441,1439],{"__ignoreMap":360},[322,1443,882],{},[354,1445,1448],{"className":1446,"code":1447,"language":359,"meta":360},[357],".agents\u002Fskills\u002F\n↓\n使用 \u002Fskills 選擇\n\n或\n\n$skill-name\n",[332,1449,1447],{"__ignoreMap":360},[322,1451,1452],{},"至於 Claude Code 舊有的：",[354,1454,1457],{"className":1455,"code":1456,"language":359,"meta":360},[357],".claude\u002Fcommands\u002F\n",[332,1458,1456],{"__ignoreMap":360},[322,1460,1461],{},"目前仍然能使用，不需要急著把舊專案全部改掉。",[322,1463,1464,1465,1467],{},"但如果現在才開始建立新的重複工作流程，優先從 ",[376,1466,271],{}," 開始。",[1469,1470,1471],"style",{},"html pre.shiki code .szmH1, html code.shiki .szmH1{--shiki-default:#24292E;--shiki-dark:#E6EDF3}html pre.shiki code .sjlk-, html code.shiki .sjlk-{--shiki-default:#E36209;--shiki-dark:#FFA657}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":360,"searchDepth":606,"depth":606,"links":1473},[1474,1475,1480,1482,1484,1485,1486,1493,1494,1495,1496,1497],{"id":394,"depth":606,"text":395},{"id":445,"depth":599,"text":231,"children":1476},[1477,1478,1479],{"id":476,"depth":606,"text":479},{"id":505,"depth":606,"text":508},{"id":526,"depth":606,"text":529},{"id":557,"depth":599,"text":1481},"Claude Code 可以建立自己的 \u002Fxxx",{"id":668,"depth":599,"text":1483},".claude\u002Fcommands\u002F 現在還能用嗎？",{"id":710,"depth":599,"text":711},{"id":778,"depth":599,"text":779},{"id":830,"depth":599,"text":232,"children":1487},[1488,1489,1490,1491,1492],{"id":857,"depth":606,"text":479},{"id":899,"depth":606,"text":508},{"id":916,"depth":606,"text":919},{"id":958,"depth":606,"text":961},{"id":997,"depth":606,"text":1000},{"id":1017,"depth":599,"text":1018},{"id":1122,"depth":599,"text":1123},{"id":1193,"depth":599,"text":1194},{"id":1345,"depth":599,"text":1346},{"id":1404,"depth":599,"text":1404},false,null,{},"2026-09-06",[],{"title":262,"description":263},"posts\u002F20260906.claude-codex-slash-commands",[230,231,232,265],"VPnP3FJaeT31rAy7_5VRCh6WHxSZdaxGg_BArmse1Qw",[1508,1511],{"title":268,"path":267,"stem":1509,"description":269,"category":228,"publishedAt":1510,"children":-1},"posts\u002F20260907.claude-codex-skills","2026-09-07",{"title":256,"path":255,"stem":1512,"description":257,"category":228,"publishedAt":1513,"children":-1},"posts\u002F20260905.claude-codex-rules-structure","2026-09-05",1791786900635]