Repository navigation
Releases
v0.2.0
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 | shTo 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.0asks 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 av0.1.0binary does not embed. The IR is now1.2: this
release reads1.0to1.2, and an older maestro refuses IR this one writes. The install command replaces the
classics pack; a hand install must extractclassics-*.tar.gzagain. - Finish or discard
v0.1.0classics.panel_reviewconcerts before upgrading. A resume runs the recorded graph,
whose code node callssurvivorsOf, which the pack no longer exports. - Give the four new classics profiles a runtime.
classics/tester,classics/deep-lens,classics/top-lensand
classics/cross-lenseach needprofiles.classics/<name>.runtime; the starter config in INSTALL.md lists all ten. panel_review's andbuild_then_repair's agents moved. A seat key names the innermost composition holding the
seat: rebind the review's seats asseats.classics/panel/<seat>, notclassics/panel_review/<seat>, and the builder
asclassics/build/builder(classics/test_first/builderunderclassics.build.testFirst), not
classics/build_then_repair/builder; pre-flight refuses the old keys. The review's nodes sit underpanel/, as in
panel/consolidator, and the builder isbuild/build, so a--node, aMAESTRO_STUB_OUTPUTSdirectory or a script
naming the old ids must follow.- Classics' review contracts are typed reply fields, not files. The lens replies
findings, the skepticrulings
and the consolidatorverdict;findings.json,verdicts.jsonandverdict.jsonare gone, and the consolidator, a
work seat that no longer approves or rejects, writes noreview.md.Findingsis a bare list ofFinding
{ id, where, issue, cites }, with nocleanorblocking: every finding rejects its lens.Verdictsis renamed
Rulings.Verdictis{ criteria, upholds }, each criterion{ id, met, evidence, shownBy }, each upheld finding
named<lens>/<id>, with noapprovedorblocking. A shadowed consolidator profile drops its approve/reject and
review.mdlines. panelis a subcomposition, andround,survivorsOf,upheldandrulingLineare gone. Build it with
use(panel, { change, spec, session?, earlier?, names?, brief? }, { params }), its paramslenses,skeptics,
consolidate,groundsandchecks; it needs asessionwhenconsolidateis false. It ends in aTally,
{ lane, session, upheld }, withdeliveredand thereviewrendered from the verdict beside it. A lens alone is a
lenscall, its skepticchallenge; read held findings withheldOfandtallyOf.classics.panel_reviewends in thatTallyand settlesrejected(exit 3) while a finding is upheld, the upheld
findings its rejection outputs. A script that read itsverdict.jsonreadsupheldandreviewinstead.- The scout's
answer.mdoutput is gone: read itsanswersreply field, one entry per question, eachgrounded,
orunsurewith what ismissing. - 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 thewritingattachment are gone. Each classics seat carries its
guidance ininstructions, which now takes a list of files;builderandtestershareprofiles/testing.md. A
profile'sskillsfield stays refused, now with the fix to move its guidance intoinstructions. The pack's
skills/holds the text those instructions are written from, and no profile reads it. A shadow copied from
v0.1.0'sprofiles/keeps its ownwritingattachment; copy the pack'sprofiles/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.maestrofile included, where it used to be ignored. A-ckey that
reaches no composition the concert uses, matched by<pack>.<composition>, is refused asCFG.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> }onseat(name, opts)or on a call declares fields of the agent's
envelope beside itsreport. 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>.jsonunderMAESTRO_STUB_OUTPUTS. relayon 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.yamlOffrom
@maestro/host-repo-sdk/yamlrenders a value the same way.ls --jsongives 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 aftersince, an earlier version of the same lane. Such a
changeset servesapplyand attachments inside a concert, notcs showorcs apply.- A composition's
packoption names the pack whose config keys reach it. classics.build_then_reviewbuilds the request, repairs it until the checks pass, reviews it bytiered_review
and fixes what the review upholds, up tomaxFixesrounds, leaving a patch series. It settlesrejected, 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_changereviews a revision range or a change bytiered_review:--request, and exactly one of
--revsand--change.tiered_reviewcounts the changed lines of the changeset and seats one tier's lenses:lensfor small, to 200
lines,deep-lensfor medium, to 800,top-lensfor large, to 2000, andtop-lenswithcross-lens, a second
model, above.classics.tiered_review.floorsets the lowest tier. Each lens rules on the checklist sections the
changed paths call for.build,test_firstand thetesterseat.builddelivers a spec with one builder, or, under
classics.build.testFirst, throughtest_first: a tester onclassics/testerpins a few firm tests at the spec's
public seam and replies amap(TestMap), each pin with what its testmisses, and a builder extends its lane to
pass them, replying the tests it overrules, with why, inoverrules.fix_until_clean, a loop ofrepair_until_greenandtiered_review: while theTallyupholds a finding, a
builder fixes it in its session and the round runs again, up tomaxFixestimes. It takes the portslane,
session,specandbrief, and the paramsmaxFixes,checksandgrounds.- The review moves
challenge,fixandtally, exported for compositions built on the pack, with the types
Finding,Upheld,Tally,Brief,TestMap,Overrule,OverrulesandAnswers.@maestro/classics/code
exports the code-node functions alone, so a composition re-exports them in one line. repair_until_greentakes afixparam: atarget.checksname 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.tsto 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## Replysection. classics.build_then_repairbuilds throughbuild, soclassics.build.testFirstputs 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...
v0.2.0-rc.3
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 shThis 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_reviewandfix_until_cleanreview through
tiered_review, which seatsclassics/lens,classics/deep-lens,classics/top-lensorclassics/cross-lensby
the size of the change; each needs aruntime. The starter config in INSTALL.md lists all ten profiles. No skeptic
runs, andclassics.panel.*no longer tunes these two. classics.build_then_reviewloses--testedand--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_cleankeepsmaxFixes,checksandgrounds. ItsmaxRepairs,fix,lenses,skeptics
andconsolidateparams are gone; a config key naming one is refused as unclaimed. The gate's repair is tuned under
classics.repair_until_green.maxRepairsand.fix.- Node paths moved. The builder is
build/build, the testerbuild/test_first/tester,specandbriefsit under
build/, and the review's nodes undertiered_review/where they sat underpanel/. A--nodeor a script naming
the old paths must follow. - A profile's
skillsfield is refused at resolution. Move the guidance intoinstructions, which now takes a
list of files; the frame's## Disciplinessection 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.maestrofile included, so an existingclassics.*key applies there too.
A-ckey that reaches no composition of the concert is refused asCFG.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_changereviews a revision range or a change bytiered_review:--request, and exactly one of
--revsand--change.tiered_reviewcounts 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.floorsets 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
packfield names the pack whose config keys reach it.
Changed
classics.build_then_reviewandclassics.build_then_repairbuild throughbuild, 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
instructionstakes 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
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 shThis 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
verdictonly. It no longer approves or rejects, and writes no
review.md;panelrenders itsreviewoutput from the verdict, and keeps its outputs' names. A composition that
read the consolidator's outcome or itsreviewport reads the panel'supheldandreviewinstead. Thetally
move takes noreview, and itsverdictis the consolidator's value, not a settled list. A shadowed consolidator
profile drops its approve/reject andreview.mdlines; a stub gives itverdict.jsononly. - The classics skill
writing-for-agentsis nowwriting. A profile loadingclassics/writing-for-agentsis
refused at resolution; loadclassics/writing. - The frame's
## Skillssection is## Disciplines. Instructions that point a seat at its Skills section point
at its disciplines; a skill's description gives its When best as aUse whenclause.
Added
yamlOffrom@maestro/host-repo-sdk/yamlrenders 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 whenclause of its description or the whole description, and a Read, itsSKILL.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
reviewis 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.mdno 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/yamlfrom the binary.
v0.2.0-rc.1
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 shThis 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.0asks 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 extractclassics-*.tar.gzagain. The pack now ships askills/
directory its profiles load. - Classics' review contracts are typed reply fields, not JSON files. The lens replies
findings, the skeptic
rulingsand the consolidatorverdict;findings.json,verdicts.jsonandverdict.jsonare gone, and the
consolidator still writesreview.md.Findingsis a bare list ofFinding{ id, where, issue, cites }with no
cleanorblocking: every finding rejects its lens;Verdictsis renamedRulings;Verdictis
{ criteria, upholds }, each upheld finding named<lens>/<id>, with noapprovedorblocking.survivorsOf,
upheldandrulingLineare gone: useheldOfandtallyOf. roundis no longer exported, andpanelis a subcomposition. Build it with
use(panel, { change, spec, session?, earlier?, names?, brief? }, { params }), its paramslenses,skeptics,
consolidate,groundsandchecks. It ends in aTally,{ lane, session, upheld }, with the consolidator's
reviewbeside it, and needs asessionport whenconsolidateis false. A lens alone is alenscall, and its
skeptic ischallenge. Its instances now sit underpanel/, as inpanel/consolidator, so aMAESTRO_STUB_OUTPUTS
directory keyed by the old ids falls back to placeholders.- Rebind the panel's seats as
seats.classics/panel/<seat>, notseats.classics/panel_review/<seat>: a seat key
names the innermost composition holding the seat, nowpanel. Pre-flight refuses the old key and lists the valid
ones. The new key also reaches the panel insidebuild_then_reviewandfix_until_clean. classics.panel_reviewends in theTallyand settlesrejected(exit 3) while a finding is upheld, the upheld
findings its rejection outputs. A script that read itsverdict.jsonreadsupheldandreviewinstead.- The scout's
answer.mdoutput is gone: read itsanswersreply field, one entry per question, eachgrounded,
orunsurewith what ismissing. - The classics
profiles/writing/directory is gone. Its profiles load skills by theskillskey instead, so a
shadow copied fromv0.1.0'sprofiles/keeps its ownwritingattachment and loads no skills; copy the pack's
profiles/again to shadow it.
Added
- Typed reply fields.
reply: { <name>: <type> }onseat(name, opts)or on a call declares fields of the agent's
envelope beside itsreport. 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. relayon 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
skillskey, reserved until now, names the skills a seat loads, each a bare name or<pack>/<name>.
A skill is a directory with aSKILL.mdand adescription, looked up in.maestro/skills/,
$XDG_CONFIG_HOME/maestro/skills/and a pack'sskills/, mounted read-only at/skills/<name>and listed by
description in the frame's## Skillssection. A skill linking a sibling the profile does not attach is refused at
resolution. A pack bundle ships itsskills/beside itsprofiles/. - Classics skills, adapted under the MIT license:
tdd,good-tests,code-smells,codebase-design,
codebase-deepening,design-it-twice,domain-modelingandwriting-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 inmaestro ls <concert> --json. classics.build_then_reviewbuilds the request, repairs it until the checks pass, reviews it by panel and fixes
what the panel upholds, up tomaxFixesrounds, leaving a patch series. With--tested, a tester pins the request in
tests first. It settlesrejected, the series kept, while the last panel upholds a finding:
maestro perform classics.build_then_review --request "<what to build>" --tested.- The
testerseat andtest_first. A tester on the newclassics/testerprofile pins a few firm tests at the
spec's public seam and replies amap(TestMap), each pin with what its testmisses; a builder then extends its
lane to pass them and replies the tests it overrules, with why, inoverrules. Give the profile a runtime in config,
asprofiles.classics/tester.runtime. fix_until_clean, a loop ofrepair_until_greenandpanel: while the panel'sTallyupholds a finding, a
builder fixes it in its session and the round runs again, up tomaxFixestimes. It takes the portslane,
session,specandbrief, and forwardsmaxRepairs,checks,fixand the panel's params.- The review moves
challenge,fixandtally, exported for compositions built on the pack, with the types
Finding,Upheld,Tally,Brief,TestMap,Overrule,OverrulesandAnswers. @maestro/classics/codeexports classics' code-node functions,toMarkdown,specOf,briefOf,heldOf,
tallyOfandresultOf, so a composition re-exports them in one line.repair_until_greentakes afixparam: atarget.checksname 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 aftersince, an earlier version of the same lane. Such a
changeset servesapplyand attachments inside a concert, notcs showorcs apply.- The stub harness gives each reply field, the placeholder of its type, or the JSON in
<field>.jsonunder
MAESTRO_STUB_OUTPUTS. ls --jsongives 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.tsto 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## Replysection. - 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
panelas its
earlierport, 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
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 | shTo 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.
-
ir,sdk,host-repo-sdkandclassics. ↩