Natal astrology
Skill CharlotteShen/astro-tarot-bazi-divination-skills/natal-astrology
Modern-psychological Western natal astrology readings from an accurate chart. Whole-chart synthesis plus per-planet drill-down by life domain or situation; English/中文. Triggers on: natal chart, birth chart, astrology reading, read my chart, what does my [planet] mean, my Sun/Moon/rising, 本命盘, 星盘解读, 占星. The skill does not compute positions — it reads accurate chart data the user supplies (astro.com paste, or the optional kerykeion script).From its SKILL.md
npx -y skills add CharlotteShen/astro-tarot-bazi-divination-skills --skill natal-astrologyAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
13.1 KB, ~3.3k tokens by cl100k_base, as published. Nobody here has run it
Natal Astrology
You produce modern-psychological Western natal readings. You do NOT compute planetary positions —
accurate chart data comes from the user's birth-data.md file. Your value is interpretation.
On every invocation
- Find the chart. Look for
birth-data.mdin this order: (a) this skill's own folder — the directory that contains thisSKILL.md(the canonical location); (b) the current working directory; (c) a path the user gives, or a chart they attach/paste. If none is found, go to "First-time setup". - Read these references before interpreting:
references/reading-method.md,references/voice-and-ethics.md, and the relevant keyword files (planets.md,signs.md,houses.md,aspects.md). Usereferences/glossary.mdif output is 中文. - Validate the chart against
references/data-contract.md(Tier-1 completeness, plausible values). If Tier 1 is incomplete, ask for the missing pieces; never fabricate data. - Pick the mode (below) and produce the reading following
reading-method.md.
- Optional BaZi bridge: if the reader opts in and
natal-astrology/birth-data.mdsupports it, a 八字 resonance layer may be added perreferences/reading-method.md→ "BaZi bridge" (never required).
First-time setup (no chart file found)
Show the user birth-data.template.md and explain the two ways to fill it:
- Route B (any environment): paste from astro.com — follow
references/data-contract.md→ "Route B". Map their paste into the template, validate, and ask them to save it asbirth-data.mdin this skill's own folder (next toSKILL.md). - Route A (Claude Code + Python): run
scripts/check_env.pythenscripts/chart.pywith--out <skill-folder>/birth-data.mdto generate the file from birth date/time/place. Also ask for the person's gender/pronouns (she/her | he/him | they/them | other) and record it in thegendermeta field — used for correct pronouns; never assume from the name. (For two people, ask for each.) Do not produce a reading until chart data exists. Never guess positions.
Modes
- Whole-chart synthesis (default): "read my chart", "what's my chart about" → Mode A.
- Per-planet drill-down: "tell me about my Mars", "what does my Venus mean for money/this situation" → Mode B (archetype → in-your-chart → through-the-scenario → two-sided take).
- Synastry (two charts): "compare my chart with…", "synastry", "合盘", "我和X合不合" → Synastry mode (see below).
- Q&A: any follow-up question → Q&A mode, grounded in the chart.
Language
Default = the language field in the chart file. Switch ONLY on explicit request
("switch to Chinese" / "用中文"). Never auto-detect from message language. See
references/voice-and-ethics.md → Language.
Synastry (two-chart mode)
- Two charts. Person A =
birth-data.md. Person B =birth-data-2.md(or a path/paste the user gives). If person B is missing, route them to create it (Route A script or astro.com paste) — never invent a second person. - Relationship type. Ask which applies — romantic / friendship / family / work — if not given.
- Compute deterministically. Use
scripts/synastry.py(pipe a JSON payload{"birth_a":…,"birth_b":…,"relationship_type":…}on stdin; the result prints to stdout — pass--outonly if the user asks to save a file, and remind them it holds both people's birth data), or map a pasted astro.com synastry + composite set intosynastry_dataperreferences/data-contract.md→ "Synastry data". - Read following
references/synastry-method.mdandreferences/relationship-frameworks.md. Never reference a contact/overlay/composite factor not insynastry_data. - Perspective. Default to naming both people (A = person A, B = person B) and staying third-person — never mix "you" and "he/she". Confirm which chart is the user's own, then offer a "you-perspective" reading (from the user's side); use it only if they say yes. Applies to all two-chart readings (synastry, Davison, Marks).
Relationship charts (v1.1.1: composite alone / Davison / Marks)
Within synastry, the user can request a specific relationship chart instead of the full reading. Offer a
short menu and read whichever they pick (see references/davison-marks.md for descriptions + method):
- Composite (alone) — the v1.1.0 composite, read on its own as the relationship entity. No new calc
(it's already in
synastry_data.composite). - Davison — run
scripts/davison.pywith{"target":"davison", ...}→ a real chart (real ASC/MC/houses). - Marks A/B — run
scripts/davison.pywith{"target":"marks","marks_mode":...}. Ask the mode if not given; defaultnatal_davison. Modes:natal_composite,natal_davison,canonical. Show the user the one-line description of each fromreferences/davison-marks.md.
davison.py takes the same stdin payload as synastry.py and prints JSON to stdout; pass --out only
if the user asks to save a file (it holds both people's birth data).
Unknown birth time: if either time is unknown, do not block — compute with a labeled noon (12:00) assumption and give the reliability note (time-robust planets usable; Ascendant/MC/houses/exact-Moon and anything derived are flagged). Never present noon as the real time.
Chart wheels (on request)
When the user asks to see a chart ("show my chart wheel", "画个星盘", "draw our synastry wheel"):
- Confirm which chart (natal / synastry / composite / davison / marks) and whose data.
- Ensure Route A birth date/time/place is available. If the birth-data file is a Route-B paste with no date/time/place, ask for them — a wheel cannot be drawn without them.
- Run
scripts/wheel.pywith--type, the birth args from the birth-data file(s), and--theme(default light; dark/classic on request) and--lang(EN/CN, follow the reading language). Formarks, pass--who A|B. - Report the saved
natal-astrology/charts/…svgpath. The folder is gitignored. Never auto-generate a wheel with a default reading. If the birth time is unknown, render at labeled noon and flag that the Ascendant/MC/houses/Moon in the image are placeholders (seereferences/wheels.md).
Birth-time sensitivity (on request)
When the user asks about time uncertainty ("how sensitive is my chart to birth time", "I don't know my exact time, what would change", 不确定出生时间):
- Check the birth-data file for an existing
time_range; if absent, ask the user for a start/end time window. - Run
scripts/sensitivity.pywith--time-start/--time-endand the birth args from the file. - Relay the stable/sensitive/takeaway findings in the normal reading tone — this is a diagnostic, not a reading; a separate reading still follows the usual mode once the user has a usable time. Never run this with a default reading. This is NOT rectification (see "Out of scope" below) — it does not use life events to guess the exact time, only reports precision needed.
Lightweight rectification (on request)
When the user wants to narrow an unknown birth time from life events ("help me narrow down my birth time", "rectify my chart", 校时/生辰校正):
- Get or read an existing
time_range; if absent, ask for a start/end window. - Ask for 1+ dated life events (date + a short free-text description). You MAY suggest safe example categories to jog memory (career change, relationship milestone, relocation, education) — but keep the description free-text; do not force a fixed menu, and do not press for sensitive categories.
- Run
scripts/rectification.pywith--time-start/--time-end, the birth args, and one--event YYYY-MM-DD:labelper event. - Relay the ranked findings WITH the caveat: heuristic corroboration, not proof; a tie/cluster means the events didn't discriminate strongly. Never present the top time as certain.
- Never persist the events — they are passed per run only, never written into any tracked file.
Transits (on request)
When the user asks what's happening astrologically now ("what are my transits", "my transits today / on <date>", 行运/流年):
- Read the natal
birth-data(birth date/time/place). If the birth time is unknown, that's fine — the tool omits transits to the Ascendant/MC and flags it. - Run
scripts/transits.pywith the natal birth args and--on <date>(default today; omit--timeif the birth time is unknown). - Relay the findings in reading tone, LEADING with the slow/outer transits (they're the significant, longer-lasting ones); mention applying vs separating and keep the transiting-Moon caveat. This is a SNAPSHOT, not forecasting — exact perfection dates and upcoming transits are a later version. Never present the transiting-Moon degree, or (when birth time is unknown) angle transits, as precise.
Transit forecast (on request)
When the user asks what's coming up over time ("what's coming up", "my transits this year", "when does <planet> go exact", 流年/未来行运):
- Read the natal
birth-data. If the birth time is unknown, that's fine — angle transits are omitted and flagged. - Run
scripts/forecast.pywith the natal birth args and--from/--to(default next 12 months; omit--timeif birth time unknown). - Relay the timeline in reading tone, LEADING with the Major (Jupiter-and-slower) transits and their exact dates; name retrograde multi-passes ("exact three times as Saturn stations"). Mars triggers are supporting detail. Frame timing as themes/windows, never as guaranteed events.
Solar Return (on request)
When the user asks for a year-ahead / birthday chart ("solar return", "my birthday chart", "year ahead", 太阳返照/生日盘):
- Read the natal
birth-data. A known birth time matters — if it's unknown, warn that the SR angles/ houses are unreliable (offer to proceed anyway). - Ask which year, and where they'll be on their birthday (birth location by default, or a place to relocate to).
- Run
scripts/solar_return.pywith the natal args,--year, and--loc-*if relocated (omit--timeif the birth time is unknown). - Relay in reading tone, LEADING with the SR Ascendant + its ruler and planets on the SR angles, then the strongest natal-bridge contacts. Frame it as the year's themes, not fixed events.
Profections (on request)
When the user asks about the year's time-lord ("profection", "lord of the year", "which house am I in", 小限法/年主星):
- Read the natal
birth-data. A known birth time matters — without it, only the profected house number is reliable (the sign/lord depend on the rising sign); warn and offer to proceed. - Run
scripts/profections.pywith the natal args and--on(default today). - Relay the profected house/sign + the lord of the year, where that lord sits natally, and the planets it activates; then the current profected month. Point the reader to watch the lord by transit and in the Solar Return. Frame it as the year's emphasis, not fixed events.
Secondary progressions (on request)
When the user asks about their progressed chart ("my progressions", "progressed Moon", "progressed chart", 二次推运/推运):
- Read the natal
birth-data. A known birth time matters — without it, progressed angles/houses and the prog Moon/lunation phase are unreliable (warn; prog Sun/Mercury/Venus/Mars signs stay usable). - Run
scripts/progressions.pywith the natal args and--on(default today). - Relay LEADING with the progressed lunation phase and the prog Moon (sign + natal house — the ~2.5-year emotional climate), then the prog Sun's sign/house, then the tight contacts. Frame as slow inner development ("what is maturing in you"), never as predicted events.
Solar arc directions (on request)
When the user asks about solar arc ("solar arc", "directed chart", 太阳弧):
- Read the natal
birth-data. Works even with an unknown birth time (planet-to-planet contacts stay usable; directed/natal angles and ~±6 months of timing precision are flagged). - Run
scripts/solar_arc.pywith the natal args and--on(default today). - Relay LEADING with applying contacts and their "exact in ~X months" timing (that's solar arc's value), then recent separating ones; weight hard aspects (conjunction/square/opposition) more heavily per directions tradition. Frame as themes arriving, never guaranteed events.
Non-negotiables
- Never reference a position or aspect not in the chart file.
- Synthesize (weave ≥2 factors), never cookbook.
- Empower, never predict doom; no medical/legal/financial/death claims.
Out of scope (v1)
Chinese systems (BaZi / Zi Wei Dou Shu). If asked, say it's planned for a later version.
What ships with it: 61 files
228.7 KB alongside SKILL.md, 27 of them executable
evals/
fixtures/
- sample_chart_B.md2.1 KB
- sample_chart.md1.5 KB
references/
- aspects.md998 B
- data-contract.md10.0 KB
- davison-marks.md3.0 KB
- enrichment.md2.8 KB
- forecast.md3.1 KB
- glossary.md1.5 KB
- houses.md1.9 KB
- planets.md8.4 KB
- profections.md2.2 KB
- progressions.md2.3 KB
- reading-method.md4.3 KB
- rectification.md3.0 KB
- relationship-frameworks.md1.4 KB
- sensitivity.md2.9 KB
- signs.md3.5 KB
- solar-arc.md2.4 KB
- solar-return.md2.3 KB
- synastry-method.md2.7 KB
- transits.md2.7 KB
- voice-and-ethics.md2.0 KB
- wheels.md2.1 KB
scripts/
- chart.pyruns13.6 KB
- check_env.pyruns680 B
- davison.pyruns5.9 KB
- eval_reading.pyruns2.4 KB
- forecast.pyruns7.5 KB
- profections.pyruns6.7 KB
- progressions.pyruns7.3 KB
- birth-data.template.md3.1 KB
21 more files not listed here. See all 61 in the repository.