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.
The Copilot app and Copilot CLI share ~/.copilot/settings.json. Install once.
copilot plugin marketplace add balazstasi/pstack-copilot
copilot plugin install pstack@pstack-copilotThat 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-copilotIf 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-pstackConfirm the loaded path:
copilot plugin listThe enabled plugin must load from this repo, not from ~/Projects/open-pstack.
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.
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-agentpstack-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.
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.
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.
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-pstacksets 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.
.
├── .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
cd skills/poteto-mode/scripts
bun test --parallel bootstrap orch watch-pr runner check-planFrom the repo root:
bun test hooks/session-start.test.tsMIT. See NOTICE.md, LICENSE, and LICENSE-cursor-team-kit.