Squad Squad

Enterprise Platforms

Squad supports Azure DevOps and Microsoft Planner in addition to GitHub. When your git remote points to Azure DevOps, Squad automatically detects the platform and adapts its commands. For work-item tracking, Squad also supports a hybrid model where code lives in one platform and tasks live in Microsoft Planner.

Prerequisites

  1. Azure CLI — Install from https://aka.ms/install-az-cli
  2. Azure DevOps extensionaz extension add --name azure-devops
  3. Loginaz login
  4. Set defaultsaz devops configure --defaults organization=https://dev.azure.com/YOUR_ORG project=YOUR_PROJECT

Verify setup:

az devops configure --list
# Should show organization and project

How It Works

Squad auto-detects the platform from your git remote URL:

Remote URL patternDetected platform
github.comGitHub
dev.azure.comAzure DevOps
*.visualstudio.comAzure DevOps
ssh.dev.azure.comAzure DevOps

Differences from GitHub

Work Items vs Issues

GitHubAzure DevOps
IssuesWork Items
Labels (e.g., squad:alice)Tags (e.g., squad:alice)
gh issue list --label XWIQL query via az boards query
gh issue edit --add-labelaz boards work-item update --fields "System.Tags=..."

Pull Requests

GitHubAzure DevOps
gh pr listaz repos pr list
gh pr createaz repos pr create
gh pr mergeaz repos pr update --status completed
Review: Approved / Changes RequestedVote: 10 (approved) / -10 (rejected)

Branch Operations

Branch operations use the same git commands on both platforms. Squad creates branches with the naming convention squad/{id}-{slug}.

Ralph on Azure DevOps

Ralph works identically on ADO — he scans for untriaged work items using WIQL queries instead of GitHub label filters:

# GitHub
gh issue list --label "squad:untriaged" --json number,title,labels

# Azure DevOps
az boards query --wiql "SELECT [System.Id],[System.Title],[System.Tags] FROM WorkItems WHERE [System.Tags] Contains 'squad:untriaged'"

Tag assignment uses the same squad:{member} convention, stored as ADO work item tags separated by ;.

Configuration

Squad auto-detects ADO from the git remote URL. For basic use, no extra configuration is needed.

Work Item Configuration

When your ADO environment has custom work item types, area paths, iterations, or when work items live in a different project or org than the git repo, configure the ado section in .squad/config.json:

{
  "version": 1,
  "teamRoot": "/path/to/repo",
  "platform": "azure-devops",
  "ado": {
    "org": "my-org",
    "project": "my-work-items-project",
    "defaultWorkItemType": "Scenario",
    "areaPath": "MyProject\\Team Alpha",
    "iterationPath": "MyProject\\Sprint 5"
  }
}
FieldDefaultDescription
ado.org(from git remote)ADO org for work items — set when work items are in a different org than the repo
ado.project(from git remote)ADO project for work items — set when work items are in a different project
ado.defaultWorkItemType"User Story"Default type for new work items. Some orgs use "Scenario", "Bug", or custom types
ado.areaPath(project default)Area path for new work items — controls which team’s backlog they appear in
ado.iterationPath(project default)Iteration/sprint path — controls which sprint board work items appear on

All fields are optional. Omitted fields use the defaults shown above.

Authentication

Squad uses the Azure CLI for ADO authentication — no Personal Access Tokens (PATs) needed. Run az login once, and Squad agents use your authenticated session for all operations.

For GitHub repositories, Squad uses the gh CLI for authentication. When working across multiple GitHub accounts (e.g., personal GitHub and Enterprise Managed Users), use gh auth switch to toggle between accounts. See Cross-organization authentication for detailed multi-account setup.

Alternatively, if the Azure DevOps MCP server is configured in your environment, Squad will use it automatically for richer API access. Add it to .copilot/mcp-config.json:

{
  "mcpServers": {
    "azure-devops": {
      "command": "npx",
      "args": ["-y", "@azure/devops-mcp-server"]
    }
  }
}

Squad prefers MCP tools when available, falling back to az CLI when not.

To explicitly check which platform Squad detects:

import { detectPlatform } from '@bradygaster/squad/platform';

const platform = detectPlatform('/path/to/repo');
// Returns 'github', 'azure-devops', or 'planner'

Microsoft Planner Support (Hybrid Model)

Squad supports a hybrid model where your repository lives in GitHub or Azure DevOps, but work items are tracked in Microsoft Planner. This is common in enterprise environments where project management uses Planner while engineering uses ADO or GitHub for code.

How It Works

  • Planner buckets map to squad assignments: squad:untriaged, squad:riker, squad:data, etc.
  • Moving a task between buckets = reassigning to a team member
  • Task completion = 100% complete or move to “Done” bucket
  • PRs and branches still go through the repo adapter (GitHub or Azure DevOps)

Prerequisites

  1. Azure CLIaz login
  2. Graph API accessaz account get-access-token --resource-type ms-graph
  3. Plan ID — Found in the Planner URL or via Graph API

Configuration

In squad.config.ts, specify the hybrid model:

const config: SquadConfig = {
  // ... other config
  platform: {
    repo: 'azure-devops',     // where code lives
    workItems: 'planner',     // where tasks live
    planId: 'rYe_WFgqUUqnSTZfpMdKcZUAER1P',
  },
};

Ralph with Planner

Ralph scans Planner tasks via the Microsoft Graph API instead of GitHub labels or ADO WIQL:

# List untriaged tasks
GET /planner/plans/{planId}/tasks  →  filter by "squad:untriaged" bucket

# Assign to member (move to their bucket)
PATCH /planner/tasks/{taskId}  →  { "bucketId": "{squad:member bucket ID}" }

PR operations still use the repo adapter:

# Repo on Azure DevOps
az repos pr list --status active
az repos pr create --source-branch ... --target-branch ...

# Repo on GitHub
gh pr list --state open
gh pr create --head ... --base ...