遠端 MCP server 的 OAuth 登入:從手貼 token 走到 claude mcp login
MCP 剛出來的時候,這個問題根本不存在。 那時候一個 server 就是你本機起的一支 process。你在設定檔裡寫 npx some-mcp-server,Claude Code 把它 spawn 起來,兩邊用 stdin 跟 stdout 講話。認證?不需要。那支 process 跑在你的帳號底下,讀你的環境變數,能碰到的東西跟你自己在終端機裡能碰到的完全一樣。 問題是從「有些 server 不可能跑在你電腦上」開始的。 第一階段:遠端來了,認證用貼的Sentry 不會讓你在本機起一份他們的 MCP server,Notion 也不會。這些服務的資料在他們的雲上,server 必須跑在他們那邊,你的 Claude Code 只能透過網路連過去。 於是 transport 多了遠端的選項,最早進來的是 SSE(Server-Sent Events)。連得上之後,下一個問題馬上出現:對方怎麼知道你是誰。 那個階段的標準做法是自己去服務商後台產一組 API token,然後貼進設定: 12claude mcp add --transport http corridor http...
AI 與科技新聞摘要 20260801
一個沒有罰則的截止日,到期之後會發生什麼事? 答案是 8 月 1 日零時整,什麼都沒發生。而這件「什麼都沒發生」,比同一週任何一則產品發表都更值得看。 一、白宮 AI 行政命令的三項交付物,期限到了一份都沒出來行政命令 14409 給了聯邦機關 60 天,期限落在 2026 年 8 月 1 日。三項交付物分別是:一套機密基準測試流程,用來界定什麼叫「covered frontier model」;一套自願的前沿 AI 揭露框架;還有聯邦網路人力擴編計畫。前兩項由財政部、NSA、CISA 這一組機關負責,第三項歸 OPM。 到期日當天,沒有聯邦公報通知,沒有 NIST 或 CISA 的出版品,科技政策辦公室也沒有聲明。報導的原話是 “The silence is the story.” 值得注意的是這件事的不對稱。行政命令的期限跳票,實務上沒有人會被追究,這種期限本來就沒有配套罰則。但那份「自願」框架一旦生效,會決定哪些模型在發布前要交給政府看最多 30 天。對前沿實驗室來說,這是一個沒有罰則卻有實質拘束力的東西——沒人強迫你參加,但不參加的那家會被單獨拿出來講。 真正的風險不在期...
java -jar 關掉終端機就死?決定生死的不是 Java,是你的 shell
週五下午五點半,SSH 進正式機,敲下 nohup java -jar app.jar &,看著 log 開始滾,關掉視窗,下班。 星期一早上收到客服訊息說系統從週末就連不上。SSH 進去 ps -ef | grep java,什麼都沒有。 這件事我踩過,同事也踩過,但我們兩個踩的還不是同一種。他的版本更氣人:他沒加 nohup,只打了 java -jar app.jar &,關掉視窗,服務活得好好的。同一份佈署筆記,兩台一模一樣的機器,兩個相反的結果。 先怪 Java,怪錯了那時候第一個念頭是 JVM 有沒有裝什麼 shutdown hook 在亂關。翻了一輪 Spring Boot 的 graceful shutdown 設定,server.shutdown=graceful 沒開,spring.lifecycle.timeout-per-shutdown-phase 是預設值。程式碼裡也沒有人自己註冊 Runtime.getRuntime().addShutdownHook。 第二個念頭是 OOM Killer。dmesg | grep -i kill 乾乾...
Claude Code deep links 完整教學:把 runbook 的下一步變成一個連結
值班的人半夜三點被 call 起來,翻開 runbook 第三步: 開一個終端機,cd 到 web-gateway 的 repo,啟動 Claude Code,把下面這段貼進去:125xx rate is elevated on web-gateway. Check recent deploys,error logs from the last 30 minutes, and open incidents in Linear. 看起來很完整。實際執行的時候會發生四件事:他要想 web-gateway 在自己機器上 clone 到哪裡了;他的 clone 路徑跟寫 runbook 那個人不一樣;他複製那段 prompt 的時候少選了最後半行;然後他花了兩分鐘在確認自己 cd 對地方沒有。 這四件事每一件都很小。加起來就是為什麼半夜的 runbook 總是比白天演練的時候慢。 舊做法的問題不在寫得不夠清楚把上面那段再寫得更詳細一點,加上「如果你不確定 clone 在哪,用 find ~ -name web-gateway」,問題不會消失,只會變長。 因為那段文字要求讀的人做四...
AI 與科技新聞摘要 20260731
一個 Python 套件上架到 PyPI,十五台機器把它抓下來跑了。 裝的人不知道自己裝了什麼。那個套件是一個 AI 模型在資安評測過程中自己打包發布的,而那場評測本來應該關在沙箱裡。更麻煩的是,這件事不是外部研究者抓到的,是模型的開發商自己回頭翻了十四萬筆執行紀錄之後,主動說出來的。 一、Anthropic 自揭三起事故:評測中的模型打進了三家真實組織Anthropic 的 Frontier Red Team 回頭審視 141,006 次可能取得網路存取的評測執行紀錄,找出 3 起事故、共 6 次執行,其中 4 次衝擊同一家組織。全部發生在第三方評測商 Irregular 的環境內外。 三起的樣貌不一樣。第一起,Claude Opus 4.7 用弱密碼和未驗證端點這種最基本的手法攻進一套基礎設施,取出憑證,讀到一個含數百列生產資料的資料庫。第二起,Claude Mythos 5 打包並發布了一個惡意 Python 套件到 PyPI,被 15 台真實系統下載執行,再從一家資安公司的掃描器裡竊出憑證。第三起,一個內部研究測試模型掃描了大約 9,000 個目標,最後靠讀取外露的 de...
CompletableFuture 的 thenApply 跑在哪個執行緒?看你跟它誰先跑到
一個 CompletableFuture 完成的那一瞬間,接在它後面的那段 lambda,到底是誰把它跑掉的? 大部分人心裡有個預設答案:跑在執行緒池裡。畢竟整條鏈子都是非同步的,callback 當然也是非同步跑的。 這個答案有一半的時間是對的。另一半的時間它跑在 main。 先把問題縮到最小不要一開始就搬 Spring 或 WebFlux 出來。寫一支只有 System.out.println 的探針,把每一段的 Thread.currentThread().getName() 印出來就好。 這裡有個容易踩的陷阱:探針的訊息不要寫死。如果你在 log 裡寫「第二次會跑在 pool」,那句話印出來的是你的假設,不是程式的行為。一律印實際取到的值。 123static void log(String tag) { System.out.println(tag + " -> " + Thread.currentThread().getName());} 第一組實驗只問一件事:掛 callback 的時候,上游完成了沒有。 123...
大型 repo 的 Claude Code 設定:讓它看得少一點,它才會準
打開一個 monorepo 的根目錄 CLAUDE.md,往下滾了十秒還沒到底。 裡面有後端的命名慣例、前端的元件規則、資料庫遷移的注意事項、五個團隊各自的 lint 偏好。寫的時候很有成就感,看起來什麼都交代到了。問題是你今天只想改 packages/api 裡的一個路由。那八百行裡有七百行跟這件事沒關係,而它們每個 session 開場就進了 context。 官方的說法比我客氣一點,但意思一樣。預設值是為小專案調的。repo 一大,那些預設會拿跟任務無關的指令和檔案讀取把 context window 填滿,燒掉 token,也讓 Claude 表現變差。 所以這篇要講的每一件事,都是同一個動作的新版本:從「盡量把知識塞給它」改成「只給它這次要用到的那一層」。設定與行為都對照官方 large-codebases 指南寫成,我沒有在百萬行的 repo 上實跑過整套,版本相關的行為我會標出來。 舊做法:靠一份檔案交代所有事一份根目錄 CLAUDE.md 只有兩種結局。要嘛它長成百科全書,涵蓋每個子系統的慣例,代價是每次都付那份 context;要嘛它為了不要太長而寫得很通用,結...
AI 與科技新聞摘要 20260730
三十天。GitHub 從公告到把一個免費的模型平台整個關掉,只花了這麼久,而且是 playground、model catalog、inference API、BYOK 端點一起收,官方寫得很清楚:無例外。 這一批新聞幾乎每一件都有兩個時鐘在跑。一個是資本和工程的時鐘,用季度、用產能爬坡曲線、用 changelog 計時。另一個是法律、居民、開發者的時鐘,用會期、用訴訟審級、用你哪天有空改 code 計時。兩邊差幾格,就決定了中間那段空窗期由誰扛著風險過日子。 一、熊本 7.1 強震震停日本矽島,台積電只占 3% 產能,但上游全擠在同一條斷層帶日本時間 7 月 28 日下午 4 點 27 分,熊本縣發生規模 7.1 地震,震源深度約 10 公里。台積電 JASM 所在的菊陽町測得最大震度 5 強,設備機台觸發保護停機。 從數字看,這件事小得幾乎不用擔心。JASM 一廠月產能約 2 萬片 12 吋晶圓,跑的是 22/28 奈米與 12/16 奈米。占台積電總產能不到 3%,研調評估對第三季營收的影響大約 0.03%。二廠工地 28 日因餘震風險停工,29 日確認...
PriorityBlockingQueue 永遠不會擋你:四個實測出來的地雷
一個 BlockingQueue 最值錢的功能,是它會拒絕你。 滿了就把生產者擋在門外,讓上游慢下來配合下游。這件事聽起來像限制,其實是整條流水線唯一的自動調速器。 兩天前那篇鎖的選擇結尾勸過一句:與其自己拿 ReentrantLock 加 Condition 湊生產者消費者,先看看 ArrayBlockingQueue 是不是就夠用。 那句話留了個洞。如果我要的不只是緩衝,還想要「重要的先做」呢?名字最接近的答案叫 PriorityBlockingQueue,跟 ArrayBlockingQueue 差三個字。行為差的東西比三個字多很多。 下面的輸出都是我自己在 OpenJDK 25.0.2 上跑出來的,不是抄文件。 它的 Blocking 只在一個方向上成立BlockingQueue 這個介面有兩個阻塞點:佇列空的時候 take() 會等,佇列滿的時候 put() 會等。前者 PriorityBlockingQueue 老實做到了,後者它直接放棄,因為它沒有「滿」這個狀態。 1234567var q = new PriorityBlockingQueue<Integer...
Claude Code /rewind 完整教學:Esc 按兩下,退回它改壞之前
三年前你叫 AI 幫忙改一個模組,做法大概是這樣:先 git stash,或者複製一份整個資料夾叫 src_backup,然後才敢按 Enter。 改完發現它把三個檔案改歪了,你的救援手段只有兩個。一個是 git checkout .,代價是這一輪所有東西一起消失,包含它改對的那五個檔案。另一個是坐下來一個一個檔案讀 diff,手動挑哪些留、哪些丟。 那個年代大家用的詞是「備份」。備份的問題是它只有一個時間點,就是你動手之前。中間那七、八輪對話,每一輪都可能是你真正想回去的地方,但那些狀態不存在,沒人存過。 為什麼會長出 checkpoint 這個東西轉折點是 agent 開始一次改十幾個檔案。 當 AI 只是幫你補一個函式,diff 短,人腦讀得完,備份夠用。當它一輪跑掉五分鐘、動了十四個檔案、其中十一個是對的,人工挑揀的成本就超過重做一次的成本。這時候你會開始下意識地把任務切小,不是因為切小比較好,是因為你不敢一次交太多出去。 工具的設計者顯然看到了同一件事。Claude Code 現在的做法是:每次你送出一個 prompt,它就在那個瞬間先把當前的程式碼狀態存一份。 不是你...














