跳到內容

側邊欄網檢視

herdr-plugin/ 裡的選用 Herdr 外掛(id wayne930242.straw-boss,動作 net)可以在側邊欄的 Agents 清單中,於 Herdr 自己的檢視與網檢視之間切換。網檢視先列出主塔台的工作區(若存在;它的那一列是皇冠分頁的 pane,聚焦它會顯示常駐 pane,在那裡按 Enter 即可與主塔台對話),再依 Herdr 的順序列出其他工作區。每個工作區裡,塔台排第一,接著依順序列出各分頁;每個分頁裡先列主智慧體,再列成員。每個子智慧體都直接掛在啟動它的 session 底下,包括 pi-herdr-agents 在 worktree 子工作區開出來的子智慧體。

網不認得的智慧體排在最後,依 Herdr 的工作區、分頁、pane 順序排列,所以不會有任何東西被藏起來,等你回應的智慧體也會留在清單上。檢視開啟時,側邊欄標題顯示 net。檢視預設開啟:外掛在 Herdr server 啟動時打開它,按鍵可以關閉,再按一次又打開。同一套順序也用於收合的側邊欄、行動版清單、滑鼠目標,以及 focus_agent 的編號與上一個/下一個導覽。這個檢視不會改變任何通知或注意力計數。

由 sb server 執行的塔台,即使沒有任何執行中的 run,也保有它的那一列:只要塔台提示在常駐 pane 上執行(常駐 pane),server 就會在該 pane 上回報一個替身智慧體 tower(閒置,訊息為 standing by、3 queued 或 held),所以這一列會排在其工作區的第一個位置,作為塔台的標記,agent.list 也看得到它。它只是一列,沒有別的作用:網、儀表板、收起、closer 或 reaper 的檢查都不把它算作智慧體、主智慧體或成員,閒置回報也不會觸發 toast、音效或注意力計數。run 開始時,由 pi 自己的那一列取代它;run 結束後它會再回來。隊友 run 的 pane 也是一列,就在塔台的正下方([ally] <device label>,見隊友 run)。

細節

token。 網裡的每個 session 都會在 sb_role 旁邊寫入顯示用 token,寫在同一份回報裡,沿用同樣 4 分鐘的更新週期與 10 分鐘的 TTL。它也會在自己啟動的子智慧體的 pane 上寫入,因為子智慧體不會加入,自己也不寫任何東西。session 結束時,會清掉自己和其子智慧體的 token。

  • sb_order 是排序鍵。塔台的是 WWW.0。主智慧體或成員的是 WWW.1.TTT.R.PPP:WWW 是它的工作區在基地工作區中的位置(子工作區不算;主塔台的工作區存在時是 000,所以此時基地工作區從 001 開始),TTT 是它的分頁在工作區中的位置,R 對主智慧體是 0、對成員是 1,PPP 是它的 pane 在分頁中的位置。

    塔台與各分頁之間還有另外兩個位置,給合併火車用(見合併火車):整合員,也就是其 train todo 產生了專案 yard.json 的主智慧體(yard 以寫入者的身分記下它的 session,而且該寫入者的行程仍在執行),是 WWW.05.TTT.0.PPP,它那個分頁的成員是 WWW.05.TTT.1.PPP,其中 TTT 是它的分頁在工作區各分頁中的位置,所以它的分頁會往上移到塔台下面,同一工作區有兩位整合員時就是兩個區塊,每個成員都緊跟在自己的主智慧體底下;火車是 WWW.06.YYMMDDLL.HHHHHHHH,即其代碼的年、月、日,以及代碼的字母(左側補 0)(2026-11-06-m 是 2611060m,2026-11-06-aa 是 261106aa),再接其專案名稱的 SHA-256 前八位十六進位數字,這部分只用來在兩個專案有相同代碼的火車之間分出先後。

    塔台的子智慧體(WWW.0.NNN)排最前面,因為 . 排在數字之前,然後是 WWW.05,再來是 WWW.06,最後才是各分頁(WWW.1)。火車的鍵只取決於它自己的代碼與專案,所以一列火車結束時不會移動其他任何一列,只有排在它後面的 focus_agent 編號會位移;一個字母的代碼排在兩個字母的代碼之前。火車的 reviewer 與任何子智慧體一樣,比它的火車低一段。每個子智慧體增加一段 .NNN,即它在啟動者的執行中與已完成子智慧體之間的位置,任何深度都適用(儀表板每個 session 列出八個,這些鍵涵蓋每一個執行中的子智慧體)。

    每個數字都補零,所以單純的字串順序就是數字順序,子智慧體的鍵排在其啟動者的鍵之後、啟動者的下一個同層之前。

  • sb_mark 用幾個字元說明網成員是什麼:主智慧體只有它種類的字符(自 0.74.0 起:協調者是舵輪,nf-md-ship_wheel U+F0833;整合員是下面的 code-fork;值守是燈塔,nf-md-lighthouse U+F09FF;主智慧體的種類不明時只有一顆星,Font Awesome 的,U+F005),成員只有一個人形(Font Awesome 的,U+F007),子智慧體則只有它啟動腳本(PI_SUBAGENT_AGENT)所指名種類的字符:worker 是扳手(nf-md-wrench U+F05B7),scout 是望遠鏡(nf-md-binoculars U+F00A5),planner 是鉛筆加尺(nf-md-pencil_ruler U+F1353),reviewer 是放大鏡(nf-md-magnify U+F0349),watchdog 是狗(nf-md-dog U+F0A43)。

    角色不在其中、或啟動腳本已不在的子智慧體是 [sub] <launcher>,其中啟動者的名稱截為 24 個字元。這些字符就是頁面當作圖示畫的那些(瀏覽器檢視),並已對照 Nerd Fonts 3.5.1 的字符名稱檢查過。隊友 run 的 pane(由 sb server 處理的一則 Straw Link 訊息)是 [ally] <device label>;它的鍵、分支與名稱由 sb server 為它寫入,就像子智慧體的由其啟動者寫入(見隊友 run)。塔台沒有這個 token:它的分頁已經帶有無線電塔圖示。

  • sb_mark 也用單獨一個 Font Awesome 的 code-fork(U+F126)標記整合員,用火車圖示(U+F238)加上短代碼標記火車(\uF238 1106m)。兩者都依 session 自己的紀錄,來自 trainboard 檔案,而不是來自 pane 上的任何 token:整合員是存活的 yard.json 所指名的 session(寫入者行程已消失的 yard 不指名任何人),火車則是塔台為該代碼開了 pane 的那一列。

    整合員分頁的成員會向 intercom 的清單詢問存活 yard 所指名的 session 在哪裡,若其中有一個在它自己的分頁,就取代整合員的位置(Herdr 會告知某個 pane 在哪個分頁);yard 變動後,它在下一次更新時重新排序。標記與位置只用於顯示:火車自己的 shell 可以寫出指名某個存活 session 的 yard。

  • sb_step 只在火車上有:目前步驟狀態的圖示(沙漏 U+F254 等待中、播放 U+F04B 執行中、勾 U+F00C 已通過、叉 U+F00D 失敗、還原 U+F0E2 回復中),加上步驟的種類,最多 24 個字元。目前步驟是進行中的最小一個,沒有進行中的就取最新完成的,由火車自己的看板讀取(經過驗證,所以種類是已知詞彙之一)。火車在看板變動 5 秒後寫入(監看專案 trainboard 資料夾,啟動後也會看一次),此外還有 4 分鐘的更新;控制字元與方向字元會被移除。其他智慧體都不帶這個 token,session 也會清掉 pane 上留下的那一個。

  • sb_main_tab 是主智慧體的分頁標籤,sb_tab 是成員的,每種角色一個 token,因為 Herdr 的規則只看得到自己的 token,所以每一列依角色各自上色。成員的 token 保留它自 0.7.2 起使用的 sb_tab 名稱,因此這一列也適用於尚未重新載入的 session;其他智慧體兩者都不帶。

  • sb_indent 只在子智慧體上有,是從其啟動者到它的分支,畫法和 Herdr 的 Spaces 面板中的 worktree 一樣:同一個啟動者之後還有被標記的子智慧體時是 ├─,最後一個是 └─。同一個啟動者的子智慧體在任何深度都是同層。塔台、主智慧體與成員都不帶這個 token,session 也會清掉 pane 上因執行過子智慧體而留下的那一個。

  • sb_name 只在子智慧體上有,是 pi-herdr-agents 顯示的它自己的名稱,和 sb_mark 裡啟動者的名稱一樣截為 24 個字元。名稱在 pane 有 Herdr 標籤時取自該標籤,否則取自啟動腳本的名稱。Herdr 也把標籤存在 server 的記憶體裡,所以換了新的 server 之後標籤就沒了,這一列只會顯示工作區的名稱;token 會和其他的一起回來(見下文),這一列就可以改顯示它。塔台、主智慧體與成員都不帶這個 token,session 也會清掉 pane 上因執行過子智慧體而留下的那一個。

這些 token 依據的是 session 上一次更新時 Herdr 的順序,所以移動分頁或工作區後,網檢視在 4 分鐘內就會反映出來,而有了新同層的子智慧體,會在下一次更新時得到它的 ├─。子智慧體在其 pane 執行 pi 期間會被標記:其啟動者在 subagent 或 subagent_resume 呼叫返回後的 3 秒與 15 秒會再發布一次,所以新的子智慧體幾秒內就會掛在它底下,而它完成後,它的 token 會在下一次更新時移除。到那時 Herdr 仍未偵測到其 pi 的子智慧體(例如它停在 pi 的信任提示上),會在 Herdr 回報它時就被標記,而不是等到下一次更新。

只要啟動出去的子智慧體還沒有 pi pane,其啟動者就會維持一條 events.subscribe 連線,監聽 pane.agent_detected 與 pane.updated(這兩個事件可能把 pane 變成跑著該子智慧體 session 檔的 pi),而一陣來自啟動者尚未標記的 pane 的連續事件,會設定一個 1 秒的計時器,讀取 Herdr 一次。這次讀取只寫入子智慧體的 token,而且只在與上次寫入的不同時才寫,所以沒有任何變化的事件只花一次讀取、不做寫入。

每個啟動出去的子智慧體都有 pi pane 時,連線就會關閉,所以沒有啟動任何子智慧體的 session 不會持有連線;而最近 10 分鐘內完成的子智慧體也沒有 pane,所以連線在那之後還會保留這麼久。4 分鐘的更新維持為安全網,子智慧體完成後,它的 token 仍會在下一次更新時移除。

Herdr 把 pane 與工作區的 token 存在 server 的記憶體裡,所以接手的 server(更新期間的即時交接,或是停止再啟動)一開始沒有任何 token,網檢視會一直沒有排序,塔台看起來也像不存在,直到每個 session 的下一次 4 分鐘更新。因此,每個能加入網的 session 與每個塔台,都會在 Herdr 的 socket 上維持一條 events.subscribe 連線,唯一目的是看它何時關閉;它訂閱的是 workspace.renamed,這幾乎不會發生,所以這條連線沒有流量,server 運作期間也不花任何成本。

細節

連線關閉時,session 會在 0.25 秒、0.5 秒、1 秒後重新連線,之後每 2 秒一次;等到有 server 回應,就一次把所有東西重新寫入:先是塔台的工作區 token tower 與它自己的 sb_role(其他 session 就是靠這兩個找到塔台,沒有它們,空窗期間的 call_tower 會開出第二個塔台),然後是 4 分鐘更新的完整發布(它的角色與網 token,以及它啟動的子智慧體的標記)。session 的第一次連線不算接手。

尚未完成加入的 session(或尚未取得其角色的塔台),在接手時不寫任何東西;子智慧體與子工作區中的 session 不持有連線。

flowchart TD
    r["herdr server stop,<br/>再啟動新的 server"] --> p["Herdr 在每個還原的 pane<br/>啟動新的 pi --session file"]
    p --> c{"pane、分頁、工作區<br/>都和記錄的角色相同?"}
    c -->|"是"| t["session 取回它的角色"]
    c -->|"否"| m["它維持成員"]

herdr server stop 之後換了新 server,Herdr([session] resume_agents_on_restore 預設開啟)會在每個還原的 pane 以 pi --session <file> 啟動新的 pi:行程是新的,pane 與分頁的 id 以及 session 檔路徑不變,而 STRAW_BOSS_ROLE、token,以及(對尚未有對話的 session 來說,因為 pi 要到第一則訊息之後才寫檔,而且會給接續的 session 一個新的 session id)straw-boss 條目都沒了。

細節

若不另外處理,每個接續的 session 都會變成成員:退出應用程式再重新開啟的 PM,會失去塔台與所有主智慧體。因此,塔台與主智慧體會把自己的角色記錄在狀態資料夾的 roles/<hash of the session file>.json 裡(角色、pane、分頁、工作區,主智慧體另外記錄該 pane 的終端機),時機是塔台取得其角色時,以及 session 成為其分頁的主智慧體時;當 session 被刻意關閉(GUI 的結束、/boss close、塔台要求它開出的主智慧體結束、第二個塔台讓位)時,就刪除這筆紀錄。

在它所記錄的 pane、分頁與工作區啟動的 session 會取回角色:塔台在 Herdr 把它的 pane 列在塔台分頁裡之後(見下),以塔台身分啟動,寫入它的 token 與帶有新 session id 的工作區 token;主智慧體則加入並自行升任,若該分頁已有存活的主智慧體,照常被拒絕(此時它會刪除自己的紀錄,因為它仍是成員)。

在與紀錄不同的 pane、分頁或工作區裡的 session、沒有紀錄或紀錄讀不出來的 session,以及被使用者刻意關閉的 session,都維持為成員;沒有人會依一筆紀錄取得角色,除非它所指名的 pane、分頁與工作區都相符。主智慧體還需要多一項證明,證明確實發生過重啟:Herdr 會給還原的 pane 一個新的終端機(pane current 的 terminal_id,而 pane id 不變),而紀錄記下了主智慧體所在的終端機。

在同一個終端機裡啟動的 pi,例如在仍開著的 shell 中 /quit 之後又 pi --session 或 /resume 同一個檔案,不算還原:它維持為成員並刪除紀錄,這樣下一次真正的還原就不會把主智慧體角色交給一個從未擔任過的 session。塔台與列車自 0.75.0 起還需要另一項證明:紀錄與存下的項目只是主張這個角色,由 Herdr 來證明。兩者都是 session 自己的 shell 寫得到的檔案,所以從前一個成員只要在自己的紀錄裡寫入 {"role":"tower"},或在自己的 session 檔裡寫入塔台項目,下一次 /reload、/resume 或還原時就會以塔台身分啟動。

現在 session 只有在行程本來就是以塔台啟動(STRAW_BOSS_ROLE=tower,或同一個行程先前已是塔台),或 Herdr 把它的 pane 列在標籤為塔台圖示的分頁裡,而且該分頁沒有其他 pane 在跑 agent 時,才是塔台;這個標籤在還原後仍在,也不存在任何檔案裡(server 安置自己的塔台時用的就是這項證明)。列車的項目或紀錄,只有在標籤為該代碼 train <MMDDx> 的分頁裡才算數,而且 /reload 時項目還必須與 pane 保留的 sb_train token 相同。

標籤是在啟動時和工作區檢查一起問的,所以分頁清單讀取失敗什麼也證明不了:啟動維持未定位並再問一次,這段期間什麼都不加入。未獲證明的主張會以成員身分啟動(列車則不是列車),並發出一則警告,指名是哪個檔案與哪個分頁;因此,在一般分頁裡接回塔台的 session 檔會是成員,而分頁標籤被改掉的塔台或列車,還原後也會是成員。

boss_rename 與 boss_open_main 裡主智慧體的標籤都會拒絕這些標籤,/boss pop 也只有在清單把某個 pane 記為塔台、且它獨自在塔台分頁裡時才啟動塔台(否則它以成員身分回來,並發出一則警告)。STRAW_BOSS_ROLE=tower 本身不在這道防護之內:任何 shell 都能設定它。

主智慧體沒有這樣的分頁(它的標籤就是它自己的名稱),所以它的紀錄仍依上述檢查成立(規格 §29)。由塔台開出的主智慧體(見關閉開出的主智慧體)也會記錄它的 sb_opened_by 標記,還原的主智慧體會把它寫回並重新註冊控制通道,所以其工作區中還原的塔台可以像以前一樣關閉它:還原只是單純的啟動,既沒有 pane 的 token,也沒有存在 session 裡的開啟者,而關閉的權限取決於塔台提出要求時主智慧體所在工作區的塔台 token(上述規則),新的塔台 session 一旦回來就會再度持有它。紀錄只對主智慧體所在的地方(同一個 pane、分頁與工作區)有效,所以在另一個工作區還原的主智慧體沒有標記,而老闆自己開啟的主智慧體也沒有可以帶回來的標記。

主智慧體必須有終端機:若 Herdr 沒有回報 pane 的 terminal_id,就不給它還原,session 在啟動時會警告一次。Herdr 可能重用 pane id,所以紀錄也記下 session 檔,而守衛等待某個 pane 時,只限於 Herdr 為它回報的 agent_session(若有回報)就是那個檔案的情況。

一個分頁只有一筆主智慧體紀錄:成為該分頁主智慧體的 session 會刪掉該分頁的其他紀錄,所以被 /boss 或守衛降級的主智慧體,不論哪個 pi 先啟動,都不會以第二個主智慧體的身分回來;如果較舊的紀錄(由早期版本寫的)和新的並存,還原只採用最新的一筆。守衛把主智慧體降回成員時不會刪除紀錄,單純的 /quit 也不會:從行程內部看,Herdr 的停止與它看起來一樣,而塔台在比它的主智慧體稍早退出時,會先把它們降級。當分頁有塔台但沒有主智慧體時,守衛會讓該分頁的第一個成員加冕(見上文的守衛),而它會等待還原正要帶回來的主智慧體:只要分頁的主智慧體紀錄所指名的 pane 現在跑在新的終端機裡,守衛就不讓任何人加冕,從它第一次看到該 pane 起算 30 秒。

沒有這段等待,加入還原分頁的第一個 pi 會凌駕紀錄中的主智慧體而被加冕,之後紀錄中的主智慧體就會發現分頁已被占走。以這種方式回來的主智慧體不會開出塔台(工作區的第一個主智慧體通常會開):它的塔台也正在回來,而塔台沒有回來的基地,會在守衛的寬限期之後照常清掉它的主智慧體。超過 90 天沒有動過的紀錄,會在寫入另一筆時被刪除;這項整理,以及刪除對立的主智慧體紀錄,都不會讓紀錄本身的寫入失敗。

連線與重試計時器都不會讓 pi 持續存活,而 session_shutdown 會關閉它們:/reload 之後只剩一條連線,也就是新實例的那一條,而在同一個實例裡再次啟動的 session 會取代它的連線。拒絕 events.subscribe 的 server 與已經消失的 server 一樣處理,所以 session 每 2 秒重試一次而沒有效果,並照舊維持 4 分鐘的更新。側邊欄外掛不需要更多東西:它的啟動 hook 在 server 啟動時(任何 token 出現之前)就打開檢視,而 Herdr 0.9.4 之後的版本會在 token 變動時再次排序檢視。

還原所帶回來的子智慧體是另一回事:每一個都會以沒有擴充套件的普通 pi 回來,沒有讓它成為子層的擴充套件,要請它的啟動者讓它接續(見被 Herdr 還原成普通 pi 的子智慧體)。

這些 token 也會在 Herdr 自己的分組檢視中顯示角色,只是外掛無法重新排序該檢視。把它們加進 config.toml 中 [ui.sidebar.agents] 的某一列。$sb_indent 放在狀態圖示之前,這樣子智慧體就會像 Spaces 面板裡的 worktree 一樣掛在其啟動者底下;Herdr 會在它後面自己加上 ·,沒有這個 token 的智慧體則什麼都不顯示。$sb_name 緊接在狀態圖示之後,所以即使 Herdr 弄丟了 pane 的標籤,子智慧體那一列也會說明它是哪個子智慧體,而它後面的 $sb_step 顯示合併火車正在做什麼。

細節

所有圖示都放在第一列;沒有種類的子智慧體的 [sub] 標記保持隱藏,因為分支已經說明了它是什麼,而子智慧體的種類字符會顯示,因為分支沒有說明它。這段範例替主智慧體種類的字符加粗,把顏色交給你的 Herdr 主題;想替標記上色,就在規則裡加上 fg。Herdr 會丟掉每個項目都是空的那一列,所以第二列,也就是來自 $sb_main_tab 或 $sb_tab 的分頁標籤,讓主智慧體和成員多出第二行,而其他每個智慧體維持一行;請把這兩個 token 設成星星和人形的顏色。第一列省略了 Herdr 的 tab,由第二列負責顯示。

[ui.sidebar.agents]
rows = [
[
{ token = "$sb_indent", dim = true },
"state_icon",
{ token = "$sb_name" },
{ token = "$sb_step" },
{ token = "$sb_mark", rules = [
{ starts_with = "[sub]", hide = true },
{ starts_with = "\uF005", bold = true },
{ starts_with = "\uF007", bold = true },
{ starts_with = "\uF126", bold = true },
{ starts_with = "\uF238", bold = true },
{ starts_with = "\U000F0833", bold = true },
{ starts_with = "\U000F09FF", bold = true },
] },
"machine", "workspace",
],
[{ token = "$sb_main_tab", bold = true }, { token = "$sb_tab", bold = true }],
]

Herdr 的預設有帶智慧體名稱的第二列;如果想要,就把 "agent" 放回自己的一列,或放進這一列。token 的顏色只接受十六進位值,所以請依喜好在 token 或規則上加 fg。herdr config check 會接受這段範例,herdr server reload-config 則會套用它。

安裝。 從 checkout 連結外掛,並把動作綁到一個按鍵。Herdr 是在 server 啟動時執行 startup hook,而不是在連結外掛時,所以已經在執行的 server,要在按一次鍵之後、Herdr 偵測到下一個智慧體之後(reapply 事件 hook,見下文),或重啟之後,才會顯示這個檢視:

終端機視窗
herdr plugin link /path/to/pi-straw-boss/herdr-plugin
herdr plugin action list --plugin wayne930242.straw-boss
herdr plugin action invoke wayne930242.straw-boss.net
[[keys.command]]
key = "prefix+alt+n"
type = "plugin_action"
command = "wayne930242.straw-boss.net"
description = "toggle the straw net view"

prefix+? 會列出已被占用的按鍵,herdr server reload-config 會載入新的綁定,herdr plugin unlink wayne930242.straw-boss 則移除外掛。外掛需要 Herdr 0.9.5 或更新版本(檢視探測在該版本上檢查過)與 node;在 Windows 上,它透過具名管道連到 Herdr,並有自己的動作 net-windows(Windows)。token 來自各個 session,所以仍在執行舊版 pi-straw-boss(0.6.5 之前)的 session 在 pi 重新載入它之前沒有 token,並且排在其他之後。

檢視是 Herdr socket 上的一個 agent.view.set 請求(CLI 沒有對應的指令),依 sb_order token 遞增排序,其次依 Herdr 的工作區、分頁與 pane 順序。Herdr 把有值的排在沒有值的之前,所以沒有 token 的智慧體排在網之後,彼此之間則依該位置順序排列。外掛自己不寫任何 token。0.9.4 之前的 Herdr server 在 token 變動時不會重新排序已安裝的檢視(0.9.4 會):順序會停在上次安裝時的樣子,直到檢視被關掉再打開,所以請按兩次鍵來更新它。

細節

啟動時開啟。 manifest 裡的 [[startup]] 會在 server 還原完它的 session 之後執行一次 net-view.mjs startup,在更新交接中由新 server 接手時再執行一次。它安裝的檢視與按鍵安裝的相同,然後立刻結束;沒有任何行程留著執行,而失敗(Herdr 拒絕該檢視)會記在外掛的 log 裡,不會讓 server 停下來。每次 server 啟動都會把檢視打開,不管先前的 server 留下什麼:按鍵把它關掉的效果,會持續到 server 停止為止。唯一的例外是在同一個 server 裡再次執行的 startup,它不會動該 server 自己的「關閉」狀態。

Herdr 沒有查詢目前檢視的指令,但帶著一個不擁有任何東西的 source(<plugin source>-probe;Herdr 的 source 只接受 ASCII 字母、數字、冒號、點、底線與連字號)的 agent.view.clear 不會改變檢視,並且會回答目前的檢視(在 Herdr 0.9.5 上檢查過),所以這個動作讀取實際顯示的內容,而不是相信它自己存下的狀態:當自己的檢視是作用中的就清除,否則就安裝。在同一次 server 執行中被取消連結又重新連結,或被停用又重新啟用的外掛,會在沒有 startup hook 的情況下失去它的檢視,而以前第一次按鍵會記下「關閉」卻什麼都沒改變;現在按一次鍵一定會改變側邊欄。

細節

外掛狀態資料夾裡的 net-view.json 所存的狀態(「on」或「off」,以及執行中 server 的身分,也就是 socket 檔案的 inode 與建立時間)只是 hook 讀取的意願。下一次按鍵會用以這個外掛自己的 source 命名的 agent.view.clear 來清除檢視,所以它絕不會清掉其他擁有者安裝的檢視。重啟的 server 會丟掉它的檢視;startup hook 會把檢視打開並記下來,所以第一次按鍵會把它關掉。

[[events]] on = "pane.agent_detected" 會執行 net-view.mjs reapply(Herdr 沒有針對連結或啟用的 hook):當沒有作用中的檢視、而且這個 server 自己的「關閉」沒有被按過時,它就安裝檢視;任何作用中的檢視(本外掛的或其他擁有者的),以及被按下的關閉,它都不動;所以重新連結之後,網檢視會在 Herdr 偵測到下一個智慧體時回來。其他擁有者蓋在這個檢視上的檢視也算作關閉:按鍵會再次安裝這個檢視。

Herdr 每個 server 只保有一個 Agents 檢視,所以其他外掛的檢視與這個檢視會互相取代。檢視開啟時取消連結或停用外掛,檢視會立刻消失;重新連結之後的第一次按鍵只是重設狀態,第二次才把檢視打開。Herdr 以啟動其 server 的行程的 PATH 來啟動外掛指令,而從 macOS 應用程式啟動的 Herdr 只有 /usr/bin:/bin:/usr/sbin:/sbin。因此 run.sh 會在 PATH、Homebrew、/usr/local、mise、asdf 與 volta 的資料夾,以及透過 login shell 尋找 node,找不到時會在外掛的 log(herdr plugin log list --plugin wayne930242.straw-boss)裡說明。