A GitHub Copilot CLI plugin marketplace that demonstrates two different ways to roll out Squad across repositories without zipping and sharing .squad/ folders.
Note
This is a proof of concept. Squad is alpha software and its commands may change.
They solve different problems and can be used together.
| Approach A: Shared decisions | Approach B: Starter team | |
|---|---|---|
| Plugin | squad-shared-decisions |
squad-starter-team |
| Skill | /link-shared-decisions |
/init-starter-team |
| Problem it solves | "Every repo should follow the same decisions and rules" | "Every repo should start with the same team" |
| What's shared | decisions.md, routing.md, identity/wisdom.md, casting/policy.json, skills |
Team roster (team.md), agent charters, routing, casting registry |
| Agents / team shared? | ❌ No. Each repo keeps its own team | ✅ Yes, copied once at init |
| Stays in sync? | ✅ Yes. squad upstream sync pulls updates |
❌ No. Each repo diverges after init (by design) |
| Where content lives | A separate Git repo or branch: squad-shared-decisions | Bundled in the plugin: team-template/ |
| Writes back to shared? | ❌ Read-only. Change it through a pull request to the shared repo | N/A |
| Needs Squad's state MCP server? | ❌ No | ❌ No |
Install the marketplace once, then either or both plugins:
copilot plugin marketplace add joshjohanning-org/squad-copilot-plugins
copilot plugin install squad-shared-decisions@squad-copilot-plugins # Approach A
copilot plugin install squad-starter-team@squad-copilot-plugins # Approach BPrerequisites: the Squad CLI and Git.
Links a repository read-only to a shared repository of Squad decisions and rules, using squad upstream.
squad-shared-decisions (repo or branch) your-app (any repo, any branch)
└── .squad/ ├── .squad/
├── decisions.md │ ├── upstream.json ← committed pointer
├── routing.md squad upstream sync │ ├── _upstream_repos/ ← gitignored cache
├── identity/wisdom.md ───────────────► │ └── team.md, agents/… ← project-local team
├── casting/policy.json └── .github/instructions/
└── skills/*/SKILL.md └── squad-upstream.instructions.md
From inside any git repository, start Copilot CLI and run /link-shared-decisions, or ask naturally:
| Scenario | Prompt |
|---|---|
| Default shared decisions repo | link this repo to the shared squad decisions |
| Your own shared decisions repo | link shared squad decisions from https://github.com/my-org/my-squad-decisions.git |
| Decisions branch in the same repo | link shared squad decisions from the squad-config branch of this repo |
| Skip Squad's GitHub Actions workflows | link shared squad decisions without workflows |
The skill runs link-shared-decisions.sh (macOS/Linux) or link-shared-decisions.ps1 (Windows), which:
- Runs
squad initif.squad/doesn't exist. - Runs
squad upstream add <source> --name shared --ref <ref>(skipped if already configured). - Runs
squad upstream sync. - Writes
.github/instructions/squad-upstream.instructions.mdso the Squad coordinator loads the inherited content. As of Squad v0.13, thesquadCopilot agent doesn't readupstream.jsonon its own. - Runs
squad doctor.
- Colleague in a different repository. Run
/link-shared-decisionsin that repository. Both repositories inherit the same decisions. - Colleague in the same repository on a different branch. Commit
.squad/upstream.jsononce. Every branch reads the shared decisions throughsquad upstream sync, so nobody has to rebase. To keep the decisions inside the same repository, put them on an orphansquad-configbranch and use--source self --ref squad-config. - Updating shared decisions. Merge a pull request to the shared repository or branch, then run
squad upstream syncand start a new session.
- Read-only. Decisions an agent records in a consuming repo stay in that repo's
.squad/decisions.mduntil someone promotes them to the shared repo with a pull request. .squad/must be at the root of the shared repository or branch;squad upstreamdoesn't support subfolders.- Squad's native cross-branch decision sharing (
stateBackend: orphanortwo-layer) writes back automatically, but needs thesquad_stateMCP server. Approach A is the workaround when that MCP server can't be used.
Lays down a pre-built base team in a repository. It's like squad init, but you start with a real team instead of an empty roster.
| Member | Role |
|---|---|
lead |
Technical Lead |
developer |
Software Engineer |
tester |
Test Engineer |
reviewer |
Code Reviewer |
security |
Security Engineer |
docs |
Documentation Specialist |
Squad's system agents (scribe, ralph, Rai, fact-checker) are added by squad init as usual.
Start Copilot CLI and run /init-starter-team, or ask set up the starter squad team in ~/repos/my-app. The skill asks which repository to set up (default: the current one) and runs init-starter-team.sh or init-starter-team.ps1, which:
- Stops if the repository already has
.squad/, unless you pass--force. - Runs
squad initfor the scaffolding: the.github/agents/squad.agent.mdcoordinator, system agents, templates, and MCP config. - Copies the team template on top:
team.md,routing.md,casting/registry.json, and one charter per member. It fills in the project name and date. - Runs
squad doctor.
The template intentionally has no decisions.md, histories, or memory, so every repository starts clean.
Edit the files under team-template/.squad/, bump the plugin version, and push. Users get the new template with copilot plugin update squad-starter-team. Repositories that were already initialized aren't changed.
All scripts are idempotent or safe to re-run and work standalone:
# Approach A
./plugins/squad-shared-decisions/skills/link-shared-decisions/scripts/link-shared-decisions.sh --source self --ref squad-config
# Approach B
./plugins/squad-starter-team/skills/init-starter-team/scripts/init-starter-team.sh --target ~/repos/my-app- Approach A: fork squad-shared-decisions, then change the default source URL in both
link-shared-decisionsscripts and in itsSKILL.md. - Approach B: edit the charters,
team.md,routing.md, andcasting/registry.jsonin the team template.