All notable changes to this project will be documented in this file.
squad initno longer runsgit initautomatically when initialized inside a monorepo subdirectory (#939). It now shows a warning and suggests running from the git root instead.- Azure DevOps adapter (
azCLI calls) now useshell: trueon Windows so.cmdwrapper scripts resolve correctly (#941). - Nap archival budget (#123) — account for separator newlines in decision archival budget calculation
--executeflag spawns Copilot sessions to work on actionable issues autonomously- Multi-platform support — auto-detects GitHub vs Azure DevOps from git remote URL
- Azure DevOps support: uses SDK PlatformAdapter for work items, tags, and PRs
--monitor-teams/--monitor-emailscan Teams/email for actionable items via WorkIQ--boardenables project board lifecycle (In Progress → Done/Blocked + reconciliation)--two-passlightweight scan then hydrate only actionable issues (saves API quota)--wave-dispatchparallel sub-task execution within issues (dependency-aware)--retroenforces retrospective checks (Fridays or when missed >7 days)--decision-hygieneauto-merges decision inbox when >5 files--max-concurrent Ncontrols parallel issue execution (default: 1)--timeout Nsets per-issue execution timeout in minutes (default: 30)--copilot-flags "..."passes extra flags to Copilot CLI sessions- SubSquad discovery: automatically detects
.squad/subsquads/for routing - All features disabled by default — existing
squad watchbehavior unchanged
- StorageProvider interface (#640) — pluggable I/O contract decoupling the runtime from
node:fs - FSStorageProvider (#640) — Node.js
fswrapper, default provider for CLI and local workflows - InMemoryStorageProvider (#640) — Map-backed, test-friendly provider for deterministic unit tests
- SQLiteStorageProvider (#640) — portable single-file provider using WASM-based sql.js
- StorageError (#640) — typed error handling with
operationandcodefields for structured diagnostics - 24-method async + sync API (#640) — full file-system surface (read, write, list, mkdir, stat, etc.); sync variants deprecated, Wave 2 removal
- Contract test suite (#640) — provider conformance tests ensuring all implementations satisfy the StorageProvider interface
- Sample projects (#640) —
storage-provider-azureandstorage-provider-sqliteinsamples/
- Personal Squad concept (#508) — isolated developer workspace with own team.md, routing.md, and agent roster
- Ambient discovery — automatic detection of personal squad at
~/.squad/via environment variables and fallback paths - CLI commands (#508) —
squad personal init,squad personal list,squad personal use,squad personal remove - Governance integration (#508) — hooks, ceremonies, telemetry isolated per personal squad
- Unit & integration tests (#508) — full test coverage for personal squad flows
- Worktree creation (#529) — coordinator spawns managed worktrees for parallel agent work via
squad worktree spawn - Cross-squad orchestration (#446) — agents coordinate work across multiple squads and worktrees
- Persistent Ralph — watch + heartbeat (#443) — long-running Ralph daemon with health monitoring
- Regression guard (#521) — worktree .git detection (file vs directory) with full test coverage
- Capability inference (#514) — automatic detection of available tools, models, and hardware specs at session start
- needs: Label Routing* (#514) — agents self-route based on discovered capabilities vs work requirements
- Predictive circuit breaker (#515) — model token budget forecasting to prevent runtime exhaustion
- Rate limit recovery (#464) — surface errors with actionable recovery options
- Circuit breaker for Ralph (#451) — graceful degradation under model quota pressure
- Cost-conscious model selection (#500) — automatic selection of cheaper models when quality thresholds permit
- Economy mode skill (#503) — governance proposals for balanced cost/quality tradeoffs
- Token usage tracking (#453) — visibility into per-agent token consumption and costs
- Auto-wire in initSquadTelemetry() (#281) — telemetry initialization no longer requires manual wiring
- OpenTelemetry integration — automatic context propagation across squad sessions
- Template document (#527) — standardized issue lifecycle workflow (creation → triage → assignment → completion)
- Integrated into squad init — available to all new teams via
.squad/templates/issue-lifecycle.md
- Agent autoscaling template (#516) — KEDA-based horizontal scaling for compute-intensive agent work
- Documentation (#519) — setup guide for Kubernetes-based squad deployments
- After Agent Work flow (#473) — gap analysis verification loop ensures all requirements are met before task completion
- Checklist-driven completion — structured validation to prevent incomplete deliverables
- Session recovery (#442) — find and resume lost sessions without restarting work
- Integration — available as a core team skill via
.squad/skills/session-recovery/SKILL.md
- Per-agent cost tracking (#453) — token consumption and estimated costs per agent
- Dashboard integration — visible in session UI for cost-conscious workflows
- Multi-account GitHub workflows (#470) — safely switch GitHub identities within a squad session
- Integration — available as
.squad/skills/gh-auth-isolation/SKILL.md
- 10 Astro feature items (#524) — implemented search tuning, section badges, test coverage indicators
- Autonomous agents guide (#492) — comprehensive guide for building autonomous agents with Squad SDK
- Blog posts (#029) — upgrade cross-testing at scale post
- Expanded search (#482) — Pagefind tuning with section badges for better discoverability
- CLI README expansion (#487) — detailed CLI reference with workflow examples
- Teams MCP integration refresh (#496) — updated Workflows webhook documentation
- Migration guide updates (#320, #468) — @latest installation instructions and heartbeat config
- ESLint with TypeScript support (#493) — static analysis for common runtime anti-patterns
- Integration — available in CLI pre-flight checks
- Eliminated scroll-to-top flicker caused by Ink's fullscreen
clearTerminalpath firing on every render cycle - Reduced re-render churn via memoized elapsed-time display (one-second granularity gate) and consolidated animation intervals
- Stabilized component keys (timestamp-based instead of shifting array indices) to prevent Ink remounts
- Pinned live viewport height to keep input prompt above fold on all terminal sizes
- P0 upgrade gaps (#544) — context-aware footer and EPERM handling for permission issues
- Gitignore parent coverage (#549) —
.gitignoreupdates for nested squad directories - ADO configurable work item types (#444) — flexible schema for Azure DevOps work items
- Template directory audit (#461) — all template references aligned with
.squad/templates/ - Package template sync (#462) — monorepo workspace templates now in sync
- Complete exports check — verify all ESM exports before applying patch
- Dual-layer ESM fix (#449) — Node 22/24 compatibility for vscode-jsonrpc resolution
- Node 24+ hard-fail (#502) — clear error message for Node <22.5.0 with upgrade guidance
- SIGINT/SIGTERM handling (#486) — graceful shutdown with 22+ tests for signal handling
- Read-modify-write race condition (#480) — fixed history-shadow.ts file access race
- az CLI timeout (#483) — 2s timeout for getAvailableWorkItemTypes to prevent hangs
- Memory safety caps (#259) — file watcher filtering and memory limits
- User model preference persistence (#284) — model selection now persists across sessions
- Repository auto-detection (#437) — auto-detect repo owner/name at session start
- CI hardening — stale lockfile handling, manual rerun workflow, merge ref fixes
- Casting universe alignment (#459) — align casting universe count with reality
- npm-only distribution — removed GitHub-native distribution channel
- Installation:
npm install -g @bradygaster/squad-cli(standard npm registry) - Verified upgrade path — tested at scale across 100+ projects
- Agent anatomy & hiring checklist (#439) — detailed guide for building team rosters
- Behavior documentation (#448) — nap, reskill, and compact behavior reference
- Content gap fill — 7 recent PRs documented
- PAO external communications (#426) — Phase 1 infrastructure for multi-channel squad updates
- Casting reference (#814133d) — comprehensive casting configuration guide
- 40+ commits merged since v0.8.25
- 6+ major features (Personal Squad, Worktree Spawning, Capability Discovery, Cooperative Rate Limiting, Economy Mode, Auto-wire Telemetry)
- 10+ docs site improvements via Astro
- 15+ stability & compatibility fixes
- Tested at scale — upgrade process verified across 100+ projects
- Governance layer — new Personal Squad feature enables distributed developer workflows
- PlatformAdapter interface — unified API for GitHub, ADO, and Microsoft Planner
- AzureDevOpsAdapter —
az boardsCLI for work items,az reposfor PRs - GitHubAdapter —
ghCLI wrapper implementing PlatformAdapter - PlannerAdapter — Microsoft Graph API for hybrid work-item tracking
- Cross-project ADO config via
.squad/config.json— work items can live in a different org/project than the repo
- Pluggable agent-human messaging — Scribe/Ralph can post updates through platform-appropriate channels
- Four adapters: FileLog (zero-config), GitHub Discussions, ADO Work Item Discussions, Teams Webhook (stub)
- Factory auto-detection —
createCommunicationAdapter(repoRoot)selects the right adapter
- Workstreams → SubSquads across CLI, types, and docs
- CLI:
squad subsquads(withworkstreamsandstreamsas deprecated aliases) - Old names preserved as
@deprecatedre-exports for backward compatibility
execSync→execFileSync(prevents shell injection)escapeWiql()helper (prevents WIQL injection in ADO queries)curl --config stdin(hides bearer tokens from process listing)- Case-insensitive URL detection for ADO remotes
- Cross-platform draft filter (
findstr→ JMESPath) - PR status mapping (
active→openforghCLI) gh issue createfix (parse URL from stdout, not--json)
- Runtime
Module._resolveFilenameintercept for Node 24+ ESM compatibility - 5-layer secret defense architecture
- 59 TDD security hook tests
.squad/skills/secret-handling/SKILL.mdteam reference
- Contributor Guide page in docs site Guide section
- Squad Contributors Guide page (36+ contributors honored)
- Concepts and Cookbook sections wired into docs build
- Broken links fixed across docs site
- 8 PRs merged (#191, #263, #268, #270, #272, #275, #277, #266)
- 153 new tests (92 platform + 15 comms + 46 SubSquads)
- 59 security tests
- 8 issues closed
- 3 new docs pages, 6+ broken links fixed
- Node 24+
squad initcrash fix (#XXX) — v0.8.23 resolvesERR_MODULE_NOT_FOUND: Cannot find module 'vscode-jsonrpc/node'crash that occurs on Node.js 24+ and GitHub Codespaces. Root cause: upstream ESM import issue in@github/copilot-sdk. Two-layer defense implemented:- Lazy imports — Commands
init,build,link,migrateno longer eagerly load copilot-sdk at startup - Postinstall patch — Automatically fixes broken ESM import at install time
- Side benefit: Faster CLI startup for non-session commands
- Lazy imports — Commands
- Comprehensive guide for
squad rc(Remote Control) covering:- ACP (Azure Communication Platform) passthrough architecture
- 7-layer security model for session isolation and encryption
- Mobile keyboard shortcuts and accessibility features
- Troubleshooting guide for common connection issues
- 2 issues closed
- 3 PRs merged
- 3,811 tests passing (3,840 total, 0 logic failures)
- 1 critical crash fix (Node 24+ compatibility)
- Builder functions — Type-safe team configuration with runtime validation
defineTeam()— Team metadata, project context, member rosterdefineAgent()— Agent definition with role, model, tools, capabilitiesdefineRouting()— Routing rules with pattern matching and prioritydefineCeremony()— Ceremony scheduling (standups, retros, etc.)defineHooks()— Governance hooks (write paths, blocked commands, PII scrubbing)defineCasting()— Casting configuration (universe allowlists, overflow strategy)defineTelemetry()— OpenTelemetry configurationdefineSquad()— Top-level composition builder
squad buildcommand — Compile TypeScript definitions to.squad/markdown- Generates
.squad/team.md,.squad/routing.md, agent charters, ceremonies - Supports
--check(validation),--dry-run(preview),--watch(file monitoring stub) - Protected files (decisions.md, history.md) never overwritten
- Generates
- SDK Mode Detection — Coordinator prompt includes SDK-First mode awareness
- Documentation
- New guide: SDK-First Mode — concepts, builder reference, examples
- Updated SDK Reference — builder function signatures and types
- README quick reference for SDK-First teams
Added — Remote Squad Mode (ported from @spboyer's bradygaster/squad#131)
resolveSquadPaths()dual-root resolver — project-local vs team identity directoriessquad doctorcommand — 9-check setup validation with emoji outputsquad link <path>command — link a project to a remote team rootsquad init --mode remote— initialize with remote team root configensureSquadPathDual()/ensureSquadPathResolved()— dual-root write guards
- Installation crash fix (#247) —
npx @bradygaster/squad-cliwas failing on fresh installs due to hard dependency on@opentelemetry/apithat couldn't resolve in isolated npm environments. Createdotel-api.tsresilient wrapper with full no-op fallbacks. Moved OTel to optional dependencies. Telemetry now gracefully degrades when absent. - CLI command wiring (#244) — Commands
rc,copilot-bridge,init-remote,rc-tunnelwere implemented but never wired into CLI entry point. Now properly connected and discoverable. - Model config round-trip (#245) —
AgentDefinition.modelnow acceptsstring | ModelPreferencefor structured model configuration. Charter compiler updated to emit and parse the new format correctly. - ExperimentalWarning suppression — Node's
ExperimentalWarningfornode:sqliteno longer leaks into terminal output. Suppressed via process.emit override in cli-entry.ts. - Blankspace fix (#239) — Idle blank space below agent panel removed. Conditional height constraint only active during processing.
- Windows race condition (EBUSY) —
fs.rmwith retry logic and exponential backoff. Tests now pass reliably on Windows. - Test hardening — Speed gate threshold adjustments for growing CLI codebase. 25 regression tests fixed (PR #221).
- CI stabilization — GitHub Actions pipeline fixed and green (PRs #232, #228).
- Distribution: npm-only distribution channel. No more GitHub-native distribution (
npx github:bradygaster/squad). Users now install vianpm install -g @bradygaster/squad-cliornpx @bradygaster/squad-clifrom npm registry. - Semantic Versioning fix (#692): Version format changed from
X.Y.Z.N-previewtoX.Y.Z-preview.Nto comply with semantic versioning spec (prerelease identifier after patch, build metadata after prerelease). Example:0.8.6-preview.1instead of0.8.6.1-preview. - Version transition: Public repo final version was
0.8.5.1. Private repo continues at0.8.xcadence (next publish after 0.8.17 is 0.8.18), following semver prerelease convention for development.
- Thanks to Shayne Boyer (@spboyer) for the original remote mode design.
- PR #199 (migration command) received, reviewed, and feedback captured as issue #231 for future implementation.
- PR #243 (blankspace fix) — community contribution cherry-picked and credited.
- 26 issues closed
- 16 PRs merged
- 3,724 tests passing (3,740 total, 13 known Windows timeout flakes, 0 logic failures)
- 8 builder functions shipped
- 4 CLI commands wired
- 1 critical crash fix (OTel dependency)
- 25 regression tests fixed
- Template path fix (#190): Corrected all references from
.squad-templates/to.squad/templates/to align with the project's directory structure. This ensures the CLI correctly resolves team member charters and other template resources. - Init test templates: Updated initialization tests to reference the corrected
.squad/templates/directory path.
Added — Remote Squad Mode (ported from @spboyer's bradygaster/squad#131)
resolveSquadPaths()dual-root resolver — project-local vs team identity directories (#311)squad doctorcommand — 9-check setup validation with emoji output (#312)squad link <path>command — link a project to a remote team root (#313)squad init --mode remote— initialize with remote team root config (#313)ensureSquadPathDual()/ensureSquadPathResolved()— dual-root write guards (#314)
- Distribution: Migrated from GitHub-native (
npx github:bradygaster/squad) to npm packages (npm install -g @bradygaster/squad-cli/npx @bradygaster/squad-cli) - Packages: Independent versioning via @changesets/cli —
@bradygaster/squad-sdkand@bradygaster/squad-clievolve on separate cadences - Structure: Monorepo layout with workspace packages (SDK + CLI)
- Directory:
.squad/directory structure (migration from.ai-team/) - Semantic Versioning: All versions now comply with semver spec (prerelease format
X.Y.Z-preview.N)
- CLI entry point moved from
dist/index.jstodist/cli-entry.js. If you reference the binary directly, update your path.npxandnpmbin resolution is unchanged. (#187) - CRLF normalization: All parsers now normalize line endings before parsing. Windows users with
core.autocrlf=trueno longer get\r-tainted values. (#220, #221) process.exit()removed from library-consumable functions. VS Code extensions can now safely import CLI functions without risking extension host termination. (#189)- Removed
.squadbranch protection guard (squad-main-guard.yml) — no longer needed with npm workspacefilesfield exclusions
- New utility:
normalizeEol()insrc/utils/normalize-eol.ts - New entry point:
src/cli-entry.ts(CLI bootstrap separated from library exports) - Migrated to npm workspace publishing (
@bradygaster/squad-sdk,@bradygaster/squad-cli) - Changesets infrastructure for independent package versioning