欄自定義:掌握Subagent與Token余量,告別黑盒焦慮)
用AI輔助寫代碼的人大概都有過這種體驗(yàn)跑著一個(gè)幾小時(shí)的自動(dòng)化任務(wù)中間切出去查資料、開會(huì)回來盯著終端卻不知道AI助手現(xiàn)在到底在做什么。是卡住了還是在等我的確認(rèn)是正在跑子任務(wù)還是其實(shí)已經(jīng)完成了最難受的是長(zhǎng)任務(wù)執(zhí)行到一半你想知道它當(dāng)前調(diào)用了幾次工具、還剩多少上下文額度終端里卻只有冷冰冰的日志在滾。我一開始用的是Claude Code默認(rèn)的終端界面說實(shí)話功能夠用但信息密度太低。后來試著給它配了一個(gè)自定義狀態(tài)欄才真正解決了這個(gè)“黑盒焦慮”——把當(dāng)前任務(wù)、Subagent運(yùn)行狀態(tài)、token余量直接固定在界面底部任何時(shí)候瞄一眼就能掌握全局。這篇就把我從零搭建、配置到調(diào)試狀態(tài)欄工具的完整過程寫出來包括訂閱和命令行版本的區(qū)別、配置文件怎么寫、Subagent狀態(tài)怎么實(shí)時(shí)展示以及我踩過的坑。1. 狀態(tài)欄工具到底解決什么問題它和默認(rèn)界面差在哪首先要搞清楚一件事Claude Code本身自帶了一個(gè)終端UI有對(duì)話區(qū)、有輸入框、有操作反饋。那為什么還要額外去做一個(gè)自定義狀態(tài)欄這要從日常使用頻率最高的幾個(gè)場(chǎng)景說起。1.1 長(zhǎng)任務(wù)執(zhí)行時(shí)的“信息盲區(qū)”我用Claude Code跑過幾次需要持續(xù)幾分鐘甚至十幾分鐘的重構(gòu)任務(wù)比如跨文件修改接口、批量遷移數(shù)據(jù)格式。任務(wù)一旦啟動(dòng)終端輸出基本是直線的日志滾動(dòng)。你能看到它在輸出但不知道當(dāng)前是在哪個(gè)子任務(wù)階段有沒有Subagent并發(fā)生成已經(jīng)燒掉了多少token額度是不是在等待我的輸入還是系統(tǒng)正在處理默認(rèn)界面并沒有把這類狀態(tài)固定在某個(gè)顯眼位置。信息散落在日志里得往回翻才能拼出全貌。而自定義狀態(tài)欄可以把這些關(guān)鍵指標(biāo)集中展示在終端底部一屏內(nèi)隨時(shí)可讀。1.2 狀態(tài)欄自定義能展示什么數(shù)據(jù)我自己的狀態(tài)欄配置里現(xiàn)在常駐展示這幾類信息數(shù)據(jù)項(xiàng)說明來源當(dāng)前會(huì)話標(biāo)簽識(shí)別我打開了幾個(gè)會(huì)話配置或腳本生成Subagent運(yùn)行數(shù)正在并發(fā)的子代理數(shù)量鉤子事件統(tǒng)計(jì)最近一次工具調(diào)用顯示當(dāng)前正在執(zhí)行的動(dòng)作類型Claude Code鉤子日志Token消耗估算會(huì)話內(nèi)累計(jì)消耗的輸入/輸出額度事件數(shù)據(jù)累計(jì)運(yùn)行時(shí)間當(dāng)前會(huì)話持續(xù)時(shí)長(zhǎng)腳本計(jì)時(shí)有了這些之后我能快速判斷“這次任務(wù)是不是陷入了某種循環(huán)”、Subagent是不是還在跑、接下來該不該介入。1.3 這篇內(nèi)容適合誰如果你屬于下面三類人之一這篇內(nèi)容直接照著做就行經(jīng)常用Claude Code跑自動(dòng)化任務(wù)想知道當(dāng)前執(zhí)行進(jìn)度的開發(fā)者對(duì)Subagent并發(fā)機(jī)制好奇想看清楚它在后臺(tái)是怎么運(yùn)行的希望給終端增加類似IDE底部狀態(tài)欄那種“常駐信息區(qū)”的人。因?yàn)槲宜信渲枚际腔贑laude Code的開放配置文件和鉤子機(jī)制不需要改源碼、不需要裝額外插件純靠配置和幾個(gè)腳本就能搞定。我的環(huán)境以macOS為主但Linux和WindowsWSL同樣適用。2. 安裝與基礎(chǔ)配置先把狀態(tài)欄的殼子搭起來開始寫腳本之前得先把Claude Code本身裝好并且理解它的狀態(tài)欄配置是從哪個(gè)入口生效的。這一步看起來簡(jiǎn)單但很多人第一次配置失敗就是因?yàn)闆]搞清楚配置文件的加載優(yōu)先級(jí)。2.1 Claude Code安裝的兩種方式應(yīng)該選哪個(gè)Claude Code目前主要通過npm包分發(fā)也有桌面版本但命令行版才是配合狀態(tài)欄使用的核心。安裝命令很簡(jiǎn)單npm install -g anthropic-ai/claude-code裝完之后驗(yàn)證版本claude --version如果你還沒有登錄首次運(yùn)行claude會(huì)引導(dǎo)登錄這里要注意命令行版本的登錄認(rèn)證和網(wǎng)頁版是獨(dú)立的需要單獨(dú)授權(quán)。我遇到過隊(duì)友把網(wǎng)頁版當(dāng)命令行版用結(jié)果發(fā)現(xiàn)根本沒法在終端跑腳本這里先確認(rèn)你拿到的是CLI版本。提示如果你所在網(wǎng)絡(luò)環(huán)境訪問npm官網(wǎng)速度很慢可以給npm配置鏡像源來加速但這屬于常規(guī)網(wǎng)絡(luò)配置不涉及任何特殊手段。裝完包之后跑claude會(huì)進(jìn)入交互式會(huì)話按CtrlC退出即可。2.2 配置文件入口settings.json還是.claude目錄Claude Code的配置支持兩種層級(jí)項(xiàng)目級(jí)項(xiàng)目根目錄下的.claude/settings.json用戶級(jí)用戶主目錄下的~/.claude/settings.json狀態(tài)欄配置statusLine可以寫在任意一個(gè)層級(jí)里。用戶級(jí)配置對(duì)所有項(xiàng)目生效項(xiàng)目級(jí)配置只對(duì)當(dāng)前項(xiàng)目生效。兩者會(huì)合并項(xiàng)目級(jí)字段覆蓋用戶級(jí)同名配置。我自己習(xí)慣把狀態(tài)欄腳本的絕對(duì)路徑寫在用戶級(jí)這樣每個(gè)項(xiàng)目都能復(fù)用同一套狀態(tài)欄不用逐個(gè)配置。如果你想在不同項(xiàng)目里顯示不同內(nèi)容那就用項(xiàng)目級(jí)的配置粒度更靈活。2.3 狀態(tài)欄的最小可運(yùn)行配置新建或編輯~/.claude/settings.json加一段{ statusLine: { type: command, command: python3 /Users/你的用戶名/statusline.py, padding: 0, timeout: 3 } }字段說明type固定為command表示狀態(tài)欄內(nèi)容由外部命令輸出提供。command要運(yùn)行的程序。這里建議寫絕對(duì)路徑后面會(huì)專門講為什么不要用相對(duì)路徑。padding左右留白像素值一般設(shè)0就行。timeout命令執(zhí)行超時(shí)時(shí)間。默認(rèn)沒有但不設(shè)會(huì)出大問題后面避坑那章詳細(xì)說。保存之后重新啟動(dòng)claude終端底部就應(yīng)該出現(xiàn)由腳本輸出的狀態(tài)內(nèi)容。這個(gè)時(shí)候最簡(jiǎn)單的驗(yàn)證方式是讓腳本直接輸出一句話比如print(hello statusline)只要你能在終端底部看到這行字說明狀態(tài)欄鏈路已通剩下的就是往腳本里塞真實(shí)數(shù)據(jù)。2.4 狀態(tài)欄輸出格式的秘密不是隨便一行文本很多第一次配置的人會(huì)以為print(hello)就是全部了真正要用起來才發(fā)現(xiàn)狀態(tài)欄輸出有嚴(yán)格的JSON約定。Claude Code的statusLine支持兩種輸出模式純文本模式直接輸出一行字符串狀態(tài)欄原樣顯示。JSON模式輸出一個(gè)JSON對(duì)象指定工具名稱、狀態(tài)、標(biāo)簽、正文等內(nèi)容。如果想讓狀態(tài)欄顯示復(fù)雜的、分段的信息就要用JSON模式。舉個(gè)例子{label: SUBAGENT, text: 3 running, tool_name: subagent, status: running}label左側(cè)的簡(jiǎn)短標(biāo)簽相當(dāng)于標(biāo)題text具體內(nèi)容tool_name工具名用于識(shí)別狀態(tài)欄條目status狀態(tài)標(biāo)識(shí)通常有running、ok、error等。狀態(tài)欄支持同時(shí)顯示多個(gè)條目每條對(duì)應(yīng)一個(gè)JSON對(duì)象。要怎么生成多條輸出的時(shí)候每行一個(gè)JSON即可。其實(shí)這才真正讓狀態(tài)欄變得有用的關(guān)鍵你可以把Subagent數(shù)量、Token用量、當(dāng)前任務(wù)名拆成獨(dú)立的條目各自有各自的顏色和狀態(tài)標(biāo)識(shí)一眼掃過去就能抓住重點(diǎn)。3. Subagent狀態(tài)展示從黑盒子到透明工作臺(tái)Subagent是Claude Code比較有特色的機(jī)制——主任務(wù)可以派生出多個(gè)子代理并發(fā)干活。用得好能顯著縮短大任務(wù)的總耗時(shí)。但副作用是這些躲在后面的子代理到底跑得怎么樣光看界面根本不知道。我的目標(biāo)很明確讓狀態(tài)欄顯示當(dāng)前正在運(yùn)行的Subagent數(shù)量和名字讓我知道并發(fā)發(fā)生在哪、是不是有子任務(wù)卡住。這里用到的核心能力是Claude Code的鉤子機(jī)制。3.1 Subagent機(jī)制下狀態(tài)信息藏在哪先理解一下Subagent的運(yùn)作邏輯。當(dāng)你給Claude一個(gè)任務(wù)它會(huì)在內(nèi)部決定是否創(chuàng)建子代理來處理具體的子任務(wù)。子代理是異步執(zhí)行的各有各的上下文窗口。主線程可以同時(shí)掛起多個(gè)子代理并等待它們的返回值。問題是這個(gè)執(zhí)行過程不會(huì)直接給你一個(gè)“當(dāng)前有幾個(gè)子代理”的API。唯一的觀測(cè)口是鉤子事件。Claude Code的鉤子可以監(jiān)聽很多生命周期事件比如會(huì)話開始SessionStart、工具調(diào)用前PreToolUse、工具調(diào)用后PostToolUse、任務(wù)停止Stop等。這些事件可以被一個(gè)腳本捕獲。Subagent狀態(tài)展示的完整方案是這樣用鉤子監(jiān)聽工具調(diào)用事件把每個(gè)子代理的啟動(dòng)、完成、失敗事件寫入一個(gè)本地日志文件狀態(tài)欄腳本讀取這個(gè)日志文件統(tǒng)計(jì)當(dāng)前還在運(yùn)行的子代理數(shù)量和名稱狀態(tài)欄腳本把統(tǒng)計(jì)結(jié)果序列化成JSON輸出給Claude Code顯示。這樣狀態(tài)欄不需要主動(dòng)去跟蹤什么狀態(tài)它只需要做一個(gè)“讀日志、算統(tǒng)計(jì)”的活邏輯簡(jiǎn)單不容易出錯(cuò)。3.2 用鉤子把Subagent事件落到本地在~/.claude/settings.json里加一個(gè)hooks配置塊{ hooks: { PreToolUse: [ { matcher: Task, hooks: [ { type: command, command: python3 /Users/你的用戶名/log_agent_event.py PreToolUse \$CLAUDE_TOOL_USE_ID\ \$CLAUDE_TOOL_NAME\ } ] } ], PostToolUse: [ { matcher: Task, hooks: [ { type: command, command: python3 /Users/你的用戶名/log_agent_event.py PostToolUse \$CLAUDE_TOOL_USE_ID\ \$CLAUDE_TOOL_NAME\ } ] } ] } }這里用任務(wù)工具Task作為子代理執(zhí)行的入口它在運(yùn)行前后會(huì)觸發(fā)對(duì)應(yīng)的事件。然后寫一個(gè)簡(jiǎn)單的Python腳本來記錄事件#!/usr/bin/env python3 import sys import json import os from datetime import datetime # 日志文件路徑建議放在用戶主目錄下 LOG_FILE os.path.expanduser(~/.claude/subagent_events.log) def log_event(event_type, tool_use_id, tool_name): entry { time: datetime.now().isoformat(), event: event_type, tool_use_id: tool_use_id, tool_name: tool_name, pid: os.getpid() } with open(LOG_FILE, a) as f: f.write(json.dumps(entry) \n) if __name__ __main__: if len(sys.argv) 4: sys.exit(0) log_event(sys.argv[1], sys.argv[2], sys.argv[3])這段腳本做的事很簡(jiǎn)單每次鉤子觸發(fā)就往日志文件里追加一行事件記錄。數(shù)據(jù)量不大對(duì)性能幾乎沒有影響。注意$CLAUDE_TOOL_USE_ID是Claude Code傳給鉤子腳本的環(huán)境變量之一。不同的鉤子所能獲取的環(huán)境變量略有差異詳細(xì)清單可以查看官方文檔里關(guān)于鉤子環(huán)境變量的說明。3.3 狀態(tài)欄腳本讀取事件并展示完整實(shí)現(xiàn)現(xiàn)在有了事件日志接下來就是寫狀態(tài)欄腳本讓它讀取日志并統(tǒng)計(jì)。這里我寫了一個(gè)相對(duì)完整的版本#!/usr/bin/env python3 import json import os import time from collections import defaultdict LOG_FILE os.path.expanduser(~/.claude/subagent_events.log) def load_events(): events [] if not os.path.exists(LOG_FILE): return events with open(LOG_FILE, r) as f: for line in f: line line.strip() if not line: continue try: events.append(json.loads(line)) except json.JSONDecodeError: continue return events def count_running_subagents(events): running defaultdict(list) # 簡(jiǎn)單的狀態(tài)推斷PreToolUse開始PostToolUse結(jié)束 for event in events: if event[event] PreToolUse: running[event[tool_use_id]].append(start) elif event[event] PostToolUse: running[event[tool_use_id]].append(end) active_count 0 active_ids [] for tool_use_id, markers in running.items(): if len(markers) % 2 1: active_count 1 active_ids.append(tool_use_id) return active_count, active_ids[:3] def main(): events load_events() active_count, active_ids count_running_subagents(events) # 輸出JSON到stdoutClaude Code會(huì)解析為狀態(tài)欄條目 entries [] label SUBAGENT if active_count 0: entries.append({ label: label, text: f{active_count} running, tool_name: subagent, status: running }) else: entries.append({ label: label, text: idle, tool_name: subagent, status: ok }) # 如果有活躍子代理輸出它們的ID方便追蹤 if active_ids: entries.append({ label: AGENT_IDS, text: , .join(active_ids), tool_name: subagent_ids, status: info }) print(json.dumps(entries, ensure_asciiFalse)) if __name__ __main__: main()這個(gè)腳本做到了三件事讀取鉤子寫下的子代理事件日志通過配對(duì)事件的前后狀態(tài)估算還在運(yùn)行的子代理數(shù)量用JSON數(shù)組的方式輸出狀態(tài)欄就會(huì)渲染出多個(gè)條目。實(shí)際跑起來的效果是沒有子代理時(shí)底部顯示SUBAGENT idle正在跑的時(shí)候變成SUBAGENT 2 running同時(shí)還列出活躍的ID。3.4 讓狀態(tài)欄隨會(huì)話變化實(shí)時(shí)刷新狀態(tài)欄命令的輸出刷新頻率取決于Claude Code什么時(shí)候認(rèn)為狀態(tài)需要更新。實(shí)際體驗(yàn)下來它并不是嚴(yán)格按秒刷新的而是和終端渲染周期綁定。如果你想手動(dòng)刷新有幾個(gè)辦法狀態(tài)下拉刷新在Claude Code里執(zhí)行狀態(tài)欄刷新指令部分版本支持/statusline命令手動(dòng)觸發(fā)觸發(fā)鉤子事件當(dāng)有工具調(diào)用或者會(huì)話狀態(tài)變化時(shí)狀態(tài)欄自然刷新讓腳本內(nèi)容隨時(shí)間自變比如在里面加一個(gè)實(shí)時(shí)計(jì)時(shí)器每次輸出時(shí)間都在變這樣即便沒有事件觸發(fā)狀態(tài)欄也會(huì)因?yàn)檩敵鲎兓落秩?。最穩(wěn)妥的做法是腳本里帶上會(huì)話運(yùn)行時(shí)長(zhǎng)一方面實(shí)用另一方面也能確保上下次輸出的時(shí)間不同間接推動(dòng)了狀態(tài)欄的持續(xù)刷新。# 在main()里增加運(yùn)行時(shí)長(zhǎng)統(tǒng)計(jì) session_start os.path.getmtime(LOG_FILE) if os.path.exists(LOG_FILE) else time.time() elapsed int(time.time() - session_start) hours, minutes divmod(elapsed // 60, 60) entries.append({ label: TIME, text: f{int(hours)}h{int(minutes)}m, tool_name: timer, status: info })加上這段之后狀態(tài)欄基本就能穩(wěn)定隨時(shí)間刷新不再卡在一個(gè)畫面上了。4. 真實(shí)使用中的踩坑記錄與調(diào)優(yōu)建議狀態(tài)欄腳本寫起來不難但是真正讓它穩(wěn)定、好用最關(guān)鍵的部分反而是后面的調(diào)試。我在這塊踩了不少坑下面幾個(gè)是最影響使用體驗(yàn)的值得單獨(dú)寫。4.1 腳本執(zhí)行超時(shí)狀態(tài)欄靜默失敗的真相第一次配置完?duì)顟B(tài)欄我沒在配置里寫timeout。結(jié)果狀態(tài)欄經(jīng)常一段時(shí)間后消失重新加載配置又恢復(fù)了反復(fù)無常。后來查了一下文檔才知道狀態(tài)欄命令如果沒有在預(yù)期時(shí)間內(nèi)返回Claude Code會(huì)直接丟棄本次輸出。也就是說如果你的腳本因?yàn)槟撤N原因執(zhí)行超過了限時(shí)狀態(tài)欄就空白了而且不會(huì)報(bào)任何錯(cuò)誤。這個(gè)坑的典型觸發(fā)場(chǎng)景是腳本里用了耗時(shí)的子進(jìn)程調(diào)用比如ps、curl或者復(fù)雜的文件掃描在網(wǎng)絡(luò)環(huán)境不佳或系統(tǒng)負(fù)載高的時(shí)候執(zhí)行時(shí)間不可控。我現(xiàn)在的做法是給腳本內(nèi)部加一層超時(shí)保護(hù)并且配置里顯式設(shè)置一個(gè)合理的timeout值{ statusLine: { type: command, command: python3 /Users/你的用戶名/statusline.py, timeout: 4 } }同時(shí)在腳本最外層增加防護(hù)import signal class TimeoutError(Exception): pass def timeout_handler(signum, frame): raise TimeoutError() signal.signal(signal.SIGALRM, timeout_handler) signal.alarm(2)腳本內(nèi)部超過2秒就主動(dòng)放棄避免拖累狀態(tài)欄。實(shí)際使用中讀本地日志、統(tǒng)計(jì)幾個(gè)字段的耗時(shí)在毫秒級(jí)別極少會(huì)觸發(fā)超時(shí)但萬一遇到磁盤IO很慢的情況至少狀態(tài)欄不會(huì)消失。4.2 JSON字段錯(cuò)一個(gè)就全不顯示的教訓(xùn)狀態(tài)欄的JSON解析是嚴(yán)格的。我第一次寫腳本時(shí)輸出了這樣的東西print(json.dumps({ label: SUBAGENT, text: 2 running, tool_name: subagent, status: running, }))看起來沒問題結(jié)果狀態(tài)欄死活不顯示。后來才發(fā)現(xiàn)狀態(tài)欄要求每個(gè)條目必須至少包含指定的幾個(gè)字段而且JSON必須嚴(yán)格合法多一個(gè)尾逗號(hào)都是解析失敗的。還有一些容易忽略的點(diǎn)字符串里的引號(hào)必須轉(zhuǎn)義中文字符正常支持但編碼要為UTF-8輸出不能有額外的前置日志比如print(debug...)status字段如果沒有匹配的枚舉值該條可能不會(huì)被渲染。調(diào)試的時(shí)候我專門寫了一個(gè)“模擬輸出”的腳本先手動(dòng)把JSON貼給解析器驗(yàn)證確認(rèn)無誤再放回狀態(tài)欄命令。這個(gè)習(xí)慣幫我省了不少時(shí)間。4.3 路徑與環(huán)境變量問題跨平臺(tái)要提前避開狀態(tài)欄命令里寫相對(duì)路徑是個(gè)大坑。Claude Code的工作目錄和你的終端目錄未必一致尤其從不同目錄啟動(dòng)claude時(shí)相對(duì)路徑會(huì)指向不同的地方結(jié)果就是狀態(tài)欄腳本一會(huì)兒能跑一會(huì)兒跑不了非常隱蔽。我統(tǒng)一改成絕對(duì)路徑之后這個(gè)問題徹底消失。同時(shí)還要注意腳本的執(zhí)行權(quán)限chmod x statusline.py確保命令可以直接運(yùn)行解釋器路徑建議用#!/usr/bin/env python3避免不同機(jī)器上Python安裝位置不同導(dǎo)致的找不到解釋器環(huán)境變量鉤子腳本能拿到Claude Code注入的變量但狀態(tài)欄腳本不一定具備完整的環(huán)境變量。尤其在使用zsh或bash時(shí)環(huán)境變量加載邏輯差異很大。如果你在Windows上用的是WSL路徑風(fēng)格也要注意不要在Windows和Linux路徑之間切換混用容易踩到隱藏的解析錯(cuò)誤。4.4 給狀態(tài)欄配置加一層“降級(jí)”策略無論腳本寫得多穩(wěn)健總有意外——磁盤日志被誤刪、Python環(huán)境損壞、磁盤寫滿等等。狀態(tài)欄一旦出錯(cuò)整個(gè)界面會(huì)顯得很不完整。我的解決方案是給狀態(tài)欄做一個(gè)簡(jiǎn)單的降級(jí)邏輯# 在腳本開頭檢測(cè)關(guān)鍵依賴如果缺了就輸出一條簡(jiǎn)單信息 import importlib.util def is_available(module_name): return importlib.util.find_spec(module_name) is not None if not is_available(json): print(statusline: JSON unavailable) sys.exit(0)這個(gè)做法是把腳本的健壯性放在配置前面。降級(jí)邏輯做一個(gè)簡(jiǎn)單輸出總比什么都不顯示好至少你知道狀態(tài)欄掛了而不用瞎猜。如果再講究一點(diǎn)可以用一個(gè)包裝腳本把實(shí)際的邏輯放在try/except里一旦異常就輸出一個(gè)固定字符串保證狀態(tài)欄永遠(yuǎn)有東西顯示。4.5 鉤子日志文件的無序?qū)懪c清理策略日志文件用久了會(huì)變得很大而且多個(gè)會(huì)話同時(shí)寫入時(shí)會(huì)有多進(jìn)程并發(fā)寫同一文件的隱患。我遇到過幾個(gè)會(huì)話同時(shí)啟動(dòng)時(shí)日志文件出現(xiàn)交錯(cuò)行解析失敗?,F(xiàn)在的做法是每次狀態(tài)欄腳本啟動(dòng)時(shí)只讀取最后N行比如500行不讀全文件通過文件鎖或者追加寫的方式減少并發(fā)寫沖突定期用: ~/.claude/subagent_events.log清空日志避免文件無限增長(zhǎng)。配合一個(gè)crontab定時(shí)任務(wù)每周清一次日志狀態(tài)欄的讀取速度一直保持在毫秒級(jí)。4.6 狀態(tài)欄管理多會(huì)話從單會(huì)話到全局視角如果你跟我一樣喜歡同時(shí)開幾個(gè)Claude Code窗口跑不同任務(wù)默認(rèn)狀態(tài)欄配置會(huì)互相干擾——因?yàn)槿罩疚募侨止蚕淼?。我的做法是給每個(gè)會(huì)話一個(gè)獨(dú)立ID寫入日志時(shí)附帶會(huì)話ID讀取時(shí)按當(dāng)前會(huì)話過濾。import os session_id os.environ.get(CLAUDE_SESSION_ID, unknown)鉤子腳本在事件里帶上這個(gè)ID狀態(tài)欄腳本只統(tǒng)計(jì)自己這個(gè)會(huì)話的子代理事件。這樣三四個(gè)窗口互不干擾每個(gè)窗口的狀態(tài)欄都只顯示自己會(huì)話的實(shí)時(shí)信息。當(dāng)然如果你就是想知道所有會(huì)話總共開了多少Subagent那去掉過濾條件反而是個(gè)更宏觀的全局監(jiān)控視角。具體看你的習(xí)慣。4.7 實(shí)際使用中的幾個(gè)優(yōu)化建議基于一段時(shí)間的實(shí)際使用我把自己的配置做了幾處小優(yōu)化值得分享顏色語義化狀態(tài)欄支持的status字段不同值會(huì)對(duì)應(yīng)不同樣式。我把“正常”“運(yùn)行中”“錯(cuò)誤”區(qū)分開一眼識(shí)別是否異常。把最關(guān)心的內(nèi)容放第一個(gè)條目狀態(tài)欄多個(gè)條目是按輸出順序排列的建議把Subagent數(shù)量和當(dāng)前任務(wù)狀態(tài)放在最前面其次是Token、時(shí)間等次要信息。結(jié)合shell別名切換配置有時(shí)候我想要完整狀態(tài)欄有時(shí)候只想要極簡(jiǎn)模式那就在shell層面給claude起兩個(gè)別名分別傳入不同的配置路徑或使用不同的腳本入口。狀態(tài)欄腳本里不要做網(wǎng)絡(luò)請(qǐng)求任何調(diào)外部API的操作都可能變成性能黑洞。如果確實(shí)需要獲取遠(yuǎn)程信息把它緩存成本地文件狀態(tài)欄只讀緩存。這些建議不一定都適用于你但核心思想是一致的狀態(tài)欄是給你提供決策輔助的不是讓腳本本身變成新的瓶頸。保持它輕量、穩(wěn)定、可預(yù)測(cè)才是長(zhǎng)期使用的最優(yōu)解。我在實(shí)踐中最滿意的狀態(tài)是盯著一排正在運(yùn)行的Subagent能隨時(shí)知道它們有沒有卡住、要不要人工介入而不是像以前那樣干等著無從判斷。如果你也經(jīng)常跑長(zhǎng)任務(wù)這套自定義狀態(tài)欄方案值得花半小時(shí)搭起來省下的時(shí)間遠(yuǎn)不止半小時(shí)。