v0.1.0
Initial release.
Added
- Plan → execute → review pipeline driven by a LangGraph state graph, with
typed handoffs between roles (raw agent logs never re-enter prompt context). - Six provider backends: claude, codex, copilot, gemini, antigravity, and a
built-in ollama adapter for fully local models. - Herdr terminal integration: one tab per task, agents run in visible panes.
Tabs close automatically on success, persist as a conversation trail while a
task waits on the user, and are reused when the task resumes
(herdr.close_tab_on:success|terminal|never). - Dual-backend persistence — SQLite task store (
node:sqlite) by default,
or PostgreSQL whenDATABASE_URL=postgres://…is set.openStore()routes to
PostgresTaskStore(pgpool) automatically; both backends share an
identical schema and a uniform async store interface. JSON-file mirror kept
for legacy readers. - Encrypted secret store —
maestro setup keys --encryptmigrates
.maestro/secrets.local.jsonto an encryptedsecrets.local.enc.json
(scrypt + AES-256-GCM, zero new deps) and shreds the plaintext. Unlock with
MAESTRO_SECRET_PASSPHRASEor an interactive prompt; real env vars still win.
maestro doctorreports the store mode.maestro setup hardeninstalls a
Claude Code guardrail (PreToolUse hook + deny rules) so only maestro reads its
secrets. Seedocs/configuration.md§ Secrets. - OpenTelemetry tracing — set
OTEL_EXPORTER_OTLP_ENDPOINTto export
traces and spans via OTLP/HTTP proto. Auto-instrumentshttp,pg, and
dns. Completely zero-overhead (no imports, no SDK init) when the env var
is absent. Override the service name withOTEL_SERVICE_NAME. - MCP server exposing eight
maestro_*tools for agent callbacks. - Interactive TUI (
maestro tui) for reviewing, approving, and answering tasks. - Interactive web dashboard — the HTTP server (
maestro serve) serves a
Linear-inspired browser UI at/:- Live task board polling
/api/v1/stateevery 5 s (active) or 30 s (idle)
with surgical DOM updates — no page reloads. - Filter tabs: All / Running / Retrying / Completed.
- Click any row to open a slide-in detail panel that fetches
/api/v1/<identifier>: shows issue state, attempt, timestamps,
description, priority, assignee, and full JSON. Actions: Copy JSON,
Raw endpoint link. - Trigger Refresh button (POST
/api/v1/refresh) with loading spinner;
Force-Poll button for immediate state sync. - Toast notifications and a live pulse indicator in the toolbar.
- Live task board polling
- Security model: host-command denylist, env secret stripping, path-traversal
guards, config redaction. - HTTP endpoint hardening — the dashboard/API server (
maestro serve)
applies a per-IP token-bucket rate limit (reads ~120/min, writes ~12/min;
429+Retry-Afterwhen exceeded) and validates input on every route:
issue identifiers are length-capped and charset-restricted (malformed input
→400instead of500), and oversizedPOSTbodies are rejected (413).
Disable withMAESTRO_HTTP_RATELIMIT=off. MCP tool inputs (ids, prompt,
status, mode) gained matching length/type validation. - Headroom context compression for prior-output pipelines.
- Linear tracker integration (server mode).
- GitHub Actions CI: lint (Biome), test matrix (Node 22/24 on Linux plus a
macOS leg), coverage (c8) with an enforced threshold gate, dependency
audit; Dependabot for npm and Actions updates. maestro init --workflow <name>workflow templates:default(planner →
executor → reviewer) andextended, which adds a read-only System
Evaluator role — the reviewer can escalate hard cases via
MAESTRO_HANDOFF: {"event":"escalate",...}, and
maestro task --mode evaluateruns a standalone principal-level audit.- Two more workflow templates:
local(every role on ollama, zero cloud) and
solo(executor only, fastest loop). maestro workflow use <name>— switchworkflow.jsonto any built-in
template; the previous file is always backed up toworkflow.json.bak.maestro doctor [--json]— read-only preflight: node version, provider CLI
presence + versions, herdr availability, and state-dir health (config,
workflow validation, db, secret store mode). Exit 1 on any failing check.- Automatic herdr → terminal backend fallback: when the herdr binary isn't on
PATH, tasks run on the terminal backend with a one-line notice instead of
failing (MAESTRO_BACKEND=terminalstill forces/silences it). - End-of-run summary: after
maestro task/run-task, a per-role table
with duration, stdout size, and status; steps now persiststarted_at
alongsidecompleted_at. - npm publish metadata (
repository,license,author,keywords,
prepublishOnly) and aRELEASING.mdrelease checklist. - Tag-triggered GitHub Release workflow: pushing
vX.Y.Zlints, tests,
verifies the tag againstpackage.json, and publishes a Release with the
matching changelog section and the packed tarball (npm publish stays
manual). - Community health files: issue forms, Contributor Covenant 2.1 code of
conduct, CODEOWNERS, and a documented platform policy (Linux/macOS;
Windows via WSL2).
Changed
- Project renamed from Symphony to Maestro.
maestro task --plan-onlynow errors withunknown_modewhen the workflow
defines noplan-onlymode (previously it silently fell back to
workflow.initialand ran a full write-enabled pipeline).- The init wizard prints a one-line explainer before each setup question.
- Full-screen TUI (
maestro tuion a real terminal): keyboard-driven task
board with filter views and live refresh, task detail with one-keystroke
approve/deny/message/retry/cancel/mark-done/resume/extend, a settings
editor, and a workflow graph screen that renders roles, handoff arrows, and
event transitions as a responsive grid (vertical stack on narrow
terminals). The classic prompt-driven TUI remains the fallback for non-TTY
use and viaMAESTRO_TUI_CLASSIC=1. --help/-h/helpCLI usage output.bin/maestro.mjsis now a thin entry shim; the CLI implementation lives in
src/cli/modules (no behavior or public-surface change).
Fixed
- MCP server no longer throws at import time when no
.maestrodirectory
exists up-tree; root discovery is lazy and errors surface on first tool call. - The
node:sqliteExperimentalWarning is no longer printed on every CLI and
MCP server run; other process warnings still pass through. - Captured agent stdout/stderr are stripped of ANSI/VT control sequences before
entering handoff payloads and the console (on-disk logs stay raw), so CLIs
that redraw streaming progress no longer leak cursor-move escapes. scripts/is now included in the published package, somaestro setup harden
(which installs a hook backed byscripts/secret-guard.mjs), the
agent:ocr/agent:evalexample agents, andheadroom:setupwork from an
installed package instead of only from a git clone.- The
agent:ocr/agent:evalscripts fail fast with an install hint when the
Ollama binary is absent, instead of surfacing a raw spawn error mid-run.