A Kubernetes operator for your semantic layer. Define a business metric once, and a compiler turns every request into exactly one governed SQL statement, so an agent, a dashboard, and an app all use the same certified definition.
Ask an agent for sales per employee. It joins stores to sales and adds up the headcount.
That counts each store once for every sale it made, so the total is far too high.
Nothing fails. The query runs, the result is formatted neatly, and the number is off by
about ten thousand times. Unless you already knew the right answer, you would ship it.
We tested 30 business questions, each asked three different ways.
Agent writes the SQL69%correct. All 28 misses ran without an error and returned a
confidently wrong number.
Agent picks a certified metric97%correct, and the same question worded three ways gives the
same answer.
The fix is not a better prompt. It is deciding once, in one place, what a metric means, and
then never letting anything compute it another way.
ossiectl, this project’s workstation CLI, reads your catalog and generates an
Apache Ossie model. Tables, columns, and likely joins are
filled in, and descriptions and PII tags can come from DataHub. You certify the metrics
and the access rules.
The operator runs the lifecycle
Apply the model like any Kubernetes resource. It is validated, checked against the live
database, compiled into a versioned artifact, and published. If a referenced table or
column no longer exists, the new version is rejected and the last good one keeps serving.
The server plans and runs queries
One MCP or REST request becomes exactly one SQL statement, with access rules already
applied. Agents connect over MCP and applications over REST. BI tools read governed SQL
views created by the operator. The server is stateless, so it scales horizontally.
Authoring happens once, by a person. Reconciliation and serving run continuously and independently. They coordinate through the Kubernetes API and never call each other, which is why queries keep being answered while the operator is upgrading.
The engine is two pluggable halves chosen by one setting. StarRocks and Trino ship
today, and the planner renders the SQL syntax required by each engine. Glue, Polaris, Hive
Metastore, and Unity work through the engine’s own catalog, and
your definitions stay portable because the model is plain
Apache Ossie.