Skip to content

Releases: 23blocks-OS/ai-maestro

v0.35.54

05 Jun 19:54
2dc2c5d

Choose a tag to compare

Reverted

  • Terminal: revert headless xterm.js and parallel addon loading (v0.35.52–v0.35.53) — The headless xterm.js approach (server-side serialized terminal state) caused terminal initialization failures, broken scrolling, and multi-minute load times on agent switch. Reverted server.mjs, useTerminal.ts, and TerminalView.tsx to the stable v0.35.50 behavior (tmux capture-pane for history, sequential addon loading, blocking WebGL init). Dependencies (node-pty 1.1.0, ws 8.21.0) remain updated.

Full Changelog: v0.35.50...v0.35.54

v0.35.31 — Agent Scheduling, Terminal Stability, Chat Path Fix

28 May 04:56
a0ede7e

Choose a tag to compare

What's New

Agent Scheduling System

Cron-based task scheduling for agents. Create schedules with standard cron expressions, and AI Maestro will wake agents (spawn tmux session + launch Claude Code) and send them prompts on schedule. Schedules stored in ~/.aimaestro/schedules.json, checked every 60s.

API:

  • GET/POST /api/agents/{id}/schedules — List/create schedules for an agent
  • GET/PATCH/DELETE /api/agents/{id}/schedules/{scheduleId} — Manage individual schedules
  • GET /api/schedules — Global schedule list with execution history
  • POST /api/schedules/{id}/trigger — Manual or webhook trigger

Auto-Recovering Circuit Breaker

Remote hosts no longer get permanently disabled when temporarily unreachable. The circuit breaker now uses a half-open pattern with exponential backoff (30s → 5min cap). Hosts auto-recover on the next UI poll when cooldown expires. hosts.json is never modified by the circuit breaker.

Container Hardening

Agent Docker containers now launch with --cap-drop=ALL (selective --cap-add), --security-opt no-new-privileges, and --tmpfs /tmp:noexec,nosuid. New GET /api/docker/stats endpoint for real-time CPU/memory/network metrics per container.

Bug Fixes

  • Terminal resize storm — Eliminated 4+ overlapping resize triggers (onOpen, history-complete, ResizeObserver, notes toggle) that caused terminal content to jump, rewrite, and leave users mid-page. PTY now spawns at correct dimensions; resize messages only sent on real user actions (browser window drag, notes panel toggle). WebSocket stays connected across Terminal ↔ Chat tab switches.
  • Chat view empty for agents with underscores in path — Claude Code converts both / and _ to - in project directory names, but our JSONL path resolution only replaced /. Agents like rag_ingestion couldn't find their conversation files. Fixed in all 3 locations.
  • Circuit breaker permanently disabling remote hosts — Replaced permanent enabled: false with in-memory half-open state that auto-recovers.
  • Reactivate endpoint rejecting circuit-broken hosts — Now handles both enabled: false and in-memory circuit-broken hosts.

Stats

  • 792 tests passing
  • Covers PRs #372, #373, #374 (v0.35.28 → v0.35.31)

v0.35.14 - Call Session Fork, Trust Levels, Remote Terminal Fix

18 May 16:09
1b96db7

Choose a tag to compare

What's New

Call Mode Session Fork

When a companion voice call starts, the server auto-spawns a temporary YOLO tmux session ({agentName}__call) with --permission-mode bypassPermissions. Voice transcripts route to this autonomous fork instead of the primary supervised session, so tool-call permission prompts don't block conversational flow. The session is killed when the last companion client disconnects.

Trust Level / Permission Mode

  • Each permission mode now shows clear descriptions explaining what it does and when to use it
  • Permission mode selector only appears when waking Claude Code agents (hidden for Aider, Codex, Cursor, Terminal)
  • Modes reordered from most restrictive to least: Supervised → Plan Only → Trust Edits → Smart Auto → Full Autonomy

Bug Fixes

  • Remote terminal blank screen — Fixed WebSocket proxy not forwarding cols, rows, and socket query parameters to remote hosts and cloud containers. Remote PTY was spawning at default 80x24 instead of the client's actual terminal dimensions.
  • Command injection risk — Replaced all execSync shell-string tmux commands with execFileSync/execFile (array args, no shell)
  • Event loop blocking — Transcript routing now uses async execFile instead of blocking execSync
  • Voice buffer timing race — Changed getBuffer() to getOrCreateBuffer() for voice subsystem attachment
  • __call sessions leaking into agent discovery — Added isCallSession() filter to both session and agent discovery paths

Tests

  • 12 new unit tests for call session helpers and filtering (792 total)
  • New integration test script: scripts/test-call-session.sh

v0.35.0 — WebSocket Chat, Cloud Deployment, Meeting Improvements

14 May 00:34
275da8b

Choose a tag to compare

WebSocket-Driven Chat (Real-Time Signal Stream)

Replaced the 5-second file-polling chat system with a real-time WebSocket architecture. Chat now shows agent activity (tool use, permissions, thinking) instantly instead of lagging behind the terminal.

  • New chat:* protocol multiplexed on the existing /term WebSocket endpoint
  • Chat-only WebSocket connections via /term?name=X&chatOnly=1 (lightweight, no PTY)
  • Server-side JSONL file watcher with incremental reads (no more client polling)
  • Permission prompts appear within 500ms (was 5s+ with polling)
  • Desktop, mobile, and tablet views all use WebSocket chat
  • Pending message bubbles with optimistic UI
  • Visibility API reconnection on mobile tab switch

Cloud Deployment (AWS)

Full AWS cloud deployment support for running agents on EC2 and ECS.

  • EC2 native install with automated user_data bootstrap
  • ECS auto-build with Dockerfile and Terraform configs
  • Agent Creation Wizard with cloud deployment options
  • Container image with agent-server.js for remote agent management
  • WebSocket routing through cloud infrastructure

Meeting Improvements

  • Inject queue with hybrid dispatch and bracketed paste support
  • Meeting stability fixes and discovery reorder
  • Hook reliability improvements
  • Meeting task CLI script

Cherry-Picked Fixes

  • sendKeys split: literal + Enter as separate calls with 100ms delay
  • Hostname resilience for cloud environments
  • Hibernate heartbeat fix
  • Avatar strip rendering fix
  • AMP canonical JSON serialization
  • Hosts logging improvements

Test Coverage

755 tests passing (up from 281). New test suites:

  • container-utils (209 tests)
  • agents-docker-service (1589 tests)
  • meeting-inject-queue (179 tests)
  • meeting-inject-utils (54 tests)
  • amp-canonical-json (103 tests)

82 files changed, 10,883 insertions, 871 deletions

Full changelog: https://github.com/23blocks-OS/ai-maestro/blob/main/CHANGELOG.md

v0.29.15 — Fix hibernate/standalone conflict

08 May 17:49
fc0f297

Choose a tag to compare

Bug Fix

Hibernated agents incorrectly shown as standalone — Agents with tmux session history (like Raine) were being classified as "standalone" when they had a recent heartbeat but no active tmux session. This caused the UI to show "Standalone Agent — no terminal view" instead of the hibernation screen with the Wake button.

What changed

  • Standalone classification now requires no session history in the agent registry
  • Heartbeats only mark agents as "online" for truly standalone agents
  • Legacy /api/sessions endpoint also fixed

Impact

All registered agents that were hibernated now correctly show the Wake button again.

v0.29.14 — Ecosystem Narrative

04 May 17:24
25fcd13

Choose a tag to compare

The Agent Ecosystem

Introduces the Agent Formula — a clear narrative explaining how the 6 components of the 23blocks agent ecosystem work together:

Complete Agent = Personality (WHO) + Capabilities (HOW) + Identity (TRUST) + Communication (TALK)

What's New

  • docs/ECOSYSTEM.md — Canonical reference for how AI Maestro, Agent Library (150+ personalities), Plugin Builder, AID, and AMP fit together
  • docs/ecosystem.html — New docs site page with visual dimension cards, assembly flow, and "Build Your First Agent Team" walkthrough
  • Ecosystem section in README — Four-dimension table after "Meet Lola"
  • Plugin Builder — Added personality cross-references, "Combine Personalities + Skills" section, and example manifest with all 15 agency-agents divisions
  • Navigation — ECOSYSTEM link added to all 17 docs site pages
  • Companion components — Extracted CompanionInput, FloatingVoiceSettings, MobileCallOverlay into standalone components
  • GitHub metadata — Updated repo descriptions and topics

The Formula

Dimension Component
WHO Personality Agent Library (150+)
HOW Capabilities Plugin Builder
TRUST Identity AID
TALK Communication AMP

AI Maestro is the stage. Pick personalities, give them skills, and run them from one dashboard.

Read the full ecosystem guide →

v0.29.0 — Unified API Error Format

16 Apr 16:18
7a347a4

Choose a tag to compare

Highlights

Every API error response across the codebase now follows the AMP protocol format — one consistent, structured shape for all 106 route handlers.

Before: inconsistent error shapes across ~280 services ({ error: 'Human text' }) vs structured AMP routes ({ error: 'code', message: '...', field?, details? }).

After: one shape everywhere.

{ "error": "missing_field", "message": "name is required", "field": "name" }

What changed

Added

  • services/service-errors.ts — single source of truth for ServiceResult<T>, ServiceError, and ServiceErrorCode (30 codes: AMP's 18 + 12 generic). Ships 20+ factory functions (missingField, notFound, operationFailed, alreadyExists, gone, invalidState, etc.) and validation helpers (requireString, requireArray, requireNameFormat).
  • app/api/_helpers.tstoResponse() turns any ServiceResult into a NextResponse with consistent error formatting.

Changed

  • 25 service files migrated to shared ServiceResult and factories (~305 error returns standardized).
  • 88 route files converted to thin wrappers: return toResponse(result).
  • 25 component files updated to read data.message || data.error for backward-compatible error display.
  • 5 test files updated (49 assertions now match structured ServiceError shape).
  • lib/types/amp.ts refactored: AMPErrorCode is now Extract<ServiceErrorCode, ...>, AMPError extends ServiceError. AMPNameTakenError interface corrected to match runtime shape (details.suggestions).
  • services/headless-router.tssendServiceResult() mirrors toResponse() for headless mode.

Fixed

  • preconditionFailed() factory now returns 412 (was 400).
  • lookupAgentByName and lookupAgentByDirectoryName catch blocks now propagate real errors via operationFailed() instead of silently returning { exists: false } / { found: false } with a 500 status.
  • toResponse() defensive fallback preserves caller's 4xx status instead of always overriding to 500.

Stats

  • 154 files changed (+1,365 / -1,977 = net −612 lines) despite adding the new foundation
  • 545/545 tests passing
  • Build + lint pass on Node 20 and 22

Credits

Huge thanks to @mvillmow for the original issue (#285) that identified the duplication across route handlers. The analysis revealed an even deeper opportunity — the underlying error contract itself was inconsistent — and this release addresses the root cause.

PR

  • #327 — feat: unify API errors to AMP format

Closes #285

v0.26.5 — Auto-install Status Line

26 Mar 05:22
cd6b7b0

Choose a tag to compare

Added

  • Auto-install Claude Code status lineinstall-plugin.sh now configures the AMP status line automatically, showing agent identity and unread message count in Claude Code's footer. Idempotent and reversible via amp-statusline.sh --uninstall.

v0.26.4 — AMP Mesh Routing Fix

25 Mar 06:03
6a223ec

Choose a tag to compare

Fixed

  • AMP mesh routing restoredamp-send.sh was incorrectly using filesystem delivery for remote agents after message migration created local directories. Now checks for config.json to distinguish real local agents from migration-created inbox directories.
  • AMP fetch URL fixamp-fetch.sh was missing /v1/ prefix on fetch and acknowledge endpoints, causing 404s against external providers.
  • AMP message ID timestampsgenerate_message_id() now uses seconds-precision timestamps per AMP spec.

v0.26.3 — AID v0.2.0: Independent from AMP

24 Mar 06:21
e7b971c

Choose a tag to compare

Agent Identity v0.2.0 — Fully Independent

AID no longer requires AMP to be installed. Agents can now authenticate with OAuth 2.0 servers using just AID alone.

What's new

  • aid-init — Standalone identity initialization (no amp-init needed)
  • aid-helper — Self-contained helper with OpenSSL auto-detection, Ed25519 signing
  • All aid-* scripts are now self-sufficient

Interoperability

If both AMP and AID are installed, they share ~/.agent-messaging/agents/ — one Ed25519 identity serves both protocols. Neither requires the other.

Numbers

  • Plugin: 7 skills, 50 scripts (was 48)

Full Changelog: v0.26.2...v0.26.3