Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"name": "pstack",
"source": "./plugins/pstack",
"description": "If you want to go fast, go deep first. pstack helps you write less, but higher quality code. rigorous agent workflows you can parallelize with confidence. Original pstack by Lauren Tan (poteto).",
"version": "0.9.77"
"version": "0.9.80"
}
]
}
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,6 @@ plugins/pstack/skills/poteto-mode/scripts/node_modules/

# bun installs the typebox peer for the Pi extension tests
/node_modules/

# Lake build output for the Lean models
/lean/.lake/
38 changes: 38 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,44 @@

This file is the release changelog, with one `## <version> - <title>` entry per release, newest first. The Cursor-to-Claude rewrite rules live in [`tools/substitutions.json`](tools/substitutions.json), and the [sync boundary](CONTRIBUTING.md#the-sync-boundary) in `CONTRIBUTING.md` defines how a change to upstream's skill content is declared.

## 0.9.80 - pstack-herdr: merge pstack-claude 0.9.79

This release merges `michael-denyer/pstack-claude` 0.9.76 through 0.9.79 into the fork. It brings in `haiku` in the default panel, `reflect` reviewer prompts without the parent's verdict, the `cursor/plugins` pin at `df58112` (v0.15.15), the `ship-pr cancel-pending` dequeue fix, and fixes in `watch-pr`, the Pi scheduler and agent restore, the `orch` store lock, `worktree-audit`, and `sync`, with the Lean and TLA+ models behind them. The fork keeps the Herdr dispatcher, `--next`, the Agent gate, routes, the Herdr model menu, and the real Herdr CI job. Upstream touched none of them.

`tools/forks.json`'s `reflect` entry takes upstream's longer description and keeps the fork's Herdr pointer. The README's upstream pin moves to `df58112`. Upstream also released its own 0.9.76 and 0.9.77, so its four entries sit under this one as `### pstack-claude` subsections and the version moves to 0.9.80. Merge this release with a merge commit, not a squash, so the next sync starts from `60ae9e2`.

### pstack-claude 0.9.79 - dequeue a queued PR, and fixes from three models and a code review

`ship-pr cancel-pending` can take a PR out of a merge queue. The dequeue request named the pull request in `pullRequestId`, a field GitHub's `DequeuePullRequestInput` does not have, so GitHub refused it. The request now sends `id`, and `disablePullRequestAutoMerge` keeps `pullRequestId`, which is the name its own input type uses. @alex-overcyai found and fixed this in [#239](https://github.com/michael-denyer/pstack-claude/pull/239). Both shipping test files now answer from one fake of `gh api graphql`. The fake returns only the fields a query selects and refuses a mutation with the wrong input field or variable type, so the same mistake on either mutation fails a test.

`watch-pr` refuses an `--interval` above 2147483.647 seconds. A timer delay above 2^31 - 1 ms is replaced with 1 ms, so a longer interval made every poll sleep return at once.

On Pi, a `/loop` typed during a manual compaction no longer leaves the wakeup slot sealed. The scheduler treated any session that was not idle as a run in flight, and Pi is not idle during a compaction, so it refused the next run at every wakeup. It now tracks a run from `agent_start` to `agent_settled` and seals the slot only between the two.

The orchestration store's lock release can no longer delete a lock that a forced takeover has just written. The release read the lock, saw its own pid, and unlinked the lock by path as a separate step. It now does both behind the claim a takeover holds, and waits for a live claimant to finish.

The three fixes above came from models of the code, which ship with them: `lean/Model/WatchPoll.lean` for the polling arithmetic, and `tla/PiScheduler.tla` and `tla/OrchStoreLock.tla` for the scheduler and the lock. Two runs of each TLA+ model still fail by design and record narrower findings these fixes do not close.

worktree-audit keeps a transcript root it cannot inspect for any reason other than absence. It reports the scan failure and leaves recent activity unknown, so the worktree needs review instead of reading as idle. On Pi, a restored agent stays unavailable until its previous process is confirmed gone. Pi signals only an orphan whose identity matches, and an older record without enough identity data refuses continuation while that process is alive.

`/poteto-help` offers "a default effort" where it offered "a reasoning budget", a step the port's `/setup-pstack` does not have. The sync rule that scrubs model slugs in `setup-pstack` no longer takes a sentence's period into the slug.

### pstack-claude 0.9.78 - sync to upstream df58112 (v0.15.15)

The upstream pin moves from `2cbf585` to `df58112`, upstream v0.15.15, two commits. `/poteto-help` now offers `/setup-pstack` when the model sheet is missing and the answer depends on it. It asks at most once per chat, and a user who declines is told that every role keeps its default model. Upstream also dropped one model from its default panel and lowered its Opus effort from `max` to `xhigh`. The port takes neither change, because `models.json` sets the port's panel and effort. `setup-pstack` keeps the port's default-effort step in place of upstream's reworded budget step.

The substitution rules that point a default model list at the Models section now match a list of any length, as does the rule for the model family sentence. New rules cover the delegate defaults in `poteto-mode`, the default-model column of the `reflect` reviewer table, and every slug in `setup-pstack`, so an upstream model change on those lines no longer conflicts with the port. `interrogate` says "the Reviewer labels below" and names no label run, since the generator stamps the table from the panel.

Measured with `bun tools/sync.mjs pstack 1e56b29`, then `df58112`, over 82 synced files with 36 excluded: the first run changed `poteto-help`, and the second changed five files, `poteto-help` among them. Two conflicts were resolved by hand. `poteto-help` keeps the port's `/swarm` row and takes upstream's `/interrogate` row. No file became port-only.

### pstack-claude 0.9.77 - add haiku to the default panel

The default panel is `opus`, `fable`, `sonnet`, `haiku`. With no override sheet, `arena` and `architect` run four runners, `interrogate` runs four reviewers, with `haiku` as Reviewer D, and the `arena` cross-judge pool includes `haiku`. A `pstack-models.md` sheet that names these roles keeps its own lists. The Codex panel is unchanged. On Pi, `haiku` resolves through the `pi.models` table in `models.json`.

### pstack-claude 0.9.76 - keep the parent's verdict out of reflect's reviewer prompts

reflect passes the transcript path to its reviewers with nothing beside it. When the finder cannot locate the transcript, the fallback digest records the session's prompts, corrections, tool calls, results, and files in turn order, and states no diagnosis, verdict, or cause. A reviewer that reads the parent's conclusion first tends to audit that conclusion instead of the session ([#231](https://github.com/michael-denyer/pstack-claude/issues/231)).

## 0.9.77 - pstack-herdr: move the Herdr scripts into their own folder

The Herdr scripts move from the flat `poteto-mode/scripts/` directory into `poteto-mode/scripts/herdr/`, following upstream's layout for `orch/` and `watch-pr/`, where a tool's folder carries its name and the files inside drop it:
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

[pstack](https://github.com/cursor/plugins/tree/main/pstack) for Claude Code and Codex, with delegated agents running as visible [Herdr](https://github.com/herdrdev/herdr) panes.

This is a fork of [`michael-denyer/pstack-claude`](https://github.com/michael-denyer/pstack-claude), the Claude Code, Codex, Pi, and GitHub Copilot port of Lauren Tan's pstack. It has 58 Agent Skills: 34 public skills and 24 `principle-*` leaves. The skill tree is synced against upstream `2cbf585` from `cursor/plugins/pstack`.
This is a fork of [`michael-denyer/pstack-claude`](https://github.com/michael-denyer/pstack-claude), the Claude Code, Codex, Pi, and GitHub Copilot port of Lauren Tan's pstack. It has 58 Agent Skills: 34 public skills and 24 `principle-*` leaves. The skill tree is synced against upstream `df58112` from `cursor/plugins/pstack`.

Inside Herdr (`HERDR_ENV=1`), workflows that delegate start real Claude Code or Codex workers in Herdr panes, routed by role. You can watch and answer each worker. Outside Herdr, the plugin behaves like pstack-claude.

Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.9.77
0.9.80
2 changes: 1 addition & 1 deletion docs/reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ CI also checks shell scripts, workflows, Markdown, relative links, and the bundl

### Port scope and attribution

The skill tree is synced against upstream `2cbf585` (v0.15.13).
The skill tree is synced against upstream `df58112` (v0.15.15).

This repository ports Lauren Tan's pstack from Cursor to Claude Code and shares the skills with other runtimes. This fork adds the Herdr dispatcher, its routing config, and the Agent gate. It includes seven cursor-team-kit skills and an independently authored `babysit` skill. The port supplies Claude Code plugin registration and routing, Codex manifests and shortcuts, the Codex tool mapping, the Pi package, extension, and tool mapping, and the GitHub Copilot hooks and tool mapping.

Expand Down
Loading
Loading