Install
openclaw skills install astro-daily-transitsCalculates daily planetary transits over a natal chart, detects aspects and house activations, and generates text forecasts plus a detailed 3-column graphica...
openclaw skills install astro-daily-transitsThis skill calculates daily transits over a natal chart and generates an astrological forecast for any target date specified by the user (past, present, or future). It renders a composite 2-column chart showing a combined natal+transit wheel and a wide textual forecast panel.
All planetary positions are computed using the Swiss Ephemeris library (pyswisseph 2.10.3.2), which is based on NASA's JPL DE431 ephemerides. This ensures planetary position accuracy of approximately 0.003° — the same engine used by professional astrologers and astronomy software worldwide. House cusps are calculated using the Placidus system with exact iterative methods (swe.houses_ex()).
| Requirement | Details |
|---|---|
| OS | Windows (x64) |
| Python | 3.14.x |
| Runtime | Microsoft Visual C++ Redistributable 2015–2022 (x64) |
| Pillow | 12.x — pip install pillow |
| Swiss Ephemeris | Bundled as swisseph.cp314-win_amd64.pyd.dat |
daily_transits.py --json → JSON data (natal + transits + aspects + houses) → draw_daily.py → PNG image
↕
daily_transits.py → text forecast output
daily_transits.py is the sole calculation engine powered by Swiss Ephemeris. draw_daily.py renders the chart by calling it via subprocess. This guarantees text and graphical output always match.
The natal chart is the birth snapshot — positions of planets at the moment of birth. This never changes. Computed once from birth date, time, and location.
Transit positions are where the planets are on the user-specified target date (default: today). The user can request a forecast for any date — yesterday, tomorrow, or years in advance.
When a transit planet forms an angle (aspect) with a natal planet, it activates that natal planet's energy. Aspect lines are drawn directly on the wheel:
| Aspect | Symbol | Meaning | Line Style |
|---|---|---|---|
| Conjunction | ☌ | Fusion of energies — powerful, direct impact | Solid |
| Opposition | ☍ | Tension, confrontation, awareness through contrast | Solid |
| Trine | △ | Harmony, flow, luck — energy works naturally | Solid |
| Square | □ | Challenge, friction — crisis that mobilizes | Solid |
| Sextile | ✶ | Opportunity — potential that needs action | Solid |
| Semisextile | ⚺ | Subtle influence, minor adjustments | Solid |
| Semisquare | ∠ | Irritation, minor tension | Solid |
| Quincunx | ⚹ | Adjustment needed, discomfort | Solid |
| Retrograde | ℞ | Transit planet moving backward | Dashed |
Transit planets falling in specific natal houses show which life areas are activated. Each house is displayed with:
| House | Life Area |
|---|---|
| I | Personality, appearance, self |
| II | Money, values, resources |
| III | Communication, siblings, learning |
| IV | Home, family, roots |
| V | Creativity, children, romance |
| VI | Health, work, routine |
| VII | Partnership, marriage |
| VIII | Transformation, shared resources |
| IX | Philosophy, travel, higher education |
| X | Career, reputation, public life |
| XI | Friends, groups, hopes |
| XII | Subconscious, solitude, karma |
An extended forecast summary is generated, including:
When run through OpenClaw, the AI agent can provide an enhanced conclusion via the --conclusion flag.
# Forecast for today
python scripts/daily_transits.py 24.04.1983 07:00 Ижевск --lang ru --name "Алексей"
# Forecast for any specific date (past, present, or future)
python scripts/daily_transits.py 24.04.1983 07:00 Ижевск --target-date 04.06.2026 --lang ru
# English output
python scripts/daily_transits.py 24.04.1983 07:00 Ижевск --lang en
# JSON output (for renderers / AI)
python scripts/daily_transits.py 24.04.1983 07:00 Ижевск --json --target-date 04.06.2026
# Chart for today (Russian)
python scripts/draw_daily.py 24.04.1983 07:00 Ижевск --lang ru --name "Алексей"
# Chart for any specific date
python scripts/draw_daily.py 24.04.1983 07:00 Ижевск --target-date 04.06.2026 --lang ru --name "Алексей"
# With AI-generated conclusion from file
python scripts/draw_daily.py 24.04.1983 07:00 Ижевск --target-date 04.06.2026 --lang ru --name "Алексей" --conclusion conclusion.txt
# English
python scripts/draw_daily.py 24.04.1983 07:00 Ижевск --target-date 04.06.2026 --lang en --name "Alexey"
| Argument | Description |
|---|---|
date | Birth date DD.MM.YYYY |
time | Birth time HH:MM |
city | Birth city |
--target-date | Forecast date DD.MM.YYYY (default: today). Can be any date — past, present, or future. |
--lang | Language: ru or en (default: ru) |
--name | Person's name for display |
--json | Output JSON instead of text |
--conclusion | Path to text file with AI-generated conclusion (for draw_daily.py) |
{
"name": "Алексей",
"birth_date": "24.04.1983",
"birth_time": "07:00",
"birth_city": "Ижевск, Россия",
"target_date": "04.06.2026",
"natal": {
"Sun": {"lon": 33.38, "speed": 0.974, "retro": false},
"Moon": {"lon": 172.92, "speed": 14.116, "retro": false},
...
},
"transits": {
"Sun": {"lon": 103.5, "speed": 0.955, "retro": false},
...
},
"transit_houses": {"Sun": 12, "Moon": 9, ...},
"planet_houses": {"Sun": 12, "Moon": 6, ...},
"houses": [asc_deg, ..., mc_deg],
"asc": 1.83,
"mc": 22.92,
"aspects": [
{"transit": "Sun", "natal": "Venus", "type": "conjunction", "symbol": "☌", "name": "Соединение", "nature": "powerful", "orb": 1.3}
],
"engine": "Swiss Ephemeris v20230604"
}
+------------------+---------------------------------------------+
| | |
| COMBINED | FORECAST PANEL |
| WHEEL | (3600×2880) |
| (2160×2160) | |
| | - Date header + name |
| - Sign sectors | - Key aspects (colored planet names) |
| - House cusps | - Aspect descriptions (word-wrapped) |
| - Natal planets | - House activations (detailed, like natal |
| (pale, inner | chart skill): |
| orbit RP=520) | • House title + description |
| - Transit | • Transit planet (ME ♉ 12°30') in house |
| planets | • Interpretation of transit in house |
| (bright, outer| • Natal planet activation context |
| orbit RP=720) | - AI Conclusion (extended forecast) |
| - Aspect lines | |
| (solid=color, | |
| dashed=retro) | |
| | |
| --- Legends --- | |
| Planet|Element | |
| |Aspect|Retro | |
+------------------+---------------------------------------------+
Two bundled fonts in scripts/:
| Font | Purpose | Extension |
|---|---|---|
seguisym.ttf.dat | Zodiac symbols ♈♉♊... + aspect symbols ☌☍△□... | .dat (ClawHub-compatible) |
segoeuisl.ttf.dat | Cyrillic, latin, digits | .dat (ClawHub-compatible) |
Both are auto-copied to .ttf at runtime for Pillow compatibility. Per-character font selection ensures zodiac and aspect symbols render correctly alongside Cyrillic/Latin text.
| Script | Purpose | Dependencies |
|---|---|---|
scripts/daily_transits.py | Sole calculation engine. Swiss Ephemeris planetary positions, house cusps (Placidus), aspect detection. Text forecast + JSON export. | swisseph, math, json |
scripts/draw_daily.py | Renderer. Calls daily_transits.py --json, draws 5760×2880 chart with combined wheel + forecast panel. | subprocess, json, math, Pillow |
scripts/swisseph.cp314-win_amd64.pyd.dat | Swiss Ephemeris binary (2 MB) — JPL DE431 ephemerides | MSVC++ Redist |
scripts/seguisym.ttf.dat | Zodiac + aspect symbol font (2.4 MB) | — |
scripts/segoeuisl.ttf.dat | Cyrillic/latin font (854 KB) | — |
Step 1: python scripts/daily_transits.py <date> <time> <city> --json --target-date <date>
Step 2: AI analyzes JSON and writes enhanced conclusion to a file
Step 3: python scripts/draw_daily.py <date> <time> <city> --lang ru --name "Name" --conclusion <file>
When --conclusion is provided, the AI-generated text is used verbatim. Otherwise, the script generates a built-in conclusion.
This is an entertainment/educational tool, not a scientific method. Do not make medical or financial decisions based on astrological readings.