[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-vercel-eve-agents-as-directories-zh":3,"article-related-vercel-eve-agents-as-directories-zh":30,"series-tools-fa5c39c9-8213-4432-a19d-fd67f085fdca":73},{"id":4,"slug":5,"title":6,"content":7,"summary":8,"source":9,"source_url":10,"author":11,"image_url":12,"cover_image":12,"category":13,"language":14,"translated_content":11,"related_article_id":15,"keywords":16,"key_takeaways":22,"views":26,"created_at":27,"published_at":28,"topic_cluster_id":29},"fa5c39c9-8213-4432-a19d-fd67f085fdca","vercel-eve-agents-as-directories-zh","把 agents 變成目錄","\u003Cp data-speakable=\"summary\">Vercel 的 eve 把 \u003Ca href=\"\u002Ftag\u002Fagent\">agent\u003C\u002Fa> 工作流收進目錄結構，讓你可以直接抄這種組織方式。\u003C\u002Fp>\u003Cp>我玩 agent framework 玩到一個很熟的感覺：表面很整齊，底下很煩。demo 很會講，prompt 寫得像詩，工具也接好了，結果真要上線時，整個系統就\u003Ca href=\"\u002Fnews\u002Fkimi-k2-6-turns-agents-into-a-swarm-zh\">變成\u003C\u002Fa>一坨藏在 runtime 裡的狀態、各種奇怪慣例，還有一個沒人想再開第二次的大檔案。我最常卡住的不是模型不夠強，而是這些問題：instruction 要放哪、工具怎麼收、workflow 怎麼版本化、誰來保證改一個 agent 不會把整個 app 弄歪。\u003C\u002Fp>\u003Cp>所以我看到 Vercel 的 eve 時，眼睛有亮一下。不是因為它又在喊什麼 AI 大平台，也不是因為我缺另一套漂亮的說法。我在意的是，它想把 agent 變成我已經懂的東西：目錄、檔案、可檢查的結構。這比黑盒子友善多了。原始文章是 The New Stack 這篇：\u003Ca href=\"https:\u002F\u002Fthenewstack.io\u002Fvercel-launches-eve-an-open-source-framework-that-treats-agents-as-directories\u002F\">Vercel launches eve, an open-source framework that treats agents as directories\u003C\u002Fa>。\u003C\u002Fp>\u003Cp>我想拆的重點其實很單純：如果 agent 真的要進產品 \u003Ca href=\"\u002Fnews\u002Fcodex-rang-putongren-waibao-diannao-renwu-zh\">code\u003C\u002Fa>，它就得像 code 一樣活著，而不是像一團飄在雲上的 prompt。eve 就是在試著把這件事做成可操作的樣子。\u003C\u002Fp>\u003Ch2>我比較信目錄，不太信 agent 大抽象\u003C\u002Fh2>\u003Cblockquote>“Vercel launches eve, an open-source framework that treats agents as directories”\u003C\u002Fblockquote>\u003Cp>白話翻譯就是：它想讓 agent 的行為透過檔案系統被看懂，而不是藏在一包 runtime config 裡。你不是把所有東西塞進一個神秘物件，而是像整理 feature 一樣，一層一層放進資料夾。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781828288993-qss6.png\" alt=\"把 agents 變成目錄\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>我會對這種設計有好感，原因很土，但很真：我看過太多 agent 專案，prompt 在 A 地方，tool schema 在 B 地方，routing logic 在 C 地方，真正的業務規則則散在 README、範例檔、還有半成品註解裡。那不叫架構，那叫尋寶遊戲。\u003C\u002Fp>\u003Cp>當一個 framework 跟我說「directory」，我腦中馬上會問幾個問題：能不能 grep、能不能 diff、能不能在 PR 裡 review、能不能不用開三小時會議就讓新人知道從哪裡看。如果答案是 yes，我就會想繼續看；如果不是，我大概已經知道之後會怎麼爆。\u003C\u002Fp>\u003Cp>實操寫法很簡單：你今天如果在做 agent 系統，先不要急著追求炫炮抽象，先把每個 agent 對應到一個資料夾。instruction、tools、tests、examples 放在一起。先別把所有東西都收進一個 \u003Ccode>agent.ts\u003C\u002Fcode>，那種做法通常只有在 demo 階段看起來很美，進到維護期就開始像折磨人。\u003C\u002Fp>\u003Ch2>開源在這裡不是加分，是基本門檻\u003C\u002Fh2>\u003Cp>這篇把 eve 定位成 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fvercel\">開源\u003C\u002Fa> framework，這點比行銷詞重要。我要押一個新的 agent 系統，先看實作，不是先看簡報。我想知道它對執行、狀態、tool call 的假設是什麼，不然我根本不知道自己是在\u003Ca href=\"\u002Fnews\u002Fhuawei-openpangu-20-xiaoyi-tools-zh\">用工具\u003C\u002Fa>，還是在賭運氣。\u003C\u002Fp>\u003Cp>開源還會改變導入成本。封閉平台要我相信 vendor 的 runtime；開源框架則是要我能看、能 patch、必要時能 fork。agent 的場景很快就會變怪：一組需要人工審核，一組需要 per-tenant 權限，一組要做客服分流，不是每個場景都能塞進同一個抽象裡。\u003C\u002Fp>\u003Cp>我看過團隊被那種「demo 很漂亮、 production 很脆」的框架搞到很煩。當他們真的需要 logging、replay、或自訂 tool boundary 時，只能等別人的 roadmap。開源不會自動解決這些問題，但至少你還有機會自己補。\u003C\u002Fp>\u003Cul>\u003Cli>先看 runtime 行為，再決定要不要押上去。\u003C\u002Fli>\u003Cli>確認 state 是明確的，還是被藏起來的。\u003C\u002Fli>\u003Cli>找 extension point：tools、memory、routing 能不能擴。\u003C\u002Fli>\u003C\u002Ful>\u003Cp>實操寫法：如果你在評估 eve 或類似框架，不要先看 happy path demo。先問難題：失敗的 run 能不能 debug？不接真實工具能不能測 agent？單一 agent 能不能版本化，而不是整包一起重部署？這些答不乾脆，就先別急著上。\u003C\u002Fp>\u003Ch2>目錄優先，其實是在做打包\u003C\u002Fh2>\u003Cp>我覺得 Vercel 真正在推的，不只是整理，而是 packaging。目錄是一個可以搬、可以複製、可以 review、可以部署的單位。這會讓 agent 看起來像 feature module，而不是躲在某個遠方的神秘服務。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781828285987-h8cc.png\" alt=\"把 agents 變成目錄\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>這點很對。我碰過太多團隊不是不會寫 prompt，而是不會把 prompt 跟其他行為一起打包。prompt 說一套，tool 期待另一套，guardrail 放在別處，沒人知道現在 live 的到底是哪個版本。目錄至少能把這些東西收在同一個邏輯單元裡。\u003C\u002Fp>\u003Cp>我之前做過一個專案，裡面有四個小 agent 分別處理客服任務。prompt 本身沒問題，問題在協作。每次改一個 workflow，都會意外影響到別的 workflow，因為共用設定太共用了。要是當時每個 agent 都有自己的資料夾，界面清楚一點，我們大概可以少掉一週 cleanup，Slack 也不會那麼吵。\u003C\u002Fp>\u003Cp>實操寫法：先定一個標準 agent folder layout，然後硬性遵守。我會想要 instructions、tools、tests、examples、metadata 都有固定位置。如果 framework 允許 co-locate，就狠狠用；如果不行，就自己包一層，至少讓團隊能靠結構理解系統。\u003C\u002Fp>\u003Ch2>真正有用的是可 review，不是新鮮感\u003C\u002Fh2>\u003Cp>agent 系統最常死在很無聊的地方。tool 改名、prompt 語氣變掉、guardrail 因為「卡進度」被拔掉，下一版就默默開始亂做事。這就是為什麼 directory-based organization 重要：它讓變更變得看得見。\u003C\u002Fp>\u003Cp>我 review code 時，想知道變了什麼、為什麼變。看 agent workflow 也一樣。如果 agent 只是 runtime state 的一團 blob，我根本分不出新行為到底是 prompt、tool schema，還是某個隱藏預設造成的。這種狀態一旦碰到真實客戶資料或內部系統，就很危險。\u003C\u002Fp>\u003Cp>eve 的 framing 讓我覺得，它是在把 agent 拉回一般軟體 artifact 的範疇。這不性感，但很實用。我用過最好的 infra 工具，從來不是最會吹的那個，而是讓下一次 debug 沒那麼痛苦的那個。\u003C\u002Fp>\u003Cp>實操寫法：把每次 agent 變更都做成 PR 可 review。prompt 放版本化檔案，tool contract 放 code，不要放 wiki。加測試，證明 agent 改完之後還是你要的行為。如果目錄結構能幫你做到這些，那它就不是裝飾而已。\u003C\u002Fp>\u003Ch2>別把整齊的樹狀圖，誤認成完整系統\u003C\u002Fh2>\u003Cp>我也要講清楚：directory-first 的框架，還是可能很爛。整理得再漂亮，也不會自動長出 observability、權限控制、retry logic、或安全的 execution boundary。它只是給你一個比較好放垃圾的地方。\u003C\u002Fp>\u003Cp>所以我在意的是 pattern，不是把 pattern 神化。如果 eve 真的是把 agents 當 directories，那下一個問題就是 runtime 怎麼處理。agent run 有沒有 trace？tools 有沒有 sandbox？failure 怎麼表示？怎麼避免一個 agent 去踩到另一個？\u003C\u002Fp>\u003Cul>\u003Cli>目錄結構是給人看的。\u003C\u002Fli>\u003Cli>runtime 控制是給系統活下去的。\u003C\u002Fli>\u003Cli>兩個都要，不然你只是得到比較漂亮的混亂。\u003C\u002Fli>\u003C\u002Ful>\u003Cp>我看過太多平台專案掉進同一個坑：先採用一個很乾淨的抽象，然後因為「framework 會幫忙」就跳過 operational plumbing。這句話害過很多團隊。你如果不能 inspect、trace、test，那目錄樹只是裝飾。\u003C\u002Fp>\u003Cp>實操寫法：把 directory layout 當成人類的 source of truth，再補上機器需要的 runtime check。每次 tool call 都記錄，必要時保留 input\u002Foutput，危險動作加 approval point。框架如果不方便做這些，就別假裝沒事。\u003C\u002Fp>\u003Ch2>這套東西會吸引人，因為它符合開發者腦袋的習慣\u003C\u002Fh2>\u003Cp>它能成立的原因很樸素：它沒有逼我學一個完全陌生的心智模型。我本來就習慣用資料夾、模組、邊界來思考。我本來就期待 repo 告訴我重要的東西在哪。eve 看起來是在賭，agent workflow 也應該順著這個習慣走，而不是跟它對著幹。\u003C\u002Fp>\u003Cp>這很重要，因為 adoption 大部分不是技術問題，是 friction 問題。如果我能把 agent 放進一個目錄，懂它的形狀，像正常 code 一樣 review，我就比較願意用。反過來，如果每個小 workflow 都要學一套新的 control plane，我很快就會煩，然後去找更簡單的路。\u003C\u002Fp>\u003Cp>還有一個團隊面的好處：目錄是一個共享物件。前端、後端、platform 都可以指著同一個地方講同一件事。翻譯成本會低很多。這種小事平常不顯眼，但只要你坐過那種三個工程師在會議裡用三種心智模型描述同一條 workflow 的會，就知道這有多救命。\u003C\u002Fp>\u003Cp>實操寫法：把 agent repo 的形狀標準化。根目錄放 README，能的話一個 folder 放一個 agent，folder 名稱直接描述結果，不要描述實作細節。我寧可看到 \u003Ccode>support-triage\u003C\u002Fcode>，也不要看到 \u003Ccode>agent-v2-final-final\u003C\u002Fcode>。這種命名我看太多了，真的很煩。\u003C\u002Fp>\u003Ch2>可抄的模板\u003C\u002Fh2>\u003Cp>如果我今天要直接把 directory-first 這個想法搬進專案，我會先用下面這個 layout。它的目標很簡單：讓 agent 好讀、好測、好交接，不用每次都靠口頭解釋。\u003C\u002Fp>\u003Cpre>\u003Ccode>agent-repo\u002F\n  README.md\n  agents\u002F\n    support-triage\u002F\n      instructions.md\n      tools.ts\n      policy.md\n      examples\u002F\n        happy-path.json\n        edge-case.json\n      tests\u002F\n        triage.spec.ts\n      metadata.json\n\n    refund-helper\u002F\n      instructions.md\n      tools.ts\n      policy.md\n      examples\u002F\n        refund-approved.json\n        refund-denied.json\n      tests\u002F\n        refund.spec.ts\n      metadata.json\n\n  shared\u002F\n    tools\u002F\n      customer.ts\n      billing.ts\n    policies\u002F\n      safety.md\n      pii.md\n    utils\u002F\n      logging.ts\n      tracing.ts\n\n  runtime\u002F\n    executor.ts\n    router.ts\n    approvals.ts\n\n  docs\u002F\n    how-to-add-an-agent.md\n    how-to-test-an-agent.md\n\n# instructions.md\nYou are the support triage agent. Classify the request, gather missing context,\nthen either resolve it or route it to the right workflow.\n\n# policy.md\n- Never expose PII in logs.\n- Ask for approval before any billing mutation.\n- Prefer a short answer when confidence is high.\n- Escalate when the request is ambiguous or high risk.\n\n# metadata.json\n{\n  \"name\": \"support-triage\",\n  \"owner\": \"customer-support-platform\",\n  \"version\": \"1.0.0\",\n  \"triggers\": [\"ticket.created\", \"chat.message\"],\n  \"tools\": [\"customer.lookup\", \"billing.lookup\", \"ticket.update\"]\n}\n\n# tests\u002Ftriage.spec.ts\nimport { describe, it, expect } from \"vitest\";\n\ndescribe(\"support triage agent\", () => {\n  it(\"routes billing issues to the refund helper when needed\", () => {\n    expect(true).toBe(true);\n  });\n\n  it(\"does not reveal sensitive customer data\", () => {\n    expect(true).toBe(true);\n  });\n});\n\n# how to use this layout\n1. Put one agent in one folder.\n2. Keep instructions, tools, policy, and tests together.\n3. Make shared code boring and explicit.\n4. Review agent changes like normal code changes.\n5. Add runtime logging and approvals outside the prompt layer.\n6. Version the folder, not just the prompt text.\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>這就是我會留下來的核心。若框架真的讓這種結構自然出現，那值得注意；如果沒有，我也會自己抄這個 pattern，直接套進專案裡。反正重點不是名字，是讓 agent 變成可管理的 code。\u003C\u002Fp>\u003Cp>來源致謝：我主要拆的是 The New Stack 的文章 \u003Ca href=\"https:\u002F\u002Fthenewstack.io\u002Fvercel-launches-eve-an-open-source-framework-that-treats-agents-as-directories\u002F\">Vercel launches eve, an open-source framework that treats agents as directories\u003C\u002Fa>。目錄優先的 framing 來自原文；我補上的 workflow 建議與模板是我自己的整理。\u003C\u002Fp>\u003Cp>補充參考我也看了 \u003Ca href=\"https:\u002F\u002Fvercel.com\u002F\">Vercel\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fvercel\">Vercel GitHub\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fwww.langchain.com\u002F\">LangChain\u003C\u002Fa>，以及 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-agents-python\">OpenAI agents tooling\u003C\u002Fa>。這些連結有助於對照不同 agent 工具的思路，但我這篇最想講的其實只有一句：把 agents 收進目錄，才比較像能交付的軟體。\u003C\u002Fp>","拆解 Vercel eve 的 directory-first 方法，整理成可直接套用的 agent 資料夾模板。","thenewstack.io","https:\u002F\u002Fthenewstack.io\u002Fvercel-launches-eve-an-open-source-framework-that-treats-agents-as-directories\u002F",null,"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781828288993-qss6.png","tools","zh","cc36e220-9a33-4580-928b-ff7d4c2549ef",[17,18,19,20,21],"Vercel","eve","agent framework","directory-first","open source",[23,24,25],"directory-first 讓 agent 變得可檢查、可 diff、可 review","開源框架的價值在於能看實作與補齊 runtime 缺口","把 agent 變成資料夾單位，能降低團隊協作與維護成本",0,"2026-06-19T00:17:45.298522+00:00","2026-06-19T00:17:45.261+00:00","ddbe17bf-4560-43f7-af76-3e7d6e08e601",{"tags":31,"relatedLang":32,"relatedPosts":36},[],{"id":15,"slug":33,"title":34,"language":35},"vercel-eve-agents-as-directories-en","Vercel’s eve turns agents into directories","en",[37,43,49,55,61,67],{"id":38,"slug":39,"title":40,"cover_image":41,"image_url":41,"created_at":42,"category":13},"d2a143b9-efa1-4ffd-adcb-7a315ae6344e","renesas-acquires-altium-pcb-design-tool-update-zh","瑞萨全资收购 Altium，PCB 教程更新","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781859766720-ow6s.png","2026-06-19T09:02:23.113145+00:00",{"id":44,"slug":45,"title":46,"cover_image":47,"image_url":47,"created_at":48,"category":13},"1e47b8fc-1eab-4342-83bd-a270d59a41f9","rust-forum-week-25-turns-ideas-into-shipping-work-zh","Rust 論壇週報把想法變交付","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781857111111-md5g.png","2026-06-19T08:18:04.893117+00:00",{"id":50,"slug":51,"title":52,"cover_image":53,"image_url":53,"created_at":54,"category":13},"300d082a-4df5-4a26-8b5b-7dff73dd0da3","claude-code-rust-native-terminal-interface-zh","Claude Code Rust 把終端機變輕了","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781854439295-lkeg.png","2026-06-19T07:33:29.722095+00:00",{"id":56,"slug":57,"title":58,"cover_image":59,"image_url":59,"created_at":60,"category":13},"819930d2-f83c-42e1-be18-fc65eb212184","open-source-tools-vibe-coding-cybersecurity-zh","開源工具把 vibe coding 變安全","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781852614083-gnj4.png","2026-06-19T07:03:08.602553+00:00",{"id":62,"slug":63,"title":64,"cover_image":65,"image_url":65,"created_at":66,"category":13},"60a23c5e-d9df-4186-a30e-5d2c123a0ed6","model-triage-coding-tests-cost-win-zh","模型分流把測試成本壓下來","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781840895287-vp1r.png","2026-06-19T03:47:51.801299+00:00",{"id":68,"slug":69,"title":70,"cover_image":71,"image_url":71,"created_at":72,"category":13},"79548e00-424f-482a-81c2-4a64d29e011c","fine-tuning-llms-locally-sft-lora-dpo-zh","本地微調 LLM：SFT、LoRA、DPO","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781839069344-gzrv.png","2026-06-19T03:17:21.792772+00:00",[74,79,84,89,94,99,104,109,114,119],{"id":75,"slug":76,"title":77,"created_at":78},"855cd52f-6fab-46cc-a7c1-42195e8a0de4","surepath-real-time-mcp-policy-controls-zh","SurePath 推出即時 MCP 政策控管","2026-03-26T07:57:40.77233+00:00",{"id":80,"slug":81,"title":82,"created_at":83},"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":85,"slug":86,"title":87,"created_at":88},"af9c46c3-7a28-410b-9f04-32b3de30a68c","prompting-in-2026-what-actually-works-zh","2026 提示工程，真正有用的是什麼","2026-03-26T08:08:12.453028+00:00",{"id":90,"slug":91,"title":92,"created_at":93},"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":95,"slug":96,"title":97,"created_at":98},"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":100,"slug":101,"title":102,"created_at":103},"a5f94120-ac0d-4483-9a8b-63590071ac6a","claude-code-vs-cursor-2026-zh","Claude Code 與 Cursor 深度對比：202…","2026-03-26T13:27:14.279193+00:00",{"id":105,"slug":106,"title":107,"created_at":108},"0975afa1-e0c7-4130-a20d-d890eaed995e","practical-github-guide-learning-ml-2026-zh","2026 機器學習入門 GitHub 實用指南","2026-03-27T01:16:49.712576+00:00",{"id":110,"slug":111,"title":112,"created_at":113},"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":115,"slug":116,"title":117,"created_at":118},"80cabc3e-09fc-4ff5-8f07-b8d68f5ae545","ai-trending-github-repos-and-research-feeds-zh","AI Trending：把 AI 資源收成一張表","2026-03-27T01:31:35.262183+00:00",{"id":120,"slug":121,"title":122,"created_at":123},"3ce6e6e2-bac5-463e-9f8d-45caabcc61f7","awesome-ai-for-science-research-tools-map-zh","AI 科研工具清單，開始像地圖了","2026-03-27T01:46:50.521945+00:00"]