Real ephemeris astrology and tarot for AI agents. Natal charts, synastry, dated transits, 78-card tarot — structured facts in Turkish and English. The agent writes the reading. No LLM, no API key.




Most AI astrology asks a language model to imagine the sky. Falcı Hatun computes it.
It returns facts, not prose — because the agent calling it is already a language model. The chart, the aspects, the dated transits, the drawn cards and their meanings. The agent writes the reading. That split means this service needs no LLM of its own: no API key, no vendor bill, no rate limit, and an answer that is identical every time you ask.
TOOLS
- natal_chart — Sun, Moon, Ascendant, Midheaven, ten planets with sign, degree, house and retrograde state, twelve house cusps, every major aspect with its orb.
- synastry — real cross-aspects between two charts, scored across four dimensions using classical significators, plus house overlays.
- transits — when transiting planets form exact aspects to a person's natal placements, bisected to the exact moment.
- sky_ahead — real new and full moons, real retrograde stations, real sign ingresses.
- tarot_draw — a full 78-card Rider-Waite deck, upright and reversed, with meanings.
Every sign, planet, aspect and card meaning ships in Turkish and English on the same response.
IT TELLS YOU WHAT IT DOESN'T KNOW
Without a birth time the ascendant, the midheaven and every house placement are meaningless — they rotate a full circle every 24 hours. Falcı Hatun still returns the chart, but states plainly which parts cannot be trusted, and instructs the calling agent not to speak about them. An unrecognised birthplace raises an error and suggests near matches instead of quietly placing you in the middle of the map.
Engine: astronomy-engine (JPL-grade positions) + luxon (IANA timezone rules, so historical DST is handled rather than assumed). House system: Equal — stated in the response, because a chart that hides its house system cannot be verified.
This grew out of Falcı Hatun, a shipped Turkish astrology app. Porting its engine to a callable service surfaced two features that were not doing what they claimed.
Compatibility was a hash of the partner's NAME:
const seed = hash(partner.name + partner.date);
emotional: 40 + (seed % 60), attraction: 40 + ((seed >> 6) % 60)
Change one letter of the name and "emotional compatibility" moved. Neither chart was ever consulted. It now computes actual cross-aspects — Venus to Mars, Moon to Saturn, the whole grid — weighted by classical significators and orb exactness. A test asserts that renaming a person does NOT move the score, and that changing their birth date DOES.
The transit timeline was six hardcoded events at fixed offsets from today, identical for every user. Mercury was not necessarily stationing; the Moon was not necessarily full. Every date is now searched from the ephemeris and bisected to the exact moment. A test checks that consecutive new moons come out one synodic month apart (~29.53 days) — something a hardcoded list could never satisfy.
Also fixed: unknown birthplaces silently fell back to the geographic centre of Turkey, producing confident, wrong charts. Now an error. And the Turkish dotless-i trap — lowercasing "Izmir" in the Turkish locale yields "ızmir", so an English-speaking agent would have missed every Turkish city. Lookups now fold to ASCII.
86 assertions. Deployed on Vercel, registered and listed as OKX.AI ASP #5528 on X Layer.