Changelog
What has actually shipped
Read straight from the product's own changelog, not retyped for the website. Each entry says what changed and why it needed changing — most of them are defects found by using AWO rather than features planned in advance.
Showing the 40 most recent entries.
Accounts are complete, and licences are ask-and-decide.
The account page (awo.so/dashboard/) holds your licences, email, password change and sign-out; "Request a Pro licence" files a request a person accepts or denies on the Insights access panel — accepting mints the key straight onto the account, denying says so plainly and lets them ask again. Nothing on the site self-serves a key. Utility pages drop the marketing scale: tighter rhythm, working-screen headings, one primary per screen.
A widget's feeder is a door.
A widget waiting on a running watcher has named it since the boards learned honesty; the name now opens that workflow on the canvas — from the Dashboards screen and the docked board alike. "Which workflow fills this?" is answered by standing in it.
A fan-out's other failures are readable.
A loop's dozen records collapse to one row with "×12 · 3 failed" — and only the first failure's sentence was ever shown; items 3, 7 and 9 can fail three different ways. The row now folds the rest behind "The other 2 failures", each with its item number and its own plain sentence.
Warnings appear in the verdict.
A `warning` means "it will run and surprise you" — and it rendered only inside the panel of whichever step happened to be selected, invisible on every other step. The verdict now lists warnings, each naming its step; the name selects the step.
A Wait step, for real.
The engine gains a `delay` node — "Wait a while" in the palette's Work-it-out stage — that pauses the run up to an hour before the next step goes: settling time after an action, courtesy before hitting an API again, a gap between two deliveries. The wait is honest both ways: the next step genuinely does not run until it has passed, and Cancel cuts it short instead of waiting out the timer. Its card says "wait 2 minutes", its run row says "Waited 120 seconds", and its panel draws the line the engine draws — waiting for _events_ is the input's Collect-a-batch setting, and "check again tomorrow" is the schedule, both of which survive a restart where a run does not.
The palette can be searched.
A finder above the list narrows both modes to what matches — label, raw kind, or help text, so "shell" finds Run a command and "batch" finds the collect button. Advanced was eleven kinds plus seventeen dev blocks in one scrolling column; finding "the git one" meant reading it. A search that matches nothing says so and offers Clear.
A minimap, once the graph earns it.
Past eight steps a branched layout leaves the viewport at the sizes cards are drawn; a pannable minimap now sits in the canvas corner from the ninth step on. Small graphs keep their clean corner.
The canvas says it will take the drag.
Dragging a step from the palette showed nothing until the drop worked or didn't; the canvas now wears a dashed Signal outline while a palette drag is over it.
Disconnect, on the connection's own panel.
Clicking a line opens the panel with every setting for it — and deletion lived only on the keyboard and in the other end's wiring disclosure. The panel now carries Disconnect, with the sentence saying what stops happening.
Tidy up.
Cards are laid out in reading order once, when a document loads; after hand-dragging, the only way back to that layout was reloading the document. A button beside Select all re-lays the canvas out.
The "+" next-step menu works in Advanced too.
The fastest add path was Simple-only, as though the mode toggle were allowed to take affordances away; Advanced now gets every kind under its raw schema name.
The Runs list is a triage surface now.
It was a wall of identical rows — the night one installation logged 200 runs with 199 failures, learning that meant opening rows one at a time. The list now leads with the tally as filters (All / Failed / Succeeded, each with its count), narrows to one workflow when several have run, shows every run's duration on its closed row and each step's own time inside, and keeps itself fresh while open instead of photographing the moment it was opened. A run of a workflow AWO still holds ends with "Open it on the canvas".
A run row's step name is the way to the step.
The panel named the failing step and offered no way to it — the reader had the answer on screen and still had to find the card by name. The step's name in a run row now selects that card on the canvas, panel open, Fix button where it should be. A record from inside a loop (`each#3`) leads to the step, not the iteration.
The download door is live.
Anybody can create a free account (awo.so/accounts/signup/) and press "Request download access"; a staff member grants each request by hand from the new Insights access panel, which also issues Pro licence keys straight onto an account's dashboard. Access follows the account — granted and revoked in one place, effective on the next click. Site CTAs now read "Get AWO".
Widgets, round two.
Markdown renders as markdown (headings, emphasis, links, lists — built as elements, never HTML, so model text can't become markup). A feed accumulates its deliveries — each finding once, newest first, stamped with when it arrived — instead of showing only the last run. Numbers carry a faint sparkline of their own history.
Production footing.
The licence names the product's current name; `THIRD-PARTY-NOTICES.md` records every bundled package and ships in the download; the site gains branded 404/500 pages and a modest HSTS header.
Widgets got smarter, and a new one.
A chart handed a plain number plots its history itself — the model returns one honest reading per run, the board remembers. A number without a delta gets one computed against the delivery before. A status shows its last twenty verdicts as a strip. New **gauge** widget: a metric against a scale you set, with a target tick. Readings older than an hour say so.
The workflow and its dashboard, side by side.
"Watch it beside the canvas" on the Send output panel and "Watch <board> beside the workflow" on a delivered run put the board in the workspace next to the canvas — editable workflow left, live board right. The dock's header opens a separate window for a second monitor.
A receipt when an endpoint hears anything.
Every input receipt — including events a batch is still holding — shows as a corner chip: "my-workflow heard an event on trigger — collecting for the batch". A webhook you are testing acknowledges on arrival, not when the window closes.
"Collect a batch first" in the palette.
Grouping lives on the input; the palette entry switches it to collect-then-run (~20 events or 10 minutes), opens it for tuning, and the input's card says what it now does. Chat inputs (Discord, Telegram) can batch from the panel — the engine always could.
Where each piece lands, customisable without a wiring table.
Under the board picker, a row per piece shows its destination — "Its own widget — automatic" — and any row can point at a specific widget or come off the board. Exceptions ride as `dashboard: { board, route }`; everything untouched stays automatic.
Wiring a workflow to a dashboard is one choice.
"Show it on a dashboard" is a picker — a board, or a new one named after the workflow — instead of a piece-by-widget wiring table. The alert takes `dashboard: <board>`: every typed piece goes to that board's widget of its kind, widgets made on the first run. Hand-wiring stays behind "Choose the widgets one by one".
Dashboards read like instruments.
Charts fill their widget instead of a 72px strip over white; numbers at instrument scale; statuses as filled plates; feed rows ruled; widget titles in the printed-label register with chrome (gear, ×, address, age) hidden until hover. The board sits on the graph paper, its name in the display face. An empty board names the fast path: point Send output here and Test run makes the widgets.
Test run configures the workflow instead of asking you to.
Every fixable problem is applied before the run — the AI step switched to the route's pieces, the alert pointed at them, the data added to the prompt — and widgets a route names that don't exist yet are made. Only a problem with no fix stops the run.
A dashboard workflow that can't deliver is refused before the model runs, and fixed in three presses.
Test run now refuses a document with errors and opens the first broken step; Fix buttons switch the AI step to the route's pieces, point the alert at them, and add the incoming data — each press re-checks and opens the next problem.
Dashboards is a screen, not a dialog.
Your dashboards down the left, the one you're reading filling the window; "open four side by side" in a 1100px modal is gone. Freshness counts routed deliveries (it said "Waiting for its first run" over live data), and a run's preview says where each piece went.
The website is one stylesheet again.
Three stacked themes (datasheet, "warmth pass", dark glass) became 1,615 lines on the Studio's own tokens, replacing 2,722. Cards, pills, glows and scroll reveals are gone; sections are rules and spacing. Home lost its duplicate "why not a list" section.
Saved workflows reopen as you left them, and saving asks for a name.
Card positions were derived from the YAML, so every reload re-laid the canvas out. Projects now keep a `layout` beside the source. "+ Save as a workflow" offers the draft's name instead of saving "untitled"; many open tabs scroll instead of pushing the strip's controls off-screen.
"+" beside a selected step adds what comes next, already wired.
Connecting steps meant finding React Flow's 6px dots or the inspector's pickers. The dots are now grabbable ink-ringed handles, and a selected card offers a + listing the five Simple steps with their taglines.
Your workflows, first, on the Start a workflow screen.
Reopening an old workflow required knowing which of four doors held it — the Watching list's "Open on canvas", the gallery's "Your templates", a project tab, or a file. Now everything AWO is holding leads the gallery: every workflow, with a "watching" or "stopped" chip and its one-line summary, one click from the canvas. The describe box filters these like every other shelf.
The gallery's describe box now finds things.
Typing into "Describe it and let AI draft the workflow" used to leave all fifty cards unmoved — somebody typing "discord" was looking at an unfiltered wall while "Summarise a Discord channel" sat two cards down. The box now narrows every shelf to what matches as you type (including the collapsed "every other example" list), counts what it found, and keeps Draft as the way out: "Nothing ready-made matches — press Draft and the AI builds exactly what you typed."
The website keeps the people it convinces.
While AWO is in private testing, "Download free" led to a page saying there was nothing to sign up for — a dead end for every visitor the homepage had just won over. The call to action now says what is true (**Get early access**), the download page takes an email and promises exactly one message — the day the download opens — and the moment downloads are switched on, every button on the site reverts to "Download free" by itself. The hero's example workflow also now speaks the product's own language: the Studio's mono step tags instead of emoji.
A Fix button on the errors that state their own fix.
The checks that say things like "compare `{{ read.output.blocks }}` with is-not-empty" now carry that sentence as an edit: the issue shows **Fix it — Check the pieces instead**, one press applies it to the step, and the problem clears. Covered so far: reads of fields a typed-pieces step can never produce (the condition case rewrites both the value and the comparison), reads off a plain-text step, and trigger fields the input's type never delivers. And a refusal that used to end with "press Check for problems" now presses it for you — the check runs, the first broken step's panel opens, and the Fix button is right there.
An Explain button on the workflow summary.
The one-sentence summary was the anchor; this is the walk-through. Press Explain and your own model tells you what the workflow does in plain words — what starts it, what each step contributes under its own name, where the result lands, and what a quiet day looks like. The model is briefed first with a fixed glossary of what every block, trigger and delivery actually does in the engine, so the explanation rests on ground truth rather than on guesses from field names.
An input named "trigger" can be deleted like any other.
Deleting guarded by the id string, while the panel's button guarded by input count — so with two inputs, one of them named `trigger`, the panel offered Delete and the press silently did nothing. The guard is the panel's rule now: the last input is protected, anything else goes.
A group run's ticks are for that run.
The workflow picker kept its checkboxes after "Run as a group", so the menu reopened with stale ticks silently deciding what the next group run would do. The selection now resets when the run starts.
One onboarding layer at a time.
On a fresh install the welcome tour rendered on top of the getting-started card, which itself stands over the starter steps — three stacked introductions before a single click. The card now steps aside while the tour is open and returns when it closes.
Test run says what it is doing before the run starts.
Pressing Test run first repairs what it can — widgets made, fixes applied, up to four validation rounds — several seconds of network whose only feedback was a disabled button. The run bar now says "Checking the workflow first…" for exactly that stretch.
Resizing a widget is visible now.
The dashboard grid has supported dragging and resizing all along, but the grid library's own stylesheet — the one that draws the corner grip and the drop placeholder — was never imported, so the handles rendered as invisible empty spans and a drag showed no preview of where the widget would land. The sheet ships with the bundle now, and the placeholder wears Signal orange rather than the library's red, which in this palette means something failed.
A dashboard that no longer exists can't crash the Studio.
A deleted board remembered by a docked pane or a detached window's address was fetched, and the server's `{ error }` reply was read as if it were the dashboard — so the pane crashed the whole app reaching for a name that wasn't there. The reply's status is checked now: the pane shows the server's own sentence ("No dashboard by that name.") where the board would be.
Every one of those is in the current build
Free tier, no account, nothing sent anywhere.