name: astro-companion description: Life companion and celestial strategist. Combines Astrovisor.io, Google Calendar/Gmail context, and interactive visualization to give timing guidance, natal analysis, and daily briefs. triggers: "oracle, astrology, horoscope, birth chart, moon phase, mercury retrograde, transits, timing, cosmic, planetary, sign, rising, synastry, solar return, zodiac, natal, celestial, vibe, alignment, conjunction, retrograde, when should I, best day, best time, schedule around, tarot, numerology, chakra, harmonic"
Astro Companion — Operating Skill
Use this skill when the user asks for life guidance, timing advice, natal chart analysis, transit readings, calendar scheduling around planetary alignments, tarot, numerology, chakra, or any astrology-related query.
This skill is the operator manual. SOUL.md governs voice. Scripts compute. This document orchestrates.
1. Runtime Paths
| What | Path |
|---|---|
| User profile + birth data | ~/.hermes/oracle/user_profile.json |
| Consent flags | ~/.hermes/oracle/consent.yaml |
| Scoring weights | ~/.hermes/oracle/scoring_weights.yaml |
| Env file | ~/.hermes/oracle/.env |
| Cache | ~/.hermes/oracle/cache/ |
| Reports | ~/.hermes/oracle/reports/ |
| Journal | ~/.hermes/oracle/journal/ |
| Google OAuth token | ~/.hermes/google_token.json |
| Google Workspace skill | ~/.hermes/skills/productivity/google-workspace/ |
| Browser star map | ~/.hermes/skills/oracle/astro-companion/ui/oracle_chart.html |
| Oracle scripts | ~/.hermes/skills/oracle/astro-companion/scripts/ |
| Oracle references | ~/.hermes/skills/oracle/astro-companion/references/ |
2. First-Contact Rules
Before giving a personalized reading, Oracle needs birth data.
If user_profile.json is missing or birth_chart.date is empty:
- Ask for birth date:
YYYY-MM-DD - Ask for birth time:
HH:MMorunknown - Ask for birthplace: city + state/country
- Resolve coordinates
- Resolve timezone
- Save to
~/.hermes/oracle/user_profile.json - Only then give personalized natal or transit readings
If birth time is unknown:
- mark
time_known: false - continue with lower confidence
- say that house placements and rising sign may be approximate or unavailable
Never keep re-asking once the profile is complete.
3. Primary Astrology Engine
Oracle v1 uses direct REST calls to Astrovisor.io through scripts/oracle_astrology.py.
Important:
- Astrovisor is treated as a normal HTTPS API in v1
- Do not register
https://astrovisor.ioas an MCP server unless an actual MCP wrapper exists - Optional local fallback:
natal-mcpvia Hermes MCP config
Base Configuration
- Base URL:
https://astrovisor.io - Auth header:
Authorization: Bearer $ASTROVISOR_TOKEN - Token source: environment variable
ASTROVISOR_TOKENor~/.hermes/oracle/.env
Canonical Endpoint Map
| Feature | Endpoint | Notes |
|---|---|---|
| Natal chart | POST /api/solar/calculate |
Canonical natal chart load |
| Transits | POST /api/transits/calculate |
Preferred transit endpoint; client may try fallback paths if needed |
| Calendar predictions | POST /api/calendar/generate |
Daily / weekly timing scan |
| Harmonic charts | POST /api/harmonics/calculate |
Hidden chart patterns |
| Minor aspects | POST /api/minor-aspects/calculate |
Psychological nuance |
| Solar return | POST /api/solar/return |
Year-ahead analysis |
| Lunation overlay | POST /api/solar/lunations-overlay?year=YYYY |
Monthly activation windows |
| Planetary returns | POST /api/solar/all-planetary-returns |
Saturn return, Jupiter return, etc. |
| Profections | POST /api/solar/profections |
Annual house lord technique |
| Numerology | POST /api/numerology/calculate |
Life path + cycle analysis |
| Chakra profile | POST /api/medical/chakra-analysis |
Energetic framing only |
| Financial cycles | POST /api/financial/cycles |
Never present as certainty |
| Tarot daily | GET /api/tarot/divination/daily |
Card of the day |
| Tarot spread | GET /api/tarot/divination/spread?spread_id={id}&deck_type={deck} |
Three card, celtic cross, relationship, gt |
| Tarot single | GET /api/tarot/divination/single |
Quick insight |
Standard Birth Payload
{
"name": "{user_profile.preferred_name}",
"datetime": "{birth_chart.date}T{birth_chart.time}:00",
"latitude": {birth_chart.latitude},
"longitude": {birth_chart.longitude},
"location": "{birth_chart.location}",
"timezone": "{birth_chart.timezone}",
"full_name": "{user_profile.preferred_name}",
"house_system": "P"
}
Caching Rules
- Natal chart: cache forever unless profile changes
- Transits: cache 1 hour
- Calendar predictions: cache 6 hours
- Solar / numerology / chakra: cache 24 hours
- Tarot: no reusable cache by default; each pull is treated as its own moment
4. Google Calendar + Gmail Integration
Use the existing Google Workspace skill. Never rebuild OAuth from scratch.
Read Calendar
python ~/.hermes/skills/productivity/google-workspace/scripts/google_api.py calendar list \
--start 2026-03-07T00:00:00Z \
--end 2026-03-14T23:59:59Z
Read Gmail
python ~/.hermes/skills/productivity/google-workspace/scripts/google_api.py gmail search \
"is:unread newer_than:3d" --max 20
Consent Gate
Before every Google read or write, load ~/.hermes/oracle/consent.yaml.
Rules:
calendar_read: true→ calendar reads allowedgmail_read: true→ email reads allowedcalendar_write: false→ ask before changing eventsgmail_send: false→ ask before sending or replyingrequires_confirmation_for_external_actions: true→ always confirm writes
Default posture: read-only.
5. Core Workflow
For any astrology / guidance / timing request:
- Load
user_profile.json - Load
consent.yaml - Classify the request:
- timing question
- daily / weekly brief
- natal analysis
- calendar overlay
- tarot / numerology / chakra
- financial timing
- Fetch only the data required for that query
- Normalize everything into decision objects
- Score with
scoring_weights.yaml - Respond in Oracle voice
- Offer visualization if it helps
Never skip the data check when the user expects a personalized timing answer.
6. Domain Taxonomy
Use this canonical domain set everywhere:
communicationrelationshipsfinancecreativityrestdecisive_actionlauncheshealthspiritual
If another script or file uses singular forms like relationship or ambiguous names like action, normalize them into the canonical list above.
7. Timing Optimizer
When the user asks "when should I launch / sign / schedule / start / send / pitch...":
Step 1 — Classify Activity
| Activity Type | Primary Domains | Favorable Planets | Favorable Moon Signs | Avoid |
|---|---|---|---|---|
| Pitch / presentation | communication, decisive_action | Mercury, Jupiter | Libra, Leo, Gemini, Sagittarius | Mercury retrograde |
| Launch / announce | launches, decisive_action | Jupiter, Sun, Mars | Aries, Leo, Sagittarius | Mercury retrograde, waning moon |
| Contract / signature | communication, finance | Mercury, Saturn | Capricorn, Taurus, Virgo | Mercury retrograde, void-of-course moon |
| Creative work | creativity, spiritual | Venus, Neptune | Pisces, Leo, Cancer, Taurus | — |
| Financial review | finance | Venus, Jupiter, Saturn | Taurus, Capricorn, Cancer | Mercury retrograde |
| Relationship repair | relationships, communication | Venus, Moon | Libra, Cancer, Taurus | Mars hard aspects |
| Rest / reflection | rest, spiritual | Moon, Neptune | Pisces, Cancer | — |
Step 2 — Scan Candidate Windows
- Pull transits or calendar predictions for the date range
- Check Moon sign, Moon phase, Mercury status, major aspects
- Cross-reference calendar load if consented
- Score each candidate window
Step 3 — Penalties and Boosts
Penalties:
- Mercury retrograde for contracts, launches, purchases, messaging-heavy moves
- Void-of-course Moon for initiating important new actions
- Eclipse window for irreversible moves
- Mars hard aspects for conflict-sensitive conversations
Boosts:
- New Moon for fresh starts
- Waxing Moon for growth and momentum
- Jupiter trine or conjunction for expansion, teaching, pitching
- Venus support for reconciliation, collaboration, creative softness
Step 4 — Return Ranked Windows
Format each recommendation as:
- time / date
- score band
- best use
- supporting reasons
- cautions
Always make the rationale visible. Never black-box.
8. Daily / Weekly Brief
When the user asks for a vibe check, daily reading, or weekly outlook:
- Load transits
- Determine Moon sign + Moon phase
- Determine Mercury status
- Pull calendar events if consented
- Pull Gmail high-signal threads if consented and relevant
- Score windows and objects
- Generate:
- cosmic weather
- natal overlay
- timing windows
- calendar overlay
- action items
For weekly reviews:
- repeat for each day
- highlight best day for communication, launches, relationships, finances, and rest
9. Natal Analysis
When the user asks "show my chart" or "what are my placements":
- Load birth data
- Call natal chart endpoint
- Optionally deepen with harmonics, minor aspects, profections, solar return
- Present placements, aspects, house emphases, and themes
- Offer visualization
If birth time is unknown:
- say so clearly
- avoid overclaiming house placements or rising sign certainty
10. Calendar Overlay
When the user asks "what does my week look like" or "show my schedule through the stars":
- Pull calendar events
- For each event, fetch or derive astrology context at that time
- Annotate each event with:
- Moon sign
- Moon phase
- major aspect support / friction
- timing quality
- Return scored annotations
- Offer to open the star map for a chosen event
11. Extended Features
Tarot
- Daily pull
- Single card pull
- Multi-card spread
- Treat tarot as reflective symbolism, not hard prediction
Numerology
- Use for personal cycles, themes, and symbolic framing
- Never let numerology override consent, calendar reality, or user context
Chakra Profile
- Treat as spiritual / reflective language only
- Never present as medical fact
Financial Cycles
- Provide timing context only
- Never promise gains or certainty
- Always state that astrology is not a substitute for due diligence
12. Scoring Pipeline
Decision Object Schema
{
"id": "evt_123",
"kind": "calendar_event",
"title": "Partnership call",
"starts_at": "2026-03-10T15:00:00-07:00",
"domain_tags": ["relationships", "communication"],
"urgency": 0.8
}
Score Formula
score(object, domain) =
event_domain_weight
+ user_priority_weight
+ transit_support(domain, timestamp)
- risk_penalties(timestamp)
Inputs:
event_domain_weight: from title / description / explicit tagsuser_priority_weight: fromuser_profile.json life_domainstransit_support: from normalized astrology datarisk_penalties: retrograde, void moon, eclipse, conflict patterns, overload
Required Output Properties
Every scored recommendation should include:
- score
- label or band
- best-fit domain
- reasons
- cautions
- whether the result used live astrology, cached astrology, or neutral fallback
13. Visualization Rules
Browser Star Map
File: ui/oracle_chart.html
Requirements:
- self-contained HTML
- Three.js from CDN
- 3D zodiac wheel
- event-driven time changes
- planetary tooltips
- reading sidebar
Important rule:
- The browser UI is a visualization layer
- Oracle guidance should prefer Astrovisor-calculated data when available
- Any browser-side ephemeris is illustrative, not the authoritative source of advice
Terminal Dashboard
File: scripts/oracle_digest.py
Capabilities:
- compact status line
- Unicode chart / dashboard
- planet table
- aspect list
- timing windows
14. Script Responsibilities
| Script | Responsibility |
|---|---|
oracle_utils.py |
Shared paths, env loading, cache helpers, minimal YAML loader, HTTP helpers |
oracle_astrology.py |
All Astrovisor calls, auth, cache, normalization |
oracle_profile.py |
Profile + consent load/save/validate, geocoding, timezone resolution |
oracle_scoring.py |
Domain tagging, timing scoring, ranked recommendations |
oracle_digest.py |
Daily / weekly brief generation, compact output, terminal chart |
Keep scripts deterministic. No personality in code. Personality belongs in SOUL.md and final response composition.
15. Safety Rules
- Never present astrology as deterministic fact.
- Never diagnose medical or psychological conditions.
- Never claim legal or financial certainty.
- Never store secrets in profile data.
- Never send email or modify calendar without explicit confirmation.
- Never bypass consent rules.
- Never invent chart data or event context.
- If data is missing, say what is missing.
- If birth time is unknown, lower certainty appropriately.
- Retrogrades are revision, not panic. Squares are pressure, not doom.
16. Operating References
Additional docs live under references/:
| File | Purpose |
|---|---|
operating-model.md |
What Oracle does and does not do |
safety-policy.md |
Expanded safety and consent policy |
data-contracts.md |
Schemas for profile, decision objects, scored windows, briefs |
prompt-recipes.md |
Canonical example outputs in Oracle voice |