Skip to content

Repository files navigation

pstack for GitHub Copilot

This repository is a GitHub Copilot plugin for the Copilot app and Copilot CLI. The repo root is the plugin.

It packages the Copilot parent from open-pstack. Skills stay shared. Copilot-only agents live in agents/ as *.agent.md files. Claude agents/*.md files are not here. Copilot loads every *.md and *.agent.md in the plugin agents directory.

Do not copy skills/ into ~/.agents/skills/ or ~/.copilot/skills/. Copilot loads plugin skills last. A home skill with the same name: silently wins, and the plugin copy is dropped.

Install

The Copilot app and Copilot CLI share ~/.copilot/settings.json. Install once.

copilot plugin marketplace add balazstasi/pstack-copilot
copilot plugin install pstack@pstack-copilot

That writes extraKnownMarketplaces.pstack-copilot and enabledPlugins["pstack@pstack-copilot"].

In the Copilot app: Customize → Plugins, add marketplace balazstasi/pstack-copilot, then install pstack.

From a local clone instead:

copilot plugin marketplace add "$(pwd)"
copilot plugin install pstack@pstack-copilot

If an older pstack@open-pstack marketplace is still enabled, disable or uninstall it so two pstacks do not load:

copilot plugin uninstall pstack@open-pstack
copilot plugin marketplace remove open-pstack

Confirm the loaded path:

copilot plugin list

The enabled plugin must load from this repo, not from ~/Projects/open-pstack.

Home-skill collisions

Copilot skill order is first-found-wins. Plugin skills lose to ~/.agents/skills/ and ~/.copilot/skills/. If /how or /poteto-mode still looks like Cursor (composer models, disable-model-invocation), a home copy is winning.

Move colliding names out of the way. Keep the backup so Cursor or Grok can still use them:

mkdir -p ~/.agents/skills.bak-pstack-copilot
# example; move every name that also exists in this repo's skills/
mv ~/.agents/skills/poteto-mode ~/.agents/skills.bak-pstack-copilot/

Then copilot skill list. pstack names should come from the plugin, not Custom skills.

Run with the pstack agent

Pick poteto-agent in the Copilot app agent picker (or type /agent). That file is sticky for the session. It loads poteto-mode before any work. There is no extra CLI latch.

Copilot CLI uses the plugin id:

copilot --agent pstack:poteto-agent

pstack-terra and the other pstack-<stem> files are spawn lanes for task(). Do not pick them as the session agent.

A sessionStart hook submits /poteto-mode on a new default-agent session and injects a short mandate as additionalContext (resume and -p included). Copilot may ask you to trust that hook. The prompt hook does not fire on resume or -p. The same hook links every agents/*.agent.md into ~/.copilot/agents/ so the Copilot app picker and task() see file stems. It does not replace a regular file of the same name.

Economical mode

Say “I'm poor” or run /poor-mode to save usage mode: poor in the current parent's existing model sheet and instruction integration. No model probes are run. The setting applies in future sessions and across nested skills.

Poor mode works in the current agent: targeted reading, proportional design, one implementation, and focused review with relevant tests. Architect no longer launches Arena automatically; Arena compares two brief sketches locally, and Swarm, Interrogate, How, Why, and Reflect run without automatic helpers. Additional model usage requires an explicit request.

  • I'm poor for this task: temporary override, no configuration writes.
  • full arena for this task: allow normal Arena candidates and judge once; keep the saved mode.
  • normal mode: restore normal workflows without resetting model choices.

This controls workflow instructions, not the host's token meter or current session model. Existing installations without a mode setting retain normal behavior.

Fan-out limits

Before a panel, set these in ~/.copilot/settings.json so concurrency is at least the configured panel size (3 by default):

{
  "subagents": {
    "maxConcurrency": 3,
    "maxDepth": 2
  }
}

Values below the panel size collapse arena, architect, and interrogate.

Configure models

In Copilot CLI or the Copilot app:

/setup-pstack

Setup writes ~/.copilot/pstack-models.md and a bounded <!-- pstack:models:begin --> block at the end of ~/.copilot/copilot-instructions.md. It does not fold pstack into a repo-gated section of that file.

Copilot first-run defaults:

  • feature / refactoring / how explorer → copilot:gpt-5.6-luna@xhigh
  • swarm workers → copilot:gpt-6-astra@low
  • judgment and prose → copilot:grok-4.6@high
  • hardest / how explainer → copilot:gpt-5.6-terra@high
  • bug-fix / perf / hillclimb → copilot:gpt-5.6-sol@medium
  • panels → terra, sol, kimi (2 or 3 distinct families; /setup-pstack sets the list)
  • why / reflect → inherit-parent

copilot:gpt-5.6-sol@medium is Copilot Sol. codex:gpt-5.6-sol still means the Codex CLI. copilot:grok-4.6@high is Copilot Grok (pstack-grok). grok:grok-4.6 still means the Grok CLI. Setup never maps Fable to Terra or Grok CLI to Copilot Grok.

Layout

.
├── .github/plugin/marketplace.json   # marketplace name pstack-copilot, source ./
├── .github/plugin/plugin.json        # plugin name pstack, agents/, skills/, hooks/
├── agents/                           # Copilot-only *.agent.md
├── hooks/                            # sessionStart: /poteto-mode, mandate, agent links
└── skills/                           # shared pstack skills, including setup-pstack and poteto-mode

Tests

cd skills/poteto-mode/scripts
bun test --parallel bootstrap orch watch-pr runner check-plan

From the repo root:

bun test hooks/session-start.test.ts

License

MIT. See NOTICE.md, LICENSE, and LICENSE-cursor-team-kit.

About

pstack for the GitHub Copilot app and Copilot CLI

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages