$ kremis ingest "alice works-at acme"
$ kremis ingest "acme is-a tech-company"
$ kremis lookup alice works-at
-> acme [grounding: FACT]
$ kremis traverse alice --depth 2
-> alice -> acme -> tech-company [grounding: INFERENCE]
$ kremis lookup alice founded
-> (empty) [grounding: UNKNOWN]
The grounding field is part of every HTTP response too, so if you're
building an agent on top you can decide at the application layer what
to do with INFERENCEs and UNKNOWNs instead of pretending they don't
exist.The part I'm genuinely uncertain about: is structuring data as EAV signals realistic in practice, or is the ingestion friction a hard blocker? That's the honest question I can't answer without more users trying it.