May 5, 2026 · 9 min read
Char Dham, 12 Jyotirlinga, 7 Sapta Puri: religious circuits as data.
Indian pilgrimage isn't ad-hoc. It's a small number of named circuits, each with a canonical list and (often) a canonical sequence — Char Dham (4 sites), 12 Jyotirlinga (12 Shiva sites), Sapta Puri (7 sacred cities). Generic LLMs hallucinate the lists. Treating them as data — rows, sequences, joins — fixes that.
Why this matters for an agent
A pilgrimage user is, by definition, prescriptive. They are not asking for "interesting temples" or "spiritual experiences." They have come with a fixed list — usually given to them by family, a guru, or a local trust — and they want to complete it. Recommending a different temple because it sounds similar is a product failure, not a creative liberty.
We treat these circuits as data, not doctrine. The point isn't to take a position on theology — it's to encode the lists that operators, trains, and pilgrim trusts already use, with the spelling and sequence they actually use, so the agent's output matches the customer's expectation.
Char Dham — two senses
The word means "four abodes" and is used in two distinct senses, which is itself a common LLM failure point.
Original Char Dham (Adi Shankara, all-India)
- Badrinath — Uttarakhand, north
- Dwarka — Gujarat, west
- Puri (Jagannath) — Odisha, east
- Rameswaram — Tamil Nadu, south
Chota (Himalayan) Char Dham
- Yamunotri
- Gangotri
- Kedarnath
- Badrinath
The Himalayan circuit is the one most operators sell as a single multi-week package and the one with a canonical west-to-east route sequence. The all-India version is rarely done as one trip; pilgrims typically tick it off across years. An agent that conflates the two will produce nonsense like "your 7-day Char Dham tour starts in Dwarka and ends in Yamunotri" — geographically incoherent at any sensible duration.
12 Jyotirlinga
The twelve self-manifested Shiva shrines. Spread across nine states from Kashmir to Tamil Nadu. The traditional order is the order given in the Dwadasha Jyotirlinga Stotra — recited geographically around the country. Our table stores the canonical list:
- Somnath — Gujarat
- Mallikarjuna — Andhra Pradesh (Srisailam)
- Mahakaleshwar — Madhya Pradesh (Ujjain)
- Omkareshwar — Madhya Pradesh
- Kedarnath — Uttarakhand
- Bhimashankar — Maharashtra
- Vishwanath — Uttar Pradesh (Varanasi)
- Trimbakeshwar — Maharashtra
- Vaidyanath — Jharkhand (Deoghar; some traditions place it elsewhere — we tag the variant)
- Nageshwar — Gujarat (near Dwarka; another variant in Maharashtra is tagged)
- Rameshwaram — Tamil Nadu
- Grishneshwar — Maharashtra (near Ellora)
Two of the twelve have multi-site claims (Vaidyanath, Nageshwar).
LLMs frequently pick one without indicating that the other exists,
or worse, average them into a single hallucinated location. We
store both with a variant field so the agent can
surface the disagreement honestly rather than pick a side.
Sapta Puri — seven sacred cities
The seven cities considered moksha-granting in the Garuda Purana:
- Ayodhya — Uttar Pradesh
- Mathura — Uttar Pradesh
- Haridwar — Uttarakhand
- Varanasi (Kashi) — Uttar Pradesh
- Kanchipuram — Tamil Nadu
- Ujjain (Avantika) — Madhya Pradesh
- Dwarka — Gujarat
Sapta Puri is the most LLM-hallucinated of the three. The list is less commercially packaged than Char Dham or the Jyotirlingas, so training data is sparser; models reliably substitute Tirupati, Rishikesh, or Pushkar for one of the seven. Treating it as a six-row pinned table with the canonical names solves that in one SQL join.
The data shape
Each circuit is a row in circuits; each member site is
a row in circuit_stops joined to the city table. Per
stop we store:
circuit_slug—char-dham-himalayan,jyotirlinga,sapta-puri, etc.sequence_no— canonical order where one existsname_canonical,name_local,name_devanagarivariant— for the two-claim Jyotirlinga sitescity_idwith full state/district attributionnearest_railway_station- Heritage join where ASI protects the temple complex itself
What an agent does with this
Three things, roughly. (1) When a user mentions "Char Dham," disambiguate
which sense and offer the correct stops; never fall back to the
model's averaged version. (2) When generating an itinerary, sort by
sequence_no and respect the canonical order — pilgrims
notice. (3) When a model wants to cite a name, pull
name_canonical from the row rather than letting the
model spell it; English transliterations vary and the spelling on
the operator's brochure must match the spelling in the agent's reply.
None of this is doctrinal — it is the same pattern as any structured retrieval substrate. The lists are stable, the sequences are stable, the variants are documented. The model's job is to be polite and fluent. The data's job is to be right.
TravelMindsAI ships 15 named tourism circuits, including the major pilgrimage circuits, with canonical sequences and per-row metadata. Free tier 1,000 calls/month. Starter $49/mo, Growth $249/mo.