我曾經(jīng)覺得Claude Code底部的狀態(tài)行只是裝飾,沒什么實(shí)際用處,現(xiàn)在依然這么認(rèn)為——但過去也是一樣。雖然它名義上只是展示信息,實(shí)際上卻攜帶了大約30個字段,包含當(dāng)前會話的成本、耗時、上下文用量、當(dāng)前git分支或工作樹、當(dāng)前模型、推理強(qiáng)度等等,是一個密度很高的數(shù)據(jù)源。
官方規(guī)定狀態(tài)行處理器主要用于輸出文本和視覺反饋,渲染在終端底部,但沒有任何地方說這是唯一允許的做法。狀態(tài)行命令可以是任何你喜歡的Bash腳本。因此問題來了:這些數(shù)據(jù)還能用來做什么?
在給Claude Code交互式會話寫腳本時,常見應(yīng)用場景一般圍繞鉤子和插件(技能、命令、智能體等)展開。鉤子有自己的專用輸入數(shù)據(jù)通道,很多信息存在重疊,環(huán)境變量也會攜帶部分相同數(shù)據(jù)。但并非全部。比如,你如何隨時知道當(dāng)前消耗了多少上下文窗口?或者當(dāng)前會話花了多少錢?JSONL會話日志雖然記錄讀取的令牌數(shù)、緩存命中令牌數(shù)、輸出令牌數(shù)和美元耗用,但一般只對應(yīng)上一個輪次,不會給出整個會話的累積開銷。要想拿到累加信息,就得自己跟蹤,而這很快就變得很棘手。
上下文窗口也是一樣。你可以用鉤子持續(xù)記錄所有進(jìn)出令牌及緩存來源,再讓Claude幫你計算,靠它跨輪次追蹤累積數(shù)據(jù),甚至寫一些邏輯去處理壓縮邊界前后的變化。但能直接查到不是更好嗎?問題在于,狀態(tài)行和Claude Code的其他管道相對隔離。它顯然與鉤子存在某種聯(lián)系,卻沒有公開的“狀態(tài)行鉤子”,而且出于奇怪的緣由,它也不能直接集成到插件中——盡管有人找到了變通方案,但你無法把狀態(tài)行作為插件的一部分發(fā)布。
你能做的事是弄一個狀態(tài)行側(cè)車。狀態(tài)行數(shù)據(jù)是通過標(biāo)準(zhǔn)輸入傳過來的,因此可以寫一個狀態(tài)行腳本,從標(biāo)準(zhǔn)輸入捕獲這些數(shù)據(jù),用tee命令重定向到一個文件里,同時將其轉(zhuǎn)發(fā)給你原本可能配置好的可視化狀態(tài)行顯示。這樣一來,狀態(tài)數(shù)據(jù)就流到了你能處理的地方。你可以維護(hù)自己的累計計數(shù)、生成自定義日志、觸發(fā)通知,或與其他腳本集成——只要是一個能讀文件的程序,就能利用這條源源不斷的狀態(tài)行數(shù)據(jù)流。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.