astron

Personal astrology companion for calculating and interpreting natal charts, with first-use birth-profile onboarding and conversational feedback. Use for personal natal readings or astrology questions involving the user's chart.

Install

openclaw skills install @wauputr4/astron

Astron

Use this skill when requested, not automatically at installation: installation cannot initiate a conversation. On first invocation, check for a private local profile using the host's appropriate user-data location (for example ~/.local/share/astron/profile.json, or macOS ~/Library/Application Support/astron/profile.json). Never put personal data in this skill folder or a shared repository. If the environment has a private user-memory mechanism, it may be used instead; do not assume it exists. Do not access another person's profile. In a group, do not request or reveal birth details; move onboarding to a private conversation.

First-use onboarding

  1. Ask whether the user is new to astrology, their preferred name and language, and their birth date (day, month, year), exact local birth time if known, and birth city/region/country. Ask only for missing information; do not infer birthplace or timezone from the device location. Explain the profile stays locally on this installation, and ask whether they want it saved; no save if declined. Ask once in a natural conversation, not a long form.
  2. Resolve the birthplace's latitude, longitude and historical IANA timezone with an available local gazetteer or a reliable source. Confirm ambiguous locations with the user; before sending birth details to any external geocoding service, ask permission or search for the place alone without the birth date or identity. Allow the user to provide coordinates and timezone. Do not invent values. Detect ambiguous/nonexistent local times (DST) and ask for clarification.
  3. Run scripts/chart.py with JSON on stdin, using a Python environment with pyswisseph. Read the JSON result; never invent positions. If dependency is missing, explain and install in an isolated environment only where appropriate, or ask the user to provide one. Do not silently use synthetic charts. If birth time is unknown, calculate positions at local noon as a provisional snapshot and explicitly omit houses and angles; Moon sign/aspects and other time-sensitive results can vary that day. If location is unavailable, request it rather than assuming UTC.
  4. Give a concise, warm first reading grounded in specific chart placements. Explain terminology in everyday language for beginners; for experienced users, use technical terms at their preferred depth. Frame astrology as symbolic reflection, not scientific personality assessment, diagnosis, or certain prediction. Avoid sensitive deterministic claims.
  5. Offer 2–3 open, non-leading questions about distinct chart-derived hypotheses, explicitly inviting disagreement or nuance. Do not label a response as proof that astrology works. Reflect their answers and adjust future conversational style or interpretation without changing the calculated chart. Ask whether they wish to save their answers, and retain only their agreed concise preferences and feedback with the birth profile. Support correction and deletion on request.
  6. Save only after consent, using a private directory and file permissions (0700/0600 where supported); keep onboarding status and user-approved data separate from calculated chart. Read the saved profile on later use and skip repeated onboarding. Never share it or send it to an external AI/geocoding service without the user's authorization; warn that the current chat provider may process the conversation.

Subsequent readings

Use the saved profile only in the owner's private context. Recalculate if birth details change. Distinguish actual chart data from interpretation and user feedback. Do not infer precise houses from unknown time. For transit and secondary progression requests use the tested local calculator described below; do not fabricate missing events or portray sampled boundaries as exact. Do not claim automated installation onboarding or cross-machine memory.

Sky event calendar

For general sky events, scripts/sky_events.py calculates lunations, exact geocentric tropical moving-body aspects and retrograde/direct stations using Kerykeion 6.0.5. Install kerykeion==6.0.5 in a dedicated local Python 3.12+ virtual environment if missing; do not depend on Hermex or a temporary test environment. Example input on stdin: {"start_utc":"2026-11-01","end_utc":"2026-11-30","timezone":"Asia/Jakarta","points":["Sun","Mercury","Mars","Jupiter","Neptune"],"aspects":["conjunction","trine"],"planets":["Mercury","Venus"]}. Date-only bounds are UTC and the end includes that entire UTC date; convert desired local calendar boundaries to explicit UTC instants and filter final results to the requested local interval. Report UTC and local timezone, event type, settings and calculation source. Missing data or backend errors are errors, not empty calendars. Do not claim eclipse or personal-transit support from this script: use an independently verified calculator for those. General sky events are not automatically natal contacts. Compare event and natal longitudes using a stated aspect and orb before claiming a personal connection; distinguish a coincident snapshot from an exact personal transit. Eclipse occurrence is not local visibility. Interpret as symbolic reflection, never certainty. Only offer optional scheduled reminders; create no schedule without explicit user request and verify its private delivery and timezone.

Symbolic ratings and roadmaps

When the user asks for a monthly roadmap or a 1–5 star assessment, use a previously established, evidence-grounded reading or calculate the relevant chart contacts with a separately verified calculator. A natal chart alone does not establish month-specific transits: if transit evidence is unavailable, say so and do not invent contacts or scores. Identify the actual technique, date range, sampling method and limitations; a mid-month snapshot does not establish exact dates or cover the whole month. Separate past reflection from future planning.

Present each requested month with a short chart-grounded theme, a practical reflective action, and, when requested, a symbolic 1–5 star rating: 1 = heightened caution, 2 = proceed thoughtfully, 3 = mixed or neutral, 4 = supportive, 5 = a symbolically favorable or "golden" period. These are subjective interpretive summaries, not measured probabilities, promises, danger warnings, or facts about personality. Briefly explain how the particular observed contacts support each rating, acknowledge mixed indicators, and do not force a 1 or 5. Invite the user to disagree and relate the reading to their own experience. Adapt vocabulary to the user's astrology knowledge, and avoid deterministic advice on health, money, legal matters, or other consequential decisions.

Calculation

Run python3 scripts/chart.py with stdin JSON such as {"date":"1990-07-15","time":"10:30","timezone":"Europe/Rome","latitude":41.9028,"longitude":12.4964}. For unknown time omit time. Output identifies timezone, effective instant, source flags, zodiac, houses, and aspect orb. Inputs are local civil time with IANA timezone; the script fails on DST ambiguity rather than guessing. Coordinates must be verified, not guessed. Output contains sensitive birth details: avoid logs or shared locations.

Personal calculations and visual export

Use Python 3.12+ and install the pinned dependencies in a private virtual environment: python3 -m venv ~/.local/share/astron/venv then ~/.local/share/astron/venv/bin/python -m pip install -r <skill-directory>/requirements.txt. Do not reuse Hermex or the developer test environment. Run scripts/astron.py with JSON on stdin and the venv interpreter; supply birth as {"date":"1990-07-15","time":"10:30","timezone":"Europe/Rome","latitude":41.9028,"longitude":12.4964}. operation is natal for JSON; optionally add output with a private .json path for natal, transits or progression (refuses overwrite); svg with an explicit private output ending in .svg for a natal chart; transits with timezone-aware start_utc and end_utc for a range of at most 370 days; or progression with target_utc for secondary progression JSON. Explain that saved SVG and JSON may contain sensitive birth details; do not share externally without permission. The SVG command refuses to overwrite existing files. For unknown birth time use chart.py and do not create a false house wheel, progression, or timed transit.

Transit calculations use 2-hour sampling and optional root refinement with the library's default aspects/orbs; sample resolution and range boundaries may miss or clip events. A closest_sample_moment with exact_not_verified is not an exact transit. Do not call an event exact solely because a library field is named exact; inspect min_orb, and describe sampling, assumptions, and warnings. The Kerykeion backend may use lower-precision approximations for optional points; pay attention to stderr and provenance, and do not present those as high-precision data. Progressions and transits are distinct from general sky events. Interpret all symbolically.

Offer periodic reminders only after the user chooses frequency and private destination; use the host scheduler if available and verify access, time zone, delivery and pause/delete controls. No scheduler is installed or created by this skill. Synastry, solar returns, visual transit timelines, PDF exports and journaling are not implemented; do not claim otherwise.