系列精選
查看全部工程師日誌
寫 Code 之外的生活觀察 — 理財、旅遊、健康、居住、時事評論
Elasticsearch 完整指南
從零開始學 Elasticsearch — 環境建置到生產環境優化
Claude Code 完整教學
從入門到進階 — Hooks、Sub-agents、MCP、Skills 開發全攻略
AZ-305 Azure 架構師認證
Azure 解決方案架構設計師五日課程筆記
Java / Spring 學習筆記
Java 核心語法、Stream API、併發控制、Spring Boot 實戰
AI Agent 架構全解析
從 harness 骨架拆解現代 AI Agent — 以 Claude Code 為例的 7 層架...
它沒報錯,只是換回內建的那一份:拆開 @ 檔案建議的兩道閘門
你在輸入框打一個 @,再打 src/comp,那零點幾秒裡,是誰去把那串檔案清單撈出來的? 設定參考答得很乾脆。內建的建議走的是 fast filesystem traversal,當場走訪檔案系統。沒有索引。 這件事拿抽屜來想最快。有人問你「那份合約在哪」,你從第一格抽屜開始翻,一格一格往下。抽屜只有五格的時候這是最快的做法,因為你連目錄都不用先做,做目錄的時間都夠你翻完了。抽屜長成一整面牆之後,同一招就開始拖。 官方文件自己把邊界寫出來了:a large monorepo may do better with project-specific indexing such as a pre-built file index。多大算大?文件一個檔案數、一個毫秒數都沒給,我也不補。 把這件事接到你自己那份目錄上fileSuggestion 的型別小到一眼看完:一個物件,type 永遠是 "command",command 是要跑的 shell 命令。預設 unset,不設就是內建那份。 123456{ "fileSuggestion&quo...
AI 與科技新聞摘要 - 2026/09/18
AI 產業現在有兩種文件在流通。一種是公司自己挑指標、自己挑時點發出來的;另一種是別人從外面量到的,或者法院叫你交出來的。 9 月 17 日這一天,兩種都出現了,而且撞在一起。 一、三個人、一組訂閱,還有一個開在 OpenAI 私有 monorepo 裡的 pull request資安公司 Hacktron AI 在 9 月 17 日公開揭露,它的三人團隊(Harsh Jaiswal、Mohan Pedhapati、Rahul Maini)在 OpenAI 的 bug bounty 計畫裡串起一條完整的攻擊鏈,最後在 OpenAI 的私有 monorepo 裡開了一個無害的 pull request 當概念驗證。賞金 6,500 美元。 鏈子一共五步:Discourse 中 libheif 函式庫的 heap buffer overflow,經 HEIC/HEIF 圖檔上傳觸發,拿到論壇環境的遠端程式碼執行;再利用 OpenAI 的 SSO 實作缺陷提權到 ChatGPT/Codex 帳號,從被入侵的員工帳號存取已連結的 GitHub 整合。那個 pull reques...
那份 log 是你自己寫的:TRACE 補的就是這一格,但現在還不該裝
「我憑什麼相信這份 log 沒被改過?」 這句一出來,前面準備的材料大概都用不上了。時間戳有、工具名稱有、參數也有,問題從來不在資料缺不缺。那份 log 是你的服務寫的,存在你的資料庫,由你的人維運。旁邊能墊的是 SOC 報告、政策文件、廠商自述,三份都在講「我們有流程」,沒有一份講得了那一刻發生了什麼。 agent 讓這件事更難。它自己決定叫哪個工具、叫幾次,事後要重建的是一串它自己排出來的動作,每次長度和內容都不一樣。 缺口是真的。有一份規格正在對著它寫,叫 TRACE,八月底進了 Linux Foundation。剩下的問題只有一個:你現在該不該動手。 先講一件發生在它自己身上的事。CHANGELOG 有一則在修的是文件錯誤:TraceSandboxAdapter 的 docstring 原本寫著 It will not let a caller claim hardware it does not have。實際上那個 sandbox 只驗形狀:platform 字串在列舉裡、measurement 長得像 sha256: 開頭就算過,quote、簽章、nonce 一個都...
畫面不閃了,代價是你的滑鼠:Claude Code 的全螢幕算繪
終端機會閃,這件事比 Claude Code 老得多。 它會閃是因為更新畫面的方式很土:要改哪裡,就把那一片重新刷一遍。刷得夠快、範圍夠小,你的眼睛接不到;刷得慢一點、範圍大一點,中間那一下空白就露出來了。平常沒人在意,因為平常的終端機一行印完就不動了,沒什麼好刷的。 Claude Code 不是那樣用終端機的。它一邊跑一邊改畫面:spinner 在轉,tool output 一段一段串進來,上面已經印過的東西還會回頭被改寫。那個「刷一遍」於是變成每秒好幾次,刷的還是一整片。捲動位置會自己跳回最上面,畫面會抖。官方點名三個地方最明顯:VS Code 內建終端機、tmux、iTerm2。這三個的共同點是算繪吞吐量本來就是瓶頸。 字吐出去之後就歸終端機管,所以 Claude Code 對「畫面現在長什麼樣」幾乎沒有控制權,它想改一行字,只能把整塊重印。閃就是這樣來的。 轉捩點是一個很老的招數vim 開起來的時候,整個畫面會被換掉;離開的時候,原本那些東西原封不動回來。那叫 alternate screen buffer,htop 也是這樣。 終端機其實有兩塊畫布。一塊是你平常一行一行...
AI 與科技新聞摘要 - 2026/09/17
你上一次因為別人在蓋房子,買不到自己要用的東西,是什麼時候? 9 月 16 日,昆士蘭州議會宣布了一份租約。它的長度用「幾年到期」來算沒什麼意義,得用工期算:蓋完要四到六年。 一、一份要蓋四到六年的租約,電先從煤跟天然氣來昆士蘭州長 David Crisafulli(Queensland Premier)9 月 16 日在州議會宣布,Anthropic 已經簽下長期租約,成為規劃中的 Western Downs Digital Park 的主要承租方。開發商是新加坡業者 Zerra DC。地點在昆士蘭 Western Downs 地區、Dalby 附近,基地約 725 公頃。ABC News 把耗電量的量級寫成「相當於 150 萬戶澳洲平均家庭」,那是一個比喻用的換算,不是說有 150 萬戶人家要搬過去。興建期預估 4 到 6 年。 用途寫得很明確:推論(inference),讓 Claude 回應客戶的請求,不是拿來訓練模型。 這個用途值得停一下,以下是我的判讀,報導沒有這樣論述。訓練是階段性的,推論是持續的,它跟著客戶的請求量走。用一座四到六年才蓋得完的設施去接一條跟著請求量...
那把貼在環境變數裡的 key,IETF 把它判成了反模式
一個跑在伺服器上的程式,半夜三點被叫醒,要去呼叫一個 API。對面問它:你是誰。 它的回答是一串字。那串字躺在環境變數裡,名字大概是 API_KEY 或 SERVICE_TOKEN,開頭幾個字元你閉著眼睛都背得出來。程式把它貼進 header,對面收到,放行。「證明自己是誰」這件事就這樣結束了。 嚴格講那不叫證明,叫出示。持有即通過,誰撿到誰就是你。在只有幾支定時腳本的年代這還算堪用,那些腳本做的事很固定:讀一張表、寄一封信、清一次快取,key 外流的代價估得出來。 現在跑在上面的東西不一樣了。它自己決定下一步呼叫哪個工具,把外面讀進來的文字塞回自己的上下文,一輪任務裡動到三四個系統。而它手上還是同一把 key,還是同一句「持有即通過」。 IETF 的 WIMSE 工作組(Workload Identity in Multi-System Environments)交了一份草案處理這件事,文件編號 draft-ietf-wimse-aims-00,標題是 “AI Identity Management System”,30 頁。它對上面那把 key 的判決寫得很不客氣。 憑證本身...
你沒叫它讀,它還是讀了:Agent SDK 的 settingSources 與關不掉的五樣東西
你用 Agent SDK 寫的那支 agent,這一刻很可能正在讀你的 ~/.claude/CLAUDE.md。你沒有叫它讀。 平常不會有人發現這件事。在自己的機器、自己的 repo 裡,agent 的行為跟你預期的一樣,因為你的預期本來就是那台機器上的設定養出來的。要等到把同一份程式碼交給第二個人跑、或是包成服務丟上另一台機器,行為才開始飄。那時候大家第一個翻的是 prompt 跟 model,很少人會回頭去看它是從哪個目錄啟動的。 反方向的抱怨也一樣常見:專案裡明明放了 CLAUDE.md、.claude/skills/、hooks,agent 卻像沒看到一樣。 兩種抱怨的方向完全相反,管它們的是同一個選項:settingSources。 省略它,等於你寫了三個值文件講得很白:省略 settingSources 時,query() 會讀跟 Claude Code CLI 一樣的檔案系統設定,包含 user、project、local 設定、CLAUDE.md 檔案,以及 .claude/ 底下的 skills、agents、commands。省略等同於 ["user...
AI 與科技新聞摘要 - 2026/09/16
一個開發者打完一句話,AI 助理接著吐出一個套件名。他裝了。 市面上那些 AI 防護產品的型錄,大致照「怎麼擋提示詞注入、怎麼避免它把憑證講出去、怎麼限制它讀得到哪些檔案」在排。9 月 15 到 16 日這兩天出來的幾份報告,擺進這個分法裡會有點卡。 一、開發者照著助理的建議,裝了那個套件Mandiant 在 2026 年 9 月的 AI 風險與韌性報告裡記了一個案子,The Hacker News 在 9 月 16 日轉述。受害的是一家未具名的 SaaS 業者。 起點不在套件庫,在一段還在進行中的對話。攻擊者挾持了該公司一段正在進行的 AI 編碼助理對話,然後在那段對話裡推薦了一個被下毒的套件。開發者採納了這個建議,經由一個被汙染的 PyPI 套件安裝了資訊竊取程式。接著 GitHub OAuth token 被竊,攻擊者拿它把 Shai-Hulud 蠕蟲部署到約 100 個內部儲存庫。最後一步繞了回來:該公司官方命名空間裡的一個被下毒套件,在另一名員工拉取那個版本時造成二次感染。 技術環節上沒有一樣是新的。被下毒的 PyPI 套件、被竊的 OAuth token、會自我散播的...
模型怎麼搬到另一台機器:ModelPack 決定不蓋新輪子,直接推進 OCI registry
一個幾十 GB 的資料夾躺在某台配了 GPU 的機器上。裡面是權重檔、一份 tokenizer、一個 config、還有當初隨手寫的 README。現在要讓另外三台機器拿到一模一樣的東西。注意是「一模一樣」,不是「看起來差不多」。 這件事到今天為止,沒有一個大家都同意的做法。 打成 tar 丟過去,然後呢最直覺的做法是打包。tar 一下,傳過去,對面解開。檔案確實會到。 問題出在你要怎麼稱呼它。 打完的那包,你叫它 model-v2.tar。一週後有人換掉 tokenizer,重打一份,還是叫 model-v2.tar,只是尾巴多黏一個 -new。再過兩週,三台機器上各自躺著一個名字不一樣、內容可能相同也可能不同的壓縮檔,而你沒有任何機械化的辦法判斷它們是不是同一份東西。人腦記不住,ls -la 也告訴不了你。 容器生態早就把這題解掉了:拿內容本身的雜湊值當地址。digest 一樣就是同一份,不用相信檔名,不用相信任何人的口頭保證。 但這招沒辦法直接套到你手工打的 tar 上。tar 會把每個檔案的修改時間、擁有者的 uid 跟 gid、權限模式一起寫進去,而這些欄位是跟著你打包...
沒有 MDM,公司的規則怎麼跑到那台筆電上:拆開 server-managed settings
那台筆電是他自己買的。公司沒有 MDM、沒有端點管理系統,IT 連 managed-settings.json 該塞到哪個路徑都推不動。可是他一開 Claude Code,Read(./.env) 就是擋著的。 這份政策是從哪裡來的?更精確一點問:它在啟動流程的哪一步到達,在它到達之前的那幾百毫秒,Claude Code 照誰的規矩在跑? 「Owner 在 claude.ai 填了一份 JSON」這句先擱著,那講的是誰按了按鈕。從 client 這一側看只有兩個動作:向 api.anthropic.com 要一份 payload,存進 ~/.claude/remote-settings.json。啟動時抓一次,session 開著的話每小時再抓一次。 骨架就這麼大。難的全在時序。 那份政策在你開機的第幾毫秒到達抓東西要時間,而 Claude Code 不能為了等一份設定讓你盯著空畫面。文件把取捨切成兩種。 開發者在啟動時登入(第一次跑,或者剛 /logout 過),Claude Code 最多等 5 秒讓 fetch 跑完才開 session。政策及時送到,就從第一個畫面開始執行...









