Releases: 23blocks-OS/ai-maestro
v0.29.0 — Unified API Error Format
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 forServiceResult<T>,ServiceError, andServiceErrorCode(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.ts—toResponse()turns anyServiceResultinto aNextResponsewith consistent error formatting.
Changed
- 25 service files migrated to shared
ServiceResultand factories (~305 error returns standardized). - 88 route files converted to thin wrappers:
return toResponse(result). - 25 component files updated to read
data.message || data.errorfor backward-compatible error display. - 5 test files updated (49 assertions now match structured
ServiceErrorshape). lib/types/amp.tsrefactored:AMPErrorCodeis nowExtract<ServiceErrorCode, ...>,AMPError extends ServiceError.AMPNameTakenErrorinterface corrected to match runtime shape (details.suggestions).services/headless-router.ts—sendServiceResult()mirrorstoResponse()for headless mode.
Fixed
preconditionFailed()factory now returns 412 (was 400).lookupAgentByNameandlookupAgentByDirectoryNamecatch blocks now propagate real errors viaoperationFailed()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
Added
- Auto-install Claude Code status line —
install-plugin.shnow configures the AMP status line automatically, showing agent identity and unread message count in Claude Code's footer. Idempotent and reversible viaamp-statusline.sh --uninstall.
v0.26.4 — AMP Mesh Routing Fix
Fixed
- AMP mesh routing restored —
amp-send.shwas incorrectly using filesystem delivery for remote agents after message migration created local directories. Now checks forconfig.jsonto distinguish real local agents from migration-created inbox directories. - AMP fetch URL fix —
amp-fetch.shwas missing/v1/prefix on fetch and acknowledge endpoints, causing 404s against external providers. - AMP message ID timestamps —
generate_message_id()now uses seconds-precision timestamps per AMP spec.
v0.26.3 — AID v0.2.0: Independent from AMP
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 (noamp-initneeded)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
v0.26.2 — Dynamic discovery for all verification lists
Changes
- Replaced all remaining hardcoded skill and script lists with dynamic discovery from the plugin directory
verify-installation.shnow auto-discovers skills and AMP scripts (was missingagent-identityand 2 AMP scripts)install-plugin.shAMP verification now auto-discovers (was missing 4 of 14 scripts)- Fixed installer banner alignment
Full Changelog: v0.26.1...v0.26.2
v0.26.1 — Rename installer, auto-discover skills
Changes
- Renamed
install-messaging.sh→install-plugin.sh— the installer handles all skills, scripts, and CLI tools, not just messaging - Auto-discover skills — new skills added via the plugin manifest are automatically installed without modifying the installer script
- Added plugin builder references to the installer banner so users know they can customize their plugin at ai-maestro.23blocks.com/plugin-builder.html
Full Changelog: v0.26.0...v0.26.1
v0.26.0 — Agent Identity (AID) Integration
Agent Identity (AID) Integration
AI agents can now authenticate with OAuth 2.0 servers using their Ed25519 cryptographic identity — no passwords, no API keys, no secrets to rotate.
What's new
- Agent Identity (AID) added to the ai-maestro plugin build via
agentmessaging/agent-identity - New commands:
aid-register,aid-status,aid-token - New skill:
agent-identity - Plugin now ships 7 skills and 48 scripts
How it works
- Agent registers its public key with an auth server (one-time)
- Agent presents a signed identity + proof of possession
- Auth server verifies and issues a scoped RS256 JWT
- Agent uses JWT to call any API
Previous releases in this session
- v0.25.16 — Sync AMP plugin scripts to v0.1.3
- v0.25.15 — Key rotation with proof-of-possession + duplicate key rejection
Full Changelog: v0.25.16...v0.26.0
v0.25.16 — AMP Plugin Sync to v0.1.3
What's New
AMP Plugin synced to v0.1.3
Rebuilt ai-maestro-plugins via the manifest build system (build-plugin.sh --clean) to pull latest AMP scripts from agentmessaging/claude-plugin upstream.
Key upstream changes now included:
- Key rotation with proof-of-possession (
--forcereinit) - Local fingerprint uniqueness guard before registration
--id <uuid>parameter for multi-agent identity resolution- Client-side UUIDv4 for offline-first agent identity
- Case-insensitive index lookup + single-agent auto-select
- Multiple security, routing, and attachment fixes
Full Changelog: v0.25.15...v0.25.16
v0.25.15 — AMP Key Rotation with Proof-of-Possession
What's New
Key rotation with proof-of-possession
POST /v1/auth/rotate-keys now accepts an optional body with new_public_key, key_algorithm, and proof fields. The server verifies the proof (new key hex signed with old private key) before accepting the rotation. Omitting the body falls back to server-side key generation for backward compatibility.
This enables the amp-init --force deadlock fix: the client signs the new key with the old key before destroying it.
Duplicate public key rejection
POST /v1/register now returns 409 key_already_registered when the submitted public key fingerprint is already associated with a different agent. Same-agent re-registration with the same key remains allowed.
Full Changelog: v0.25.14...v0.25.15
AI Maestro v0.25.0 — Agent Skills Standard Compliant
Agent Skills Standard (skills.sh) Compliant
All 6 AI Maestro skills now comply with the Agent Skills standard — an open standard adopted by 30+ AI agent products including Claude Code, OpenCode, Codex CLI, Gemini CLI, Cursor, and GitHub Copilot.
Skills are no longer Claude Code exclusive. Install them on any compatible agent:
npx skills add 23blocks-OS/ai-maestro-pluginsWhat's New
🔌 Agent Skills Standard
- All 6 skills have valid YAML frontmatter, are under 500 lines, and use spec-compliant fields
- AMP messaging skill sourced from upstream agentmessaging/claude-plugin which independently adopted the standard
- 2 skills work standalone on any agent (planning, agent-messaging); 4 require AI Maestro server
🧠 Cerebellum Subsystem (v0.23.x)
- Voice-enabled companion with FaceTime-style pop-out UI
- OpenAI TTS provider, adaptive cooldown, speech history
- Terminal buffer analysis for contextual voice responses
⚡ Service Layer & Headless Mode (v0.24.x)
- All ~100 API routes extracted to 23 service files
- Headless mode: API-only server (~1s startup, ~100MB RAM)
- SharedState bridge pattern for server.mjs + API route coordination
🔒 Security
- RCE command injection patch in tmux session management
- ToxicSkills defense for skill/plugin install
- AMP Ed25519 message signing hardening
📱 Mobile & UX
- 3-tier responsive experience (phone/tablet/desktop)
- Essential keys toolbar for mobile terminal
- Toast notification system (replaced browser alerts)
- Startup self-diagnostics
🏗️ Plugin System
- Composable plugin builder with manifest-driven assembly
- Plugin Builder page with visual skill composition
- Agent roles and team types for messaging policy
👥 Community
- Integrated contributions from @barrie-cork (#256, #258, #260, #261)
- CI/CD with GitHub Actions (tests, build, lint)
Skills
| Skill | Any Agent | Needs Server |
|---|---|---|
| planning | ✅ | — |
| agent-messaging (AMP) | ✅ | — |
| memory-search | — | ✅ |
| docs-search | — | ✅ |
| graph-query | — | ✅ |
| ai-maestro-agents-management | — | ✅ |
Stats
- 78 commits since v0.21.24
- 23 service files
- 6 standard-compliant skills
- 44 CLI scripts
Full Changelog: v0.21.24...v0.25.0