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 .github/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. GitHub Copilot port of pstack-claude 0.9.57. Original pstack by Lauren Tan (poteto); Claude Code port by Michael Denyer.",
"version": "0.9.57-copilot.2"
"version": "0.9.57-copilot.3"
}
]
}
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# pstack for GitHub Copilot

[![check](https://github.com/hackernotfound/pstack-vscode/actions/workflows/check.yml/badge.svg)](https://github.com/hackernotfound/pstack-vscode/actions/workflows/check.yml) [![license: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) [![version](https://img.shields.io/badge/version-0.9.57--copilot.2-7C3AED.svg)](https://github.com/hackernotfound/pstack-vscode/releases/tag/v0.9.57-copilot.2)
[![check](https://github.com/hackernotfound/pstack-vscode/actions/workflows/check.yml/badge.svg)](https://github.com/hackernotfound/pstack-vscode/actions/workflows/check.yml) [![license: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) [![version](https://img.shields.io/badge/version-0.9.57--copilot.3-7C3AED.svg)](https://github.com/hackernotfound/pstack-vscode/releases/tag/v0.9.57-copilot.3)

**Run [pstack](https://github.com/cursor/plugins/tree/main/pstack) in the VS Code agents window with GitHub Copilot.**

Expand All @@ -17,7 +17,7 @@ pstack ships for Cursor, and [pstack-claude](https://github.com/michael-denyer/p
| pstack switches on at the start of every session | Copilot ignores the plain text the startup hook prints, so pstack never switches on |
| The skills load as `pstack:poteto-mode`, `pstack:tdd`, ... | Copilot answers "Skill not found" to the `pstack:` prefix |
| Skills call `Agent`, `Skill`, `AskUserQuestion`, `TodoWrite` | Copilot's tools are named `task`, `skill`, `ask_user`, `update_todo` |
| `pstack:poteto-agent` handles delegated work | VS Code never loads plugin agents, so every dispatch to it is rejected |
| `pstack:poteto-agent` handles delegated work | VS Code rejects every dispatch to it, and its agents window lists each plugin agent twice |

This port fixes all four and leaves pstack's own content untouched. Each fix is checked against the real Copilot runtime, both the Copilot CLI and the copy bundled inside VS Code. The plugin as pstack-claude ships it, unchanged, fails three of those checks.

Expand Down Expand Up @@ -101,7 +101,7 @@ flowchart LR
- **A startup hook that Copilot reads.** It prints the poteto-mode instructions as JSON with an `additionalContext` field, the only hook output Copilot injects.
- **A Copilot tool map.** [`copilot-tools.md`](overlay/skills/poteto-mode/references/copilot-tools.md) translates every Claude tool and model name the skills use. `poteto-mode` points Copilot at it.
- **Bare skill names** in the startup instructions, such as `poteto-mode` rather than `pstack:poteto-mode`.
- **An agent fallback.** Where `task` doesn't list pstack's agents, as in VS Code, Copilot dispatches its built-in `general-purpose` agent and has it load `poteto-mode` first. That's all `pstack:poteto-agent` does.
- **No plugin agents.** Copilot dispatches its built-in `general-purpose` agent and has it load `poteto-mode` first, which is all `pstack:poteto-agent` does. Shipping no agents also keeps VS Code's agent picker free of duplicates.
- **A Copilot-only manifest.** VS Code treats any plugin with a `.claude-plugin/` folder as a Claude plugin, so the port ships only a Copilot `plugin.json`.

Tested on VS Code 1.140.0 and its bundled Copilot runtime, and on Copilot CLI 1.0.91. Updating to a newer pstack, the generated files, and the live tests are covered in [docs/maintaining.md](docs/maintaining.md).
Expand Down
5 changes: 3 additions & 2 deletions docs/maintaining.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,16 @@
- a manifest, agent, hook, or skill is missing or malformed
- the startup instructions name a skill with the `pstack:` prefix, or the hook output is not top-level `additionalContext`
- the plugin contains a symlink, or an executable outside the reviewed list
- the plugin ships any agent (VS Code's agents window lists every plugin agent twice)
- a shipped package file uses a `latest` version, a CI action is not pinned to a full commit SHA, or a CI runner or Node version is not exact

## Live checks

`tools/eval.sh` runs Copilot CLI. `tools/eval-vscode.mjs` runs the Copilot runtime bundled inside VS Code, with the session options VS Code's agents window uses. Both create a two-file repo in a temp dir and use a throwaway `COPILOT_HOME`. They check that:

- the startup instructions reach the model's context through the hook
- on Copilot CLI, `pstack:poteto-agent` and `pstack:comment-sicko` are valid `task` agent types (VS Code's runtime doesn't load plugin agents and reports that as `INFO`)
- a request that names poteto-mode loads it through `skill`, runs a subagent that loads poteto-mode itself, and calls no Claude-only tool names
- no pstack plugin agents are offered, so VS Code's agent picker has nothing of ours to list twice
- a request that names poteto-mode loads it through `skill`, runs a subagent that loads a pstack skill itself, has no subagent dispatch rejected, and calls no Claude-only tool names
- a two-file rename, with no mention of pstack, routes into poteto-mode, reads `copilot-tools.md`, and leaves `node main.js` printing `5`

The unmodified pstack-claude plugin fails three of these: the hook check, the unprompted routing, and the `copilot-tools.md` read.
Expand Down
2 changes: 1 addition & 1 deletion overlay/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Tell `poteto-mode` your goal and it invokes the workflow that fits: reproduce an
## What it contains

- Skills: Markdown instructions the agent loads through Copilot's `skill` tool by bare name, such as `poteto-mode`.
- Agents: `pstack:poteto-agent` and `pstack:comment-sicko`, plus one agent per reasoning-effort level. Copilot CLI dispatches them by those names. VS Code's agents window does not load plugin agents, so there the model dispatches `general-purpose` and tells it to load `poteto-mode` first.
- No agents. Where pstack would dispatch one of its agents, Copilot uses its built-in `general-purpose` agent and has it load `poteto-mode` first, which is all `pstack:poteto-agent` does.
- A SessionStart hook that injects the poteto-mode routing mandate unless `~/.copilot/pstack-models.md` contains `session hook: off`.
- `skills/poteto-mode/references/copilot-tools.md`, which maps the Claude tool and model names in the skills to Copilot's.
- Local scripts for watching and shipping pull requests, orchestrating multi-phase plans, and auditing worktrees.
Expand Down
15 changes: 7 additions & 8 deletions overlay/skills/poteto-mode/references/copilot-tools.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,14 @@ pstack skills are written in Claude Code tool language (the `Skill` tool, the `A

poteto-mode's Subagents section sets Claude-specific defaults (`subagent_type: "pstack:poteto-agent"`, `run_in_background: true`). On Copilot:

- `subagent_type` maps to `task`'s `agent_type`. The pstack agents keep their prefix: `pstack:poteto-agent`, `pstack:comment-sicko`, `pstack:effort-<level>`, `pstack:poteto-agent-<level>`. Copilot's built-ins (`explore`, `general-purpose`, `code-review`, `research`, `rubber-duck`, `security-review`, `task`) are also valid.
- Check `task`'s `agent_type` enum before you dispatch. Copilot CLI lists the pstack agents. The VS Code agents window's Copilot target does not load plugin agents, so there `task` rejects them with "Unknown agent_type". When a pstack agent is missing, dispatch `general-purpose` instead:
- For `pstack:poteto-agent` or `pstack:poteto-agent-<level>`, begin the prompt with "Before any work, load the `poteto-mode` skill with the `skill` tool and follow it, including its Principles section."
- For `pstack:comment-sicko`, begin the prompt with "Before any work, read `agents/comment-sicko.md` in the pstack plugin in full and act as that agent." The plugin root is two directories above poteto-mode's `SKILL.md`.
- For `pstack:effort-<level>`, keep the prompt as written.
- Pass any `<level>` as `reasoning_effort`.
- This port ships no plugin agents. VS Code's agents window lists every plugin agent twice, and VS Code's Copilot runtime cannot dispatch them anyway. Use Copilot's built-ins as `task`'s `agent_type` (`explore`, `general-purpose`, `code-review`, `research`, `rubber-duck`, `security-review`, `task`).
- Where a skill names a pstack agent, dispatch `general-purpose` and begin the prompt as follows:
- For `pstack:poteto-agent` or `pstack:poteto-agent-<level>`: "Before any work, load the `poteto-mode` skill with the `skill` tool and follow it, including its Principles section."
- For `pstack:comment-sicko`: "Before any work, read `skills/poteto-mode/references/agents/comment-sicko.md` in the pstack plugin in full and act as that agent." The plugin root is two directories above poteto-mode's `SKILL.md`.
- For `pstack:effort-<level>`: keep the prompt as written.
- A `<level>` in an agent name or a role value goes to `task`'s `reasoning_effort`.
- `run_in_background: true` maps to `mode: "background"`. Collect each result with `read_agent` before you use it.
- `task` requires `description` (3 to 5 words), `prompt`, `agent_type`, and `name` (a short agent name).
- A role value with `@<level>` dispatches the matching `pstack:effort-<level>` or `pstack:poteto-agent-<level>` agent, or passes the level as `task`'s `reasoning_effort`.
- Your Copilot plan caps concurrent subagents (Free 2, Pro 4, Max 8, Business 16, Enterprise 32). Size `swarm` and `arena` fan-out to fit, and queue the rest.
- Keep the rest of the policy unchanged. Pass file pointers not inlined context, give each writing worker its own worktree or branch, review every subagent's diff yourself.

Expand Down Expand Up @@ -66,7 +65,7 @@ Most skills need only the tables above. These need one more mapping:
|-------|------------|
| `interrogate` | The `subagent_type`/`model`/`readonly` dispatch fields map to `task`'s `agent_type`/`model`; read-only reviewers get a prompt that forbids edits. Keep the reviewer panel diverse per Model names above. |
| `setup-pstack` | The Copilot row in the Other runtimes table names the sheet path and how it loads. The role rows are identical. |
| `no-comments` | Dispatch `task` with `agent_type: "pstack:comment-sicko"`. |
| `no-comments` | Dispatch `general-purpose` with the `comment-sicko` opening from Subagent policy above. |
| `create-verification-skill` | The generated skill lands under `.claude/skills/verify/` on Claude Code; on Copilot write it to `.github/skills/verify/`. |
| `maintain-verification-skill` | The project-local skill lives under `.github/skills/`, not `.claude/skills/`. |
| `reflect` | The transcript finder reads Claude Code's layout under `~/.claude/projects/`; Copilot keeps sessions under `~/.copilot/session-state/`. Pass the session digest step 1 allows instead. |
Expand Down
2 changes: 1 addition & 1 deletion plugins/pstack/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Tell `poteto-mode` your goal and it invokes the workflow that fits: reproduce an
## What it contains

- Skills: Markdown instructions the agent loads through Copilot's `skill` tool by bare name, such as `poteto-mode`.
- Agents: `pstack:poteto-agent` and `pstack:comment-sicko`, plus one agent per reasoning-effort level. Copilot CLI dispatches them by those names. VS Code's agents window does not load plugin agents, so there the model dispatches `general-purpose` and tells it to load `poteto-mode` first.
- No agents. Where pstack would dispatch one of its agents, Copilot uses its built-in `general-purpose` agent and has it load `poteto-mode` first, which is all `pstack:poteto-agent` does.
- A SessionStart hook that injects the poteto-mode routing mandate unless `~/.copilot/pstack-models.md` contains `session hook: off`.
- `skills/poteto-mode/references/copilot-tools.md`, which maps the Claude tool and model names in the skills to Copilot's.
- Local scripts for watching and shipping pull requests, orchestrating multi-phase plans, and auditing worktrees.
Expand Down
32 changes: 0 additions & 32 deletions plugins/pstack/agents/comment-sicko.md

This file was deleted.

8 changes: 0 additions & 8 deletions plugins/pstack/agents/poteto-agent.md

This file was deleted.

9 changes: 0 additions & 9 deletions plugins/pstack/effort-agents/effort-high.md

This file was deleted.

9 changes: 0 additions & 9 deletions plugins/pstack/effort-agents/effort-low.md

This file was deleted.

9 changes: 0 additions & 9 deletions plugins/pstack/effort-agents/effort-max.md

This file was deleted.

9 changes: 0 additions & 9 deletions plugins/pstack/effort-agents/effort-medium.md

This file was deleted.

9 changes: 0 additions & 9 deletions plugins/pstack/effort-agents/effort-xhigh.md

This file was deleted.

9 changes: 0 additions & 9 deletions plugins/pstack/effort-agents/poteto-agent-high.md

This file was deleted.

9 changes: 0 additions & 9 deletions plugins/pstack/effort-agents/poteto-agent-low.md

This file was deleted.

9 changes: 0 additions & 9 deletions plugins/pstack/effort-agents/poteto-agent-max.md

This file was deleted.

9 changes: 0 additions & 9 deletions plugins/pstack/effort-agents/poteto-agent-medium.md

This file was deleted.

9 changes: 0 additions & 9 deletions plugins/pstack/effort-agents/poteto-agent-xhigh.md

This file was deleted.

Loading
Loading