LOCAL HARNESS · 0.3.0 · 2026-10-11

本地助理怎麼把一件事做完

調研日期 2026-10-11 · 標的 pi-task-agent · 公開倉庫 0.2.0 · 正在跑的工作樹 0.3.0

先講結論:現在接手機的本地助理,是一個純標準庫的橋接,九個程式檔。公開倉庫 h2ocloud/pi-task-agent 是 0.2.0。正在跑的服務載的是工作樹 0.3.0,還沒推上 GitHub。它分成三層:通訊與調度、長任務編排、一次執行。執行器叫的是公開的 pi 命令列。三種模式:auto 地端還在就用地端,local 不出門,grok 先走 Grok Build、呼叫失敗才回到地端。Telegram 上的舊顯示名是龍蝦助理,後來改成現在的名字;閘道程式已換掉,這份程式是接替者。

從 Grok bot 借的是看得到的行為,不是它的程式。行為筆記寫明只依使用時的感覺整理,對得上的是三件事:先回再做、長工作不卡住聊天、清單用四個狀態。壓縮上下文、每步換新對話、做不到就拆小或誠實跳過,是為了地端模型後加的。0.3.0 又補上:同輪工具一起計時,以及家目錄等級的搜尋會被中止。把模型換成 grok-build-0.1 不會換成 Grok 的執行器。

我的建議是把這三層當成現況,不要再併回舊閘道。若要補一個洞:對外寄信仍只寫在提示裡,執行器開了 shell,沒有權限層硬擋。筆記要求的是硬擋。

實作
3,283 行
工作樹 0.3.0,九個檔,不含測試
離線測試
120 過
2026-10-11 工作樹重跑,不打外網
轉背景
第 3 輪
或前景滿 10 分鐘
狀態詞
4
開始了/還在跑/做完/被擋住

00版本

新的在上面。每一版只寫這一版多了什麼。公開倉庫現在是 0.2.0。0.3.0 在工作樹,服務已載入,還沒推上 GitHub。

0.3.0 2026-10-11 工作樹,未推送

離線六份 120 項通過。沒有再拿同一題打訂閱模型。寄信仍只是提示,沒有權限層硬擋。

0.2.0 2026-10-11 已在公開倉庫

這一版的訂閱路徑只核到網址與模型選擇,沒有打一通付費呼叫。付費呼叫是 0.3.0 才做的。

0.1.0 2026-10-11 公開快照

01三層怎麼接

手機進來的每一則,先停在調度層。短的自己答完;變長才交給編排器。編排器不直接生成,它只會一再呼叫「跑一次」。行數是工作樹 0.3.0。

入口 Telegram 長輪詢 LINE webhook(驗簽) 調度層 先回 · 分流 · 斜線指令 · 離線排隊 前景一則 零到兩輪工具就答完;第三輪或滿 10 分鐘就交出去 斜線與口語 清單、停止、進度不經模型 轉成背景工作 編排層 規劃 → 每步全新對話 → 驗收 → 太大就拆(最深 3 層)→ 仍不行就跳過 執行層 · 一次 pi 工具卡死、空轉、輪數、上下文、牆鐘
層程式行數它負責的一件事
調度橋接主程式1,180收訊、先回、把新訊息分成補充/無關/問一次、斜線指令、重啟接續、送不出先存、三種模型模式
編排長任務473規劃、小步、驗收、遞迴拆、退階、15 分鐘進度、寫給人看的收尾
執行跑一次318起一個 pi 行程,讀 JSON 事件;同輪計時,家目錄等級的搜尋會中止
壓縮上下文150只壓敘事;目標與使用者原話釘住;掉了的路徑與網址用規則補回
另一個入口LINE260驗簽、免費回覆優先、推播額度不夠就改走另一個頻道
其餘提供者、語言、調參頁、技能902兩個層級、三種模式、本機調參頁、按需技能

02一則訊息實際怎麼走

常數都寫在程式最上面,下面是 2026-10-11 讀到的值。

四個狀態就是清單。開始了、還在跑、做完、被擋住。存在磁碟上的工作檔,不靠對話記得。橋接重啟會自己接,同一件最多自動接 3 次,再中斷就停下來等人說繼續。

03從 Grok bot 借了什麼

依據是一份行為筆記,開頭寫明「只照看得到的行為」。橋接程式的檔頭直接指向這份筆記。沒有 Grok 的原始碼,所以下表的「一樣」是行為對得上,不是實作相同。

筆記裡的行為現在的程式對照
先回再做。短問題直接答。不能只回「收到」。第一個工具開始就回;沒工具就把答案當第一句。一樣
一到兩輪在前景做完。超過兩輪派背景,這一輪結束,聊天空出來。第 3 輪工具開始就交出去。前景滿 10 分鐘也交,不把工作砍掉。一樣 多了時間上限
補充併進原工作。新事另開。分不出來問一次,並給選項。分流器回三個路由。問句固定是「加」或「新」,30 分鐘內等回答。一樣
狀態只用四個詞。問進度時看清單,不因為被問就開始定時查。工作狀態就是這四個詞。口語問進度不進模型。一樣
清單在磁碟。重開或壓縮之後要接得回來。工作檔在磁碟。重啟接續,半截的工具呼叫會先壓縮再換新對話,避免供應端拒絕接。一樣
只在有結果、改方向、被擋住時說話。不要每步一則,也不要定時去查。不報每一步。但整件超過 15 分鐘,每 15 分鐘一句進度。後來改過 筆記不要心跳;使用者後來要求長任務要報進度。兩條都在,取的是後者。
被擋住就停下,整理成選項,答完接回同一條。只有密碼、授權、拍板才停。回答原文釘住,接著做。其他困難自己換做法。一樣
對外寄信只建草稿,並用權限設定硬擋。規劃與步驟提示寫「不要寄信、不要發訊」。工具含 shell,沒有權限層拒絕。沒做到 仍是軟限制。
調研派較便宜的模型。改碼放在另一個已登入的環境。快層級做分流與短判斷,主層級做規劃與工具迴圈。改碼仍是同一個 pi,沒有另開一個已登入的環境。只借到分層
不要用「沒輸出」判斷卡住。同輪還在跑的工具一起計時,全部結束才清掉,最久超過 180 秒算一次。家目錄或整碟的 find、遞迴 grep 約兩秒就中止。連續兩次才停這次執行。判斷方式不同 不是看有沒有字。0.3.0 改成看同輪,不再被先結束的那個清掉。
筆記還有一段最小改法,這份程式沒有照那條路做。那段是「只貼規則、加一份待辦檔、改權限」,讓既有的分頁代理湊出同樣體驗。現在的做法是把這三個機制寫進橋接本身,因為手機入口已經不是那個分頁代理。

04為了地端模型加上的

這些不在 Grok 行為筆記裡。理由寫在編排層開頭:長對話越走越容易跑偏,所以一步一個新對話。

機制門檻失敗時
一步一個新對話單步最多 14 輪工具、上下文 45,000 token太大、空轉、卡死:不換說法重試,直接拆小
同一步壓縮接續最多 3 次再滿就拆小。目標與使用者原話每次重帶,不交給壓縮模型改寫
遞迴拆小最深 3 層;一輪計畫最多 7 步拆不出至少兩步,或已到最深:這步標跳過,整件繼續,收尾誠實說沒做成
驗收對照該步的完成標準不通過就換做法再試一次。驗收模型壞掉時放行,寧可不卡住
聊天壓縮超過 40,000 token,回完才壓留最近 4 則原文。壓縮模型失敗就改規則式,並把掉了的路徑、網址補回去
空轉同一個工具、同一組參數連續 3 次停這次執行,交給拆小
後端斷線連線類錯誤前景重試三次後把訊息存著,恢復自己做。背景工作每 30 秒看一次,半小時內只說一次「先擱著」
整件安全網3 小時停下,進度留著,等人說繼續。不是因為久就當失敗丟掉
同時執行數最多 4 個 pi註解寫明後端是單序列,再多只會互相拖慢

執行器把標準輸入直接關掉。這個命令列會等到輸入結束才開工,不關的話行程會空等。錯誤訊息裡的金鑰樣式會先打碼再送出。

LINE 是後來加的入口,不是 Grok 筆記的一部分。官方帳號每月推播額度約 200 則,回覆權杖那則免費。第一則走免費路徑;進度與拆步驟不推;結果、被擋住、需要人,才推。額度快用完就改由另一個頻道通知,內容仍送到。簽名不對直接拒絕。群組與陌生人忽略。

05這次怎麼驗證

2026-10-11 重跑六份離線測試,執行器、模型、通訊都是假的。沒有對真的手機收發再測一輪。

檔通過蓋到的行為
執行器15正常結束、只殺卡死工具、連續卡死、空轉、輪數、上下文、牆鐘、取消、第 3 輪中止、錯誤打碼、按需技能、同輪計時、家目錄搜尋中止、短預覽仍留路徑
技能6關鍵字、常駐、上限、全載、關閉、triggers
編排19三步做完、驗收失敗改做法、拆小、最深仍跳過、需要人、補充重排、上下文接續、斷線自癒、取消、重啟不重做已完成的步、規劃失敗退成一步、沒根據的路徑打回、規劃拒絕掃家目錄、短預覽旁的路徑仍算有根據
調度29重試、離線排隊、送不出先存、轉背景、分流、停止只停一件、重啟最多 3 次、壓縮留錨點、半截工具呼叫會換對話、「了解到哪」不升成工作、這一輪的模型 id 由橋接帶上
LINE26驗簽、免費回覆、不必要的不推、額度不足、失敗改存、輸入中動畫、主人與其他人權限不同
接口25地端優先、斷線改 Grok Build、強制走訂閱、快模型、沒金鑰退回、/v1 不重複、語言判斷、調參上下限、日誌打碼、頁面只聽本機
查無 Grok 實作。對得上的只有行為筆記與橋接檔頭的引用。筆記自己也寫,它描述的是使用時看得到的樣子。所以「借鏡」到此為止,不能說內部排程或工具權限與 Grok 相同。
這次沒有做的。沒有對真機收發再測一輪,沒有量正常長任務的耗時,沒有把「對外寄信硬擋」補上。0.2.0 的訂閱路徑只核到網址與模型。0.3.0 有打到:一次工具迴圈與調參頁測試都回報 grok-build-0.1。另有一次問現況的長任務,模型有在思考,仍對家目錄下了搜尋;那次已被停下,沒有再重跑。

06怎麼再對一次

python3 tests/test_pirun.py
python3 tests/test_orchestrator.py
python3 tests/test_skills.py
python3 tests/test_bridge.py
python3 tests/test_line.py
python3 tests/test_providers.py
# 六份都過,才算工作樹 0.3.0 的 120 項還在。公開倉庫 0.2.0 是較早的 106 項。

行為筆記與程式檔頭的對照,以「先回、超過兩輪轉背景、四個狀態詞、補充併入原工作」四句去搜即可。門檻以程式開頭的常數為準:轉背景的輪數、前景 10 分鐘、工具 180 秒、單步 14 輪、上下文 45,000、聊天 40,000、進度 900 秒、整件 10,800 秒、重啟 3 次。

07沒有地端的時候

同一套呼叫,兩個層級。快的做分流與短判斷,主的做規劃、工具步驟與收尾。地端的兩層是同一台伺服器上的兩個別名,不會再載第二顆模型。

地端訂閱(Grok)
快同一台伺服器的 fast 別名grok-4-1-fast-non-reasoning文件
主使用者正在用的那顆grok-build-0.1文件

auto 先問地端還在不在。在就用它。不在、而且環境裡有金鑰,才改走 https://api.x.ai/v1。強制 local 永遠不出去。強制 grok 即使地端還在也走訂閱。狀態查詢不會為了探活去打付費接口。

2026-10-11 讀 xAI 文件:Grok Build 上下文 256,000。提示未滿 200,000 token 時,輸入約 $1、輸出約 $2/每百萬;滿了以後整筆改計 $2 與 $4。快模型上下文 2,000,000,標價約 $0.20/$0.50。美國區域網址目前只掛另外兩顆旗艦,不掛這兩顆,所以預設用全球網址。更重的 grok-4.7 可以換,但不是預設。文件 價格會改,以文件當日頁面為準。

工具迴圈要另外設 pi。規劃與分流直接打 HTTP,有金鑰就夠。真正讓 pi 去跑工具,還要把提供者寫進自己的 pi 設定。倉庫裡的範例檔是佔位符,沒有真的金鑰。

回覆跟著使用者的語言。寫中文就用繁體中文,寫英文就用英文,不把中文寫成唯一出口。斜線指令在還沒說話之前,看環境變數,公開預設是英文。

服務起來後,本機 127.0.0.1:8787 有一頁可以改上面這些門檻、送一句短測試、看打過碼的日誌。頁面先顯示下一則要用的模型,三個模式直接切並存檔。它拒絕聽別的位址,也不會去開關 GPU 上的模型。實測配方寫在倉庫的 TUNING.md:一台 128 GB 的 DGX Spark、一顆常駐的 Qwen3.8-Flash-Next IQ3_S、伺服器上下文 131072、聊天 40,000 就壓縮、工具溫度 0.7 而不是 0.2。換模型沒有換執行器,強弱見版本 0.3.0。