Skip to content

Menu

The grounding contract

Nothing here is invented.

An AI that recommends places is only worth trusting if it can prove where each one came from. Hearth can. Every place traces to a Qloo entity — and the ones that don't are removed before you see them.

Grounded by construction
  1. 01 · Ask

    Your anchors become queries

    Your picks are resolved to Qloo entity ids. The API is asked, in Qloo's own vocabulary, for places adjacent to those ids in the destination city.

    • No free-text prompt is ever sent to a model with the power to invent places.
    • Insight, cross-domain and neighbourhood calls are budgeted and tallied.
  2. 02 · Collect

    Only Qloo answers are collected

    Every candidate carries the entity id it came from. Anything Qloo didn't return simply isn't in the pool.

    • Live, cached and demo results are labelled the same way, everywhere, always.
    • A failed call reduces the count — it never invents a filler.
  3. 03 · Compose

    Narrative is optional and sandboxed

    If a language model is configured, it may only write the week themes and blurbs — and only over the list of real places already collected.

    • Its output is validated against a strict schema.
    • If any id it mentions isn't in the grounded set, the whole composition is thrown away.
    • Untrusted data is wrapped and marked as data, never followed as instructions.
  4. 04 · Verify

    The verifier removes the rest

    Before anything reaches you, every place is checked against the set of entities this run actually retrieved. The count of removed items is shown to you.

    • You can open the agent trace on any result and read every step.
    • If the verifier removed something, we say so — we don't quietly drop it.

What the demo dataset is — and isn't

Until a Qloo key is configured, Hearth runs on a small, recorded dataset with the same shape as a live response. It is clearly badged Demo data on every screen it touches. It exists so you can see the whole experience honestly — not to look like a live call.

Plug in a key and the exact same pipeline runs against the live Taste API: the badges change to Live Qloo or Cached Qloo data, and nothing else does.