[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-tim-deschryver-practical-ai-workflow-devs-zh":3,"tags-tim-deschryver-practical-ai-workflow-devs-zh":36,"related-lang-tim-deschryver-practical-ai-workflow-devs-zh":46,"related-posts-tim-deschryver-practical-ai-workflow-devs-zh":50,"series-tools-3126961a-dbdb-4bdf-b2f6-cd7c1d5f9d64":87},{"id":4,"title":5,"content":6,"summary":7,"source":8,"source_url":9,"author":10,"image_url":11,"keywords":12,"language":20,"translated_content":10,"views":21,"is_premium":22,"created_at":23,"updated_at":23,"cover_image":11,"published_at":24,"rewrite_status":25,"rewrite_error":10,"rewritten_from_id":26,"slug":27,"category":28,"related_article_id":29,"status":30,"google_indexed_at":31,"x_posted_at":10,"tweet_text":10,"title_rewritten_at":10,"title_original":10,"key_takeaways":32,"topic_cluster_id":10,"embedding":10,"is_canonical_seed":22},"3126961a-dbdb-4bdf-b2f6-cd7c1d5f9d64","Tim Deschryver 的 AI 開發流程","\u003Cp data-speakable=\"summary\">Tim Deschryver 用 AGENTS.md、\u003Ca href=\"\u002Ftag\u002Fskills\">skills\u003C\u002Fa> 和 spec，把 coding a\u003Ca href=\"\u002Fnews\u002Fwhy-microsoft-agent-framework-durable-workflows-matter-zh\">gent\u003C\u002Fa> 變成更穩定的寫碼助手。\u003C\u002Fp>\u003Cp>說真的，這篇不是在吹 AI。Tim Deschryver 是在講一套很務實的工作流。\u003Ca href=\"https:\u002F\u002Ftimdeschryver.dev\" target=\"_blank\" rel=\"noopener\">Tim Deschryver\u003C\u002Fa> 說，他在過去一個月用 \u003Ca href=\"\u002Ftag\u002Fagentic-ai\">agentic AI\u003C\u002Fa> 重寫一個專案。速度夠快，但還是得靠人做判斷。\u003C\u002Fp>\u003Cp>他核心觀點很直接。你不需要一大包 p\u003Ca href=\"\u002Fnews\u002Fprompt-engineering-jobs-2026-worth-it-zh\">romp\u003C\u002Fa>t 才能用 AI 寫軟體。你需要的是規則、結構，還有清楚的任務拆法。講白了，就是先把專案管好，再讓 \u003Ca href=\"\u002Ftag\u002Fagent\">agent\u003C\u002Fa> 幫你搬磚。\u003C\u002Fp>\u003Cp>這篇文章也很適合台灣開發者。因為很多團隊現在都在玩 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Ffeatures\u002Fcopilot\" target=\"_blank\" rel=\"noopener\">GitHub Copilot\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fclaude.ai\" target=\"_blank\" rel=\"noopener\">Claude\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fopenai.com\u002Findex\u002Fchatgpt\u002F\" target=\"_blank\" rel=\"noopener\">GPT\u003C\u002Fa>，但常常卡在同一件事：AI 會寫，卻不一定寫得像團隊的人。Tim 的方法，就是在解這題。\u003C\u002Fp>\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>Workflow piece\u003C\u002Fth>\u003Cth>功能\u003C\u002Fth>\u003Cth>Tim 為什麼用\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>AGENTS.md\u003C\u002Ftd>\u003Ctd>放專案規則、命令、慣例\u003C\u002Ftd>\u003Ctd>讓每次 agent 工作都對齊同一套標準\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Skills\u003C\u002Ftd>\u003Ctd>針對任務的 markdown 指南\u003C\u002Ftd>\u003Ctd>只在需要時載入，減少上下文噪音\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>OpenSpec\u003C\u002Ftd>\u003Ctd>產生 proposal.md、design.md、tasks.md\u003C\u002Ftd>\u003Ctd>把需求變成可執行計畫\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003Ch2>他先定架構，不先丟 prompt\u003C\u002Fh2>\u003Cp>Tim 的做法很像老鳥帶新人。先把架構搭好，再讓 agent 開工。他的例子用的是 \u003Ca href=\"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Faspnet\u002Fcore\u002Fweb-api\u002F?view=aspnetcore-8.0\" target=\"_blank\" rel=\"noopener\">ASP.NET Core API\u003C\u002Fa> 當後端，\u003Ca href=\"https:\u002F\u002Fangular.dev\" target=\"_blank\" rel=\"noopener\">Angular\u003C\u002Fa> 當前端，還有 \u003Ca href=\"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fdotnet\u002Faspire\u002Fget-started\u002Faspire-overview\" target=\"_blank\" rel=\"noopener\">.NET Aspire\u003C\u002Fa> 來串整個系統。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1778553054052-06mp.png\" alt=\"Tim Deschryver 的 AI 開發流程\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>這裡的重點不是技術棧多炫，而是邊界夠清楚。Tim 偏好 vertical slices，因為每個切片都能獨立改、獨立砍。這對 AI 很重要，因為 agent 最怕那種邊界模糊的老專案，寫兩段 code 就開始亂接。\u003C\u002Fp>\u003Cp>他還提到 Angular Signals。這代表前端狀態管理也不是隨便亂塞。你先把系統設計好，AI 才有地方發揮。否則你只是讓它在一團混亂裡加速製造混亂。\u003C\u002Fp>\u003Cul>\u003Cli>後端：ASP.NET Core API\u003C\u002Fli>\u003Cli>前端：Angular + Signals\u003C\u002Fli>\u003Cli>協調層：.NET Aspire\u003C\u002Fli>\u003Cli>架構：vertical slices\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>AGENTS.md 是他最先要放進 repo 的檔案\u003C\u002Fh2>\u003Cp>Tim 把 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fagents.md\" target=\"_blank\" rel=\"noopener\">AGENTS.md\u003C\u002Fa> 當成 coding agent 的預設說明書。裡面放專案規則、建置指令、測試指令、資料夾結構，還有任何 agent 每次進 repo 都該知道的事。\u003C\u002Fp>\u003Cp>這招很實在。因為 AI 最常出包的地方，不是語法，而是上下文不一致。今天一個 prompt 說要跑測試，明天另一個 prompt 又忘了專案慣例。把規則集中在一個檔案，至少能少掉很多廢話。\u003C\u002Fp>\u003Cp>他也提到不同工具有不同命名。\u003Ca href=\"\u002Fnews\u002Fgithub-agentic-workflows-ai-github-actions-zh\">GitH\u003C\u002Fa>ub \u003Ca href=\"\u002Ftag\u002Fcopilot\">Copilot\u003C\u002Fa> 可能用 instructions.md，Claude 會看 CLAUDE.md，\u003Ca href=\"https:\u002F\u002Fdocs.anthropic.com\u002Fen\u002Fdocs\u002Fclaude-code\" target=\"_blank\" rel=\"noopener\">Claude Code\u003C\u002Fa> 也能透過連結讀 AGENTS.md。名字不是重點，重點是你有沒有養成把規則寫下來的習慣。\u003C\u002Fp>\u003Cblockquote>“The use of the term dates back to 1911, although such riders had existed before then.”\u003C\u002Fblockquote>\u003Cp>這句引述來自 Tim 用來解釋 domestique 的段落。很貼切。開發者還是領隊，agent 只是那個在前面拉車的人。\u003C\u002Fp>\u003Cp>他還建議，在資料模型複雜時，把 Mermaid 圖放進 AGENTS.md。這點我覺得很聰明。因為圖比長篇文字更容易讓 agent 抓到關係，也比口頭描述更不容易走鐘。\u003C\u002Fp>\u003Cul>\u003Cli>AGENTS.md 要常駐在上下文\u003C\u002Fli>\u003Cli>可放命令、慣例、架構說明\u003C\u002Fli>\u003Cli>複雜資料模型可加 Mermaid 圖\u003C\u002Fli>\u003Cli>專案變動後要同步更新\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>Skills 讓上下文更小，輸出更準\u003C\u002Fh2>\u003Cp>Tim 的下一層是 \u003Ca href=\"https:\u002F\u002Fskills.sh\" target=\"_blank\" rel=\"noopener\">skills\u003C\u002Fa>。這些是 markdown 檔，也能帶 script。和 AGENTS.md 不同，skills 只有在 agent 判斷相關時才載入。這讓它很適合處理單一任務，例如產生 component、補 test、寫文件。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1778553063022-6vxq.png\" alt=\"Tim Deschryver 的 AI 開發流程\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>這種設計很像把工具箱分格。你不會把所有工具倒在桌上，再叫人自己找。你會把螺絲起子、扳手、電鑽分開放。AI 也一樣。上下文越乾淨，結果通常越穩。\u003C\u002Fp>\u003Cp>Tim 會用官方 skills 來處理 \u003Ca href=\"https:\u002F\u002Fangular.dev\" target=\"_blank\" rel=\"noopener\">Angular\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fdotnet\u002F\" target=\"_blank\" rel=\"noopener\">.NET\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Faspnet\u002Fcore\u002Ftest\u002F?view=aspnetcore-8.0\" target=\"_blank\" rel=\"noopener\">測試\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fwww.typescriptlang.org\" target=\"_blank\" rel=\"noopener\">TypeScript\u003C\u002Fa> 這些主題。這表示他不是把所有知識塞進一個超長 prompt，而是讓 agent 需要什麼就拿什麼。\u003C\u002Fp>\u003Cul>\u003Cli>skills 是任務型知識包\u003C\u002Fli>\u003Cli>只在需要時載入\u003C\u002Fli>\u003Cli>適合框架、測試、文件工作\u003C\u002Fli>\u003Cli>比長 prompt 更容易維護\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>OpenSpec 把需求變成可執行計畫\u003C\u002Fh2>\u003Cp>Tim 還提到 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fspec-kit\" target=\"_blank\" rel=\"noopener\">OpenSpec\u003C\u002Fa>。這套流程會先產出 proposal.md，再來是 design.md，最後是 tasks.md。你可以把它想成先寫提案，再寫設計，最後拆工作。\u003C\u002Fp>\u003Cp>這對 agent 工作流很重要。因為很多 AI 寫 code 的失敗，不是寫不出來，而是根本沒搞懂要做什麼。OpenSpec 逼你先把需求說清楚，然後把設計和任務拆開。這樣 agent 比較不會一邊寫一邊猜。\u003C\u002Fp>\u003Cp>Tim 的做法也很符合真實團隊節奏。先有提案，才有設計。先有設計，才有任務。你如果直接叫 AI「幫我做功能」，十之八九會得到一坨看起來能跑、其實很難維護的東西。\u003C\u002Fp>\u003Cul>\u003Cli>proposal.md：先定需求\u003C\u002Fli>\u003Cli>design.md：再定方案\u003C\u002Fli>\u003Cli>tasks.md：最後拆成工作項\u003C\u002Fli>\u003Cli>適合新功能或重構\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>這套方法跟其他 AI 流程差在哪\u003C\u002Fh2>\u003Cp>如果拿這套流程跟常見的 \u003Ca href=\"\u002Ftag\u002Fai-coding\">AI coding\u003C\u002Fa> 方式比，差異其實很明顯。很多人現在還在用單次 prompt，丟一句「幫我改這段」就結束。這種方式快是快，但很吃運氣。只要專案一複雜，結果就開始飄。\u003C\u002Fp>\u003Cp>Tim 的方法比較像工程化。AGENTS.md 負責固定規則，skills 負責局部知識，OpenSpec 負責需求拆解。三層分工之後，agent 比較像工具，不像亂猜答案的實習生。這點對大型 repo 特別有用。\u003C\u002Fp>\u003Cp>你也可以把它跟 \u003Ca href=\"https:\u002F\u002Fcursor.com\" target=\"_blank\" rel=\"noopener\">Cursor\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fwww.jetbrains.com\u002Fai\u002F\" target=\"_blank\" rel=\"noopener\">JetBrains AI\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fcodeium.com\u002Fwindsurf\" target=\"_blank\" rel=\"noopener\">Windsurf\u003C\u002Fa> 這類工具的使用方式對照一下。工具再強，還是要靠專案內部的規則。沒有規則，AI 只是在更快地犯錯。\u003C\u002Fp>\u003Cul>\u003Cli>單次 prompt：快，但不穩\u003C\u002Fli>\u003Cli>AGENTS.md：固定規則\u003C\u002Fli>\u003Cli>skills：局部知識\u003C\u002Fli>\u003Cli>OpenSpec：需求拆解\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>這其實是在補 AI 的短板\u003C\u002Fh2>\u003Cp>AI 寫 code 最麻煩的地方，不是語法。是它不會自己知道你們團隊怎麼維護 codebase。它不知道測試要跑哪個指令，也不知道哪些檔案不能亂動，更不知道你們是不是偏好 vertical slices。\u003C\u002Fp>\u003Cp>所以 Tim 的方法，本質上是在補這些短板。你把規則寫進 repo，讓 agent 每次都讀得到。你把知識切成小塊，讓它只在需要時載入。你把需求先拆成文件，再進到實作。這樣 AI 才比較像協作工具。\u003C\u002Fp>\u003Cp>我覺得這也是台灣團隊很該學的地方。很多公司已經買了 AI 工具，但流程還停在手動時代。結果就是大家都很忙，AI 也很忙，最後沒人知道為什麼 code review 還是這麼痛苦。\u003C\u002Fp>\u003Ch2>結論：先整理 repo，再叫 AI 幹活\u003C\u002Fh2>\u003Cp>Tim Deschryver 這篇最實用的地方，就是它沒有把 AI 講成神。它只是把 agent 放回工程流程裡。先有架構，再有規則，再有任務拆解，最後才是寫 code。\u003C\u002Fp>\u003Cp>如果你現在也在用 coding agent，我會建議你先做三件事：補 AGENTS.md、拆一個 skills、把下一個功能寫成 proposal\u002Fdesign\u002Ftasks。你不用一次做完，但只要開始做，AI 的輸出通常就會穩很多。\u003C\u002Fp>\u003Cp>說白了，問題從來不是 AI 夠不夠強。問題是你的 repo 有沒有準備好讓它工作。\u003C\u002Fp>","Tim Deschryver 用 AGENTS.md、skills 和 spec，把 coding agent 變成更穩定的寫碼助手，重點是少靠大 prompt，多靠專案規則。","timdeschryver.dev","https:\u002F\u002Ftimdeschryver.dev\u002Fblog\u002Fkeep-agentic-ai-simple-a-practical-workflow-for-software-development",null,"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1778553054052-06mp.png",[13,14,15,16,17,18,19],"AI workflow","AGENTS.md","coding agents","OpenSpec","skills","Tim Deschryver","軟體開發","zh",0,false,"2026-05-12T02:30:30.616329+00:00","2026-05-12T02:30:30.566+00:00","done","752a611e-0fd7-499f-a15b-9f15188b47e3","tim-deschryver-practical-ai-workflow-devs-zh","tools","6731f008-d0b5-431c-8b1f-720f947e4875","published","2026-05-12T09:00:12.816+00:00",[33,34,35],"AGENTS.md 應該放專案規則、測試命令和架構說明。","skills 適合放框架或任務型知識，避免上下文太雜。","OpenSpec 先寫提案、設計、任務，再讓 agent 寫 code。",[37,39,41,43,45],{"name":15,"slug":38},"coding-agents",{"name":14,"slug":40},"agentsmd",{"name":16,"slug":42},"openspec",{"name":13,"slug":44},"ai-workflow",{"name":17,"slug":17},{"id":29,"slug":47,"title":48,"language":49},"tim-deschryver-practical-ai-workflow-devs-en","Tim Deschryver’s practical AI workflow for devs","en",[51,57,63,69,75,81],{"id":52,"slug":53,"title":54,"cover_image":55,"image_url":55,"created_at":56,"category":28},"68e4be16-dc38-4524-a6ea-5ebe22a6c4fb","why-vidhub-huiyuan-hutong-bushi-quan-shebei-tongyong-zh","為什麼 VidHub 會員互通不是「買一次全設備通用」","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1778789450987-advz.png","2026-05-14T20:10:24.048988+00:00",{"id":58,"slug":59,"title":60,"cover_image":61,"image_url":61,"created_at":62,"category":28},"7a1e174f-746b-4e82-a0e3-b2475ab39747","why-buns-zig-to-rust-experiment-is-right-zh","為什麼 Bun 的 Zig-to-Rust 實驗是對的","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1778767879127-5dna.png","2026-05-14T14:10:26.886397+00:00",{"id":64,"slug":65,"title":66,"cover_image":67,"image_url":67,"created_at":68,"category":28},"e742fc73-5a65-4db3-ad17-88c99262ceb7","why-openai-api-pricing-is-product-strategy-zh","為什麼 OpenAI API 定價是產品策略，不是註腳","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1778749859485-chvz.png","2026-05-14T09:10:26.003818+00:00",{"id":70,"slug":71,"title":72,"cover_image":73,"image_url":73,"created_at":74,"category":28},"c757c5d8-eda9-45dc-9020-4b002f4d6237","why-claude-code-prompt-design-beats-ide-copilots-zh","為什麼 Claude Code 的提示設計贏過 IDE Copilot","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1778742645084-dao9.png","2026-05-14T07:10:29.371901+00:00",{"id":76,"slug":77,"title":78,"cover_image":79,"image_url":79,"created_at":80,"category":28},"4adef3ab-9f07-4970-91cf-77b8b581b348","why-databricks-model-serving-is-right-default-zh","為什麼 Databricks Model Serving 是生產推論的正確預設","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1778692245329-a2wt.png","2026-05-13T17:10:30.659153+00:00",{"id":82,"slug":83,"title":84,"cover_image":85,"image_url":85,"created_at":86,"category":28},"b3305057-451d-48e4-9fb9-69215f7effad","why-ibm-bob-right-kind-ai-coding-assistant-zh","為什麼 IBM 的 Bob 才是對的 AI 寫碼助手","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1778664653510-64hc.png","2026-05-13T09:30:21.881547+00:00",[88,93,98,103,108,113,118,123,128,133],{"id":89,"slug":90,"title":91,"created_at":92},"de769291-4574-4c46-a76d-772bd99e6ec9","googles-biggest-gemini-launches-in-2026-zh","Google 2026 最大 Gemini 盤點","2026-03-26T07:26:39.21072+00:00",{"id":94,"slug":95,"title":96,"created_at":97},"855cd52f-6fab-46cc-a7c1-42195e8a0de4","surepath-real-time-mcp-policy-controls-zh","SurePath 推出即時 MCP 政策控管","2026-03-26T07:57:40.77233+00:00",{"id":99,"slug":100,"title":101,"created_at":102},"9b19ab54-edef-4dbd-9ce4-a51e4bae4ebb","mcp-in-2026-the-ai-tool-layer-teams-use-zh","2026 年 MCP：團隊真的在用的 AI 工具層","2026-03-26T08:01:46.589694+00:00",{"id":104,"slug":105,"title":106,"created_at":107},"af9c46c3-7a28-410b-9f04-32b3de30a68c","prompting-in-2026-what-actually-works-zh","2026 提示工程，真正有用的是什麼","2026-03-26T08:08:12.453028+00:00",{"id":109,"slug":110,"title":111,"created_at":112},"05553086-6ed0-4758-81fd-6cab24b575e0","garry-tan-open-sources-claude-code-toolkit-zh","Garry Tan 開源 Claude Code 工具包","2026-03-26T08:26:20.068737+00:00",{"id":114,"slug":115,"title":116,"created_at":117},"042a73a2-18a2-433d-9e8f-9802b9559aac","github-ai-projects-to-watch-in-2026-zh","2026 必看 20 個 GitHub AI 專案","2026-03-26T08:28:09.619964+00:00",{"id":119,"slug":120,"title":121,"created_at":122},"a5f94120-ac0d-4483-9a8b-63590071ac6a","claude-code-vs-cursor-2026-zh","Claude Code 與 Cursor 深度對比：202…","2026-03-26T13:27:14.279193+00:00",{"id":124,"slug":125,"title":126,"created_at":127},"0975afa1-e0c7-4130-a20d-d890eaed995e","practical-github-guide-learning-ml-2026-zh","2026 機器學習入門 GitHub 實用指南","2026-03-27T01:16:49.712576+00:00",{"id":129,"slug":130,"title":131,"created_at":132},"bfdb467a-290f-4a80-b3a9-6f081afb6dff","aiml-2026-student-ai-ml-lab-repo-review-zh","AIML-2026：像課綱的學生實驗 Repo","2026-03-27T01:21:51.467798+00:00",{"id":134,"slug":135,"title":136,"created_at":137},"80cabc3e-09fc-4ff5-8f07-b8d68f5ae545","ai-trending-github-repos-and-research-feeds-zh","AI Trending：把 AI 資源收成一張表","2026-03-27T01:31:35.262183+00:00"]