v0.9.127~v0.9.128:安全掃描修復與各平台呼叫變化
pstack-claude(本主題 67 篇逐項教學的版本基準來源)在 2026-11-04 連發兩個 release:0.9.127(00:10 UTC)與 0.9.128(01:50 UTC)。本站的逐項教學基準仍是 0.9.126;這一篇記錄基準之後的兩版差異,每項主張都對應 release notes 原文,上游沒寫的這裡不補。
版本定位
這兩版的主軸是一個安全修復加上一批各平台呼叫方式(invocation)的行為變化。0.9.128 的官方開頭句:
pstack no longer has the two source shapes that the Claude plugin directory’s scanner read as a credential forward (
MCP_FORWARDS_CREDENTIAL_ENV), the finding that held the plugin from publishing (#393).
也就是說,有一個安全審查發現(credential forward 誤判)擋住了 plugin 在 Claude plugin directory 的發布,0.9.128 把它修掉了。0.9.127 則是三項平台行為變化(Codex、Pi、Claude desktop)加一項 watch-pr 維護。
0.9.127:三項平台行為變化與一項維護
Codex prompt stubs 全數移除
The 43 Codex prompt stubs under
plugins/pstack/.codex-plugin/prompts/are gone. Codex 0.166.0 loads none of them, through a plugin install or through the~/.codex/promptsrecipe indocs/reference.md, which is gone too. Each skill already serves its own slash command. The generator no longer writes stubs, and acommands/folder still fails it (#388).
43 個 Codex 佔位指令檔(prompt stubs)全部刪除。官方判斷的依據很直接:Codex 0.166.0 實際上一個都不會載入——無論透過 plugin install,還是透過 docs/reference.md 裡的 ~/.codex/prompts 配方(該配方文件也一併移除)。每個 skill 本來就有自己的 slash command,所以 stubs 沒有存在價值;產生器(generator)不再輸出 stubs,而且 commands/ 資料夾仍會使其失敗。#385 修的 stub frontmatter quoting 問題隨 stubs 一起消失。
對 Codex 使用者的意思:不需要為了 stubs 改任何習慣——用 $ 加 skill 名稱(例如 $poteto-mode)的呼叫方式不變,這正是「Each skill already serves its own slash command」的內容。
Pi delegation 可讓位給外部擴充
A
pi agent tools: offline in~/.pi/agent/pstack-models.mdleaves delegation to another Pi extension, such aspi-subagents. With the line set, the Pi extension registers none ofagent,send_message,list_agents,stop_agent, and/pstack-agents, so the model sees one set of delegation tools. Thepstack-pi-toolssystem prompt section adds one sentence telling the model to delegate with the session’s own subagent tool wherepi-tools.mdnames pstack’s, becausepi-subagentsregisters a singlesubagenttool instead. Skills,ask_user_question,schedule_wakeup,/loop, and the other prompt sections stay. @foreztgump added this in #384.
在 ~/.pi/agent/pstack-models.md 寫入 pi agent tools: off 一行,pstack 的 Pi extension 就不註冊 agent、send_message、list_agents、stop_agent 與 /pstack-agents 這組委派(delegation)工具,模型只看到一組委派工具——例如 pi-subagents 註冊的單一 subagent tool。pstack-pi-tools system prompt 區段則加了一句話,告訴模型在 pi-tools.md 指名 pstack 工具的地方改用 session 自己的 subagent 工具委派。skills、ask_user_question、schedule_wakeup、/loop 與其他 prompt 區段全部保留。
這句 0.9.127 加進去的提示話,下一版就被撤回了,見下方 0.9.128。
Claude desktop:playbook checklist 保進 todo.md
In the Claude desktop app, poteto-mode keeps its verbatim playbook checklist in
todo.mdbeside the short plan thatmcp__ccd_turn__update_planasks for. That tool wants items of about seven words, and in the desktop runs @Fpshealth measured in #387, the agent dropped 17 of 36 playbook steps with noskip:line (#389).
Claude desktop app 的 mcp__ccd_turn__update_plan 工具要求每個條目約七個詞,poteto-mode 的 playbook checklist 是逐字的、遠比這長。desktop 實測(@Fpshealth 在 #387 測得)顯示:沒有 checklist 時,agent 丟掉了 36 個 playbook 步驟中的 17 個,而且沒有留下 skip: 說明。0.9.127 之後,逐字的 playbook checklist 保留在旁邊的 todo.md,與簡短的 plan 並存。
watch-pr 對齊上游 CI chain
watch-pr’sreadSnapshotcarries upstream’s CI chain again, with the no-checks wait as one added branch at its head, and its behavior is unchanged. It now replaces 3 upstream lines where it replaced 62, and the sync dry-run drops from 2,927 to 2,816 changed lines, so upstream edits topolicy.tsconflict less (#386).
watch-pr 的 readSnapshot 重新攜帶上游的 CI chain,把 no-checks wait 作為頭部新增的一個 branch,行為不變。差異在維護面:它取代的上游行數從 62 行降到 3 行,sync dry-run 的變更行數從 2,927 行降到 2,816 行——上游改 policy.ts 時,移植版需要手動處理的衝突更少。
0.9.128:安全修復與一次撤回
不再被掃描器判定為 credential forward
No child process inherits the whole environment. The statechart runner gives mise and java a named list of variables without the proxy variables, so behind a proxy the first
mise installof TLC or Java no longer seesHTTPS_PROXY. In that case, setTLA2TOOLSandJAVA, as the error message says, or runmise installyourself with the proxy set. The Pi extension,codex-session-effort.mjs,worktree-audit.mjs, andclaude-project-dir.mjsread named variables instead of taking an environment object. Identifiers namedkeybeside a file read have names for what they hold.
修復原則:沒有任何子程序(child process)繼承整份環境變數。具體落點:
- statechart runner 改給 mise 與 java 一份具名變數清單,且不含 proxy 變數。好處是:在 proxy 環境下,第一次
mise installTLC 或 Java 時不再看到HTTPS_PROXY。若真的需要 proxy 設定,依錯誤訊息設定TLA2TOOLS與JAVA,或自己帶著 proxy 跑一次mise install。 - Pi extension、
codex-session-effort.mjs、worktree-audit.mjs、claude-project-dir.mjs都改讀具名變數,不再收整個 environment 物件。 - 檔案讀取旁邊名為
key的識別字,改用說明其實際持有內容的名字——這正是掃描器誤判的來源之一。
watcher 失敗類別更名:missing-key → missing-field
the watcher’s
missing-keyquery failure is nowmissing-field, so a consumer that matches that failure kind needs the new name.
watcher 的查詢失敗類別 missing-key 改名為 missing-field。這是兩版裡唯一一個下游需要跟著改的點:如果你的程式比對這個失敗類別,要改用新名稱。
撤回 0.9.127 的 pi 提示句(附實測)
With
pi agent tools: offset, thepstack-pi-toolssystem prompt section no longer adds the sentence from 0.9.127 that told the model to delegate with the session’s own subagent tool. Live sessions withpi-subagents0.84.0 installed beside pstack showed that it changed nothing.
0.9.127 在 pi agent tools: off 時加進 system prompt 的那句「用 session 自己的 subagent 工具委派」,0.9.128 撤回。官方的撤回理由是一次 10 個 live sessions 的實測(pi-subagents 0.84.0 並裝、模型 openai/gpt-6.1-sol):
| session 組別 | 數量 |
|---|---|
| 帶 0.9.127 原句 | 5 |
| 帶改寫句(另稱 Agent 的欄位不會延續) | 3 |
| 無句 | 2 |
10 個 session 的結果完全一致:模型讀了 pi-tools.md、呼叫 subagents_enable 再呼叫 subagent、從未呼叫 agent;而且 10 個 session 的 subagent 都以不認得 description 選項為由拒絕呼叫,模型直接停止、沒有重試。官方的結論:模型是從 skill 自己「做一個 Agent 呼叫」的指示取得 description,一句 system prompt 蓋不掉這件事。
tools: off 移除 agent、send_message、list_agents、stop_agent 與 /pstack-agents 的行為維持不變——撤回的只是那句沒有效果的提示話。
升級檢查清單
從 0.9.126(或任何較早版本)升到 0.9.128 時,逐項確認:
- 比對 watcher 失敗類別的下游程式:把
missing-key改為missing-field。 - proxy 環境下的 statechart runner:第一次
mise installTLC 或 Java 若因缺 proxy 變數失敗,依錯誤訊息設定TLA2TOOLS與JAVA,或自行帶 proxy 跑mise install。 - Pi 使用者:
pi agent tools: off仍會移除那五個委派工具;0.9.127 的提示句已不存在,不需要為它做任何設定。 - Codex 使用者:
$加 skill 名稱的呼叫方式不變;~/.codex/prompts配方與 stubs 已移除,不要再用。 - Claude desktop 使用者:poteto-mode 的完整 playbook checklist 在
todo.md,plan 工具裡的短條目只是摘要。
對本站教學的影響
- 逐項教學(67 篇)的內容基準仍是 0.9.126,本篇是其後的差異記錄。
- 各 skill 頁描述的呼叫方式不受這兩版影響:Codex 的
$呼叫、Pi 的/skill:<name>、Claude Code 的/pstack:<name>都照舊。 - 001 課提到的版本來源辨認方式不變:
0.9.x是移植版(pstack-claude)的版本線,Cursor 原版的版本線是0.15.x(其 pstack 路徑在 2026-10-27 的 #1043 內 bump 到 0.15.36,且原版不發 GitHub releases),兩者不可互比。