ether-to-astro 1.0.2 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/ISSUE_TEMPLATE/bug-report.yml +87 -0
- package/.github/ISSUE_TEMPLATE/capability-request.yml +117 -0
- package/.github/ISSUE_TEMPLATE/config.yml +5 -0
- package/.github/ISSUE_TEMPLATE/paper-cut.yml +59 -0
- package/.github/pull_request_template.md +1 -0
- package/.github/workflows/release.yml +2 -2
- package/.github/workflows/test.yml +2 -2
- package/AGENTS.md +46 -1
- package/DEVELOPER.md +78 -0
- package/README.md +128 -75
- package/SETUP.md +100 -41
- package/dist/astro-service.d.ts +51 -2
- package/dist/astro-service.js +660 -56
- package/dist/cli.js +31 -0
- package/dist/entrypoint.d.ts +13 -0
- package/dist/entrypoint.js +78 -0
- package/dist/ephemeris.d.ts +15 -0
- package/dist/ephemeris.js +33 -0
- package/dist/formatter.d.ts +5 -1
- package/dist/formatter.js +4 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +63 -114
- package/dist/loader.d.ts +1 -1
- package/dist/loader.js +61 -23
- package/dist/mcp-alias.d.ts +2 -0
- package/dist/mcp-alias.js +8 -0
- package/dist/time-utils.d.ts +8 -0
- package/dist/time-utils.js +16 -0
- package/dist/tool-registry.js +111 -5
- package/dist/tool-result.d.ts +8 -0
- package/dist/tool-result.js +39 -0
- package/dist/types.d.ts +79 -1
- package/docs/product/adrs/0001-mcp-vs-skill-boundary.md +96 -0
- package/docs/product/architecture-boundaries.md +223 -0
- package/docs/product/product-tenets.md +174 -0
- package/docs/releases/1.2.0-draft.md +48 -0
- package/package.json +7 -7
- package/skills/.curated/daily-brief/SKILL.md +75 -0
- package/skills/.curated/electional-overlay/SKILL.md +67 -0
- package/skills/.curated/weekly-overview/SKILL.md +73 -0
- package/skills/.system/write-skill/SKILL.md +90 -0
- package/src/astro-service.ts +861 -60
- package/src/cli.ts +84 -0
- package/src/entrypoint.ts +118 -0
- package/src/ephemeris.ts +44 -0
- package/src/formatter.ts +13 -1
- package/src/index.ts +77 -121
- package/src/loader.ts +69 -25
- package/src/mcp-alias.ts +10 -0
- package/src/time-utils.ts +18 -0
- package/src/tool-registry.ts +129 -9
- package/src/tool-result.ts +44 -0
- package/src/types.ts +91 -1
- package/tests/unit/astro-service.test.ts +751 -5
- package/tests/unit/cli-commands.test.ts +13 -0
- package/tests/unit/entrypoint.test.ts +67 -0
- package/tests/unit/error-mapping.test.ts +20 -0
- package/tests/unit/formatter.test.ts +6 -0
- package/tests/unit/tool-registry.test.ts +114 -2
- package/setup.sh +0 -21
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
# Product Tenets
|
|
2
|
+
|
|
3
|
+
This document defines what `ether-to-astro` is, what it is not, and how we avoid turning the MCP surface into a muddy bundle of personalized workflow logic.
|
|
4
|
+
|
|
5
|
+
## Mission
|
|
6
|
+
|
|
7
|
+
Build a trustworthy astrology computation layer for AI-native workflows.
|
|
8
|
+
|
|
9
|
+
## North-Star
|
|
10
|
+
|
|
11
|
+
`ether-to-astro` should provide reliable astrological facts and structured primitives that agents can use to build high-quality experiences without reimplementing astro math client-side.
|
|
12
|
+
|
|
13
|
+
## Primary Jobs To Be Done
|
|
14
|
+
|
|
15
|
+
- Compute natal, transit, mundane, and electional astrology data accurately.
|
|
16
|
+
- Expose that data through stable MCP and CLI primitives.
|
|
17
|
+
- Make those primitives composable for skills, prompts, and downstream agent workflows.
|
|
18
|
+
- Preserve clear boundaries between computation, interpretation, and personalization.
|
|
19
|
+
|
|
20
|
+
## What We Build
|
|
21
|
+
|
|
22
|
+
- Astrology computation and normalization
|
|
23
|
+
- Reusable primitives for transit and chart workflows
|
|
24
|
+
- Structured outputs that reduce fragile client-side reconstruction
|
|
25
|
+
- Docs and examples that help agents compose the system correctly
|
|
26
|
+
|
|
27
|
+
## What We Do Not Build
|
|
28
|
+
|
|
29
|
+
- A monolithic “do everything” astrology assistant inside MCP
|
|
30
|
+
- User-specific advice engines hardcoded into the core surface
|
|
31
|
+
- Prompt-shaped tools that mostly duplicate what a competent LLM can do from stable primitives
|
|
32
|
+
- Endless one-off reporting endpoints for every downstream workflow
|
|
33
|
+
|
|
34
|
+
## Boundary Rules
|
|
35
|
+
|
|
36
|
+
### MCP Owns
|
|
37
|
+
|
|
38
|
+
Put a capability in MCP if it is:
|
|
39
|
+
|
|
40
|
+
- deterministic or mostly deterministic,
|
|
41
|
+
- computational rather than interpretive,
|
|
42
|
+
- reusable across clients or skills,
|
|
43
|
+
- grounded in astro math, house logic, timezone logic, or ephemeris logic,
|
|
44
|
+
- and difficult or risky to reconstruct client-side.
|
|
45
|
+
|
|
46
|
+
Examples:
|
|
47
|
+
|
|
48
|
+
- transit calculation
|
|
49
|
+
- range-aware forecast data
|
|
50
|
+
- mundane aspects
|
|
51
|
+
- house activation metadata
|
|
52
|
+
- electional primitives
|
|
53
|
+
- local rising-sign windows
|
|
54
|
+
|
|
55
|
+
### Skills Own
|
|
56
|
+
|
|
57
|
+
Put a capability in a skill if it is:
|
|
58
|
+
|
|
59
|
+
- mostly synthesis, ranking, or formatting,
|
|
60
|
+
- non-deterministic or heavily dependent on judgment,
|
|
61
|
+
- user-specific or preference-heavy,
|
|
62
|
+
- likely to evolve quickly,
|
|
63
|
+
- and doable by a competent LLM in one or two calls to stable MCP primitives.
|
|
64
|
+
|
|
65
|
+
Examples:
|
|
66
|
+
|
|
67
|
+
- daily brief generation
|
|
68
|
+
- weekly overview synthesis
|
|
69
|
+
- opportunity/risk framing
|
|
70
|
+
- “best use today” language
|
|
71
|
+
- electional scoring using a specific user’s preferences
|
|
72
|
+
- preference-aware section ordering and tone
|
|
73
|
+
|
|
74
|
+
Skill ideas are the default incubation layer for new workflow concepts.
|
|
75
|
+
|
|
76
|
+
That does not make every skill example in this repo a committed product roadmap item.
|
|
77
|
+
|
|
78
|
+
Treat skill-layer examples and issue ideas as candidate workflows unless they are explicitly promoted into committed work.
|
|
79
|
+
|
|
80
|
+
### MCP Prompts Own
|
|
81
|
+
|
|
82
|
+
Use MCP prompts as thin, discoverable entry points into common workflows.
|
|
83
|
+
|
|
84
|
+
Prompts may:
|
|
85
|
+
|
|
86
|
+
- guide clients toward the right tools,
|
|
87
|
+
- provide a reusable public starting point,
|
|
88
|
+
- and expose common report workflows for non-local clients.
|
|
89
|
+
|
|
90
|
+
Prompts should not:
|
|
91
|
+
|
|
92
|
+
- become the primary place where product logic lives,
|
|
93
|
+
- duplicate full skill logic,
|
|
94
|
+
- or hardcode personalized heuristics that belong in a skill or profile.
|
|
95
|
+
|
|
96
|
+
### Profiles Or Preferences Own
|
|
97
|
+
|
|
98
|
+
Put durable personalization in a profile or preference layer, not in generic MCP tools.
|
|
99
|
+
|
|
100
|
+
Examples:
|
|
101
|
+
|
|
102
|
+
- Whole Sign-first reporting
|
|
103
|
+
- timezone defaults
|
|
104
|
+
- preferred electional filters
|
|
105
|
+
- section preferences
|
|
106
|
+
- naming and tagging preferences
|
|
107
|
+
|
|
108
|
+
## Feature Creep Guardrails
|
|
109
|
+
|
|
110
|
+
- MCP is for astrological facts, not personalized advice.
|
|
111
|
+
- Deterministic and generic astro computation is a strong candidate for MCP.
|
|
112
|
+
- Determinism alone is not enough; deterministic but opinionated workflow synthesis still belongs in a skill.
|
|
113
|
+
- A new MCP feature must justify why it cannot be cleanly handled by a skill in two calls.
|
|
114
|
+
- Prefer extending an existing tool over adding a new narrowly scoped tool.
|
|
115
|
+
- Do not add user-specific heuristics to MCP.
|
|
116
|
+
- Do not add report-generation tools to MCP unless the output is generic, stable, and broadly reusable.
|
|
117
|
+
- If a feature mixes computation and interpretation, split it.
|
|
118
|
+
Computation belongs in MCP. Interpretation belongs in a skill.
|
|
119
|
+
|
|
120
|
+
## Promotion Rule
|
|
121
|
+
|
|
122
|
+
New workflow ideas should start life as skills or prompts.
|
|
123
|
+
|
|
124
|
+
That is an incubation step, not an automatic commitment to ship a repo-owned skill or workflow.
|
|
125
|
+
|
|
126
|
+
They should graduate into MCP only when:
|
|
127
|
+
|
|
128
|
+
- the computational pattern is stable,
|
|
129
|
+
- multiple workflows need the same primitive,
|
|
130
|
+
- and the client-side implementation would otherwise duplicate fragile astro logic.
|
|
131
|
+
|
|
132
|
+
## Decision Test
|
|
133
|
+
|
|
134
|
+
Before adding new MCP surface area, answer these questions:
|
|
135
|
+
|
|
136
|
+
1. Is this astrological computation or interpretation?
|
|
137
|
+
2. Is the output deterministic or mostly deterministic for the same inputs?
|
|
138
|
+
3. Would two different skills or clients need the same structured output?
|
|
139
|
+
4. Would keeping this outside MCP force astro logic duplication?
|
|
140
|
+
5. Can a competent LLM do this in two calls from existing primitives?
|
|
141
|
+
6. Are we adding a generic primitive, or hardcoding one user’s workflow?
|
|
142
|
+
|
|
143
|
+
If the output is deterministic, generic, and reusable, prefer MCP.
|
|
144
|
+
|
|
145
|
+
If a competent LLM can already do it in two calls and the remaining value is mostly synthesis or policy, it probably does not belong in MCP.
|
|
146
|
+
|
|
147
|
+
## Examples
|
|
148
|
+
|
|
149
|
+
### Belongs In MCP
|
|
150
|
+
|
|
151
|
+
- “Return a 7-day forecast grouped by day.”
|
|
152
|
+
- “Return mundane aspects between transiting planets.”
|
|
153
|
+
- “Return which natal and transiting houses are activated.”
|
|
154
|
+
- “Return Moon condition and rising-sign windows for a date and location.”
|
|
155
|
+
- “Add an `include_houses` or `include_mundane_aspects` flag to an existing tool.”
|
|
156
|
+
|
|
157
|
+
### Belongs In A Skill
|
|
158
|
+
|
|
159
|
+
- “Write a daily brief with top 3 influences.”
|
|
160
|
+
- “Rank today as clean, mixed, or caution.”
|
|
161
|
+
- “Suggest best uses for work, family, health, and spiritual practice.”
|
|
162
|
+
- “Score electional windows according to one user’s preferred rulers and Mars/Saturn cautions.”
|
|
163
|
+
|
|
164
|
+
### Does Not Belong
|
|
165
|
+
|
|
166
|
+
- “Best time for my Google QBR” as a first-class MCP tool
|
|
167
|
+
- one-user reporting tags embedded into tool contracts
|
|
168
|
+
- generic tools whose only job is to produce prose a skill could generate from structured data
|
|
169
|
+
- deterministic but policy-heavy labels like “clean”, “mixed”, or “caution” baked into core tools
|
|
170
|
+
|
|
171
|
+
## Related Docs
|
|
172
|
+
|
|
173
|
+
- [Architecture Boundaries](/Users/salted/Code/astro-mcp/docs/product/architecture-boundaries.md)
|
|
174
|
+
- [ADR 0001: MCP Vs Skill Boundary](/Users/salted/Code/astro-mcp/docs/product/adrs/0001-mcp-vs-skill-boundary.md)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# ether-to-astro v1.2.0
|
|
2
|
+
|
|
3
|
+
Suggested release type: `minor`
|
|
4
|
+
|
|
5
|
+
This release improves transit forecasting, adds new electional and rising-sign primitives, and tightens a few important MCP and timezone edge cases. 🎉
|
|
6
|
+
|
|
7
|
+
## 1.2.0 (2026-03-29)
|
|
8
|
+
|
|
9
|
+
### New feature
|
|
10
|
+
|
|
11
|
+
- add explicit `snapshot`, `best_hit`, and `forecast` transit modes with day-grouped forecast output
|
|
12
|
+
- add sign, degree, and house metadata directly to transit responses for both transit and natal sides
|
|
13
|
+
- add mundane transit-to-transit aspects and supportive/challenging weather output for date and date-range queries
|
|
14
|
+
- add standalone `get_electional_context` for deterministic electional snapshots without requiring a loaded natal chart 🌙
|
|
15
|
+
- add rising-sign window helpers for date and location queries, with approximate and exact modes ⬆️
|
|
16
|
+
- add deterministic MCP startup defaults for reporting and make `e2a --mcp` the canonical MCP entrypoint
|
|
17
|
+
|
|
18
|
+
### Bug fix
|
|
19
|
+
|
|
20
|
+
- keep forecast labels and exact-time rendering aligned with the reporting timezone
|
|
21
|
+
- preserve `e2a-mcp` compatibility behavior when launched through bin shims and wrapper paths
|
|
22
|
+
- reject DST-ambiguous or nonexistent local electional times instead of silently normalizing them
|
|
23
|
+
- fix applying-aspect edge cases in electional context, especially for faster-moving bodies
|
|
24
|
+
|
|
25
|
+
### Documentation Changes
|
|
26
|
+
|
|
27
|
+
- update docs and setup guidance around the unified `e2a` CLI and MCP entrypoint
|
|
28
|
+
- add repo-owned workflow skills and skill authoring guidance
|
|
29
|
+
- clarify MCP vs skill product boundaries in repo docs
|
|
30
|
+
|
|
31
|
+
### ⚙️ Chore
|
|
32
|
+
|
|
33
|
+
- refresh product governance and contributor guidance for issue triage and release workflow
|
|
34
|
+
|
|
35
|
+
## Upgrade notes
|
|
36
|
+
|
|
37
|
+
- prefer `e2a --mcp` for MCP launches
|
|
38
|
+
- `e2a-mcp` remains available as a compatibility alias
|
|
39
|
+
- if you consume transit output programmatically, prefer explicit `mode` values over relying on legacy `days_ahead` behavior
|
|
40
|
+
|
|
41
|
+
## Included PRs
|
|
42
|
+
|
|
43
|
+
- #32 add rising-sign window helper
|
|
44
|
+
- #34 add mundane transit-to-transit aspects and weather output
|
|
45
|
+
- #38 unify `e2a` entrypoint for CLI and MCP
|
|
46
|
+
- #40 clarify transit mode contract
|
|
47
|
+
- #41 preserve alias mode and reporting timezone consistency
|
|
48
|
+
- #43 fix electional DST and applying-aspect edge cases
|
package/package.json
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ether-to-astro",
|
|
3
|
-
"version": "1.0
|
|
4
|
-
"description": "Local-first astrology toolkit with a
|
|
3
|
+
"version": "1.2.0",
|
|
4
|
+
"description": "Local-first astrology toolkit with a unified e2a binary for CLI and MCP workflows, plus an e2a-mcp compatibility alias.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"engines": {
|
|
8
8
|
"node": ">=22"
|
|
9
9
|
},
|
|
10
10
|
"bin": {
|
|
11
|
-
"e2a
|
|
12
|
-
"e2a": "dist/
|
|
11
|
+
"e2a": "dist/loader.js",
|
|
12
|
+
"e2a-mcp": "dist/mcp-alias.js"
|
|
13
13
|
},
|
|
14
14
|
"scripts": {
|
|
15
15
|
"build": "tsc",
|
|
16
16
|
"dev": "tsc --watch",
|
|
17
17
|
"dev:watch": "tsx watch src/loader.ts",
|
|
18
|
-
"start": "node dist/loader.js",
|
|
19
|
-
"start:cli": "node dist/
|
|
18
|
+
"start": "node dist/loader.js --mcp",
|
|
19
|
+
"start:cli": "node dist/loader.js",
|
|
20
20
|
"postinstall": "node scripts/download-ephemeris.js",
|
|
21
21
|
"test": "vitest tests/unit",
|
|
22
22
|
"validate:astro": "vitest run tests/validation",
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"@vitest/ui": "^4.1.2",
|
|
59
59
|
"happy-dom": "^20.8.9",
|
|
60
60
|
"tsx": "^4.21.0",
|
|
61
|
-
"typescript": "^
|
|
61
|
+
"typescript": "^6.0.2",
|
|
62
62
|
"vitest": "^4.1.2"
|
|
63
63
|
}
|
|
64
64
|
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: daily-brief
|
|
3
|
+
description: Produce a concise daily astrology brief from ether-to-astro MCP primitives. Use when a user wants today's personal transits and collective weather summarized without turning interpretation into MCP logic.
|
|
4
|
+
metadata:
|
|
5
|
+
repo: ether-to-astro
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Daily Brief
|
|
9
|
+
|
|
10
|
+
## Purpose
|
|
11
|
+
Use this skill when a user wants a same-day astrology brief grounded in `ether-to-astro` MCP data.
|
|
12
|
+
|
|
13
|
+
This skill owns synthesis, ordering, and narrative framing. It does not invent astro facts or encode its own computational logic.
|
|
14
|
+
|
|
15
|
+
## Inputs
|
|
16
|
+
- A loaded natal chart on the MCP side, or enough birth data to load one first.
|
|
17
|
+
- Date to analyze. Default to today in the reporting timezone if the user does not specify a date.
|
|
18
|
+
- Optional deterministic defaults:
|
|
19
|
+
- preferred reporting timezone
|
|
20
|
+
- preferred house style for interpretation
|
|
21
|
+
- weekday labels on or off
|
|
22
|
+
|
|
23
|
+
## Required MCP Calls
|
|
24
|
+
1. Call `get_server_status`.
|
|
25
|
+
2. If no natal chart is loaded, either:
|
|
26
|
+
- call `set_natal_chart` when the user has supplied birth data, or
|
|
27
|
+
- stop and ask for natal-chart setup.
|
|
28
|
+
3. Call `get_transits` for the target date.
|
|
29
|
+
Recommended arguments:
|
|
30
|
+
- `date`
|
|
31
|
+
- `include_mundane: true`
|
|
32
|
+
- `categories: ["all"]`
|
|
33
|
+
4. Use additional MCP primitives only when they already exist and materially improve the brief:
|
|
34
|
+
- house-aware transit metadata
|
|
35
|
+
- electional context
|
|
36
|
+
- rising-sign windows
|
|
37
|
+
|
|
38
|
+
## Workflow
|
|
39
|
+
1. Resolve the target date and reporting timezone.
|
|
40
|
+
2. Retrieve same-day transit data.
|
|
41
|
+
3. Separate the output into:
|
|
42
|
+
- mundane baseline
|
|
43
|
+
- personal transit modifiers
|
|
44
|
+
4. Rank or group the results for readability, but keep all rankings clearly skill-side.
|
|
45
|
+
5. Produce a concise brief with explicit references back to the underlying astro facts.
|
|
46
|
+
|
|
47
|
+
## Output Contract
|
|
48
|
+
- Keep the brief short and practical.
|
|
49
|
+
- Default section order:
|
|
50
|
+
1. `Overview`
|
|
51
|
+
2. `Mundane Baseline`
|
|
52
|
+
3. `Personal Modifiers`
|
|
53
|
+
4. `Optional Timing Notes`
|
|
54
|
+
- Reference actual astro facts directly:
|
|
55
|
+
- planets
|
|
56
|
+
- aspects
|
|
57
|
+
- sign or house context when available
|
|
58
|
+
- exact timing only when the MCP result provides it
|
|
59
|
+
- Use weekday labels only when enabled by config or clearly requested by the user.
|
|
60
|
+
- If the available MCP data is incomplete, say so plainly instead of implying precision that is not present.
|
|
61
|
+
|
|
62
|
+
## Boundaries
|
|
63
|
+
- Do not turn the brief into a new MCP contract.
|
|
64
|
+
- Do not describe ranking labels such as `clean`, `mixed`, or `caution` as deterministic truth.
|
|
65
|
+
- Do not invent house activations, electional windows, or mundane-aspect data when the MCP response does not provide them.
|
|
66
|
+
- Do not use multi-day `get_transits` output as if it were a true day-by-day forecast unless the explicit forecast contract exists.
|
|
67
|
+
|
|
68
|
+
## Good Patterns
|
|
69
|
+
- Summarize mundane weather first, then describe how natal transits personalize it.
|
|
70
|
+
- Use exact-time notes only when the tool returned them.
|
|
71
|
+
- Prefer a compact brief over exhaustive prose.
|
|
72
|
+
|
|
73
|
+
## Failure Handling
|
|
74
|
+
- If no natal chart is available, stop and request natal-chart setup.
|
|
75
|
+
- If the MCP surface lacks a needed primitive, explain the missing capability and continue with the best truthful same-day brief possible.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: electional-overlay
|
|
3
|
+
description: Add a secondary electional timing overlay to an existing daily or weekly astrology workflow. Use when the user wants timing refinement after the main overview has already been established.
|
|
4
|
+
metadata:
|
|
5
|
+
repo: ether-to-astro
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Electional Overlay
|
|
9
|
+
|
|
10
|
+
## Purpose
|
|
11
|
+
Use this skill to add timing refinement after a daily brief or weekly overview already exists.
|
|
12
|
+
|
|
13
|
+
This skill is not the primary report. It is a secondary overlay that narrows candidate windows using electional primitives.
|
|
14
|
+
|
|
15
|
+
## Inputs
|
|
16
|
+
- An existing daily brief or weekly overview context.
|
|
17
|
+
- Date, time, or narrowed candidate window to evaluate.
|
|
18
|
+
- Location and timezone for electional checks.
|
|
19
|
+
- Optional deterministic defaults:
|
|
20
|
+
- preferred reporting timezone
|
|
21
|
+
- weekday labels on or off
|
|
22
|
+
|
|
23
|
+
## Required MCP Calls
|
|
24
|
+
Use the smallest useful set of electional primitives available. Preferred surfaces include:
|
|
25
|
+
- a standalone electional-context tool for date/time/location
|
|
26
|
+
- rising-sign windows
|
|
27
|
+
- Moon condition or applying-aspect primitives
|
|
28
|
+
|
|
29
|
+
If the needed primitives are not available, stop and explain the limitation instead of inventing electional logic.
|
|
30
|
+
|
|
31
|
+
## Workflow
|
|
32
|
+
1. Start from an already-established overview or brief.
|
|
33
|
+
2. Narrow the timing question to a date or candidate window.
|
|
34
|
+
3. Call electional primitives for that narrowed scope.
|
|
35
|
+
4. Summarize the resulting timing implications as secondary notes.
|
|
36
|
+
|
|
37
|
+
## Elicitation
|
|
38
|
+
- Ask for missing information only when it materially changes the result.
|
|
39
|
+
- Prefer targeted clarifications over open-ended questions:
|
|
40
|
+
- date or candidate window
|
|
41
|
+
- location or timezone
|
|
42
|
+
- action type, if the user wants timing for a specific kind of action
|
|
43
|
+
- If the user asks for a general timing overlay without enough specificity, ask for the narrowest missing detail needed to make the overlay meaningful.
|
|
44
|
+
|
|
45
|
+
## Output Contract
|
|
46
|
+
- Keep this as an add-on section, not a full replacement report.
|
|
47
|
+
- Default section order:
|
|
48
|
+
1. `Timing Window`
|
|
49
|
+
2. `Electional Signals`
|
|
50
|
+
3. `Why It Stands Out`
|
|
51
|
+
- Reference the underlying deterministic facts directly.
|
|
52
|
+
- Make confidence and limitations clear when the primitive set is incomplete.
|
|
53
|
+
|
|
54
|
+
## Boundaries
|
|
55
|
+
- Do not invent electional scoring formulas inside the skill.
|
|
56
|
+
- Do not represent subjective ranking as MCP truth.
|
|
57
|
+
- Do not let asteroids or niche filters dominate unless the user explicitly asks for them.
|
|
58
|
+
- Do not replace the main weekly/daily overview with timing-only analysis.
|
|
59
|
+
|
|
60
|
+
## Good Patterns
|
|
61
|
+
- Treat electional guidance as optional and secondary.
|
|
62
|
+
- Use explicit time windows when the MCP primitive provides them.
|
|
63
|
+
- Explain why a window is notable using raw signals, not just verdict labels.
|
|
64
|
+
|
|
65
|
+
## Failure Handling
|
|
66
|
+
- If electional primitives are unavailable, say that timing refinement is limited by the current MCP surface.
|
|
67
|
+
- If the user has not narrowed the timing question enough, ask for the date, window, or location needed for a meaningful overlay.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: weekly-overview
|
|
3
|
+
description: Produce a weekly astrology overview from ether-to-astro MCP primitives. Use when a user wants an overview-first planning read that can optionally include secondary electional notes.
|
|
4
|
+
metadata:
|
|
5
|
+
repo: ether-to-astro
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Weekly Overview
|
|
9
|
+
|
|
10
|
+
## Purpose
|
|
11
|
+
Use this skill when a user wants a seven-day overview, not just a same-day brief.
|
|
12
|
+
|
|
13
|
+
This skill is only as strong as the underlying forecast primitives. It must not fake a day-by-day weekly report from lossy MCP data.
|
|
14
|
+
|
|
15
|
+
## Inputs
|
|
16
|
+
- A loaded natal chart on the MCP side, or enough birth data to load one first.
|
|
17
|
+
- Start date for the weekly window. Default to today in the reporting timezone if unspecified.
|
|
18
|
+
- Optional deterministic defaults:
|
|
19
|
+
- preferred reporting timezone
|
|
20
|
+
- preferred house style for interpretation
|
|
21
|
+
- weekday labels on or off
|
|
22
|
+
|
|
23
|
+
## Required MCP Calls
|
|
24
|
+
1. Call `get_server_status`.
|
|
25
|
+
2. Ensure a natal chart is loaded before continuing.
|
|
26
|
+
3. Prefer a true range-aware transit forecast primitive when available.
|
|
27
|
+
Examples:
|
|
28
|
+
- explicit `forecast` mode on `get_transits`
|
|
29
|
+
- date-grouped transit forecast output
|
|
30
|
+
- per-day mundane aspect data
|
|
31
|
+
4. Only use electional primitives as a second pass after the weekly overview exists.
|
|
32
|
+
|
|
33
|
+
## Workflow
|
|
34
|
+
1. Resolve the weekly window and reporting timezone.
|
|
35
|
+
2. Retrieve week-level transit data using a forecast-capable MCP surface.
|
|
36
|
+
3. Build the overview in this order:
|
|
37
|
+
- collective weather across the week
|
|
38
|
+
- notable personal modifiers by day or cluster
|
|
39
|
+
- optional secondary timing suggestions
|
|
40
|
+
4. Keep recommendations clearly secondary to the overview.
|
|
41
|
+
|
|
42
|
+
## Elicitation
|
|
43
|
+
- If the user does not provide a start date, default to today in the reporting timezone.
|
|
44
|
+
- If the user appears to mean a calendar week rather than the next seven days, ask for the intended start date or state the assumption clearly.
|
|
45
|
+
- Do not ask extra questions if the overview can proceed truthfully with the default seven-day window.
|
|
46
|
+
|
|
47
|
+
## Output Contract
|
|
48
|
+
- Default section order:
|
|
49
|
+
1. `Week Overview`
|
|
50
|
+
2. `Daily Highlights`
|
|
51
|
+
3. `Interpretive Lens`
|
|
52
|
+
4. `Optional Timing Suggestions`
|
|
53
|
+
- `Week Overview` should summarize the overall weather first.
|
|
54
|
+
- `Daily Highlights` should preserve actual day boundaries when the MCP data supports them.
|
|
55
|
+
- `Interpretive Lens` should explain why certain days stand out using referenced astro facts.
|
|
56
|
+
- `Optional Timing Suggestions` should remain clearly secondary and should only appear when supported by MCP primitives.
|
|
57
|
+
|
|
58
|
+
## Boundaries
|
|
59
|
+
- Do not use current lossy multi-day `get_transits` behavior as if it were a true weekly forecast.
|
|
60
|
+
- If the forecast-capable MCP primitive is missing, say so explicitly and do one of the following:
|
|
61
|
+
- provide a limited best-hit preview, clearly labeled as such, or
|
|
62
|
+
- stop and explain that a true weekly overview is not yet supported by the current MCP surface.
|
|
63
|
+
- Do not hardcode personal scoring policy into the contract.
|
|
64
|
+
- Do not move prose generation into MCP.
|
|
65
|
+
|
|
66
|
+
## Good Patterns
|
|
67
|
+
- Overview first, suggestions second.
|
|
68
|
+
- Mundane baseline first, natal modifiers second.
|
|
69
|
+
- Keep optional electional guidance visibly separate from the main weekly read.
|
|
70
|
+
|
|
71
|
+
## Failure Handling
|
|
72
|
+
- If no natal chart is loaded, stop and request natal-chart setup.
|
|
73
|
+
- If the forecast primitive is missing, do not synthesize a false weekly report.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: write-skill
|
|
3
|
+
description: Write or revise repo-owned SKILL.md files for ether-to-astro. Use when a workflow should become a concrete, compliant skill artifact rather than a broad product narrative.
|
|
4
|
+
metadata:
|
|
5
|
+
repo: ether-to-astro
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Write Skills For `ether-to-astro`
|
|
9
|
+
|
|
10
|
+
## Purpose
|
|
11
|
+
Use this skill when creating or revising repo-owned skills or workflow specs for `ether-to-astro`.
|
|
12
|
+
|
|
13
|
+
The goal is not to write aspirational product prose. The goal is to produce a boring, compliant `SKILL.md` that another agent can execute consistently.
|
|
14
|
+
|
|
15
|
+
## Core Rules
|
|
16
|
+
- Skills own synthesis, ranking, formatting, and user/workflow-specific judgment.
|
|
17
|
+
- MCP owns deterministic astro computation and reusable structured facts.
|
|
18
|
+
- If a skill starts inventing astro math, transit logic, house logic, or electional primitives, stop and move that requirement back into MCP or a product issue.
|
|
19
|
+
- Prefer a one-call or two-call workflow over a large prompt blob.
|
|
20
|
+
- Keep the skill reusable. Do not hardcode one transient conversation unless the request is explicitly private/user-local.
|
|
21
|
+
|
|
22
|
+
## Default Shape
|
|
23
|
+
Write skills using this structure unless there is a strong reason to simplify:
|
|
24
|
+
|
|
25
|
+
```md
|
|
26
|
+
---
|
|
27
|
+
name: your-skill-name
|
|
28
|
+
description: What this skill does and when to use it.
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
# <Skill Name>
|
|
32
|
+
|
|
33
|
+
## Purpose
|
|
34
|
+
One short paragraph on what this skill does and when to use it.
|
|
35
|
+
|
|
36
|
+
## Inputs
|
|
37
|
+
- Required context or assumptions
|
|
38
|
+
- Required MCP/tool outputs
|
|
39
|
+
- Optional config/defaults
|
|
40
|
+
|
|
41
|
+
## Workflow
|
|
42
|
+
1. Call the relevant MCP/tool surface(s).
|
|
43
|
+
2. Transform or rank the results.
|
|
44
|
+
3. Produce the final output in the required shape.
|
|
45
|
+
|
|
46
|
+
## Output Contract
|
|
47
|
+
- Required sections
|
|
48
|
+
- Ordering rules
|
|
49
|
+
- Required references to underlying astro facts
|
|
50
|
+
- Things that must stay optional
|
|
51
|
+
|
|
52
|
+
## Boundaries
|
|
53
|
+
- What this skill must not do
|
|
54
|
+
- What stays in MCP
|
|
55
|
+
- What stays user-specific
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Repo-Specific Expectations
|
|
59
|
+
- Prefer concrete nouns over product slogans.
|
|
60
|
+
- Name the actual MCP tools the skill should call.
|
|
61
|
+
- If there is a stable two-call model, spell it out explicitly.
|
|
62
|
+
- If defaults matter, distinguish:
|
|
63
|
+
- deterministic startup/config defaults
|
|
64
|
+
- skill-side interpretation preferences
|
|
65
|
+
- Keep output contracts minimal. Define only the sections and fields needed for consistency.
|
|
66
|
+
- Do not turn issue language into fake canonical schema unless the repo has explicitly committed to one.
|
|
67
|
+
|
|
68
|
+
## Good Patterns
|
|
69
|
+
- “Call `get_transits` with forecast mode, then optionally call `get_electional_context` for narrowed windows.”
|
|
70
|
+
- “Summarize mundane baseline first, natal modifiers second.”
|
|
71
|
+
- “Keep tags and rankings in the skill, not in MCP payloads.”
|
|
72
|
+
|
|
73
|
+
## Bad Patterns
|
|
74
|
+
- Defining new astro facts inside the skill.
|
|
75
|
+
- Requiring hidden state not available from the documented workflow.
|
|
76
|
+
- Writing a manifesto instead of an execution spec.
|
|
77
|
+
- Hardcoding one user’s private heuristics into a repo-owned shared skill.
|
|
78
|
+
|
|
79
|
+
## Validation
|
|
80
|
+
- Follow the Agent Skills spec at https://agentskills.io/specification.
|
|
81
|
+
- Validate frontmatter and naming with the reference tooling when available, for example:
|
|
82
|
+
- `skills-ref validate ./skills/your-skill-name`
|
|
83
|
+
- or the equivalent validator flow provided by your skills toolchain
|
|
84
|
+
|
|
85
|
+
## Definition Of Done
|
|
86
|
+
A good repo-owned `SKILL.md` should let a zero-context agent answer:
|
|
87
|
+
- when should I use this skill?
|
|
88
|
+
- which tools do I call, and in what order?
|
|
89
|
+
- what output shape do I produce?
|
|
90
|
+
- what must I avoid putting into MCP?
|