Policy
Who may call an action: the roles you already have, and — over HTTP with OIDC — verified actor attributes: region == actor.region. A denied call is recorded in the audit log and never reaches the warehouse.
Define an object once. Ontologiq compiles it into SQL views, governed MCP tools for AI agents, and an explorable catalog. Actions carry policy, approval and audit — declared in YAML, versioned in Git.
object: customer source: table: customers identity: [customer_id] state: active: last_seen >= now() - 90d churned: last_seen < now() - 90d else: prospect relations: orders: type: has_many target: order
Semantic layers tell you how much. Ontologiq knows who, in what state, and what may be done.
object: order source: table: orders identity: [order_id] state: disputed: dispute_opened_at is not null open: fulfilled_at is null else: fulfilled actions: - name: cancel requires: state == 'open' policy: roles: [support] approval: required effect: type: webhook url: "{{ env.OPS_API }}/orders/{order_id}/cancel"
Who may call an action: the roles you already have, and — over HTTP with OIDC — verified actor attributes: region == actor.region. A denied call is recorded in the audit log and never reaches the warehouse.
Gates that put a human in the loop. The agent proposes; a reviewer signs in the terminal — and the precondition is evaluated again at execution, because approvals age.
Append-only, written before any effect fires: actor, arguments, decision, outcome. A lost effect response is recorded as unknown — never guessed as failed.
Every action compiles into an MCP tool with a typed signature, its
policy attached and its audit row written. The model never sees a
connection string — it sees propose_order_cancel and the
records it may read. It can propose, never approve: no approve
capability exists on any surface the model can reach.
One package, no service to run. Python 3.11+.
ontologiq init scaffolds a working shop. Already on dbt? import dbt scaffolds objects from your models, with identity candidates from your tests.
Views to your warehouse, MCP tools to your agents.
Runs on the warehouse you already have. Nothing leaves your Git repo.