Skip to content

Releases

v0.2.0

Choose a tag to compare

@dvalnn dvalnn released this 13 Nov 18:31
d49c4b7

The second stable release. Seats hand structured data on as typed reply fields, and the classics pack becomes blocks:
a review sizes itself to the change, and build_then_review builds a request and fixes what its review upholds.

Install or upgrade

curl -fsSL https://raw.githubusercontent.com/dvalnn/maestro/next/install.sh | sh

To pin this release, put MAESTRO_VERSION=v0.2.0 before sh. Manual steps are in
INSTALL.md.

Upgrade notes

  • Install maestro and the classics pack together, and rebuild your own packs. A pack built for v0.1.0 asks for
    SDK ^0.1.0, which this release does not satisfy, so it is refused with a message naming the pack. The classics
    bundle imports @maestro/host-repo-sdk/yaml, which a v0.1.0 binary does not embed. The IR is now 1.2: this
    release reads 1.0 to 1.2, and an older maestro refuses IR this one writes. The install command replaces the
    classics pack; a hand install must extract classics-*.tar.gz again.
  • Finish or discard v0.1.0 classics.panel_review concerts before upgrading. A resume runs the recorded graph,
    whose code node calls survivorsOf, which the pack no longer exports.
  • Give the four new classics profiles a runtime. classics/tester, classics/deep-lens, classics/top-lens and
    classics/cross-lens each need profiles.classics/<name>.runtime; the starter config in INSTALL.md lists all ten.
  • panel_review's and build_then_repair's agents moved. A seat key names the innermost composition holding the
    seat: rebind the review's seats as seats.classics/panel/<seat>, not classics/panel_review/<seat>, and the builder
    as classics/build/builder (classics/test_first/builder under classics.build.testFirst), not
    classics/build_then_repair/builder; pre-flight refuses the old keys. The review's nodes sit under panel/, as in
    panel/consolidator, and the builder is build/build, so a --node, a MAESTRO_STUB_OUTPUTS directory or a script
    naming the old ids must follow.
  • Classics' review contracts are typed reply fields, not files. The lens replies findings, the skeptic rulings
    and the consolidator verdict; findings.json, verdicts.json and verdict.json are gone, and the consolidator, a
    work seat that no longer approves or rejects, writes no review.md. Findings is a bare list of Finding
    { id, where, issue, cites }, with no clean or blocking: every finding rejects its lens. Verdicts is renamed
    Rulings. Verdict is { criteria, upholds }, each criterion { id, met, evidence, shownBy }, each upheld finding
    named <lens>/<id>, with no approved or blocking. A shadowed consolidator profile drops its approve/reject and
    review.md lines.
  • panel is a subcomposition, and round, survivorsOf, upheld and rulingLine are gone. Build it with
    use(panel, { change, spec, session?, earlier?, names?, brief? }, { params }), its params lenses, skeptics,
    consolidate, grounds and checks; it needs a session when consolidate is false. It ends in a Tally,
    { lane, session, upheld }, with delivered and the review rendered from the verdict beside it. A lens alone is a
    lens call, its skeptic challenge; read held findings with heldOf and tallyOf.
  • classics.panel_review ends in that Tally and settles rejected (exit 3) while a finding is upheld, the upheld
    findings its rejection outputs. A script that read its verdict.json reads upheld and review instead.
  • The scout's answer.md output is gone: read its answers reply field, one entry per question, each grounded,
    or unsure with what is missing.
  • A file attachment mounts at /in/<name>.<ext>, <ext> its source's extension, and its earlier copy at
    /in/previous/<name>.<ext>; a directory and a source without an extension mount as before. A task, hint or check
    that names /in/<name> for a file must add the extension.
  • The classics profiles/writing/ directory and the writing attachment are gone. Each classics seat carries its
    guidance in instructions, which now takes a list of files; builder and tester share profiles/testing.md. A
    profile's skills field stays refused, now with the fix to move its guidance into instructions. The pack's
    skills/ holds the text those instructions are written from, and no profile reads it. A shadow copied from
    v0.1.0's profiles/ keeps its own writing attachment; copy the pack's profiles/ again to shadow it.
  • A used composition's params sit under the pack that declares it. classics.<composition>.<param> now reaches
    that composition under any root, a bare .maestro file included, where it used to be ignored. A -c key that
    reaches no composition the concert uses, matched by <pack>.<composition>, is refused as CFG.unreached (exit 2);
    the same key from a file or preset is ignored, its value still schema-checked.
  • A pack is refused when one of its compositions declares another pack's id. A bare file may still re-export one.

Added

  • Typed reply fields. reply: { <name>: <type> } on seat(name, opts) or on a call declares fields of the agent's
    envelope beside its report. The host checks each against its type, with the envelope's correction turns, and each
    valid field is an output of its name; the agent writes no file for it. A field holding an artifact, or named after an
    envelope key, an agent port or a declared output, is a build error. The stub harness gives each field the placeholder
    of its type, or the JSON in <field>.json under MAESTRO_STUB_OUTPUTS.
  • relay on a seat call, { <name>: ref }, inlines each value in the task under ## <name>: a string as it is, a
    Markdown output as its text, any other typed value as YAML, a multi-line string as a block. A relay named after an
    attachment or an agent port, or holding any other artifact, is a build error: attach it instead. yamlOf from
    @maestro/host-repo-sdk/yaml renders a value the same way.
  • ls --json gives each instance's typed outputs as .outputs, beside .reports: the reply fields an agent
    returned and a code node's values, without opening the lane. The host also stages an agent's fields in
    staged/outputs.yaml, and the inspector shows a settled agent's one-line summary.
  • Sightings. An agent's report may list sightings, each { path, text, cites }: a defect outside its task's
    scope, kept with the report. A classics lens reports such a defect as a sighting, never a finding.
  • changeset(v, { since }) keeps only the patches after since, an earlier version of the same lane. Such a
    changeset serves apply and attachments inside a concert, not cs show or cs apply.
  • A composition's pack option names the pack whose config keys reach it.
  • classics.build_then_review builds the request, repairs it until the checks pass, reviews it by tiered_review
    and fixes what the review upholds, up to maxFixes rounds, leaving a patch series. It settles rejected, the series
    kept, while the last review upholds a finding:
    maestro perform classics.build_then_review --request "<what to build>" -c classics.build.testFirst=true.
  • classics.review_change reviews a revision range or a change by tiered_review: --request, and exactly one of
    --revs and --change.
  • tiered_review counts the changed lines of the changeset and seats one tier's lenses: lens for small, to 200
    lines, deep-lens for medium, to 800, top-lens for large, to 2000, and top-lens with cross-lens, a second
    model, above. classics.tiered_review.floor sets the lowest tier. Each lens rules on the checklist sections the
    changed paths call for.
  • build, test_first and the tester seat. build delivers a spec with one builder, or, under
    classics.build.testFirst, through test_first: a tester on classics/tester pins a few firm tests at the spec's
    public seam and replies a map (TestMap), each pin with what its test misses, and a builder extends its lane to
    pass them, replying the tests it overrules, with why, in overrules.
  • fix_until_clean, a loop of repair_until_green and tiered_review: while the Tally upholds a finding, a
    builder fixes it in its session and the round runs again, up to maxFixes times. It takes the ports lane,
    session, spec and brief, and the params maxFixes, checks and grounds.
  • The review moves challenge, fix and tally, exported for compositions built on the pack, with the types
    Finding, Upheld, Tally, Brief, TestMap, Overrule, Overrules and Answers. @maestro/classics/code
    exports the code-node functions alone, so a composition re-exports them in one line.
  • repair_until_green takes a fix param: a target.checks name run before each check and recheck, such as a
    formatter, so a miss a script can fix costs no repair round.
  • Classics recipes: fix ladder, lens fusion, ruling vote, audit sweep and plan review, in
    packs/classics/src/recipes.ts to copy from; the pack does not export them.

Changed

  • An agent's task holds what it must read: its text, then each relay, then its attachments, the graph's then the
    profile's, as a one-level tree with each file at the path it mounts and its size. The frame no longer lists the
    attachments, and pretty-prints each JSON schema of its ## Reply section.
  • classics.build_then_repair builds through build, so classics.build.testFirst puts tests first there too.
  • A review that no lens delivered is rejected, in every entry and in panel, with the reason "no lens delivered a
    review".
  • A classics finding must cite a guideline the lens received: a checklist item, an attached doc or one of the
    repo's own standards. A nit cites none, so it is no finding; the skepti...
Read more

v0.2.0-rc.3

v0.2.0-rc.3 Pre-release
Pre-release

Choose a tag to compare

@dvalnn dvalnn released this 13 Nov 15:23
e6a5c2d

The third candidate for v0.2.0. A review now sizes itself: tiered_review seats its lenses and picks its checklist
from the change, and one build block decides whether tests come first. Config reaches a classics composition under
any root, and guidance travels as instructions.

Install or upgrade

curl -fsSL https://raw.githubusercontent.com/dvalnn/maestro/next/install.sh | MAESTRO_VERSION=v0.2.0-rc.3 sh

This is a pre-release on GitHub releases: without the pin the script keeps
installing the newest stable, v0.1.0. Put MAESTRO_CHANNEL=rc before sh instead to follow every candidate. Manual
steps are in INSTALL.md.

Upgrade notes

  • Finish or discard rc.2 classics concerts before upgrading. Node paths and params changed, so an rc.2 concert on
    the classics bundle does not resume or encore on rc.3.
  • Bind the three new lens profiles. classics.build_then_review and fix_until_clean review through
    tiered_review, which seats classics/lens, classics/deep-lens, classics/top-lens or classics/cross-lens by
    the size of the change; each needs a runtime. The starter config in INSTALL.md lists all ten profiles. No skeptic
    runs, and classics.panel.* no longer tunes these two.
  • classics.build_then_review loses --tested and --max-repairs. Set -c classics.build.testFirst=true, or the
    same key in a preset or config, to have a tester write the tests first.
  • classics.fix_until_clean keeps maxFixes, checks and grounds. Its maxRepairs, fix, lenses, skeptics
    and consolidate params are gone; a config key naming one is refused as unclaimed. The gate's repair is tuned under
    classics.repair_until_green.maxRepairs and .fix.
  • Node paths moved. The builder is build/build, the tester build/test_first/tester, spec and brief sit under
    build/, and the review's nodes under tiered_review/ where they sat under panel/. A --node or a script naming
    the old paths must follow.
  • A profile's skills field is refused at resolution. Move the guidance into instructions, which now takes a
    list of files; the frame's ## Disciplines section is gone.
  • A used composition's params sit under the pack that declares it. classics.<composition>.<param> now reaches
    that composition under any root, a bare .maestro file included, so an existing classics.* key applies there too.
    A -c key that reaches no composition of the concert is refused as CFG.unreached, and keys a file or preset sets
    for an unused composition are still schema-checked.
  • A pack is refused when one of its compositions declares another pack's id. A bare file may still re-export one.

Added

  • classics.review_change reviews a revision range or a change by tiered_review: --request, and exactly one of
    --revs and --change.
  • tiered_review counts the changed lines of the changeset and seats one tier's lenses: small to 200 lines, medium
    to 800, large to 2000, xlarge above, where a second model reads alongside. classics.tiered_review.floor sets the
    lowest tier. Each lens gets the checklist sections the changed paths call for.
  • build, a block for compositions: it delivers a spec with one builder, or with tests first under
    classics.build.testFirst.
  • A composition's pack field names the pack whose config keys reach it.

Changed

  • classics.build_then_review and classics.build_then_repair build through build, so one config key decides
    whether tests come first in both.
  • A review that no lens delivered is rejected, with the reason "no lens delivered a review", where it used to pass
    as clean.
  • A profile's instructions takes a list of files, and the classics seats carry their guidance there.

Fixed

  • A config key for a classics composition is no longer ignored under a root from another pack or a bare file.

v0.2.0-rc.2

v0.2.0-rc.2 Pre-release
Pre-release

Choose a tag to compare

@dvalnn dvalnn released this 12 Nov 18:50
4719084

The second candidate for v0.2.0. Seats now see when each skill applies: the frame lists skills as disciplines with a
When and a Read. Attachments mount at the path the task shows, and the panel's review is rendered from the
consolidator's verdict.

Install or upgrade

curl -fsSL https://raw.githubusercontent.com/dvalnn/maestro/next/install.sh | MAESTRO_VERSION=v0.2.0-rc.2 sh

This is a pre-release on GitHub releases: without the pin the script keeps
installing the newest stable, v0.1.0. Put MAESTRO_CHANNEL=rc before sh instead to follow every candidate. Manual
steps are in INSTALL.md.

Upgrade notes

  • Finish or discard rc.1 classics concerts before upgrading. The classics bundle changed, so an rc.1 concert on
    it does not resume on rc.2.
  • Install maestro and the classics pack together. The pack bundle now imports @maestro/host-repo-sdk/yaml, which
    an rc.1 binary does not embed.
  • A file attachment mounts at /in/<name>.<ext>, <ext> its source's extension, where rc.1 mounted it at
    /in/<name>, and its earlier copy at /in/previous/<name>.<ext>; a directory and a source without an extension
    mount as before. A task, hint or check that names /in/<name> for a file must add the extension.
  • The consolidator is a work seat that replies verdict only. It no longer approves or rejects, and writes no
    review.md; panel renders its review output from the verdict, and keeps its outputs' names. A composition that
    read the consolidator's outcome or its review port reads the panel's upheld and review instead. The tally
    move takes no review, and its verdict is the consolidator's value, not a settled list. A shadowed consolidator
    profile drops its approve/reject and review.md lines; a stub gives it verdict.json only.
  • The classics skill writing-for-agents is now writing. A profile loading classics/writing-for-agents is
    refused at resolution; load classics/writing.
  • The frame's ## Skills section is ## Disciplines. Instructions that point a seat at its Skills section point
    at its disciplines; a skill's description gives its When best as a Use when clause.

Added

  • yamlOf from @maestro/host-repo-sdk/yaml renders a typed value as YAML the way a relay inlines it.

Changed

  • The frame lists a profile's skills under ## Disciplines, in place of ## Skills: each one with a When, the
    Use when clause of its description or the whole description, and a Read, its SKILL.md, under a lead telling
    the seat to read a discipline before acting on what its When names.
  • Classics skill descriptions name the task that should fire them, in the seats' own verbs, and a lens is told
    which files count as guidelines, the repo's own standards included.
  • A task's attachment tree shows each file at the path it mounts, as docs.md 19 lines, 556 B, with no type after
    a name that has an extension.
  • The panel's review is rendered from the consolidator's verdict: the upheld findings in the order the fix gets
    them, an unmet criterion among them, then the criteria met.

Fixed

  • A relay and the classics spec render a typed value the same way, a multi-line string as a block.
  • A consolidator that forgot review.md no longer loses its verdict: it writes no file now.
  • The docs say a relayed string is inlined as it is, not as YAML, and the pack page lists a pack's skills/
    directory and copies it in its build example.
  • The classics lens is pointed at its disciplines, and the release smoke composes a file importing
    @maestro/host-repo-sdk/yaml from the binary.

v0.2.0-rc.1

v0.2.0-rc.1 Pre-release
Pre-release

Choose a tag to compare

@dvalnn dvalnn released this 12 Nov 12:22
5573615

The first candidate for v0.2.0. Seats hand structured data on as typed reply fields, profiles load skills, and the
classics pack becomes building blocks, with build_then_review building a request and fixing what its panel upholds.

Install or upgrade

curl -fsSL https://raw.githubusercontent.com/dvalnn/maestro/next/install.sh | MAESTRO_VERSION=v0.2.0-rc.1 sh

This is a pre-release on GitHub releases: without the pin the script keeps
installing the newest stable, v0.1.0. Put MAESTRO_CHANNEL=rc before sh instead to follow every candidate. Manual
steps are in INSTALL.md.

Upgrade notes

  • Install maestro and the classics pack together, and rebuild your own packs. A pack built for v0.1.0 asks for SDK
    ^0.1.0, which this release does not satisfy, so it is refused with a message naming the pack. The install command
    replaces the classics pack; a hand install must extract classics-*.tar.gz again. The pack now ships a skills/
    directory its profiles load.
  • Classics' review contracts are typed reply fields, not JSON files. The lens replies findings, the skeptic
    rulings and the consolidator verdict; findings.json, verdicts.json and verdict.json are gone, and the
    consolidator still writes review.md. Findings is a bare list of Finding { id, where, issue, cites } with no
    clean or blocking: every finding rejects its lens; Verdicts is renamed Rulings; Verdict is
    { criteria, upholds }, each upheld finding named <lens>/<id>, with no approved or blocking. survivorsOf,
    upheld and rulingLine are gone: use heldOf and tallyOf.
  • round is no longer exported, and panel is a subcomposition. Build it with
    use(panel, { change, spec, session?, earlier?, names?, brief? }, { params }), its params lenses, skeptics,
    consolidate, grounds and checks. It ends in a Tally, { lane, session, upheld }, with the consolidator's
    review beside it, and needs a session port when consolidate is false. A lens alone is a lens call, and its
    skeptic is challenge. Its instances now sit under panel/, as in panel/consolidator, so a MAESTRO_STUB_OUTPUTS
    directory keyed by the old ids falls back to placeholders.
  • Rebind the panel's seats as seats.classics/panel/<seat>, not seats.classics/panel_review/<seat>: a seat key
    names the innermost composition holding the seat, now panel. Pre-flight refuses the old key and lists the valid
    ones. The new key also reaches the panel inside build_then_review and fix_until_clean.
  • classics.panel_review ends in the Tally and settles rejected (exit 3) while a finding is upheld, the upheld
    findings its rejection outputs. A script that read its verdict.json reads upheld and review instead.
  • The scout's answer.md output is gone: read its answers reply field, one entry per question, each grounded,
    or unsure with what is missing.
  • The classics profiles/writing/ directory is gone. Its profiles load skills by the skills key instead, so a
    shadow copied from v0.1.0's profiles/ keeps its own writing attachment and loads no skills; copy the pack's
    profiles/ again to shadow it.

Added

  • Typed reply fields. reply: { <name>: <type> } on seat(name, opts) or on a call declares fields of the agent's
    envelope beside its report. The host checks each against its type, with the envelope's correction turns, and each
    valid field is an output of its name; the agent writes no file for it. A field holding an artifact, or named after an
    envelope key, an agent port or a declared output, is a build error.
  • relay on a seat call, { <name>: ref }, inlines each value in the task under ## <name>: a typed value as YAML
    (a string as it is), a Markdown output as its text. Any other artifact is refused at build: attach it instead.
  • The profile skills key, reserved until now, names the skills a seat loads, each a bare name or <pack>/<name>.
    A skill is a directory with a SKILL.md and a description, looked up in .maestro/skills/,
    $XDG_CONFIG_HOME/maestro/skills/ and a pack's skills/, mounted read-only at /skills/<name> and listed by
    description in the frame's ## Skills section. A skill linking a sibling the profile does not attach is refused at
    resolution. A pack bundle ships its skills/ beside its profiles/.
  • Classics skills, adapted under the MIT license: tdd, good-tests, code-smells, codebase-design,
    codebase-deepening, design-it-twice, domain-modeling and writing-for-agents, each attached to the seats that
    use it.
  • Sightings. An agent's report may list sightings, each { path, text, cites }: a defect outside its task's
    scope, kept with the report and shown in maestro ls <concert> --json.
  • classics.build_then_review builds the request, repairs it until the checks pass, reviews it by panel and fixes
    what the panel upholds, up to maxFixes rounds, leaving a patch series. With --tested, a tester pins the request in
    tests first. It settles rejected, the series kept, while the last panel upholds a finding:
    maestro perform classics.build_then_review --request "<what to build>" --tested.
  • The tester seat and test_first. A tester on the new classics/tester profile pins a few firm tests at the
    spec's public seam and replies a map (TestMap), each pin with what its test misses; a builder then extends its
    lane to pass them and replies the tests it overrules, with why, in overrules. Give the profile a runtime in config,
    as profiles.classics/tester.runtime.
  • fix_until_clean, a loop of repair_until_green and panel: while the panel's Tally upholds a finding, a
    builder fixes it in its session and the round runs again, up to maxFixes times. It takes the ports lane,
    session, spec and brief, and forwards maxRepairs, checks, fix and the panel's params.
  • The review moves challenge, fix and tally, exported for compositions built on the pack, with the types
    Finding, Upheld, Tally, Brief, TestMap, Overrule, Overrules and Answers.
  • @maestro/classics/code exports classics' code-node functions, toMarkdown, specOf, briefOf, heldOf,
    tallyOf and resultOf, so a composition re-exports them in one line.
  • repair_until_green takes a fix param: a target.checks name run before each check and recheck, such as a
    formatter, so a miss a script can fix costs no repair round.
  • changeset(v, { since }) keeps only the patches after since, an earlier version of the same lane. Such a
    changeset serves apply and attachments inside a concert, not cs show or cs apply.
  • The stub harness gives each reply field, the placeholder of its type, or the JSON in <field>.json under
    MAESTRO_STUB_OUTPUTS.
  • ls --json gives each instance's typed outputs as .outputs, beside .reports: the reply fields an agent
    returned and a code node's values, without opening the lane. The host also stages an agent's fields in
    staged/outputs.yaml, and the inspector shows a settled agent's one-line summary.
  • Classics recipes: fix ladder, lens fusion, ruling vote, audit sweep and plan review, as test fixtures in
    packs/classics/src/recipes.ts to copy from; the pack does not export them.

Changed

  • An agent's task holds what it must read: its text, then each relay, then its attachments as a one-level tree with
    each file's type and size, the graph's then the profile's. The frame lists the skills in place of the attachments, and
    pretty-prints each JSON schema of its ## Reply section.
  • A classics finding must cite a guideline the lens received, in its cites; the skeptic and the consolidator rule
    one that cites none as not holding, and the consolidator rejects with a one-line reason.
  • A later review round's lenses rule first on each finding the earlier round upheld, given to panel as its
    earlier port, so rounds converge on what was upheld.
  • A classics lens reports a defect outside the change as a sighting, never a finding.
  • The classics skeptic and consolidator load writing-for-agents, so they can judge a finding that cites it.

Fixed

  • A criterion the consolidator rules not met now fails the tally, upheld as consolidator/C<n> for the fix, even
    when no lens raised a finding for it; it used to tally clean.
  • The host refuses a relay named like an attachment, declared twice, or holding a non-Markdown artifact, at build.
  • The classics lens profile no longer invites non-blocking nits, since every finding now rejects its lens.

v0.1.0

Choose a tag to compare

@dvalnn dvalnn released this 09 Nov 10:55
19c8282

The first public release of maestro: coding agents, orchestrated as code. Compose agents, checks and reviews into a
typed graph, have maestro check it and bound its spend before any model call, perform it in isolated lanes, and get back
a changeset you decide whether to apply.

Install

maestro runs on Linux x64 with glibc, and needs bubblewrap, bash, git 2.40 or newer, and a harness: Claude Code 2.1.318
or pi 1.5.0.

curl -fsSL https://raw.githubusercontent.com/dvalnn/maestro/next/install.sh | sh

To pin this release, put MAESTRO_VERSION=v0.1.0 before sh. The script checks every asset against SHA256SUMS,
warns of each missing requirement and harness at another version, and logs what it changes. Full requirements, the
config to write first and manual steps are in INSTALL.md.

What's in it

Compose. A composition is a typed TypeScript function from params to a graph of agents, checks, code nodes, loops,
fan-outs and subcompositions. maestro compose builds and checks it, spending nothing: types, config, profiles and an
upper bound on node instances and agent runs. --plan shows that bound and which profile, harness and model each seat
gets, and --graph prints it as a Mermaid flowchart. A plan past a configured cap is refused.

Perform. maestro perform runs the graph as a concert. Each agent and check works in a lane, a versioned working copy
cut from your repository, inside a bubblewrap sandbox; your checkout is never touched. Every step is recorded, so
resume continues a failed or rejected concert where it stopped and encore runs one again with new params. --detach
starts a concert in the background.

Apply. A concert's way out is its changeset: maestro cs show prints the patches, cs apply lands them on your
checkout, as a commit with --commit, and cs drop resets an applied change you decide against.

Follow. watch shows a concert live, wait blocks until it settles, ls lists concerts or one concert's node
instances, artifact shows what each node left, kill stops one and prune deletes settled ones. Every read command
takes --json, and long output pages on a terminal.

Profiles and config. A seat names a profile: a directory with the runtime (harness, model, thinking), instructions,
attachments, limits and context policy an agent runs with. A profile's harness extras bring the harness's own settings,
hooks, plugins, extensions or model catalogue. Config layers user and workspace files, presets and -c overrides;
maestro config and maestro agent show name the layer behind each value, and agent probe checks a profile against
its harness. --preset stub swaps every agent for one that changes nothing, to rehearse a composition for free.

Harnesses. Claude Code and pi, chosen per profile, so a reviewer from one model family can be challenged by a skeptic
from another.

The classics pack. Ready-made compositions: build_then_repair builds a request test-first and repairs it until your
checks pass, repair_until_green repairs a lane while its checks are red, and panel_review reviews a change through
lenses, a skeptic over each lens's findings and a consolidator.

Skills. A maestro skill, and a maestro-ultracode skill that drives each task through a composition written for
it, installed for Claude Code, Codex and pi.

Assets

Asset Holds
install.sh The install script
maestro-linux-x64.gz The standalone binary, gzipped
classics-0.1.0.tar.gz The classics pack
maestro-skill.tar.gz The skills
maestro-<package>-0.1.0.tgz1 Package tarballs for writing compositions
harnesses The harness versions this release supports
SHA256SUMS Checksums of every asset

Documentation

README for a quick start, the
classics pack, the
CLI beyond maestro <verb> --help, and the
SDK spec for writing compositions.

maestro is MIT-licensed.

  1. ir, sdk, host-repo-sdk and classics. ↩