[ Ontology ]

[ Ontology ]

The Brain Behind Ana

The Brain Behind Ana

Ana's unified, living memory — improving with every change your team makes, so queries get faster and more accurate over time.

[ One Repo ]

[ One Repo ]

Unified Institutional Knowledge

Unified Institutional Knowledge

One git-backed repo for every definition, metric, script, and document Ana uses to reason about your data.

Accurate
As Accurate as a Hand-Built Semantic Layer
Production-grade accuracy without a six-month modeling project.
High Surface Area
Covers Your Structured Enterprise Data
10 schemas or 10,000. Ana reasons across your entire business.
Fast
Every Conversation Makes the Next One Faster
First answer runs a deep search. Every one after takes the shortest path.
[ Two Views ]

[ Two Views ]

Enterprise Knowledge Graph. Files Under the Hood.

Enterprise Knowledge Graph. Files Under the Hood.

TextQL
root
cybersyn all users
cybersyn/
cpi_timeseries.tql
cybersyn/cpi…
weather_index.tql
cybersyn/weather…
people_ops @people-ops
people_ops/
headcount.tql
people_ops/h…
comp_summary.tql
people_ops/c…
salesforce @sales
salesforce/
rep_performance.tql
salesforce/rep…
pipeline_summary.tql
salesforce/pipe…
tickets @finance
tickets/
revenue_by_category…
tickets/rev…
ticket_volume.tql
tickets/vol…
[ TQL ]

[ TQL ]

SQL-Native Semantics for Agentic Analytics

SQL-Native Semantics for Agentic Analytics

.tql is a versioned modeling language built for high locality and AI readability. Compiles to native warehouse SQL. Define metrics, dimensions, and joins in small reviewable files. One source of truth for your team and Ana.

queries/order.tql TQL
1 -- Composed view: Order
2 -- Description: Detailed order info — payment, delivery, customer, dates.
3 -- Fact: Order [order_object]
4 -- Dimension: Point Of Contact [point_of_contact]
5 -- Dimension: Order Rank [order_rank]
6
7 import obj_order from "../objects/order.tql"
8 import obj_point_of_contact from "../objects/point_of_contact.tql"
9 import obj_order_rank from "../objects/order_rank.tql"
10
11 params {
12 metrics: Set<obj_order.metric_keys> = []
13 dimensions: Set<obj_order.dimension_keys ++ obj_point_of_contact.dimension_keys ++ obj_order_rank.dimension_keys> = []
14 filters: List<FilterInput> = []
15 }
16
17 let
18 order_object = sql"order_object"
19 point_of_contact = sql"point_of_contact"
20 order_rank = sql"order_rank"
21
22 metric_frags = obj_order.metrics order_object metrics
23 dim_entries = filter (\d -> contains dimensions d.key) (
24 dedupeByKey (
25 obj_order.dimensions order_object ++
26 obj_point_of_contact.dimensions point_of_contact ++
27 obj_order_rank.dimensions order_rank
28 )
29 )
30 filter_keys = map (\f -> f.key) filters
31
32 needs_order_rank = obj_order_rank.needs dimensions filter_keys
33 needs_point_of_contact = obj_point_of_contact.needs dimensions filter_keys
34 join_order_rank = obj_order_rank.join_if needs_order_rank order_rank order_object sql"order_id" sql"rank_order_id"
35 join_point_of_contact = obj_point_of_contact.join_if needs_point_of_contact point_of_contact order_object sql"order_poc_id" sql"poc_id"
36
37 select_dims = concatSep ", " (map (\d -> d.expr) dim_entries)
38 select_metrics = concatSep ", " metric_frags
39 select_expr = if isEmpty select_dims && isEmpty select_metrics then sql"*"
40 else if isEmpty select_dims then select_metrics
41 else if isEmpty select_metrics then select_dims
42 else sql"${select_dims}, ${select_metrics}"
43 group_clause = wrap "GROUP BY " "" select_dims
44 where_clause = wrap "WHERE " "" (filterWhere filterables filters)
45 in sql''
46 SELECT ${select_expr}
47 FROM ${obj_order.source order_object}
48 ${join_point_of_contact}
49 ${join_order_rank}
50 ${where_clause}
51 ${group_clause}
52 ''
[ A Living History ]

[ A Living History ]

Ana Proposes. You Approve

Ana Proposes. You Approve

Ana proposes changes when something useful is learned. You review and approve. Every change is versioned, so you can trace why Ana's behavior shifted.

Ana
2 steps - Check current definition, propose update...
Refine revenue definition · finance ontology 2 files +5 -1
Updates revenue to subtract returns. Three analyses this week ran into this gap, so making it explicit in the definition.
revenue.md metrics
+4 -1
README.md metrics
+1 -0
12 ## Revenue
13
14 revenue = gross_bookings
14 revenue = gross_bookings - returns
15 # excludes Q3 returns wave (see retention.md)
Requires review Open in Reviews
[ Any File Type ]

[ Any File Type ]

More Than Just Markdown

More Than Just Markdown

Ana reads markdown definitions, runs your Python, references CSVs and spreadsheets, and pulls brand assets when building a dashboard. Anything Ana can use, you can store.

playbook.md MD
Q
Rev
Cost
Δ
Q1
142
108
+31%
Q2
168
124
+35%
Q3
195
149
+30%
forecast.xlsx XLSX
MRR $4.2M
Churn 2.1%
dashboard.html HTML
brand_chart.png PNG
def revenue():
return q.sum()
# custom metric
metrics.py PY
board.pptx PPTX
[ Secure ]

[ Secure ]

Permissioned in Place

Permissioned in Place

RBAC at every level. If you can't see it, Ana can't either.

JD Logged in as Jamie · @eng-team
shared/ all users loaded
glossary.md metrics.tql
engineering/ @eng-team loaded
oncall.md pipeline.py sla.tql
finance/ @finance-team blocked
m-and-a/ @m&a-team blocked
[ Self-Improving ]

[ Self-Improving ]

Ontology Drives Query Speed Down 7× Over Time

Ontology Drives Query Speed Down 7× Over Time

Ontology (v3) Claude Code + claude.md
Minutes per correct answer · lower is better
2m5m10m15m20m14m2m1× fasterby month 6Day 1(q=0)Week 1(q=1K)Month 1(q=3K)Month 2(q=5K)Month 3(q=7K)Month 6(q=10K)
Query # answered by the org compounds every query
Give Ana Your Whole Org's Brain

Give Ana Your Whole Org's Brain