astro_action
ChatGPTRun an astrology calculation against a saved profile. Use this for ALL personalized astrology requests once the user has a profile_token (issued by setup_profile). No PII fields — birth data lives in the saved profile, referenced only by the opaque token. Parameters: action: One of: "birth_chart" — full natal chart + interpretation "forecast" — transits to the user's chart (requires forecast_date + days) "relationship" — synastry + composite for the user and a partner (requires partner_token) "relationship_forecast" — transits to the composite chart (requires partner_token + forecast_date + days) profile_token: prof_xxx token from setup_profile (the user's chart). partner_token: prof_xxx token for the second person (relationship*). forecast_date: YYYY-MM-DD (forecast / relationship_forecast). days: 1–365 (forecast / relationship_forecast). Use 1 for today, 7 for week, 30 for month, etc. language: ISO code, default "en". If profile_token is missing or invalid, call setup_profile first.
delete_birth_chart
ChatGPTDelete a saved birth chart by name. Uses the user's email from sign-in automatically.
get_birth_chart
ChatGPTCalculate and ANALYZE a birth chart with interpretation and visual chart images.
get_chart_images
ChatGPT⭐ VISUAL CHART DISPLAY - Use this tool when user wants to SEE, SHOW, VIEW, or DISPLAY a birth chart wheel or aspect grid. ALWAYS USE THIS TOOL for visual/display requests like: - "show [name]'s chart wheel" - "display [name]'s birth chart" - "can I see [name]'s chart" - "view the wheel for [name]" - "show me the aspect grid" Requirements: Person must have saved birth data. Use list_saved_charts to check. NOT for: Calculating new charts (use get_birth_chart) or analysis/interpretation (use get_birth_chart). Returns an interactive visual widget with zoomable chart wheel and aspect grid images.
get_forecast
ChatGPTGet astrological forecast showing planetary transits affecting the person. birth_time_known is optional - auto-inferred from whether hour is provided. Use this when the user asks about TIMING: 'today', 'this week', 'this month', 'next 3 months', 'what's coming up', or any future-oriented question. Parameters: - forecast_date: Start date in YYYY-MM-DD format (use today's date for 'now') - days: Number of days to analyze (1-365). Use 1 for today, 7 for week, 30 for month, etc.
get_memes
ChatGPTGet personalized astrology memes based on birth chart placements. Returns a gallery of memes tailored to the person's unique astrological profile. Great for fun, shareable content based on their Sun sign, aspects, and placements.
get_relationship
ChatGPT🔴 USE THIS for "compare X with Y" - gives SYNASTRY + COMPOSITE chart analysis. This is the CORRECT tool for relationship/compatibility. Returns: - Synastry aspects (how their charts interact) - Composite chart (the relationship as its own entity) 🚫 DO NOT call get_birth_chart twice for comparisons - that's WRONG! ✅ Call get_relationship ONCE with both people's data. ⚠️ PARAMETER FORMAT: All parameters are FLAT (not nested objects). Example: person1_name="Carlo", person1_day=4, person1_month=4, person1_year=1977, ... person2_name="Jiab", person2_day=21, person2_month=6, person2_year=1977, ... 🔴 WORKFLOW for "compare X with Y": 1. If you just calculated X's chart → you have their data in memory, USE IT 2. Call list_birth_charts to check if Y is saved → if yes, use that data 3. Call THIS tool with FLAT params for BOTH people 4. After response, offer to save any unsaved person birth_time_known is optional - auto-inferred from whether hour is provided.
get_relationship_by_names
ChatGPTRelationship compatibility using SAVED charts only. Both people MUST already be saved. 🚫 DO NOT use this if you just calculated someone's chart in this conversation! 🚫 DO NOT use this without checking list_birth_charts first! ✅ USE THIS ONLY when: - You have NOT calculated any charts in this conversation - User mentions two names that are BOTH definitely saved 🔴 IF YOU JUST CALCULATED SOMEONE'S CHART: → Use get_relationship instead (you have their data in memory!) → Call list_birth_charts to get the other person's saved data → Then call get_relationship with BOTH people's full data Example: User says "chart for Carlo" then "compare with Jiab" → You have Carlo's data (just calculated!) → Call list_birth_charts → find Jiab's saved data → Call get_relationship with Carlo + Jiab data (NOT this tool!)
get_relationship_forecast
ChatGPTGet relationship timing forecast with transits to composite chart. Use for relationship timing questions. forecast_date should be YYYY-MM-DD format. days is 1-365. birth_time_known is optional - auto-inferred from whether hour is provided. CRITICAL: This tool only works with EXACTLY 2 people. If user mentions 3+ people: - STOP - do NOT call this tool - do NOT call this tool multiple times for different pairs - do NOT make up or hallucinate forecast data - Ask user which pair to compare and WAIT for their response
get_relationship_forecast_by_names
ChatGPTPREFERRED: Get relationship timing forecast using saved birth data. Just provide the two names. CRITICAL: This tool only works with EXACTLY 2 people. If user mentions 3+ people: - STOP - do NOT call this tool - do NOT call this tool multiple times for different pairs - Instead, respond: "I can only analyze relationships between two people at a time. Which pair would you like me to compare?" - WAIT for the user to choose before calling this tool forecast_date should be YYYY-MM-DD format. days is 1-365. Automatically looks up saved birth charts. If either person is not found, tells you which data is missing.
list_birth_charts
ChatGPTGet user's saved birth charts with FULL birth data (all fields needed for get_relationship). 🔴 CALL THIS when user says "compare with [name]" to get that person's saved data. Returns complete data: name, day, month, year, hour, minute, latitude, longitude, timezone. Use this data directly in get_relationship calls. Example: User says "compare Carlo with Jiab" → You have Carlo's data (just calculated) → Call list_birth_charts → find Jiab with full birth data → Call get_relationship(person1=Carlo data, person2=Jiab data from this result)
manage_profiles
ChatGPTOpen the profile manager — an inline widget showing the user's saved profiles with Edit and Delete buttons. Edit opens the profile setup form pre-filled with the existing data; Delete asks for confirmation, then removes the profile. Call this when the user asks to "manage", "edit", "update", or "delete" a saved profile. No arguments. The widget includes the identity_token needed to authenticate widget→backend calls.
resolve_city
ChatGPTResolve a picked birth place to latitude, longitude and timezone. Call this with the exact place name the user selected from search_cities. Returns the coordinates and timezone the profile form needs to save a chart. Parameters: place: the full place name (e.g. "Kiev, Ukraine").
save_birth_chart
ChatGPTSave birth data for future readings. THIS TOOL IS AVAILABLE - use it! Stores name, birth date/time, and location under the user's account. After saving, the person can be referenced by name in get_relationship_by_names. birth_time_known is optional - if not provided, it's inferred from whether hour is given. 🔴 ALWAYS offer to save after calculating a new chart (get_birth_chart or view_chart_visual). Example: "Would you like me to save Mauro's chart for future readings?" Useful for quick access to readings without re-entering data each time.
search_cities
ChatGPTSuggest cities/towns for the birth-location field of the profile form. Fast typeahead: returns up to 8 place suggestions for a partial name, with NO geocoding. This backs the profile form's location autocomplete so it works on mobile ChatGPT; call resolve_city on the one the user picks. Parameters: term: what the user has typed so far (2+ characters). session: optional Google Places session token from the widget, to group the keystrokes of one search.
search_location
ChatGPTSearch for a city/location and get precise coordinates and timezone. WHEN TO USE THIS TOOL: - Small towns, villages, or neighborhoods you're not 100% confident about - Places outside major world cities - When user specifies a district/area within a city (e.g., "Brooklyn, NY" or "Shibuya, Tokyo") - Any place where you're uncertain about exact coordinates - When precise coordinates matter (they always do for astrology!) For major world capitals (London, Paris, Tokyo, New York) you may use your knowledge, but for anything smaller, USE THIS TOOL to ensure accuracy. Returns cities with latitude, longitude, and timezone needed for birth charts.
setup_profile
ChatGPTOpen an inline form to create or update an astrology profile. Call this tool — DO NOT ask the user for birth details in plain text — when the user wants a personalized reading but has no saved profile yet, OR when they explicitly ask to update / edit / change a saved birth profile. Specifically: - User asks "read my chart" / "do my reading" / "tell me my horoscope" and astrology_menu / list_birth_charts shows zero saved profiles for them → call setup_profile so the inline form opens. - User asks to add a partner / friend / family member and the menu shows the partner is missing → call setup_profile. - User explicitly says "edit my profile" / "update my birth time" → call setup_profile with the relevant profile_token. The form is rendered as a widget — the user enters their name, gender, birth date, birth time (optional), and birth location (city autocomplete). On submit they get a profile_token (prof_xxx) which is used by astro_action for all subsequent astrology requests. Parameters: profile_token: Optional. ONLY pass this when the user has asked to EDIT / UPDATE / CHANGE an existing profile — the form then opens pre-filled with that profile's birth data, and on submit the existing row is UPDATED. DO NOT pass profile_token when the user wants to ADD a NEW profile (themselves, a partner, a friend, "another profile", etc.) — even if a profile_token is already in the conversation context. Passing it accidentally puts the form in Edit mode for the wrong profile. When in doubt, omit it. After submit, ChatGPT receives a follow-up message containing the profile_token; at that point call astrology_menu to show the action picker.
view_chart_visual
ChatGPTGenerate visual birth chart (wheel image + aspect grid) for ONE person. Use when user says "show/see/view chart" with birth data. For text analysis/interpretation, use get_birth_chart instead. 🔴 MANDATORY AFTER THIS TOOL - YOU MUST: 1. End response with: "Would you like me to save [name]'s chart for future readings?" 2. Offer: "I can explain the chart or compare with someone else." 🔴 REMEMBER the birth data for later use in get_relationship.