Skip to content

The semantic layer for biology.

Biological data is scattered across dozens of disconnected tables, making research difficult to trust. Requel is an open-source, opinionated framework for AI research agents, built by Rafflesia to make research version-controlled, reviewable, and reproducible.

CLI

Unified biological knowledge

One identity across every source.

Biological data lives in dozens of sources, and each one names the same thing its own way: different ids, different conventions, different coordinates, all describing the same underlying biology. The ontology maps them to a single typed identity, so a fact recorded in one place connects cleanly to every other instead of fragmenting across formats.

  • Every identifier carries a declared namespace, so look-alike ids never match by accident
  • Values that share a name but not a meaning stay distinct until an equivalence is declared
  • Every source is checked against one shared, versioned schema before a join is allowed
structures@rcsb
structure_id1ABCpdb_id
chain_idAauth_asym
residue_number142auth_seq
residues@pdbe
structure_idstr_88213pdbe_uid
chain_idBlabel_asym
residue_number20label_seq

[ Starlark → SQL ]

Starlark modules that render to inspectable SQL.

RQL is hosted in Starlark, so a .rql file is a deterministic program rather than YAML or a bespoke query grammar. Shared modules declare relations, keys, guards, objects, and trusted edges. A callable entrypoint declares params(...) and def query(p), then returns reviewed SQL fragments. requel render lowers those fragments to the configured connector’s SQL dialect while keeping caller values bound.

Starlark
# One row per detected pocket.
pocket_features = relation(
backing = "pocket_features",
key = ["structure_id", "pocket_id"],
doc = "Measured features for one detected pocket.",
)

A reusable module declares the physical source, key, and grain once. Entrypoints load the exported relation by path.

[ Benchmark ]

The same models, far better with the ontology.

Point a frontier model at raw biological tables and it guesses at joins and identifiers. Give it the typed ontology and the same model answers correctly far more often, because the meaning it needs is declared instead of inferred. The lift holds across models.

Answer accuracy on biology queries · higher is better