Field generates, arranges, mixes, and plays music from the terminal. A song is a folder of YAML and audio files tracked in Git; field build renders it, and field play plays it live while you edit.
macOS and Linux. Windows coming soon.
$ field generate the-low/drums --seed 7 --variants 2
generated 2 variants (ace-step, seeds 7–8)
$ field build the-low
built //songs/the-low/track:main → .field/out/…
$ field play the-low --loop --watch
live //songs/the-low/track:main
# from a second terminal, while it plays
$ field choose the-low/drums --variant 2
moved drums → variant 2
$ git commit -am "drums: take 2"
$ ▍
Real commands, HOWLO's songs. Output abridged.
One change
Saved DAW sessions are hard to compare. Open yesterday's version and today's and there is no way to see what moved between them short of clicking through every channel. In Field the session is text, so the change is a diff — and the build reads the same files to decide what to re-render.
@@ inserts @@
- effect: eq
bands:
- type: highshelf
frequency: 8000
gain_db: 1.5
- effect: reverb
- mix: 0.2
+ mix: 0.35
decay: 2.4
The lead vocal runs an EQ into a reverb. Raising the reverb's mix is one line in the track file.
$ field build the-low
cached //songs/the-low/track:drums
cached //songs/the-low/track:bass
cached //songs/the-low/track:keys
built //songs/the-low/track:lead-vocal
built //songs/the-low/track:main → .field/out/…
$ field play the-low --from 42.1.1
# not it — put the old room back
$ git checkout -- songs/the-low/tracks/lead-vocal.yaml
The build re-renders the vocal stem and the sum. The drums, bass, and keys are cache hits. Reverting is a Git checkout.
▶ A recording of this walkthrough — the part, the edit, the result, the revert — is on its way. Until then the commands above are the demo.
How it works
field play streetlights --loop --watch loops the song through Field's native audio daemon and follows the project directory. Save a track file and the change lands mid-play. An edit that doesn't move the output — a comment, a reformat — makes no sound at all, because the watcher compares output hashes rather than guessing what an edit meant.
A file that fails field check prints its diagnostics and the last good version keeps looping; a half-saved file is the normal case, not an error. field choose from another terminal swaps a generated take inside the loop, so auditioning variants is listening to the song with each one in place.
$ field play streetlights --loop --watch
live //songs/streetlights/track:main
9.3.1 (0:21.4)
# saved tracks/main.yaml: pad -6 → -8 dB
edit //songs/streetlights/track:main (sum)
# saved a comment in tracks/keys.yaml
· no audible change
# field choose streetlights/lead-take --variant 3
edit lead-take → variant 3
field build the-low
Every stem, send, and mix is a target keyed on the content hashes of its inputs. A fader move re-runs one sum; a comment edit rebuilds nothing. Seeded SuperCollider recipes render bit-for-bit under the same SuperCollider version. Model generation does not reproduce across GPUs, so Field records the model, seed, and hash of every take instead of pretending it does.
field generate the-low/keys --variants 3
A generated part is a request in a track file — a SuperCollider program and seed, or a prompt for ACE-Step music or Chatterbox voice. generate fills it with numbered takes; choose repoints which one plays, in one line, and keeps the others.
field insert add the-low/lead-vocal
EQ, a limiter, and three reverbs are built in and render deterministically. AU and VST3 plugins render offline and run live as inserts on any track, the master chain included; field check pins the exact plugin and its state.
Agents
A Field project is YAML files and a CLI with text output, which is what coding agents already know how to use. An agent can read a track file, edit it, run field check and field build, and see in the output exactly what its edit re-rendered. Nothing about that is agent-specific — the same files and commands you use are the ones it uses.
Ask it for three vocal chains — the low-pass into the plate, a bright shelf into the hall, one dry with just the limiter — and it writes each to a branch and builds it. You play them, switch between the branches, keep the one you like, and delete the rest. Everything it tried is a commit you can read.
An MCP server exposing the CLI's verbs is planned. Today the agent runs the commands directly.
$ git branch
vocal/dry-limit
vocal/lowpass-plate
* vocal/shelf-hall
$ git diff main -- songs/the-low/tracks/lead-vocal.yaml
- - effect: reverb
- mix: 0.3
+ - effect: hall
+ mix: 0.35
+ size: 0.6
$ field play the-low --from 42.1.1
$ git checkout vocal/lowpass-plate
Status
Field is a full production system in the terminal: write and generate parts, record, arrange, mix through built-in effects and your own plugins, play it live, and export. The interface and the hosting come next.
In the CLI
Coming soon
one, a native control surface on the same engine — transport, meters, take audition, nothing in it that isn't in the filesaudiofield.io, hosting for Field projects: clone howlo/chemicals, fork it, and pull-request a mix, with large audio in object storage and history in Git. Free for public projects.