Visual + NL designer

Designer.
English on one side. Boxes on the other.

A dual-pane editor for Formulas and Views. Type a description and it compiles to a step tree. Drag atoms on the canvas and it writes the description back. Both directions stay in sync. Pick whichever side you find easier.

quadrazene.app/recipes/formulas/new
quadrazene v0.2.1
Quadrazene
ReactorComposeRecipesInboxGovernanceRecords
⌘K
Describe
auto-sync
Pull at-risk projects, then for each one run the slip-prediction model. If P(at-risk) is over 0.7, notify the PM and open a governance audit. Otherwise just tag it.
Edit the prose → the tree recompiles. Edit the tree → the prose rewrites.
Step tree
sequentialps-extract-features
forEachover at-risk rows · cap 50
parallelgbm-regressor · at-risk-classifier
branchif P(at-risk) > 0.7
thenactions-notify-pm → governance-audit
elsetag · watchlist
Atom palette
nl-to-sql
sql-executor
gbm-regressor
chart-selector
mcp-tool-invoke
sap-executor
outbound-email-drafter

Describe (left) ↔ step tree (center) ↔ atom palette (right). Changed subtrees glow for two seconds after a sync.

Control flow without a DSL

Four primitives. Every workflow shape.

No arbitrary expression language to learn, just composable blocks that provably halt every time.

branch

if (condition) then […] else […]. Eight comparison ops on any $.path value.

forEach

Iterate over rows with a hard cap. $.item.* exposed to nested steps. Runaway loops can't burn your wallet.

tryCatch

try […] catch (error) […]. $._error.message in the handler. A failure recovers instead of aborting the run.

subFormula

Call another Formula by name with an input mapping. Compose big workflows from small, named pieces.

No goto. No while. No recursive self-calls. Every Reaction provably halts.

Inside the Designer

Authoring that respects your time.

Bidirectional sync

Visual→NL and NL→Visual, each independently manual or auto (debounced). Whichever side is easier. The other follows.

Schema-aware compile

When compiling prose, the LLM sees the real atom output schemas, so layouts and templates bind to columns that actually exist.

Per-atom input templates

Explicit JSON templates with $.path autocomplete. Question: "$.formulaInput.q", rowCount: "$.priorOutputs.nl-to-sql.rowCount".

Per-step model override

Pin a specific LLM profile to a single step without touching the rest of the Formula.

Streaming describe

The description fills in word-by-word over SSE as the model writes it.

Diff highlight + undo

Changed subtrees glow blue after a sync. One-step undo rolls back the most recent change on either side.

NL Views too

The same dual-pane model authors Views: NL ↔ JSON ↔ live preview, schema-aware when bound to a Skill.

Starter templates

KPI dashboard, driver breakdown, approval card, plain results. Seed the editor with tuned prose.

Local persistence

Pane state and sync-mode preferences survive a page reload, per session.

Build a real Formula in the room.