All notable changes to this project will be documented in this file.
- 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
- 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