Powered by Inquirex — open-source Ruby gems

Ask the Right
Questions.
Skip the Rest.

Build branching intake forms that learn from one free-text answer. A deterministic DSL defines what you need. An LLM extracts what it can. The engine only asks what's left.

What Makes It Different

Not another form builder. A rules engine that speaks LLM.

Conversational DSL

Six verbs — ask, say, header, btw, warning, confirm — define a branching flow in pure Ruby. No YAML. No GUI drag-and-drop.

LLM-Powered Extraction

The clarify verb sends one paragraph of free text to Claude or GPT and gets back structured, typed answers. Downstream questions are automatically skipped.

🛠

JSON Wire Format

Every flow serializes to JSON. Rules are AST objects, not lambdas. The frontend evaluates branching locally — zero server round-trips for pure logic.

11 Typed Data Fields

String, text, integer, decimal, currency, boolean, enum, multi_enum, date, email, phone. Each maps to the right widget on every platform — TTY, web, mobile.

📈

Accumulators

Running totals for pricing, complexity scoring, and feature gating. Declare once at the flow level, contribute from any step, read at runtime or post-processing.

🌐

Embed Anywhere

One <script> tag. The JavaScript widget renders in shadow DOM, fetches flow JSON from an API, walks it client-side, and posts answers back.

Three Steps. One Insight.

1

DSL Defines

A Ruby DSL declares every question, data type, transition rule, and widget hint. The definition is frozen and thread-safe.

2

LLM Extracts

The user types one paragraph. The clarify verb sends it to an LLM with a strict schema. Structured data comes back in under 2 seconds.

3

Engine Skips

Engine#prefill! merges extracted answers. Every downstream step with skip_if not_empty auto-advances. The user only answers what's left.

The Full Story

SFRuby, April 2026 — Deterministic DSL meets Probabilistic LLM

inquirex — slides

One DSL. Many Paths.

A simple W-2 filer answers 8 questions. A complex business filer answers 17. Same definition.

tax_intake.rb
Inquirex.define id: "tax-intake" do
  start :describe

  ask :describe do
    type :text
    question "Describe your tax situation."
    transition to: :extracted
  end

  clarify :extracted do           # LLM extracts structured data
    from :describe
    schema filing_status: :enum, dependents: :integer
    transition to: :filing_status
  end

  ask :filing_status do
    type :enum
    question "Filing status?"
    skip_if not_empty(:filing_status)  # auto-skip if LLM filled it
    transition to: :done
  end

  say :done do
    text "Thank you!"
  end
end

Ready to Build Smarter Forms?

The gems are MIT-licensed and free forever. qualified.at is the hosted platform launching Q2 2026.