Features · Agentic interface

Describe your app. Get it running.

Describe your app in plain words. BESSER builds a model you can check, then the Spec-Driven Agent turns it into a running application — generators first, AI only for the gap.

editor.besser-pearl.org
The editor's start dialog: How do you want to build? Model it, or Describe it.
Two ways to build

Same editor, same models — a new way in.

Both lead into the same project, so you can switch at any time: describe the first draft, then fine-tune it on the canvas.

Low-code · visual

Model it

Draw your system precisely — classes, relationships, state machines, screens. BESSER’s generators turn the models into code: same model in, same code out, every run.

Agentic · natural language

Describe it

Say what you want in plain words. An assistant builds the models with you, then the application from them — and you refine both by chatting.

How it works

One sentence in, a running app out — and a model to check in between.

The sentence we typed into Describe it
Create a hotel booking app: hotels have rooms with a type and a nightly price, guests book a room for check-in and check-out dates, and each booking has a status.
1

A model you can check

Instead of going straight from your words to code, the assistant builds a B-UML model — the same class diagrams, state machines and constraints you would draw by hand. That model is where you stay in control: anything it misunderstood is visible on the canvas before a single line of code exists.

  • Fix it by asking (“make status an enumeration”) or by editing the diagram
  • Chat and canvas edit the same model
  • Eight diagram types, from class diagrams to BPMN
HotelBooking · class diagram
The generated class diagram: Hotel, Room, Guest and Booking with typed attributes and associations.
2

Generators first, AI for the gap

When the model is right, ask for the application. Before anything runs, the assistant tells you how it will work: BESSER builds the app with its built-in generators and hands a language model only what they don’t support.

  • The deterministic scaffold is free and reproducible
  • The model spends tokens only where judgement is needed
  • You confirm before the run starts
editor.besser-pearl.org · assistant
The assistant explains it will generate the app with built-in generators and use an LLM only for unsupported requirements, then asks to continue.
3

Tested before it is handed over

During the run the agent starts the server, checks that it answers, creates records and confirms that invalid input is rejected. The run card ends with an honest account of how the app was built — then you download it or push it to GitHub.

  • Verified and unverified checks listed separately
  • File-by-file split: generator, edited, or AI-written
  • Download as a zip or push to a GitHub repository
Spec-Driven Agent · run card
The finished run card: Application ready, 29 files, 3 checks verified, and how this was built.
Spec-Driven Agent

Five phases, all visible in the chat.

The agent drives BESSER’s generators rather than replacing them. Every run shows the same five phases on its run card, with the language model’s tool calls and a live cost meter.

  1. 1 Deterministic

    Select

    Picks the BESSER generator that fits your request — only generators whose models are in your project are offered.

  2. 2 Deterministic

    Generate

    Runs it on your model: database layer, schemas, a REST API for every class. Same model in, same code out.

  3. 3 AI

    Analyse the gap

    Compares that scaffold with what you asked for and turns the difference into a task list.

  4. 4 AI

    Customise

    A language model works through the list with a constrained set of tools, editing the scaffold and adding only what the templates don’t provide.

  5. 5 Checked

    Validate

    Checks syntax, imports and contracts, repairs what fails, and — where it can — boots the app and creates records before reporting success.

You ask the BESSER agent to generate an app; it runs deterministic generators first, from the model, and calls an LLM only if needed, for the gap.

Reliable

You check the model before any code exists. The code that follows from it comes from tested generators, and the agent tests the app before handing it over.

Cheap

Generators cost nothing to run, so the language model only spends tokens on the gap. That is what lets a complete app run on the free hosted model.

Sustainable

Fewer generated tokens means less compute per application — and the model stays the source of truth you maintain and regenerate from.

What you can ask for

From a single model to a whole application.

The assistant picks the cheapest reliable route: a generator when one fits, the Spec-Driven Agent when you need more.

Models from a sentence

Describe your domain and get a B-UML model you can check before any code exists.

  • Class, object, state-machine, agent, user, GUI, quantum-circuit and BPMN diagrams
  • Typed attributes, associations, enumerations and OCL rules
  • Edit by chatting or on the canvas — both change the same model

Code straight from the generators

Ask for a target BESSER already templates and the code comes from the generator itself — no language model involved.

  • An SQL schema for PostgreSQL, a Django project, a FastAPI back-end, …
  • Deterministic: same model, same code — 0 tokens spent
  • Ready to download in seconds

Whole applications

Ask for “the web app” and the Spec-Driven Agent builds it: generators first, AI only for the gap, tested before it is handed over.

  • A running back-end and front-end, e.g. FastAPI + React
  • Features the templates don’t cover — auth, JWT, Docker, migrations, tests
  • Stacks with no BESSER generator — Next.js, Rails, Rust/Axum, Kotlin/Spring

Zero tokens when a generator fits.

Not every request needs a language model. Ask for an SQL schema for PostgreSQL and the assistant runs BESSER’s SQL generator on your model directly — the card reads “Generated deterministically · 0 tokens”, and the code is ready to download.

editor.besser-pearl.org · assistant
The chat: Generate SQL schema for PostgreSQL, answered by a card reading Generated deterministically, sql, 0 tokens, Download.
More capabilities

And everything around the run.

Walkthrough

Describe an app, get it running.

One sentence becomes a hotel booking model, then a running FastAPI and React app — on the free tier. Turn the sound on for the narration.

The agentic interface — 1 min

See what it understood

A missing association, a wrong multiplicity, a status that should be an enumeration — it is all visible on the canvas before any code exists. Fix it by asking (“rename Doctor to Physician”) or by editing the diagram.

  • Chat and canvas edit the same model
  • Switch between Describe it and Model it anytime
Build with AI guide

A run card you can read

The run streams its phase timeline, the language model’s tool calls and a live cost/runtime meter. It ends with how the app was built: which files came from the generator untouched, which were edited, and which were written by the model.

  • Select → Generate → Gap → Customise → Validate
  • Verified and unverified checks listed
  • Closing the tab doesn’t kill the run
About runs

Download or push to GitHub

Download the generated project as a zip or push it to a GitHub repository. A follow-up request shortly after the run (“add a cancellation reason to bookings”) changes that app instead of rebuilding it.

  • Zip download or GitHub push
  • Modify mode for follow-up requests
Using the agent

Free, or bring your own key

Everything runs for free on a hosted model, with no account and no API key. For stronger results, use your own key for Anthropic, OpenAI, Mistral or Nebius. The key stays in your browser tab, and you can cap the spend and duration of every run.

  • Free hosted model by default
  • Anthropic, OpenAI, Mistral, Nebius
  • Per-run spend and time caps
Models & providers

Also a Python library

Drive the same pipeline from code: LLMGenerator implements GeneratorInterface, so you construct and run it like any other BESSER generator — or call the REST endpoint, which streams the run as Server-Sent Events.

  • from besser.spec_driven_agent import LLMGenerator
  • REST API with streaming progress
Python & REST usage
Good to know

What to keep in mind.

  • Not reproducible end to end. The generator part is; the AI part isn’t. Two runs on the same model produce different code, and a larger model gives a fuller result than the free tier.
  • Fixes land in the code, not the model. A regeneration from scratch starts from the model again. Push to GitHub to keep working on the same code.
  • Your data. Your messages and a snapshot of the project are sent to the BESSER service so the assistant can answer; the project itself stays in your browser.