natal-chart
算一个人的本命星盘:星体落点、四轴、宫位、相位、日夜区分与古典阿拉伯点;出生时间不精确就直接拒绝,不拿中午去凑。
- 分组
- 占星
- 版本
- 0.8.4
- 许可证
- AGPL-3.0-or-later
安装
/plugin install astrology@misoto22然后这样调用:
/astrology:natal-chart本命盘需要精确到分钟的出生时间——宫位、上升、天顶和日夜区分全都跟着它走,所以只知道大概几点时这个技能会直接停下来,而不是退回中午十二点凑一张看起来完整的盘。产出包含十三个星体的星座、度数、宫位、逆行状态与古典庙旺,四轴与派生点,盘内相位(每对只记一次),由太阳位置判定的日夜区分,以及随之选择公式的六个古典阿拉伯点。只用古典主星:把天王星配水瓶这类现代配置当作事实陈述,等于替某一家流派下判断。星历数据缺失时默认拒绝运行,除非明确选择内置解析星历,而那次降级会如实记进产物的限制项。
什么时候会触发
CI 实际用来评测这个技能的 prompt——所以它们不会和技能的真实行为脱节。
会触发
- 帮我算本命盘:林青,1999-10-30 下午两点半,上海出生。
- Cast my birth chart. Born 1988-04-11 at 09:15 in Shanghai.
- 我想知道我的上升星座和各行星落在第几宫,出生 1991-11-26 17:40 北京。
- 我大概是 1995 年 6 月 3 号早上七点多在成都出生的,帮我看星盘。
不会触发
- 帮我和我对象合盘看看。
- 解读一下刚才生成的 natal_林青.json。
- 帮我排八字,1999-10-30 14:30 上海。
- 看看今年木星行运对我有什么影响。
Compute one static natal chart, write natal_<name>.json and natal_<name>.md, then hand the verified JSON to natal-reading automatically. The artifacts hold placement data only; never interpret the chart here.
Route before calculating
- Two people being compared belong to
synastry. - An existing natal artifact that needs meaning belongs to
natal-readingwithout recalculating. - Four pillars or twelve palaces belong to the
chinese-metaphysicsplugin. - Transits, progressions, solar and lunar returns, dated events, and forecasts are outside this release; state that rather than improvising them.
Require one resolved birth record
A natal chart needs an exact time. Houses, the four angles, and the sect all move with it, and a chart missing them is not a shorter natal chart — it is a different artifact. Collect without guessing:
name: display identity for the artifact, and nothing else.birth.date: exactYYYY-MM-DD.birth.time: exactHH:MMin 24-hour form, withtime_modeset toexactandtime_accuracy_minutesset to0.birth.timezone: historical IANA zone such asAsia/Shanghai.birth.latitudeandbirth.longitude: decimal degrees for the birthplace.
Resolve a place through an available geocoder or map source. If several places match, stop for a location choice; do not silently take the largest.
If the person only knows the hour, or only the date, say plainly that this skill cannot place houses or angles from it, and stop. Do not fall back to noon, and do not produce a chart with the angles quietly omitted.
Calculation contract
The shared astronomy applies these declared rules:
- Resolve the stated wall time through IANA historical data to one UTC instant.
- Take apparent geocentric positions from Swiss Ephemeris. When its data files are unavailable, the run is refused unless
ephemeris_policyis explicitly set toallow-moshier, and the fallback is then recorded as a limitation in the artifact. - Place houses under the requested system,
whole-signby default. - Derive sign, degree, house, retrograde state and classical dignities per body. Modern rulerships are deliberately absent: assigning Uranus to Aquarius is a live disagreement between traditions, and stating one as fact asserts a school rather than a position.
- Find intra-chart aspects with the declared orbs, each pair recorded once.
- Derive sect from the Sun's house, then the classical lots with the diurnal or nocturnal formula that sect selects.
- Record every unavailable body as a limitation. A chart that is short five asteroids must say so rather than look complete.
Run the calculator
Work from this skill directory. Put the resolved object in a UTF-8 JSON file and run:
python3 scripts/compute_natal.py --request REQUEST.json --out OUTPUT_DIRECTORY
Inline JSON is also accepted with --json. Swiss Ephemeris data files may be supplied with --ephemeris-path.
The runtime requires pyswisseph, declared in requirements.txt. If it reports the dependency missing, surface that exact installation error; do not substitute an approximate position table.
The command prints exactly two absolute paths on success: canonical JSON first, data-only Markdown second. Exit code 2 means no valid pair was created. Never create or repair one artifact manually after a calculation failure.
Validate and hand off
Read the JSON back and verify:
- schema is
astrology.natal-chart, version 1; - checksum matches canonical content;
- twelve house cusps and at least the ascendant and midheaven exist;
- every position carries a sign, a house, a retrograde state and a critical-degree flag;
- each aspect pair appears once, and no body aspects itself;
- sect is stated with its basis;
- lots are either complete or absent, never partial;
- every unavailable body appears in
limitations; - Markdown names the same checksum and contains no interpretation.
After validation, automatically invoke natal-reading with the exact JSON path. Do not wait for a second user request, and do not invoke it when calculation or validation failed.
Privacy and limits
Birth details are sensitive personal data. Write only to the user-selected output directory, do not send them elsewhere, and do not add unrelated identity details. The artifact keeps the resolved instant and the derived chart, not the supplied street address or place label.
This skill computes static natal structure only: no transits, no progressions, no returns, no event timing, no medical or psychological diagnosis, no deterministic claims, and no compatibility verdicts.
See references/request.example.json for the request shape and references/examples.md for boundary and failure cases.