Repository navigation
Description
Standalone — deliberately not a child of #1729 (review gate). Different axis, no shared work.
Problem
The /squad SDLC lifecycle verbs — cast, research, plan, plan revise, triage, accept, activate, implement — are reachable only by commenting on a GitHub issue, where they are parsed and executed by workflows/squad.md running as a gh-aw agentic workflow.
A user working in the GitHub Copilot app cannot open a repo and type /squad research … in the chat. They must go to GitHub, find or create an issue, and comment. For read-and-reason operations that produce planning artifacts, that round trip is pure friction.
What already exists
A /squad slash command ships as a skill template at packages/squad-cli/templates/skills/squad/SKILL.md with user-invocable: true. Its catalog covers operational commands only:
- Install & Upgrade, Team Management, Issues & PRs, Plugins & Skills, Model & Cost, Sessions & State
None of the SDLC lifecycle verbs appear in it. So the slash-command surface exists; the lifecycle semantics are simply absent from it.
Side finding: .github/skills/squad/ is not installed in this repository, even though the coordinator instructions direct agents to read .github/skills/squad/SKILL.md when a user asks for squad commands. The template exists but this repo never received it. Worth fixing regardless of the outcome of this issue.
Substrate difference
gh-aw /squad research |
App chat /squad research |
|
|---|---|---|
| Trigger | issue comment | chat slash command |
| Executor | Actions runner, pinned copilot engine |
local agent session |
| Auth | GITHUB_TOKEN + minted tokens |
the user's own gh login |
| Effects | safe-outputs, capped and bounded | direct tool calls |
| State | artifacts uploaded/restored per run | live .squad/ on disk |
| Audit | immutable workflow run logs | session log |
Proposal
The mode table, the longest-prefix-first parser rules, and the artifact schemas in workflows/shared/planning-ontology.md and workflows/shared/planning-policy.md are all substrate-agnostic. What is not portable is the effector layer: safe-output emissions and the typed dispatch to squad-implement-worker.
Extract the shared semantics once; give each substrate its own thin effector.
workflows/shared/planning-ontology.md ← semantics (already shared)
workflows/shared/planning-policy.md ← policy (already shared)
workflows/shared/squad-modes.md ← NEW: mode table + parser rules
│
├── workflows/squad.md ← effector: safe-outputs
└── .github/skills/squad-sdlc/ ← effector: local tool calls
gh-aw already supports imports for this, so workflows/squad.md gets thinner rather than duplicated. This matches the earlier decomposition conclusion: keep semantics in one place, split only at the effector/authority boundary.
Value by verb
| Verb | Local parity value | Rationale |
|---|---|---|
cast, research, plan, plan revise, triage |
High | Read-and-reason operations producing artifacts. Instant and iterative in chat; no issue required. |
accept, activate |
Medium | These create real GitHub issues. Local execution needs the same guardrails — the fast path has no undo. |
implement |
Low as re-implementation | Locally this is just ordinary agent work in a worktree. The gh-aw version's value is bounded authority running unattended. |
Better shape for implement: local /squad implement dispatches the existing workflow via gh workflow run and reports back. Start from chat, let CI execute under the file allowlist and protected-file rules. No duplicated implementation authority.
Blocking question — verify before designing
Does the Copilot app pass trailing text through to a matched skill (/squad research auth patterns → skill receives research auth patterns), or is slash matching name-only?
- If trailing text passes: the local skill can reuse the exact longest-prefix-first parser from
workflows/squad.md, and the UX matches the issue-comment surface one-to-one. - If name-only: the pattern degrades to
/squad→ menu → pick a lifecycle operation, which is a materially worse fit for the "just type it" scenario and changes the design.
This should be a short spike before any implementation work.
Acceptance criteria
- Spike resolves the trailing-text question and records the answer
- Mode table and parser rules extracted to a shared import consumed by
workflows/squad.md -
workflows/squad.mdverified to still compile and stay within prompt budget after extraction - Local SDLC skill installed to
.github/skills/and added to CLI templates -
cast,research,plan,plan revise,triagework locally -
acceptandactivatecarry the same confirmation guardrails as the workflow path -
implementdispatches the gh-aw workflow rather than re-implementing it -
.github/skills/squad/installed in this repo (side finding above) - Docs updated to describe both invocation surfaces and when to use each
Non-goals
- Replacing the gh-aw workflow path. Both surfaces should coexist; unattended CI execution remains the right substrate for implementation.
- Any change to the review gate work in Epic: Squad review gate for agent-authored pull requests #1729.
Activity
bradygaster commentedon Aug 20, 2026
Closing — premature: �ctivate stage never exercised.
Flight's verdict from the 2026-08-20 triage: this RFC proposes exposing /squad SDLC lifecycle commands in the Copilot app chat surface. That work depends on the core SDLC path being proven reliable end-to-end first. The \�ctivate\ stage has never been successfully exercised in a real run — it exists in the workflow source but carries no E2E evidence. Specifying a second invocation surface for a stage we cannot yet describe behaviorally would produce a spec for an unobserved system.
When to refile: After the 2026-08-21 E2E series produces observed behavior for each lifecycle stage. If \�ctivate\ is tagged WORKING with a run ID as evidence, refile with that run as the anchor.