canonic sits between your data stack and your agents: an auto-built, git-versioned description of what your data means and how to query it safely. No guessing. And when it isn't sure, it refuses and asks.
An agent pointed straight at your warehouse sees tables and columns, not meaning. So it guesses, and a confident, well-formatted, wrong number is the worst kind of wrong. Real output from a live run:
"How do I query this safely?" Tables, types, grains, joins, measures: the executable semantic layer.
"What does this mean to the business?" Definitions, caveats, policies: searchable prose a human can trust.
"Which definition is canonical, and what must the answer obey?" Metrics, guardrails, assertions.
A knowledge page explains why "amount includes refunds unless filtered." A contract makes the SQL obey it. Documented caveats become enforced guardrails.
canonic never mutates your warehouse. It reads. There is no write path back.
It never silently edits your context. Every change is a reviewable diff anchored to evidence.
Ambiguous or unsafe? It returns a structured reason, not a guess.
Queries compile deterministically: the same question always produces the same SQL. An LLM only drafts context, never computes an answer.
Run entirely on your machine with a local model and local embeddings. Nothing has to leave your network.
A local event log tracks accuracy, freshness, and answer quality. "Trustworthy" is something you can check.
Point canonic setup at a local SQLite or DuckDB file. It introspects the schema, drafts your semantics, and ends by answering a real question from your data. Then connect Claude, Cursor, or any MCP client, no separate integration to build.