release: v0.2.3 — guardrails, init UX, obs fixes, services docs#682
Open
agents-squads[bot] wants to merge 181 commits intomainfrom
Open
release: v0.2.3 — guardrails, init UX, obs fixes, services docs#682agents-squads[bot] wants to merge 181 commits intomainfrom
agents-squads[bot] wants to merge 181 commits intomainfrom
Conversation
Closes #342 Co-authored-by: Squads Cloud Worker <cloud@agents-squads.com> Co-authored-by: Claude <noreply@anthropic.com>
…351) Prevents shell injection via crafted paths in background and watch execution modes. Applies same escaping used in foreground mode (PR #324). Adds shellEscape() helper that replaces single quotes with '\'' to safely interpolate variables into single-quoted shell strings. Applied to: - Watch mode: projectRoot, worktreeDir, branchName, logFile, pidFile - Background mode: projectRoot, worktreeDir, branchName, logFile, pidFile - Provider background mode: workDir, logFile, pidFile, provider args - execSync worktree calls in foreground and provider modes Closes #340 Co-authored-by: Squads Cloud Worker <cloud@agents-squads.com> Co-authored-by: Claude <noreply@anthropic.com>
v0.6.2 released, 3 security P1 issue-solvers dispatched, 751 tests passing, Q1 goals 2/3 achieved. Co-authored-by: Squads Cloud Worker <cloud@agents-squads.com> Co-authored-by: Claude <noreply@anthropic.com>
…339) Closes #319 Added default .action(() => cmd.outputHelp()) to 7 parent commands (env, kpi, feedback, session, trigger, approval, autonomous) so they exit 0 instead of 1 when invoked without a subcommand. Matches the pattern already used by memory, goal, deploy, and exec commands. Co-Authored-By: engineering/issue-solver <engineering-issue-solver@agents-squads.com> Agent: engineering/issue-solver Squad: engineering Model: claude-opus-4-6 Co-authored-by: Squads Cloud Worker <cloud@agents-squads.com>
…354) Replace scattered console.log calls with the project's writeLine() utility from src/lib/terminal.ts. This provides a single output layer for consistent formatting and future output control. - Convert 238 console.log calls to writeLine across 10 files - Remove 8 debug/placeholder log statements from anthropic.ts - Keep console.log only for JSON.stringify output (--json flags) and raw prompt piping — standard CLI patterns - Reduction: 269 → 31 occurrences (88% decrease) - Zero new TypeScript errors Files: init.ts, deploy.ts, autonomous.ts, trigger.ts, approval.ts, eval.ts, login.ts, cli.ts, anthropic.ts, update.ts Co-authored-by: kokevidaurre <kokevidaurre@users.noreply.github.com> Co-authored-by: Claude <noreply@anthropic.com>
Replace minimal README with comprehensive 331-line version covering: - Quick start with real output examples - Why Squads (4 differentiators) - Provider table (7 LLM providers) - Feature showcase (dashboard, memory, sessions, autonomous, hooks) - Command reference (21 active commands, no removed ones) - Project structure and configuration examples - Development guide and tech stack - Contributing and community links References only current commands (memory write/read instead of learn, env show instead of context, exec list instead of history). 🤖 Generated with [Agents Squads](https://agents-squads.com) Co-authored-by: kokevidaurre <kokevidaurre@users.noreply.github.com> Co-authored-by: Claude <noreply@anthropic.com>
Closes agents-squads/engineering#51 Removed the base64-obfuscated API key from source code and replaced with SQUADS_TELEMETRY_KEY env var. Telemetry send is skipped when key is not set. The exposed key must be rotated server-side separately. Co-Authored-By: engineering/issue-solver <engineering-issue-solver@agents-squads.com> Agent: engineering/issue-solver Squad: engineering Model: claude-opus-4-6 Co-authored-by: Squads Cloud Worker <cloud@agents-squads.com>
Closes #343 The daemon process was silently failing because Commander.js rejected the unregistered --daemon CLI flag. Replace with SQUADS_DAEMON env var to signal daemon mode, redirect child stdout/stderr to log file for diagnosability, and show clear error when daemon fails to start. Co-Authored-By: engineering/issue-solver <engineering-issue-solver@agents-squads.com> Agent: engineering/issue-solver Squad: engineering Model: claude-opus-4-6 Co-authored-by: Squads Cloud Worker <cloud@agents-squads.com>
* feat(status): show milestones and open PRs from GitHub squads status now queries GitHub API for real operational data: - Milestone progress bars across product repos (cli, console, api) - Open PRs targeting develop with repo and number Replaces vanity-only output with actionable org health metrics. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(status): discover repos dynamically from squad definitions Replace hardcoded PRODUCT_REPOS array with dynamic discovery: - Read `repo` field from each SQUAD.md frontmatter - Deduplicate and pass to fetchOperationalStatus() - GitHub org derived from squad config, not hardcoded - Dynamic column widths based on actual repo names - Show all open PRs (not just develop-targeted) Any user's squads with `repo:` in SQUAD.md will show milestones + PRs. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: rewrite CLAUDE.md as user-facing guide Remove internal references, org names, and dev-specific content. Focus on teaching users how to define squads, run agents, and monitor work. Git-provider agnostic. Engineering standards now live in hq CLAUDE.md (internal only). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: kokevidaurre <kokevidaurre@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Closes #24 Converts ~50 static command imports to dynamic import() inside action handlers. Only the invoked command's dependencies (pg, supabase, inquirer, ora) are loaded, saving ~300ms+ on cold start. Changes: - All command handlers use dynamic import() in their .action() callbacks - autoUpdateOnStartup skipped for --help/--version (instant response) - register*Command imports kept static (needed for subcommand structure) - Type-only import for SessionSummaryData (zero runtime cost) Co-Authored-By: engineering/issue-solver <engineering-issue-solver@agents-squads.com> Agent: engineering/issue-solver Squad: engineering Trigger: manual Model: claude-opus-4-6 Co-authored-by: Squads Cloud Worker <cloud@agents-squads.com>
) Closes #297 Show "squads dash" hints at key touchpoints: - After successful foreground/background agent execution - After lead session completion - After parallel agent launch - In squad detail status commands section Co-Authored-By: engineering/issue-solver <engineering-issue-solver@agents-squads.com> Agent: engineering/issue-solver Squad: engineering Trigger: manual Model: claude-opus-4-6 Co-authored-by: Squads Cloud Worker <cloud@agents-squads.com>
Breaks down the 350-line executeWithClaude into 6 focused functions: - buildAgentEnv: consolidates 3x duplicated env construction - logVerboseExecution: DRYs up verbose config logging (was 2x identical) - createAgentWorktree: isolates Node.js worktree creation - buildDetachedShellScript: shared shell script for watch/background - prepareLogFiles: shared log directory setup - executeForeground: foreground spawn + status tracking - executeWatch: watch mode (background + tail) executeWithClaude is now a ~80-line coordinator that delegates to the appropriate mode function. Closes #158 Co-Authored-By: engineering/issue-solver <engineering-issue-solver@agents-squads.com> Agent: engineering/issue-solver Squad: engineering Model: claude-opus-4-6 Co-authored-by: Squads Cloud Worker <cloud@agents-squads.com>
…dless flags Closes #371 Two fixes for Google/Gemini provider execution: 1. Add --yolo flag to Gemini CLI args for headless auto-approval. Without this, Gemini denies all tool calls when running in background because it can't prompt for interactive confirmation. 2. Copy .agents directory into worktree and rewrite prompt paths. Gemini CLI sandboxes file access to its workspace directory. The prompt references agent definitions at the original project root, which Gemini blocks as "Path not in workspace". Now we copy .agents into the worktree and rewrite absolute paths so Gemini can resolve them. Co-Authored-By: engineering/issue-solver <engineering-issue-solver@agents-squads.com> Agent: engineering/issue-solver Squad: engineering Model: claude-opus-4-6 Co-authored-by: Squads Cloud Worker <cloud@agents-squads.com>
Closes #280 Implements `squads create <name>` that creates: - .agents/squads/<name>/SQUAD.md (from template) - .agents/squads/<name>/lead.md (starter agent) - .agents/memory/<name>/lead/ (memory directory) Supports --description, --goal, --model flags for non-interactive use, and interactive prompts via inquirer when flags are omitted. Includes --force for overwriting and --yes for CI/scripting. Note: organization.yaml is not used — squads are discovered dynamically via filesystem (squad-parser.ts findSquadsDir + listSquads). 11 tests covering directory creation, content, naming, overwrite protection, and squad discoverability. Co-Authored-By: engineering/issue-solver <engineering-issue-solver@agents-squads.com> Agent: engineering/issue-solver Squad: engineering Trigger: manual Model: claude-opus-4-6 Co-authored-by: Squads Cloud Worker <cloud@agents-squads.com>
Closes #366 When --cloud is set, the CLI dispatches agent execution to the platform API instead of running locally. Requires `squads login` session and SQUADS_API_URL environment variable. Flow: - POST /agent-dispatch to create dispatch request - Poll /agent-executions for status updates - Display execution summary on completion Co-Authored-By: engineering/issue-solver <engineering-issue-solver@agents-squads.com> Agent: engineering/issue-solver Squad: engineering Trigger: smart Model: claude-opus-4-6 Co-authored-by: Squads Cloud Worker <cloud@agents-squads.com>
Closes #316 Added 63 tests covering 2 of the 6 lib modules listed in the issue: - setup-checks.ts (48 tests): providers registry, commandExists, isDockerRunning, checkDockerPrereqs, checkGhCli, checkGhPermissions, checkClaudeCli, checkProviderAuth, runPrereqChecks, runAuthChecks, displayCheckResults, attemptFix, waitForService - local.ts (15 tests): getLocalEnvVars, formatLocalStatus, isLangfuseLocal, getLocalStackStatus Co-authored-by: Squads Cloud Worker <cloud@agents-squads.com> Co-authored-by: Claude <noreply@anthropic.com>
…urces (#382) Closes #314. Adds 115 tests across 4 test files achieving 92% statement coverage and 80% branch coverage on the dashboard module: - dashboard-loader.test.ts: 16 tests for findDashboardsDir, listDashboards, loadDashboard, clearDashboardCache, loadAllDashboards, findDashboard - dashboard-renderers.test.ts: 49 tests for formatValue (all formats), getThresholdColor, calculateColumnWidths, and renderView (all view types) - dashboard-sources.test.ts: 31 tests for buildQuery, buildWhereClause, parseDateRange, and postgresSource stub - dashboard-engine.test.ts: 19 tests for executeDashboard, renderDashboard, and showAvailableDashboards with mocked dependencies Co-authored-by: kokevidaurre <kokevidaurre@users.noreply.github.com> Co-authored-by: Claude <noreply@anthropic.com>
…381) Closes #51 Changes: - db.test.ts: Enable 4 previously skipped baseline tests (saveBaseline, getLatestBaseline, getBaselineByName, listBaselines) — stubs are implemented, tests were incorrectly marked as not-yet-implemented - sessions.test.ts: Add 30 new tests covering file-system operations: findAgentsDir, getSessionsDir, getHistoryFilePath, getActiveSessions, getSessionSummary, startSession, stopSession, updateHeartbeat, cleanupStaleSessions — all use temp dirs to avoid test pollution Also expanded detectSquad, detectAIProcessesFast, getLiveSessionSummaryFast Total: 63 → 104 tests passing, 0 skipped Co-authored-by: kokevidaurre <kokevidaurre@users.noreply.github.com> Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: kokevidaurre <kokevidaurre@users.noreply.github.com> Co-authored-by: Claude <noreply@anthropic.com>
Post-execution instructions (branch, commit, PR workflow) now loaded from .agents/config/post-execution.md instead of inline template string in run.ts. Separates prompt content from code. Same pattern as approval-instructions.md. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This reverts commit 9999f92700c02af522e15cae29097a60f249cf15.
…eck (#389) * fix(ci): run CI on PRs to develop — quality gate for agent PRs Agents create PRs targeting develop. Without CI on develop PRs, broken code gets merged undetected. This is the #1 quality gap. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(quality): pre-commit hook runs build + tests on source changes Agents were committing broken code (e.g. #384: tests that fail on import). Now any commit touching .ts/.tsx/.js files must pass both `npm run build` and `npm run test` before the commit goes through. This is the #1 quality gate — prevents slop at the source. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(tests): align failing tests with implementation - deploy.test: capture process.stdout.write instead of console.log (deployCommand uses writeLine which writes to stdout) - eval.test: same stdout capture fix for JSON output test - infra.test: use POSTGRES_PORT env var (default 5433) to match docker-compose pattern - local.test: expect port 5432 in DATABASE_URL matching getLocalEnvVars() - setup-checks.test: expect 'warning' (not 'missing') when Docker is not installed, matching checkDockerPrereqs() implementation - Deleted verify-token.test.ts (tested nonexistent verifyToken export) Co-Authored-By: Claude <noreply@anthropic.com> * fix(agents): proper PR workflow — target develop, daemon env, auth check - Post-execution: agents now open PRs targeting `develop` with structured body - Daemon (autonomous.ts): unset CLAUDECODE env to allow nested claude sessions - Auth check: downgrade missing credentials from block to warn (keychain auth) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor(run): extract post-execution prompt to template file Post-execution instructions (branch, commit, PR workflow) now loaded from .agents/config/post-execution.md instead of inline template string. Separates prompt content from code. Same pattern as approval-instructions.md. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: kokevidaurre <kokevidaurre@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
- Add missing env-config.ts (imported by run.ts but never committed) - Fix Commander action spread types with @ts-expect-error directives - Add inquirer type declaration for create command Co-authored-by: kokevidaurre <kokevidaurre@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…tines' (#392) Regex only matched '## Routines' exactly, missing Engineering squad's '## Growth Routines' header. Now matches any word before 'Routines'. Co-authored-by: kokevidaurre <kokevidaurre@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Multi-agent conversation orchestration for squad runs:
- Lead briefs → scanners discover → workers execute → lead reviews → verifiers check
- Shared transcript between agents for context continuity
- Convergence detection (continuation signals beat convergence signals)
- Cost ceiling ($25 default) and max turns (20 default) safety limits
- --task flag for founder directives (replaces lead briefing)
- Transcript persistence to .agents/conversations/{squad}/
New files:
- src/lib/conversation.ts — types, transcript, agent classification, convergence
- src/lib/workflow.ts — turn execution, orchestration loop, transcript persistence
`squads run <squad>` now runs a full conversation instead of just the lead agent.
`squads run <squad> -a <agent>` still runs individual agents (unchanged).
Co-authored-by: kokevidaurre <kokevidaurre@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* fix(auth): add verifyToken function and passing test suite Closes #384 Adds verifyToken(token, apiUrl) to src/lib/auth.ts: - Calls GET /auth/verify with Bearer token header - Maps snake_case API response to camelCase (display_name→name, subscription_plan→plan) - Returns null on non-ok responses, network errors, and timeouts/aborts - 5-second abort timeout to prevent hanging Creates test/verify-token.test.ts with all 6 specified tests: 1. Returns user data on 200 with snake_case→camelCase mapping 2. Returns null on non-ok response (e.g. 401) 3. Returns null on network error (silent) 4. Returns null on timeout/abort 5. Sends Bearer token in Authorization header 6. Builds correct URL from apiUrl param Co-Authored-By: cli/issue-solver <cli-issue-solver@agents-squads.com> Agent: cli/issue-solver Squad: cli * fix(auth): update verifyToken signature and response to match API spec Revises the initial implementation based on actual API contract: - Parameter order: verifyToken(apiUrl, token) — apiUrl first - Endpoint: /auth/cli/verify (not /auth/verify) - Response shape: { email, tenantId, tenantSlug, tenantName, status } mapping from snake_case { tenant_id, tenant_slug, tenant_name } - Updates test/verify-token.test.ts to use vi.stubGlobal per-test with afterEach cleanup for better test isolation All 6 tests pass. Co-Authored-By: cli/issue-solver <cli-issue-solver@agents-squads.com> Agent: cli/issue-solver Squad: cli --------- Co-authored-by: kokevidaurre <kokevidaurre@users.noreply.github.com>
* test(commands): add unit tests for goal and list commands Adds 21 new tests covering: - goal.test.ts (14 tests): goalSetCommand, goalListCommand, goalCompleteCommand, goalProgressCommand — including edge cases for invalid indexes, non-existent squads, metric annotations - list.test.ts (7 tests): JSON output validation, agent counts, no-project error handling, table and agents view rendering Partial fix for #47 — covers 2 of 19 untested command files. Co-Authored-By: engineering/issue-solver <engineering-issue-solver@agents-squads.com> Agent: engineering/issue-solver Squad: engineering Model: claude-opus-4-6 * test: add unit tests for feedback and progress commands Closes #47 (partial — 2 of 15 untested commands) Added 19 tests covering: - feedback: add, show, parse history, rating validation, learnings - progress: start/complete tasks, display, verbose mode, task IDs Co-Authored-By: engineering/issue-solver <engineering-issue-solver@agents-squads.com> Agent: engineering/issue-solver Squad: engineering Model: claude-opus-4-6 --------- Co-authored-by: kokevidaurre <kokevidaurre@users.noreply.github.com>
…ification - classifyAgent now uses role descriptions from SQUAD.md (primary) with name-based fallback — no more regex substring collisions - Strip **bold** markers from agent names in table parser - Replace regex convergence/continuation signals with phrase matching - "keychain auth" → "OAuth" in run output Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- session.test.ts: 11 tests covering sessionStartCommand, sessionStopCommand, sessionHeartbeatCommand, and detectSquadCommand (start/stop/heartbeat lifecycle, quiet mode, missing .agents dir) - learn.test.ts: 14 tests covering learnCommand, learnShowCommand, and learnSearchCommand (default squad, specific squad, fallback, category inference, tag extraction, search, filters) Part of #47 — adds coverage for 2 more previously untested commands. Co-Authored-By: cli/issue-solver <cli-issue-solver@agents-squads.com> Agent: cli/issue-solver Squad: cli Co-authored-by: kokevidaurre <kokevidaurre@users.noreply.github.com>
Replace placeholder tests (that only tested Node.js filesystem ops) with real tests that call initCommand with mocked dependencies: - Core directory structure (squads, memory, skills, config) - Squad file creation from templates - Memory state files (writeIfNew idempotency) - Root-level files (AGENTS.md, BUSINESS_BRIEF.md, README.md) - Claude provider setup (.claude dir, CLAUDE.md, settings.json) - Non-Claude provider skips Claude-specific files - Pack support (engineering, marketing, operations, all, dedup) - IDP catalog creation + stack detection (Node/Go/Python/Rust/Ruby) - Template variable passing (business name, provider, date) - Auto-commit behavior - Telemetry tracking (event, agent/squad counts) - Prerequisite check flow (--force bypass, exit on failure) - Error handling (EACCES, ENOENT) Closes #577 Co-authored-by: Jorge Vidaurre <jorge@agents-squads.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
Resolved conflicts in: package.json, cli.ts, init.ts, run.ts, and 13 template seed files. Develop versions kept (ahead of main). Co-Authored-By: Claude <noreply@anthropic.com>
The merge conflict resolution incorrectly used main's older templates. Restored from pre-merge develop: templates/, cli.ts, init.ts, run.ts. All 1779 tests pass. Co-Authored-By: Claude <noreply@anthropic.com>
Restricts GITHUB_TOKEN to contents:read per CodeQL recommendation. Workflow only needs npm registry access via NPM_TOKEN, not GitHub write. Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
- services.ts: generic path instead of ~/agents-squads/engineering
- run-modes.ts: {org}/hq instead of agents-squads/hq
- history.ts: ~/.squads-cli/history.jsonl instead of agents-squads/hq path
- approval.ts: my-org/my-repo in example instead of agents-squads/hq
- templates: my-org/engineering instead of agents-squads/engineering
No internal org names, paths, or customer data in the npm package.
Co-Authored-By: Claude <noreply@anthropic.com>
Removed it prematurely — still called in conversation result handler. Co-Authored-By: Claude <noreply@anthropic.com>
* feat: org cycle resume — skip completed squads + wait on quota When quota limit is hit (2 consecutive fast failures): - Waits 60 minutes for quota reset - Resumes from the failed squad (doesn't restart) - Skips squads already completed today (reads from observability JSONL) Enables overnight org cycles — run once, let it wait and resume through multiple quota windows until all 14 squads complete. Co-Authored-By: Claude <noreply@anthropic.com> * fix: remove unused quotaHit variable (lint error) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Jorge Vidaurre <jorge@agents-squads.com> Co-authored-by: Claude <noreply@anthropic.com>
#639) (#645) - New test/commands/catalog.test.ts with 45 tests covering: - catalog list: empty catalog, product/domain listing, type filtering, JSON output, CI template display, deploy target display - catalog show: service details, branches, CI, deploy, dependencies, health endpoints, tags, framework display, JSON output - catalog check: single/all service checks, grade display (A-F), pass/fail indicators, missing scorecard handling, JSON output - noIdp guard: IDP not found error with instructions - Extended test/init.test.ts IDP catalog section with 12 new tests: - pyproject.toml/setup.py Python detection - Next.js, Nuxt, Vue, Astro framework detection - Product vs domain IDP variable verification (scorecard, branches, CI template, development branch) - BUILD_COMMAND null fallback, catalog filename, OWNER_SQUAD, malformed package.json graceful handling Co-authored-by: Jorge Vidaurre <jorge@agents-squads.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Add 56 tests covering dashboardCommand from 0% coverage: - Basic rendering (header, table, footer, gradient title) - Multiple squads, empty squads, null squads, completed goals - JSON output mode with structure validation - CEO report mode (metrics, blockers, P0/P1 goals, next steps) - Session display (active/inactive) - Update available notice - Goals section (tactical/strategic sorting, progress, overflow) - Git activity section (commits, sparkline, working on) - Token economics (with/without infra, plan types) - Infrastructure section (local-only vs bridge stats) - Subscription ROI and capacity sections - Historical trends and agent insights - ROI projections and baseline comparison - Acquisition section (npm stats gated by env var) - Squad status classification (active/stale/needs-goal) - Fast mode (default, skips GitHub API) - Database snapshot save/skip logic - closeDatabase called in all paths Co-authored-by: Jorge Vidaurre <jorge@agents-squads.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Agents couldn't upload to Google Drive because gws wasn't in the allowed tools list. Now agents can: upload files, create docs/sheets, manage Drive folders. Co-Authored-By: Claude <noreply@anthropic.com>
The model resolution was: CLI flag → SQUAD.md task-type routing. Leads were routed to SQUAD.md expensive (Opus) ignoring agent.md model: sonnet. Now: CLI flag → agent.md model → SQUAD.md routing. This was the $183 Opus bug — all leads define Sonnet but were auto-routed to Opus via SQUAD.md expensive field. Expected savings: ~$180→$20 per org cycle. Co-Authored-By: Claude <noreply@anthropic.com>
--force: bypasses "already completed today" skip in org cycle. Allows multiple org cycles per day. Model fix: agent frontmatter model: field now takes priority over SQUAD.md task-type routing. Leads use Sonnet as defined, not Opus from SQUAD.md expensive field. Co-Authored-By: Claude <noreply@anthropic.com>
Old: skip if completed today (blocked re-runs after goal updates). New: skip only if completed today AND goals.md/priorities.md mtime is older than the last run. If goals changed → re-run. No --force needed for normal operation. Co-authored-by: Jorge Vidaurre <jorge@agents-squads.com> Co-authored-by: Claude <noreply@anthropic.com>
Add .action(() => cmd.outputHelp()) to catalog, obs, release, and services parent commands. Commander.js parent commands with no action default to exit 1 — outputHelp() renders help and exits 0. Closes #647 Co-authored-by: Jorge Vidaurre <jorge@agents-squads.com>
findSquadsDir() now uses a 3-stage fallback: 1. Standard 5-level ancestor walk from process.cwd() (unchanged happy path) 2. git rev-parse --show-toplevel — handles CWD deep inside a subdirectory 3. git rev-parse --git-common-dir — resolves main repo root and checks sibling directories (e.g. hq/ next to squads-cli/ or worktrees/) No new npm dependencies. spawnSync from child_process (built-in). Closes #652 Co-authored-by: Jorge Vidaurre <jorge@agents-squads.com>
Co-Authored-By: Claude <noreply@anthropic.com>
SQUAD.md context.skills were metadata-only — agents never received them. Now: CLI reads context.skills from SQUAD.md, merges with --skills flag, and passes to Claude session. Each squad gets exactly the skills it needs — no more, no less. Example: analytics gets [bq, ganalytics, gworkspace], marketing gets [pdf-builder, gdrive, gworkspace, multi-llm, screen-recorder]. Co-Authored-By: Claude <noreply@anthropic.com>
When agents are invoked with full file paths (e.g. via batch runs), the agentName was written as-is to observability records, breaking analytics queries that group/filter by agent name. Strip path prefix and extension at the entry point of runAgent() so all downstream code (obs, state, logs) receives the short name. Closes #653 Co-authored-by: Jorge Vidaurre <jorge@agents-squads.com>
…tart them Old prompt: "TIME LIMIT: 15 minutes. If blocked, move on." New prompt: "COMPLETE YOUR GOALS. Don't just scan and report — finish the work. Create the deliverable. File issues with full context." Agents were choosing to stop early because the prompt told them to be conservative. Now they're told to finish what they started. Co-Authored-By: Claude <noreply@anthropic.com>
Moved behavioral directives from TypeScript to markdown: - COO evaluation protocol → .agents/config/coo-evaluation.md - Lead mode protocol → .agents/config/lead-mode.md - Agent prompt → simplified to identity + context layers only - Role protocols → SYSTEM.md section 9 - Publishing guardrails → SYSTEM.md section 12 - Completion standards → SYSTEM.md section 11 - Output standards enriched → SYSTEM.md section 10 Code standard: NEVER mix prompts and code. TypeScript assembles context layers and passes them. All behavioral instructions live in markdown files that can be edited without rebuilding. Co-Authored-By: Claude <noreply@anthropic.com>
workflow.ts: role instructions (lead, scanner, worker, verifier) and output format standards → .agents/config/conversation-roles.md execution-engine.ts: verification protocol → .agents/config/verification.md cognition.ts: belief classification + reflection → .agents/config/cognition-prompts.md context.ts: autonomous execution prompt → simplified to identity only Code standard enforced: TypeScript assembles context, markdown contains all behavioral instructions. Zero hardcoded prompts remain. Co-Authored-By: Claude <noreply@anthropic.com>
runAgent was swallowing errors — caught, logged, but never re-thrown. The org cycle's catch block never fired, so quota detection didn't trigger and the cycle didn't wait/resume. Now: agent failures propagate to callers. Org cycle catches them, detects quota (2 consecutive fast failures), waits 60 min, resumes. Co-Authored-By: Claude <noreply@anthropic.com>
…ch error (#681) When existsSync returns true but readFileSync mock returns undefined (in tests), rolesContent.match() throws TypeError. Using nullish coalescing ensures rolesContent is always a string regardless of mock behavior. Co-authored-by: agents-squads[bot] <266303152+agents-squads[bot]@users.noreply.github.com>
…664) (#678) Adds --settings <guardrail.json> to claudeArgs when executing foreground agents, so spawned sessions inherit PreToolUse hooks that block destructive commands (rm -rf /, git push --force, git reset --hard, git clean -f). Resolution order: project .claude/guardrail.json → bundled templates/guardrail.json. Co-authored-by: Jorge Vidaurre <jorge@agents-squads.com> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: agents-squads[bot] <266303152+agents-squads[bot]@users.noreply.github.com>
- Replace static 'Getting started' with dynamic 'What's next' section showing the first command to run based on selected use case - Add opt-in email prompt at end of init (Enter to skip) - Store email locally in ~/.squads/config.json for founder outreach - Send SHA-256 hashed email as cli.email_captured telemetry event - Gracefully wrapped — email capture never blocks init on failure Closes #673 Closes #674 Co-authored-by: Jorge Vidaurre <jorge@agents-squads.com> Co-authored-by: agents-squads[bot] <266303152+agents-squads[bot]@users.noreply.github.com>
- Add test/commands/services.test.ts with 14 tests covering: services up (Docker unavailable, compose missing) services down (no compose file graceful exit) services status (no containers, Tier 2 containers, JSON mode) command structure validation (subcommands, flags) - Add docs/tier2.md: what Tier 2 is, prerequisites, usage with expected output examples, fallback behavior, and tier detection API reference Closes #667 Co-authored-by: Jorge Vidaurre <jorge@agents-squads.com> Co-authored-by: agents-squads[bot] <266303152+agents-squads[bot]@users.noreply.github.com>
Contributor
Author
|
This PR has a merge conflict caused by git history divergence. Root cause: The v0.2.2 release was squash-merged to main (commit b4c2192), but develop has those same 181 commits individually. The three-way merge sees conflicting diffs even though the final file blobs are identical. To resolve locally: git checkout release/v0.2.3
git merge main # resolve conflicts (likely in src/ files)
git push origin release/v0.2.3The conflicts should be trivial to resolve since both branches have the same final file state — just accept the develop version for each conflict. Note: This PR requires founder approval before merging to trigger npm publish. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
v0.2.3 Release
Publishes all fixes and features accumulated on
developsince v0.2.2.Closes #669
IMPORTANT: Requires founder approval before merging — this triggers npm publish.
Changes since v0.2.2
Bug Fixes
fix(obs): resolve squads dir from git root — fixessquads obs syncfrom worktrees (PR fix(obs): resolve squads dir from git root for worktree support #660)fix(obs): normalize agent name from full path to short name (PR fix(obs): normalize agent name from full path to short name #668)fix(workflow): coerce rolesContent to string — prevents CI test failures (PR fix(workflow): coerce rolesContent to string - prevents CI test failures #681)Features
feat: inject guardrail PreToolUse hooks into spawned Claude sessions — blocks destructive ops (PR feat: inject guardrail PreToolUse hooks into spawned Claude sessions #678, closes feat: agent guardrails — inherit PreToolUse hooks in spawned sessions #664)feat(init): What's next guidance + opt-in email capture (PR feat(init): What's next guidance + opt-in email capture #679, closes ux: no email capture at init — blocks user outreach permanently #673 ux: no guidance between squads init and squads run — first run gap #674)feat: SQUAD.md context.skills loaded into agent sessionsfix: add bq, gcloud, stripe to allowedToolsfix: remove timeout pressure — agents must complete goalsTests and Docs
Release Steps (founder)
npm run build && npm publishCreated by eng-lead / engineering squad.