Skip to content

Releases

0.7.1

Choose a tag to compare

@hugobessa hugobessa released this 04 Nov 03:08

Added

  • Landing pages for AI Workflows and AI Maestro, under docs/ and
    published by GitHub Pages (.github/workflows/pages.yml; set the Pages
    source to GitHub Actions once). Static HTML on the design system's tokens,
    light and dark, signed with the Vinta wordmark. The AI Maestro page's hero
    is a replica of the run view, animated like a run. Not part of the
    published package.

Changed

  • vinta-ai-maestro: the run graph shows the run, not just the plan. A
    running phase's card names the pipeline step it is on (gate, review, …)
    and wears its colour on every side with a soft glow; a phase parked on
    capacity wears amber. The edges follow: a dependency that has landed turns
    green, and one a running phase is consuming flows blue (still, under
    reduced motion). The resource pools that matter now sit directly under the
    canvas, beside the cards they park, so a node that is not moving is
    explained without a scroll. The DAG canvas gained an optional step on its
    nodes and two host-bindable properties, --vdag-edge-done and
    --vdag-edge-active, for this.
  • vinta-ai-maestro signs with the Vinta wordmark and calls itself AI
    Maestro
    in the run monitor's and the interview page's top bar, blue in
    light mode and the text colour in dark. The package, the command and the
    storage keys keep their vinta-ai-maestro name.

Fixed

  • A DAG card no longer hangs out of its wave band. The canvas sized its
    cards with a minimum height while the bands and the scene were computed
    from that same number as if it were exact, so a two-line name overflowed
    the band. Cards are now drawn at exactly the slot the layout reserves
    (96px, room for a two-line name and the status row with a step).

0.7.0

Choose a tag to compare

@hugobessa hugobessa released this 03 Nov 21:21

[0.7.0] — 2026-11-03

Added

  • vinta-ai-maestro: a plan-feature plan runs itself, phases in parallel,
    with you steering from a terminal or a browser.
    A new workspace package,
    packages/vinta-ai-maestro/, published as its own npm package under the same
    version number as vinta-ai-workflows and run with npx vinta-ai-maestro
    (Node ≥ 22). It is not part of the vinta-ai-workflows tarball: what reaches
    the skills package is the generated schemas below and the skill changes that
    produce and consume them. SPEC.md is the
    authority and the package README is the operator's manual.
    • A run. run <workflow.json> starts the plan's .workflow.json as a
      background job and returns; closing the terminal changes nothing
      (--foreground keeps it in the process, for CI). The run works on a plan
      branch, plan/<workflow-id>/base, cut from base_branch. Each phase gets a
      crew member, a lane — a git worktree with its own copy of the dependency
      dirs, forked dev / test databases, an isolated compose project, a
      namespace in each shared service, the declared env_files and a
      setup_cmd — and the standard-phase pipeline: implement, gates, review,
      polish chores, verify, integrate (merge, gates on the merged tree, push,
      PR), after_pr chores. A phase with one dependency branches from it, one
      with several from an integ-<id> merge; each wave merges into
      plan/<id>/wave-<N>, and the last wave opens the plan PR, the one PR that
      lands the plan. run --resume <run-id> picks a paused, interrupted or
      failed run back up with the policy it was started with. Policy flags:
      --on-failure retry|ask|stop (default retry: one cold attempt, then a
      question), --retries, --retry-after <15m> (an unanswered failure
      question answers itself, backing off when attempts fail fast),
      --agent-answer-after (how long an agent's own question waits before the
      recommended options are taken), --permission ask|auto|full|judged
      (default auto), --harness-profile <name> (a named binary and
      environment — a second account, say — from
      ~/.config/vinta-ai-maestro/profiles.yaml), --system-one <config.json>,
      --no-coordinator and --coordinator-authority full.
    • Harnesses. claude-code, codex (codex app-server, codex-cli ≥ 0.147.0)
      and opencode, behind one adapter contract: spawn, resume, inject a message
      into a running turn, wait for background work, compact. A quota, rate-limit
      or concurrency refusal parks the harness, not the phase, until the reset
      time the vendor stated; defaults.model_fallbacks and
      defaults.harness_fallbacks move the refused spawn to a fallback instead;
      a provider outage re-runs the phase when the harness answers, charging
      nothing to its attempts; a logged-out CLI asks you to log in. Sessions
      start one at a time per harness, and the ceiling a run discovers is kept
      for the next one.
    • The crew. A plan staffs a team, the Crew table plan-feature writes:
      one member per agent with a tier, a model and a harness, and every phase
      assigned to one of them. A member keeps its worktree and its session across
      the phases it takes, so what it learned in phase 1 is still there in
      phase 4. A busy member is covered by the cheapest qualified free peer or by
      a spare in its image (defaults.max_spare_crew, default 2); a phase is
      never handed below its tier (defaults.substitution, default
      up_one_tier); a phase its review keeps rejecting moves up a tier
      (defaults.escalate_after_rejections, default 3); a merge conflict goes to
      the most senior member who wrote one of its sides.
    • Gates. A gate is a shell command, by type (test, lint, typecheck,
      e2e, taking the project's commands.*) or by a project-wide id
      (maestro.gates.<id>), or a judge question put to a System One classifier.
      Phase gates run a scoped_cmd ({changed_files} / {touches}) until the
      review approves; verify then runs the full cmd on the phase branch, and
      the full suite runs on every merged base and wave (verify_gates,
      base_gates, wave_gates, all full by default). Results are cached per
      gate, command and tree. fresh_cmd and fresh_when run a gate from a
      fresh test database when the tree moved under it; cold_cmd and
      scope_cache cover a lane with no test cache; timeout_s,
      queue_timeout_s and tuning.allowed_flags bound and retune a gate.
      Resource pools (resources, scope: run | host) serialise the heavy ones
      across lanes, and across every maestro run on the machine. Agents run a
      gate with vinta-ai-maestro gate <id> and take a pool with
      vinta-ai-maestro with <resource> -- <cmd>; on claude-code a PreToolUse
      gate guard refuses the bare command, and --permission judged asks a
      classifier about each shell call. codegen steps regenerate generated
      files rather than merging them, append_only files merge as a union,
      post_merge runs a formatter over what git merged, and ci_only records
      the CI checks deliberately left to CI.
    • Review and chores. Once a phase's gates are green, the implementer's
      own session runs the review chore, thermo-nuclear-review-loop: one
      reviewer sub-agent, each finding verified and fixed or rejected with
      counter-evidence, until the reviewer explicitly approves. A phase's
      decisions — answered questions, operator context, rejected findings — are
      kept and carried into every later prompt, so nothing is asked twice.
      deslop and the project's other after_review chores run before verify;
      after_pr chores (a review canvas, say) run once the PR is open. A chore
      reporting Status: FAILURE is recorded as failed. max_fix_rounds is
      unset by default, which means no limit; set it to be asked.
    • Integration. A conflict goes to a conflict fixer in the integration
      worktree, with a time limit per round and its resolution gated by the union
      of both phases' gates; what a round left is kept under
      refs/vinta-ai-maestro/ across attempts. A resolution that undoes a
      phase's deletion is flagged. A merge git or a hook refuses goes to you.
      Every phase and integration PR carries a Landing section pointing at
      the plan PR; land <run> says how a finished run lands and closes the PRs
      whose work is already in the base; propagate <run> <phase> carries a late
      fix into every integ- and wave- branch; sync-base <run> brings a moved
      base_branch into a live plan.
    • Steering. status, logs [-f], logs --failures <gate-log>, pause,
      stop, node context|redirect|pause|resume|abort|retry|fresh|answer,
      node interrupt|reassign|step (take a phase over at its step without
      failing it), switch-harness, fixer interrupt|reassign, workflow,
      amend (a live run takes an edited workflow, rebasing the done phases the
      change reaches), exec <run> <lane|integration> -- <cmd> (a command with
      the lane's environment, holding the integration worktree while it runs),
      gate-cache invalidate, purge [--lanes --branches] (never the only copy
      of work), doctor (every check a run depends on, from disk and servers to
      env files, compose -T, gate scope and the CI jobs no gate covers),
      validate, simulate and judge calibrate. Every acting request takes a
      reason, journalled with what it explains.
    • The run coordinator. One agent per run, woken when a phase fails, an
      attempt errors, a phase waits on the integration worktree or a gate crosses
      its cost threshold, at most 24 times a run. It reads the journal and the
      repository and acts through the same API as you: steer, pause, retry,
      answer the questions a timer could answer, amend the live run, run a
      command. It may change how the run executes, never what it builds, and
      never weakens a check. Everything decided without you — by it or by a
      timer — is listed in status, the run view, the plan PR and the
      post-mortem.
    • The browser UI. ui serves every run in the project and hosts none,
      so closing it interrupts nothing. A run view with the plan graph, the
      roster, the integration worktree's record, resource pools, sessions and
      cost, what was decided without you, a notifications inbox and the
      coordinator as a sidebar; a phase view with the transcript rendered the way
      the harnesses render it, the phase's running processes and gates, its
      changes as a diff, its integration timeline, its PR, and steering as a chat
      input; an analytics page while the run goes and the post-mortem as a report
      after; a Logs view over the daemon's own log; a workflow editor that saves
      only what you changed; Pause, Stop, Retry and Resume. Every page fits a
      phone, in light and dark.
    • The record. Everything lands under .vinta-ai-maestro/ (gitignored):
      the run's journal, each phase's transcript with the role that wrote each
      line, gate logs, the daemon's own log (logs/daemon.ndjson, identifiers
      only, enforced), and once the run ends a post-mortem (postmortem.v1):
      dependencies declared but unused or discovered at gate time, conflicts,
      the critical path, idle capacity, gate costs, failure causes, crew
      substitutions, failed chores and unattended decisions. plan-feature reads
      it before planning the next feature in the same repository.
    • Security. The daemon binds loopback and every API request carries a
      token. Agents hold a token of their own that reaches only their lea...
Read more

0.7.0-alpha39

0.7.0-alpha39 Pre-release
Pre-release

Choose a tag to compare

@hugobessa hugobessa released this 24 Oct 16:13

What's Changed

  • fix(maestro): scheduler hardening from the mentor-workshops run by @hugobessa in #121
  • feat(maestro): show what a phase is running, and let the operator stop it by @hugobessa in #122

Full Changelog: 0.7.0-alpha38...0.7.0-alpha39

0.7.0-alpha38

0.7.0-alpha38 Pre-release
Pre-release

Choose a tag to compare

@hugobessa hugobessa released this 22 Oct 21:27

What's Changed

  • fix(maestro): make the Windows test job pass by @hugobessa in #120
  • feat(maestro): rebalanced run page, analytics and report, mobile fit by @hugobessa in #119

Full Changelog: 0.7.0-alpha37...0.7.0-alpha38

0.7.0-alpha37

0.7.0-alpha37 Pre-release
Pre-release

Choose a tag to compare

@hugobessa hugobessa released this 20 Oct 22:15

0.7.0-alpha36

0.7.0-alpha36 Pre-release
Pre-release

Choose a tag to compare

@hugobessa hugobessa released this 18 Oct 04:16

0.7.0-alpha35

0.7.0-alpha35 Pre-release
Pre-release

Choose a tag to compare

@hugobessa hugobessa released this 16 Oct 17:08

0.7.0-alpha34

0.7.0-alpha34 Pre-release
Pre-release

Choose a tag to compare

@hugobessa hugobessa released this 16 Oct 06:41

0.7.0-alpha33

0.7.0-alpha33 Pre-release
Pre-release

Choose a tag to compare

@hugobessa hugobessa released this 16 Oct 04:24

What's Changed

  • fix(maestro): stale gate cache verdicts and a fixer loop that never escalates by @hugobessa in #113
  • fix(maestro): keep phase decisions across sessions; hold claude-code for an unread wake turn by @hugobessa in #114
  • fix(maestro): agent leases name holders, end with their session, and let pause finish by @hugobessa in #115
  • fix(maestro): recover interrupted merges, keep runs alive for aborted retries, add node fresh by @hugobessa in #116
  • fix(maestro): disk preflight sizes the real pool; recycle cleans ignored files by @hugobessa in #118
  • fix(maestro): purge safety, lane teardown, resume help, judge calibrate by @hugobessa in #117

Full Changelog: 0.7.0-alpha32...0.7.0-alpha33

0.7.0-alpha32

0.7.0-alpha32 Pre-release
Pre-release

Choose a tag to compare

@hugobessa hugobessa released this 13 Oct 16:49

What's Changed

  • fix(maestro): key the gate cache on the gate's whole definition by @hugobessa in #109
  • test(maestro): leave a Windows-held pty temp dir behind in teardown by @hugobessa in #110
  • Cut maestro's idle time between phases (spare crew, empty turns, unattended answers, gate scope) by @hugobessa in #111
  • feat(maestro): hold sessions open for background work on every harness by @hugobessa in #112

Full Changelog: 0.7.0-alpha31...0.7.0-alpha32