Squad Squad

Configuration Reference

⚠️ Experimental — Squad is alpha software. APIs, commands, and behavior may change between releases.

Try this:

squad init

That’s it. Squad works out of the box. Everything below is optional.


squad.config.ts

For type-safe SDK-First configuration, create this at your project root:

import {
  defineSquad,
  defineTeam,
  defineAgent,
  defineRouting,
} from '@bradygaster/squad-sdk';

export default defineSquad({
  version: '1.0.0',
  team: defineTeam({
    name: 'my-squad',
    description: 'My project team',
    members: ['@edie', '@mcmanus'],
  }),
  agents: [
    defineAgent({
      name: 'edie',
      role: 'TypeScript Engineer',
      model: 'claude-sonnet-4',
      tools: ['grep', 'edit', 'view'],
    }),
    defineAgent({
      name: 'mcmanus',
      role: 'DevRel',
      model: 'claude-haiku-4.5',
      tools: ['grep', 'view'],
    }),
  ],
  routing: defineRouting({
    rules: [
      { pattern: 'feature-*', agents: ['@edie'], tier: 'standard' },
      { pattern: 'docs-*', agents: ['@mcmanus'], tier: 'lightweight' },
    ],
    defaultAgent: '@coordinator',
  }),
});

Each builder (defineSquad(), defineTeam(), defineAgent(), etc.) validates your config at runtime with type-safe error messages. Edit your .ts file, then run squad build to generate .squad/ markdown.

Or start with markdown: squad init creates a markdown-only squad with no config file needed.


.squad/ Directory

.squad/
├── team.md              # Who's on the team
├── routing.md           # Work routing rules
├── decisions.md         # Architectural decisions (shared memory)
├── directives.md        # Permanent team rules
├── casting-state.json   # Agent names + universe theme
├── model-config.json    # Per-agent model overrides
├── agents/
│   ├── {name}/
│   │   ├── charter.md   # Role, expertise, voice
│   │   └── history.md   # What this agent has done
│   └── ...
├── skills/              # Reusable knowledge files
├── decisions/inbox/     # Pending decisions (Scribe merges these)
├── log/                 # Session logs
└── orchestration-log/   # Coordinator state

Commit this directory. It’s your team’s brain. Anyone who clones the repo gets the full team with all their knowledge.


.squad/ — Required vs Optional Files

squad init creates a working team. Here’s what’s required and what’s optional.

Required Files

These are always created by squad init. The loader expects them.

FilePurposeCan You Edit?
.squad/team.mdTeam roster — loader requires itYes
.squad/decisions.mdShared decision log — agents read before workYes (append only)
.squad/routing.mdWork assignment rulesYes
.squad/ceremonies.mdTeam meeting definitionsYes
.squad/config.jsonSDK settings (teamRoot, version)Rarely
.squad/agents/{name}/charter.mdAgent identity — compiled at spawnYes
.squad/agents/{name}/history.mdAgent learnings — grows over timeAppend only
.squad/identity/now.mdCurrent team focusAuto-updated
.squad/identity/wisdom.mdAccumulated team patternsAuto-updated
.gitattributesMerge drivers for append-only filesMerge rules only

Optional Files

These are created only when you opt in during init.

  • .squad/templates/ — SDK templates, overwritten on upgrade
  • .github/workflows/*.yml — CI/CD workflows (opt-in: --include-workflows)
  • .copilot/mcp-config.json — MCP server config (opt-in: --include-mcp-config)

⚠️ Hard rule: Squad NEVER writes temp files, logs, or memory to your repo root. All team state lives in .squad/ only. Your project tree stays clean.

Quick Recovery

squad doctor                        # Check for issues
rm -rf .squad && squad init         # Full reset (back up agents/decisions first)

Routing Rules

Control which agent gets which work. Edit .squad/routing.md or configure in squad.config.ts:

# Routing Rules

**Frontend changes** → Trinity
**Backend API work** → Morpheus
**Database migrations** → Morpheus
**Test writing** → Tank
**Architecture decisions** → Neo

Or programmatically:

routing: {
  workTypes: [
    { pattern: /\bAPI|backend\b/i, targets: ['backend'], tier: 'standard' },
    { pattern: /\bUI|React\b/i, targets: ['frontend'], tier: 'standard' },
    { pattern: /\bstatus|help\b/i, targets: [], tier: 'direct' },
  ],
  issueLabels: [
    { labels: ['bug', 'backend'], targets: ['backend'] },
  ],
}

Model Configuration

17 models across three tiers. Squad picks the right one, or you override:

TierModelsUse Case
premiumclaude-opus-4, gpt-4.1Architecture, code review
standardclaude-sonnet-4, gpt-4.1Most work
fastclaude-haiku-3.5, gpt-4.1-miniTriage, logging, quick tasks

Per-agent overrides in model-config.json:

{
  "neo": "claude-opus-4",
  "tank": "claude-haiku-3.5"
}

Resolution order: user override → charter → task auto-select → config default.


Resolution Order

Squad finds .squad/ by walking up:

  1. Current directory (./.squad/)
  2. Parent directories (up to project root)
  3. Personal squad directory (platform-specific: ~/.config/squad/ on Linux, ~/Library/Application Support/squad/ on macOS, %APPDATA%\squad\ on Windows)
  4. Global CLI default (fallback)

First match wins.


Environment Variables

VariablePurpose
SQUAD_CLIENTDetected client (cli or vscode)
COPILOT_TOKENAuth token for SDK usage

See Also