Repository navigation
Releases
Releases · vintasoftware/vinta-ai-workflows
0.7.1
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 optionalstepon its
nodes and two host-bindable properties,--vdag-edge-doneand
--vdag-edge-active, for this.vinta-ai-maestrosigns 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 theirvinta-ai-maestroname.
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
[0.7.0] — 2026-11-03
Added
vinta-ai-maestro: aplan-featureplan 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 asvinta-ai-workflowsand run withnpx vinta-ai-maestro
(Node ≥ 22). It is not part of thevinta-ai-workflowstarball: 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.jsonas a
background job and returns; closing the terminal changes nothing
(--foregroundkeeps it in the process, for CI). The run works on a plan
branch,plan/<workflow-id>/base, cut frombase_branch. Each phase gets a
crew member, a lane — a git worktree with its own copy of the dependency
dirs, forkeddev/testdatabases, an isolated compose project, a
namespace in each shared service, the declaredenv_filesand a
setup_cmd— and thestandard-phasepipeline: implement, gates, review,
polish chores, verify, integrate (merge, gates on the merged tree, push,
PR),after_prchores. A phase with one dependency branches from it, one
with several from aninteg-<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(defaultretry: 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
(defaultauto),--harness-profile <name>(a named binary and
environment — a second account, say — from
~/.config/vinta-ai-maestro/profiles.yaml),--system-one <config.json>,
--no-coordinatorand--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_fallbacksand
defaults.harness_fallbacksmove 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-featurewrites:
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'scommands.*) or by a project-wide id
(maestro.gates.<id>), or a judge question put to a System One classifier.
Phase gates run ascoped_cmd({changed_files}/{touches}) until the
review approves;verifythen runs the fullcmdon 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_cmdandfresh_whenrun a gate from a
fresh test database when the tree moved under it;cold_cmdand
scope_cachecover a lane with no test cache;timeout_s,
queue_timeout_sandtuning.allowed_flagsbound 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 withvinta-ai-maestro gate <id>and take a pool with
vinta-ai-maestro with <resource> -- <cmd>; on claude-code aPreToolUse
gate guard refuses the bare command, and--permission judgedasks a
classifier about each shell call.codegensteps regenerate generated
files rather than merging them,append_onlyfiles merge as a union,
post_mergeruns a formatter over what git merged, andci_onlyrecords
the CI checks deliberately left to CI. - Review and chores. Once a phase's gates are green, the implementer's
own session runs thereviewchore,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.
deslopand the project's otherafter_reviewchores run before verify;
after_prchores (a review canvas, say) run once the PR is open. A chore
reportingStatus: FAILUREis recorded as failed.max_fix_roundsis
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 everyinteg-andwave-branch;sync-base <run>brings a moved
base_branchinto 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,simulateandjudge 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 instatus, the run view, the plan PR and the
post-mortem. - The browser UI.
uiserves 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-featurereads
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...
- A run.
0.7.0-alpha39
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
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-alpha36
0.7.0-alpha35
0.7.0-alpha34
0.7.0-alpha33
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
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