[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-claude-code-hidden-checks-expose-bad-habit-zh":3,"article-related-claude-code-hidden-checks-expose-bad-habit-zh":30,"series-tools-e1144d75-9832-4d02-97af-95700b5e9547":77},{"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},"e1144d75-9832-4d02-97af-95700b5e9547","claude-code-hidden-checks-expose-bad-habit-zh","Claude Code 讓你先審再用","\u003Cp data-speakable=\"summary\">以前我先信工具再補檢查，現在我先查行為再讓它碰 codebase。\u003C\u002Fp>\u003Cp>我用 \u003Ca href=\"\u002Ftag\u002Fclaude\">Claude\u003C\u002Fa> \u003Ca href=\"\u002Fnews\u002Fopencode-vs-cursor-cli-ai-zh\">Code\u003C\u002Fa> 一陣子了，老實說，一開始真的很順，順到有點可怕。它會補檔、會改字、會接著下一步做完，像個很懂事的實習生。但我越用越不踏實，因為它太會做事了，卻不一定會把自己在做什麼講清楚。AI 開發工具一旦進到 shell、repo、\u003Ca href=\"\u002Ftag\u002Ftoken\">token\u003C\u002Fa>、網路這幾個地方，我就不想再靠感覺過日子。感覺這種東西，通常是出事前最後的麻痺。\u003C\u002Fp>\u003Cp>這次讓我停下來的是 \u003Ca href=\"https:\u002F\u002Fzhuanlan.zhihu.com\u002Fp\u002F2055654173811782912\">這篇 Zhihu 文章\u003C\u002Fa>，它整理了 Chaofan Shou 在 X 上提到的 \u003Ca href=\"\u002Ftag\u002Fclaude-code\">Claude Code\u003C\u002Fa> npm 套件隱藏邏輯問題。原始 X 貼文可看 \u003Ca href=\"https:\u002F\u002Fx.com\u002F\" rel=\"nofollow\">Chaofan Shou 的 X\u003C\u002Fa>，而 \u003Ca href=\"\u002Ftag\u002Fanthropic\">Anthropic\u003C\u002Fa> 的官方產品頁在 \u003Ca href=\"https:\u002F\u002Fwww.anthropic.com\u002Fclaude-code\">這裡\u003C\u002Fa>。我不把那篇整理當成法律結論，我把它當成一個很實際的提醒：你以為你在裝工具，其實你是在把一段行為邏輯放進工作流。\u003C\u002Fp>\u003Ch2>我最在意的不是它做了什麼，是它沒先講\u003C\u002Fh2>\u003Cblockquote>Anthropic 的 AI 編程工具 Claude Code 的 npm 包裡，帶著一段不太顯眼的判斷邏輯。\u003C\u002Fblockquote>\u003Cp>翻譯一下就是，問題不只在功能本身，而在那段功能是藏著跑的。開發者最怕的從來不是複雜，而是默默發生。你今天裝一個 CLI，明天它就能讀 repo、碰環境變數、發網路請求，甚至根據地區或帳號走不同分支。這些事如果寫得清楚，我最多翻個白眼；如果藏得很深，我就會開始懷疑整個信任邊界是不是早就歪了。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1783447387646-8qal.png\" alt=\"Claude Code 讓你先審再用\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>我以前也踩過類似的坑。某個 SDK 文件寫得像很單純，實際上啟動時會先做一輪外連，還會在不同環境切不同 endpoint。那次之後我學乖了：只要是會進到本機、會碰到 source、會呼叫遠端服務的東西，我都先當成供應鏈元件處理，不當成「只是個小工具」。\u003C\u002Fp>\u003Cp>實操寫法很簡單：先看 package 內容，再看啟動流程，再看它到底會不會偷偷對外連線。不要先試用，先審查。你要問的不是「它好不好用」，而是「它在什麼條件下會改變行為」。\u003C\u002Fp>\u003Cul>\u003Cli>先鎖版本，不要直接吃 latest。\u003C\u002Fli>\u003Cli>先查 startup、postinstall、login、command execution 這幾個點。\u003C\u002Fli>\u003Cli>先寫下你預期的行為，再去比對實際行為。\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>npm 最會把驚喜包成日常\u003C\u002Fh2>\u003Cp>Claude Code 這件事之所以刺眼，是因為它是 npm 套件。npm 的問題我講很多次了：它太方便，方便到大家會把審查這件事外包給品牌印象。看到 Anthropic、看到 CLI、看到文件寫得像樣，很多人就直接 npm install，然後把自己 repo 的控制權交出去一小段。這一小段，通常就是後面出事的起點。\u003C\u002Fp>\u003Cp>我不是在酸 npm，本身不是壞東西。壞的是我們對它太鬆。你把一個能讀檔、能跑 shell、能連網的工具當一般依賴，等於把供應鏈風險縮成一個 install 指令。這種縮法很爽，真的很爽，直到你發現工具可以在你沒注意的時候改掉行為。\u003C\u002Fp>\u003Cp>實操寫法是把 \u003Ca href=\"\u002Ftag\u002Fai-coding\">AI coding\u003C\u002Fa> tool 當成高權限依賴處理。你可以用 lockfile、內部鏡像、artifact 留存，甚至把實際安裝包抓下來做審核。若它不是開源、或你沒辦法清楚看到執行路徑，那就把審查門檻拉高，不要用「反正大家都在用」來偷懶。\u003C\u002Fp>\u003Cul>\u003Cli>固定版本，不要讓更新自己漂移。\u003C\u002Fli>\u003Cli>檢查是否有 postinstall 或啟動時的隱藏動作。\u003C\u002Fli>\u003Cli>把你實際測過的 artifact 留檔。\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>地區判斷一進來，產品政策就開始寫進程式碼\u003C\u002Fh2>\u003Cp>如果那段邏輯真的跟識別中國用戶有關，我會更在意另一件事：產品政策被寫進 runtime 了。這種東西很常見，只是大家平常懶得講。它可以是 locale、IP、帳號地區、付款區域、語言設定，表面上看起來像商業規則，實際上卻會直接影響工具怎麼跑。到了 AI 開發工具這層，這就不是 UI 問題了，是 workflow 問題。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1783447386207-bgf6.png\" alt=\"Claude Code 讓你先審再用\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>我遇過最煩的一種 SaaS CLI，就是不同地區回來的結果不一樣，卻不主動講。你以為是網路慢，後來才發現是 endpoint 不同；你以為是功能壞掉，後來才知道是區域限制。這種東西最消耗信任，因為它不會大聲爆炸，它只會安靜地偏掉。\u003C\u002Fp>\u003Cp>實操寫法是直接問 vendor：它會不會依地區、帳號類型、IP、語言改變行為？如果對方答得含糊，你就當它會。再來，從不同環境測一次，至少要知道輸出有沒有差。這不是多疑，這是基本功。\u003C\u002Fp>\u003Cul>\u003Cli>從不同國別 VPN 或環境測試。\u003C\u002Fli>\u003Cli>比對輸出、錯誤訊息、endpoint、延遲。\u003C\u002Fli>\u003Cli>把差異寫進內部文件，不要只靠口耳相傳。\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>研究者先抓到，不代表廠商就有交代\u003C\u002Fh2>\u003Cp>這次讓我重視的另一個點，是 Chaofan Shou 先把怪味道抓出來了。這種事我看多了：先是某個研究者翻 package、看 diff、抓網路行為，接著才有人開始補說明。問題是，開發者不該等外面的人把異常挖出來，才知道自己裝了什麼。那不是透明，那是把透明度外包。\u003C\u002Fp>\u003Cp>我不是在要求廠商像聖人一樣完美，我只是希望重要行為能被命名、被文件化、被審核。你如果要改變工具行為，至少要讓使用者知道條件是什麼。尤其是 AI 工具，它碰到的不是一般資料，是 source code、token、終端機、CI 設定，這些東西的敏感度完全不是同一個層級。\u003C\u002Fp>\u003Cp>實操寫法是把研究者的發現納入你的 review loop。只要有可信報告，就先暫停升級，對照 artifact，記錄差異，確認到底是預期行為還是藏起來的分支。不要急著替 vendor 找台階下，先保住自己的環境。\u003C\u002Fp>\u003Cp>你可以把這件事當成一個很簡單的原則：如果一個工具需要別人幫你\u003Ca href=\"\u002Fnews\u002Fgithub-repo-publishes-daily-ai-deep-dives-zh\">看懂\u003C\u002Fa>它，你就不該在沒審完之前讓它碰正式工作流。\u003C\u002Fp>\u003Ch2>我現在只看四件事，其他都先放旁邊\u003C\u002Fh2>\u003Cp>我後來把這類工具的審查縮成四件事，因為再多就會\u003Ca href=\"\u002Fnews\u002Friyadh-blockchain-show-web3-infrastructure-zh\">變成\u003C\u002Fa>形式主義。第一，它能讀什麼。第二，它能送出什麼。第三，它能不能自己改行為。第四，它有沒有把這些事講清楚。這四件事看起來很土，但真的很管用。AI 工具的問題常常不是功能太少，而是權限太大、說明太少。\u003C\u002Fp>\u003Cp>我也不想再聽那種「它只是幫你加速」的說法。加速是結果，不是免責。只要它能進你的 shell、能動你的 repo、能發 request，它就不是一般小幫手。它是有權限的軟體。你對 auth library、payment SDK 不會只看 logo，那你對 AI coding tool 也不該只看品牌。\u003C\u002Fp>\u003Cp>實操寫法是做一份一頁式內規，讓同事每次導入都照同一套問題回答。不要寫成長篇大論，因為沒人會看。要短，要硬，要能真的執行。\u003C\u002Fp>\u003Ch2>可抄的模板\u003C\u002Fh2>\u003Cpre>\u003Ccode># AI Coding Tool Review Checklist\n\n## Tool\n- Name:\n- Version:\n- Source URL:\n- Package manager \u002F install method:\n\n## Access scope\n- [ ] Repo files\n- [ ] Local shell commands\n- [ ] Environment variables\n- [ ] Secrets manager tokens\n- [ ] Network access\n\n## Data sent out\n- [ ] Prompts\n- [ ] Code snippets\n- [ ] File contents\n- [ ] Metadata\n- [ ] Region \u002F locale \u002F account signals\n\n## Behavior checks\n- [ ] Different behavior by region?\n- [ ] Different behavior by account type?\n- [ ] Phone home on startup?\n- [ ] Phone home on command execution?\n- [ ] Are those calls documented?\n\n## Supply-chain checks\n- [ ] Exact version pinned\n- [ ] Package contents reviewed\n- [ ] Postinstall scripts reviewed\n- [ ] Artifact archived internally\n- [ ] Upgrade path documented\n\n## Approval rule\n- Approved by:\n- Date:\n- Notes:\n- Re-review trigger:\n  - New version\n  - New network behavior\n  - New region logic\n  - New file access scope\n\n## Decision\n- [ ] Approved\n- [ ] Approved with limits\n- [ ] Rejected\n\n## Why\nWrite the shortest honest explanation possible.\nIf you can’t explain the behavior in plain language, don’t ship it.\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>這份模板是我整理出來的，不是 Anthropic 給的，也不是那篇 Zhihu 文章直接附的。原始線索來自 \u003Ca href=\"https:\u002F\u002Fzhuanlan.zhihu.com\u002Fp\u002F2055654173811782912\">Zhihu\u003C\u002Fa>、Chaofan Shou 的 \u003Ca href=\"https:\u002F\u002Fx.com\u002F\">X\u003C\u002Fa>，以及 \u003Ca href=\"https:\u002F\u002Fwww.anthropic.com\u002Fclaude-code\">Claude Code 官方頁面\u003C\u002Fa>。我從這些來源衍生出來的結論很簡單：AI 開發工具先審再用，省下來的不是時間，是後面少掉的麻煩。","我拆 Claude Code 的隱藏檢查，順手給你一份 AI 開發工具上線前的審查清單，直接能貼進團隊流程。","zhuanlan.zhihu.com","https:\u002F\u002Fzhuanlan.zhihu.com\u002Fp\u002F2055654173811782912",null,"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1783447387646-8qal.png","tools","zh","111ad479-9e7b-48a2-9f7c-1c907d239865",[17,18,19,20,21],"Claude Code","npm supply chain","AI coding tools","security review","region logic",[23,24,25],"AI 開發工具要先審行為，再談好不好用。","npm 套件的便利會放大隱藏行為的風險。","一頁式審查清單比空泛的信任更實用。",0,"2026-07-07T18:02:41.063784+00:00","2026-07-07T18:02:41.021+00:00","ddbe17bf-4560-43f7-af76-3e7d6e08e601",{"tags":31,"relatedLang":36,"relatedPosts":40},[32,34],{"name":17,"slug":33},"claude-code",{"name":19,"slug":35},"ai-coding-tools",{"id":15,"slug":37,"title":38,"language":39},"claude-code-hidden-checks-expose-bad-habit-en","Claude Code’s hidden checks expose a bad habit","en",[41,47,53,59,65,71],{"id":42,"slug":43,"title":44,"cover_image":45,"image_url":45,"created_at":46,"category":13},"5882cab0-ccef-4732-a062-0c8710c5b5f8","claude-ban-lifted-access-restoration-playbook-zh","Claude 解禁后访问恢复怎么做","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1783339421191-4tml.png","2026-07-06T12:03:13.581131+00:00",{"id":48,"slug":49,"title":50,"cover_image":51,"image_url":51,"created_at":52,"category":13},"38959780-e00f-4a9f-afd1-a75f24732cd1","rustrover-2026-1-4-right-default-ide-rust-zh","RustRover 2026.1.4 是 Rust 團隊的正確預設 IDE","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1783211564090-s3ei.png","2026-07-05T00:32:19.50775+00:00",{"id":54,"slug":55,"title":56,"cover_image":57,"image_url":57,"created_at":58,"category":13},"abe21472-cda7-491d-9d7b-f9f64e3154b3","claude-design-synced-prototypes-setup-zh","Claude Design 同步原型設定指南","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1783191770382-4zms.png","2026-07-04T19:02:21.637665+00:00",{"id":60,"slug":61,"title":62,"cover_image":63,"image_url":63,"created_at":64,"category":13},"29e9abee-1972-4b0f-8994-ce27c006a5f3","rust-196-turns-ranges-into-safer-copies-zh","Rust 1.96 讓 range 變可複製","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1783189995404-zbpf.png","2026-07-04T18:32:53.059717+00:00",{"id":66,"slug":67,"title":68,"cover_image":69,"image_url":69,"created_at":70,"category":13},"081e378e-a0d9-408b-95ab-003b476c67a5","ai-data-operations-vs-mlops-what-each-owns-zh","AI Data Ops 與 MLOps 的分工","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1783168367881-i1cl.png","2026-07-04T12:32:19.522726+00:00",{"id":72,"slug":73,"title":74,"cover_image":75,"image_url":75,"created_at":76,"category":13},"351f5aa9-e7da-4676-a7f3-893336f79a92","opentag-turns-slack-threads-into-actions-zh","OpenTag 讓 Slack 對話變動作","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1783148607976-8g9n.png","2026-07-04T07:02:50.017949+00:00",[78,83,88,93,98,103,108,113,118,123],{"id":79,"slug":80,"title":81,"created_at":82},"855cd52f-6fab-46cc-a7c1-42195e8a0de4","surepath-real-time-mcp-policy-controls-zh","SurePath 推出即時 MCP 政策控管","2026-03-26T07:57:40.77233+00:00",{"id":84,"slug":85,"title":86,"created_at":87},"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":89,"slug":90,"title":91,"created_at":92},"af9c46c3-7a28-410b-9f04-32b3de30a68c","prompting-in-2026-what-actually-works-zh","2026 提示工程，真正有用的是什麼","2026-03-26T08:08:12.453028+00:00",{"id":94,"slug":95,"title":96,"created_at":97},"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":99,"slug":100,"title":101,"created_at":102},"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":104,"slug":105,"title":106,"created_at":107},"a5f94120-ac0d-4483-9a8b-63590071ac6a","claude-code-vs-cursor-2026-zh","Claude Code 與 Cursor 深度對比：202…","2026-03-26T13:27:14.279193+00:00",{"id":109,"slug":110,"title":111,"created_at":112},"0975afa1-e0c7-4130-a20d-d890eaed995e","practical-github-guide-learning-ml-2026-zh","2026 機器學習入門 GitHub 實用指南","2026-03-27T01:16:49.712576+00:00",{"id":114,"slug":115,"title":116,"created_at":117},"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":119,"slug":120,"title":121,"created_at":122},"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":124,"slug":125,"title":126,"created_at":127},"3ce6e6e2-bac5-463e-9f8d-45caabcc61f7","awesome-ai-for-science-research-tools-map-zh","AI 科研工具清單，開始像地圖了","2026-03-27T01:46:50.521945+00:00"]