Repository navigation
Closed
Labels
go:yesReady to implementReady to implementrelease:v0.4.0Targeted for v0.4.0Targeted for v0.4.0squadSquad triage inbox — Lead will assign to a memberSquad triage inbox — Lead will assign to a membertype:featureNew capabilityNew capability
Description
Summary
Squad currently has no persistent, visual mechanism for agents to track the state of complex tasks. While logs exist, they are opaque and transient. This feature adds the capability for agents to autonomously create GitHub Project boards (V2) and manage task progress (Todo, In Progress, Done) directly within the GitHub UI.
Goals
- Visualize Agent Workflow by mapping internal agent state to a GitHub Project Board.
- Autonomously Initialize Boards so agents can spin up tracking for new initiatives without user intervention.
- Track Item Status allowing agents to move tasks through columns (e.g., moving a task to "Done" upon completion).
- Enhance Visibility for human users to see exactly what the squad is working on at a glance.
Proposed Approach
Layer 1: GraphQL API Integration
- Integrate a GraphQL client (using
https://api.github.com/graphql) as the REST API has limited support for Projects V2. - Implement core mutations:
createProjectV2,addProjectV2ItemById, andupdateProjectV2ItemFieldValue. - Ensure the
GITHUB_TOKENor PAT has the required scopes (project,repo).
Layer 2: Board Initialization & Configuration
- A tool/skill that allows the Lead agent to check if a specific Project Board exists.
- If the board is missing, the agent creates it with default fields (Status) and options (Todo, In Progress, Done).
Layer 3: Task & Status Management
- Logic to convert existing Issues into Project Items.
- A "Status Updater" skill that agents call when completing a step, which updates the specific field value on the board item.
- Agents can query the board to see pending items in the "Todo" column.
Notes
- This requires using the GitHub Projects V2 API (GraphQL); REST is not sufficient for V2.
- The PAT used by the agents must have
project(read/write) andreposcopes. - Ideally, the board columns should default to standard Todo / In Progress / Done, but could be configurable in the future.
/cc @bradygaster
Reacted by Brady Gaster
Metadata
Metadata
Assignees
Labels
go:yesReady to implementReady to implementrelease:v0.4.0Targeted for v0.4.0Targeted for v0.4.0squadSquad triage inbox — Lead will assign to a memberSquad triage inbox — Lead will assign to a membertype:featureNew capabilityNew capability
Activity
bradygaster commentedon Feb 10, 2026
love this idea. will put the Squad squad to work on it.
docs: v0.3.0 sprint planning — proposals 024-033a, blog posts, issue #6…
bradygaster commentedon Feb 11, 2026
Thanks for the detailed proposal, @londospark. This is actively being designed — your issue prompted us to write up a full technical assessment.
Here's where we landed:
Labels are the state machine, boards are the dashboard. Squad already uses
status:labels to drive workflow automation via GitHub Actions. Project boards become a visual projection of that label state — one-way sync from labels to board columns. We don't reverse-sync (dragging a card doesn't change labels) because labels are what trigger Actions workflows, and board column changes don't fire API events.5 columns, not 3. Our label taxonomy has 8 status labels, which map to 5 active board columns: Backlog, Ready, In Progress, Blocked, Done. Your proposed Todo/In Progress/Done is a reasonable starting point, but our workflow needs the additional states.
gh projectCLI, not a GraphQL client library. We assessed your GraphQL suggestion — every Projects V2 mutation maps to agh projectsubcommand (gh project create,gh project item-add,gh project item-edit, etc.). This keeps Squad at zero npm dependencies. TheghCLI handles auth, pagination, and the GraphQL protocol internally.Boards are opt-in and user-triggered. No automatic board creation on
squad init. The user asks for a board, the coordinator creates it. This avoids surprise side effects in repos where boards aren't wanted.Provider abstraction is designed in. ADO has built-in boards (no create step needed). GitLab boards are label-driven, which aligns directly with our existing label workflow. The capability negotiation pattern lets Squad skip board operations on providers that don't support them.
Timeline: v0.4.0. v0.3.0 is shipping the label and issue infrastructure that boards depend on. Boards layer on top once that foundation is solid. Your three-layer architecture (GraphQL integration → Board init → Task management) maps cleanly to our work items.
The
projecttoken scope is required for Projects V2 API access, so board features will needgh auth refresh -s project. All board operations are additive — Squad works without them.— 🎯 Keaton (Lead) · Posted by Squad
docs(ai-team): issue triage session - #8 and #6
bradygaster commentedon Feb 12, 2026
Issue #6 Go/No-Go Assessment & Sprint Plan
Verdict: GO (Conditional)
This feature is ready to implement as v0.4.0 scope, pending one prerequisite.
Executive Summary
Project Boards is sound architecture: labels drive automation, boards provide visualization. Proposal 033 is thorough. Proposal 033a confirms feasibility with zero dependencies using
gh project *CLI. The only blocker is the missingprojecttoken scope — a one-time fix Brady must run before work starts.Timeline: v0.4.0, 17-26 squad-hours across 3 phases
Agents: Fenster (core), Verbal (prompts), McManus (docs)
Risk profile: Low — graceful degradation means boards fail silently if scope is missing
Why GO?
Architecture is sound. Labels = state machine (per 032c), boards = dashboard. Zero conflict with existing 032/032c/PR#5 work. Additive feature.
Zero dependencies validated. Kujan confirmed
gh project *CLI covers every operation. No npm packages needed. This preserves zero-dependency constraint.Token scope is fixable. Missing
projectscope is the only blocker. Single command:gh auth refresh -s project. Not a design problem, not an architectural problem.Three-phase decomposition is clear. Foundation (WI-1, WI-2) → Integration (WI-3, WI-4) → Polish (WI-5, WI-6). Each phase has clear definition of done. Can parallelize Fenster + Verbal in Phase 2.
Community signal is real. @londospark opened Issue Feature: Get squads to use project boards #6 with a concrete, well-structured proposal. First community feature request. Implementing it signals we listen and move fast.
Prerequisites — Brady Must Do This First
BLOCKING: Run this command before squad starts:
This grants the
projectscope to the current token. One-time, interactive, ~10 seconds. Without this, all board operations fail with a permission error. The proposal includes graceful degradation, but the feature is useless without the scope.Verification: After running the above, check:
Should show
projectin the Token scopes list.Sprint Plan
Phase 1: Foundation (WI-1, WI-2) — v0.4.0 Wave 1
Duration: 6-9 squad-hours
Agent: Fenster (Core Dev)
Parallelizable: No — WI-2 depends on WI-1 validation
WI-1: GraphQL Command Templates for Projects V2
Validate and document
gh api graphql/gh project *commands for all operations. This is the spike that proves feasibility.Acceptance criteria:
gh project *CLIprojectscope documented.ai-team/skills/github-projects-v2-commands/SKILL.mdWhy this first: If
gh project item-editdoesn't work as expected, or if ID resolution is more complex than estimated, this is where we learn. Phase 1 gate: "Can we reliably move an issue between board columns using onlyghCLI?"WI-2: Provider Abstraction — Board Capabilities
Extend provider abstraction (032a) with board operations.
Acceptance criteria:
projectBoardscapability before attempting board opsPhase 2: Integration (WI-3, WI-4) — v0.4.0 Wave 2
Duration: 7-11 squad-hours
Agents: Verbal (Prompts, 3-5h) + Fenster (Workflow, 4-6h)
Parallelizable: Yes — WI-3 and WI-4 can run in parallel after WI-1 validation
WI-3: Board Initialization Flow
Coordinator prompt additions for user-triggered board creation.
Acceptance criteria:
.ai-team/team.mdunder## Project Boardprojectscope missing, user gets a clear message and link to fixsquad.agent.mdcoordinator templateWI-4: Label-to-Board Sync Workflow
GitHub Actions workflow that syncs label changes to board columns.
Acceptance criteria:
templates/workflows/squad-board-sync.ymlissues: [labeled, unlabeled]forstatus:*labelsstatus:*label changes, board item status field updates (using field IDs from team.md)squadlabel and a board exists, issue auto-added to boardgh api graphqlorgh project *commands only (no npm dependencies)Note: This is silent automation. No issue comments, no notifications. Label changes propagate to board columns transparently.
Phase 3: Polish (WI-5, WI-6) — v0.4.0 Wave 3
Duration: 4-6 squad-hours
Agents: Verbal (Queries, 2-3h) + McManus (Docs, 2-3h)
Parallelizable: Yes — independent tracks
WI-5: Board Query & Display
Coordinator prompt additions for reading board state from CLI.
Acceptance criteria:
gh project item-listand renders a summarysquad.agent.mdcoordinator templateWI-6: Documentation & Skill
User-facing documentation.
Acceptance criteria:
docs/features/project-boards.mdexplaining:projectscope)Total Effort
Wall-clock estimate (if Fenster + Verbal + McManus work in parallel where possible): 12-16 days at 1 squad per day.
Agent Assignments
Risks & Mitigations
gh project item-edithas unreliable ID handlingprojectscope becomes unavailable (GitHub changes auth flow)What We're NOT Doing
squad init. Opt-in only.Go/No-Go Decision Timeline
gh auth refresh -s project(prerequisite)Why v0.4.0, Not v0.3.0?
Brady's directive for v0.3.0 is ONE feature: proposals as GitHub Issues (Proposal 032). Project boards layer on top of the issue/label foundation (032c). The right sequence:
Shipping boards before labels are solid would be backwards. We're deferring by design, not deferring because we're scared.
Community Signal
@londospark's Issue #6 is the first external feature request with a concrete technical proposal. Implementing it demonstrates that:
This is a v0.4.0 win.
Next step: Brady grants the
projectscope, then Fenster kicks off Phase 1.bradygaster commentedon Feb 12, 2026
🤖 Assigning to @copilot for implementation. Keaton's go/no-go assessment (posted above) is the sprint plan — 3 phases, 6 work items, gh project * CLI approach.
Prerequisite: Brady must run
gh auth refresh -s projectbefore board operations will work. All other work (command templates, provider abstraction spec, prompt additions, workflow design, docs) can proceed without it.Scope: Proposals 033 and 033a are the authoritative design docs. Implement per those specs.
— Squad (Coordinator)
docs(ai-team): issue #6 go/no-go, universe expansion decisions
bradygaster commentedon Feb 13, 2026
Phase 1 Validation Complete — Project Boards Foundation (WI-1 + WI-2)
Agent: Fenster (Core Dev)
Sprint: 033 Phase 1 (Foundation)
What Was Validated
Every
gh project *CLI command required for board operations was live-tested against this repo:gh project listgh project creategh project field-listgh project item-addgh project item-editgh project item-listgh project item-archivegh project viewgh project linkgh project deleteKey Findings
gh project *commands handle everything — no GraphQL client needed.projectscope already present on current token. Runtime detection pattern works.item-addis idempotent — safe to re-add existing issues.item-editrequires 4 opaque IDs — project ID, item ID, field ID, option ID. Most complex command but fully functional.ConvertFrom-Jsonreplacesjqfor JSON parsing.Deliverables
.ai-team/skills/github-projects-v2-commands/SKILL.md— complete command reference any agent can useteam-docs/proposals/006a-project-board-implementation.md— provider abstraction + board capabilities interfacePhase 1 Gate: PASSED ✅
Yes. No raw GraphQL needed. Phase 2 (WI-3 coordinator prompts + WI-4 label sync workflow) is unblocked.
What's Next (Phase 2)
feat: project board + v0.4.0 docs (#6)
squad: log Gandalf decomposition + merge directives
squad: skills scan + catalog + merge decisions
feat(ci): CI hardening phase 2 — short-term improvements (#6-10)
spec(piece-48): add sub-proposal F — compliant fold state-branch writ…
fix(gh-aw): bind squad:{agent} labels to each issue's own plan row (#…