跳到主內容

Theme / 0.9.130

Pstack

用可驗證的工作流程協作,從單一入口學會工程技能

基礎觀念

v0.9.127~v0.9.128:安全掃描修復與各平台呼叫變化

整理 pstack-claude 0.9.127~0.9.128 兩個 release:修復被 Claude plugin directory 掃描器判定為 credential forward 的寫法、子程序不再繼承整份環境、Codex prompt stubs 移除、Pi delegation 讓位給外部擴充與其撤回、watch-pr 對齊上游 CI chain、Claude desktop 保留 poteto-mode playbook checklist。含升級檢查清單。

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/prompts recipe in docs/reference.md, which is gone too. Each skill already serves its own slash command. The generator no longer writes stubs, and a commands/ 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: off line in ~/.pi/agent/pstack-models.md leaves delegation to another Pi extension, such as pi-subagents. With the line set, the Pi extension registers none of agent, send_message, list_agents, stop_agent, and /pstack-agents, so the model sees one set of delegation tools. The pstack-pi-tools system prompt section adds one sentence telling the model to delegate with the session’s own subagent tool where pi-tools.md names pstack’s, because pi-subagents registers a single subagent tool 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.md beside the short plan that mcp__ccd_turn__update_plan asks 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 no skip: 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’s readSnapshot carries 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 to policy.ts conflict 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 install of TLC or Java no longer sees HTTPS_PROXY. In that case, set TLA2TOOLS and JAVA, as the error message says, or run mise install yourself with the proxy set. The Pi extension, codex-session-effort.mjs, worktree-audit.mjs, and claude-project-dir.mjs read named variables instead of taking an environment object. Identifiers named key beside a file read have names for what they hold.

修復原則:沒有任何子程序(child process)繼承整份環境變數。具體落點:

  • statechart runner 改給 mise 與 java 一份具名變數清單,且不含 proxy 變數。好處是:在 proxy 環境下,第一次 mise install TLC 或 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-key query failure is now missing-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: off set, the pstack-pi-tools system 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 with pi-subagents 0.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 時,逐項確認:

  1. 比對 watcher 失敗類別的下游程式:把 missing-key 改為 missing-field。
  2. proxy 環境下的 statechart runner:第一次 mise install TLC 或 Java 若因缺 proxy 變數失敗,依錯誤訊息設定 TLA2TOOLS 與 JAVA,或自行帶 proxy 跑 mise install。
  3. Pi 使用者:pi agent tools: off 仍會移除那五個委派工具;0.9.127 的提示句已不存在,不需要為它做任何設定。
  4. Codex 使用者:$ 加 skill 名稱的呼叫方式不變;~/.codex/prompts 配方與 stubs 已移除,不要再用。
  5. 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),兩者不可互比。