{
  "schemaVersion": "1.0",
  "item": {
    "slug": "grupo-venus",
    "name": "Grupo Venus",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/apresmoi/grupo-venus",
    "canonicalUrl": "https://clawhub.ai/apresmoi/grupo-venus",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/grupo-venus",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=grupo-venus",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "skill.json",
      "skill.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/grupo-venus"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/grupo-venus",
    "agentPageUrl": "https://openagent3.xyz/skills/grupo-venus/agent",
    "manifestUrl": "https://openagent3.xyz/skills/grupo-venus/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/grupo-venus/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Grupo Venus",
        "body": "Use this skill to fetch free astrological charts, transit forecasts, and compatibility reports from grupovenus.com — a classic ASP astrology platform with a rich free tier. Manage multiple people in memory and analyze charts conversationally.\n\nUnofficial skill. Not affiliated with or endorsed by Grupo Venus. Uses the public free tier of grupovenus.com as-is.\n\nBase URL: https://grupovenus.com\nNo API key required. Data is session-cookie based; person data is stored locally in memory."
      },
      {
        "title": "People Storage",
        "body": "All person data lives in your memory file. Load it before any operation:\n\n~/.openclaw/workspace/memory/grupo-venus.json\n\nStructure (we use Luis Alberto Spinetta as the example throughout this skill — because he's from another planet):\n\n{\n  \"people\": {\n    \"spinetta\": {\n      \"name\": \"Luis Alberto Spinetta\",\n      \"birthdate\": \"1/23/1950 4:35:00 PM\",\n      \"city\": \"Buenos Aires\",\n      \"country\": \"Argentina\",\n      \"sex\": \"H\",\n      \"tz_offset\": \"3\",\n      \"lat_dms\": \"34S35\",\n      \"lon_dms\": \"58W22\",\n      \"lat_decimal\": -34.5833,\n      \"lon_decimal\": 58.3667,\n      \"style\": \"deep\"\n    }\n  }\n}\n\nsex: H = Hombre (male), V = Varón/Mujer — use H for male, V for female.\ntz_offset: Hours from UTC, sign inverted: 3 = UTC-3 (Argentina), -1 = UTC+1 (Madrid).\nlat_dms / lon_dms: 34S35 = 34°35′S, 58W22 = 58°22′W. N/S and E/W are explicit.\nstyle: Communication style preference — casual, deep, or practical. See Voice & Style section.\n\nIf the file doesn't exist yet, create it with {\"people\": {}}."
      },
      {
        "title": "Step 1 — Look up the city coordinates",
        "body": "curl -s \"https://grupovenus.com/buscaciudjson.asp?q=CITY&pais=COUNTRY\"\n\nExample:\n\ncurl -s \"https://grupovenus.com/buscaciudjson.asp?q=Bahia+Blanca&pais=Argentina\"\n# → [{\"label\":\"Bahia Blanca, Argentina\"}]\n\nThis confirms the city/country string the server recognises. Use the exact spelling returned."
      },
      {
        "title": "Step 2 — Register the person to get coordinates + timezone",
        "body": "The server requires a properly established session with Referer headers. Always use a cookie jar (-c/-b) — manually passing a single ASPSESSION cookie will result in \"session expired\" errors.\n\nCOOKIEJAR=$(mktemp)\n\n# 2a. Establish session\ncurl -s -c \"$COOKIEJAR\" -b \"$COOKIEJAR\" \"https://grupovenus.com/info.asp\" \\\n  -H \"User-Agent: Mozilla/5.0\" > /dev/null\n\n# 2b. Load the registration form (sets server-side session state)\ncurl -s -c \"$COOKIEJAR\" -b \"$COOKIEJAR\" \"https://grupovenus.com/personas.asp?nue\" \\\n  -H \"User-Agent: Mozilla/5.0\" \\\n  -H \"Referer: https://grupovenus.com/info.asp\" > /dev/null\n\n# 2c. POST the person data (Referer header is required)\n# IMPORTANT: city names with accents must be encoded in iso-8859-1, NOT UTF-8.\n# e.g. \"Bahía Blanca\" → \"Bah%EDa+Blanca\" (%ED = í in Latin-1, NOT %C3%AD which is UTF-8)\n# If the city is not recognized, the server silently assigns wrong/default coordinates.\n# Verify by checking that the city and country fields are non-empty in the d0 cookie response.\ncurl -s -c \"$COOKIEJAR\" -b \"$COOKIEJAR\" -X POST \"https://grupovenus.com/ciuda.asp\" \\\n  -H \"Content-Type: application/x-www-form-urlencoded\" \\\n  -H \"User-Agent: Mozilla/5.0\" \\\n  -H \"Referer: https://grupovenus.com/personas.asp?nue\" \\\n  --data \"urldestino=personas.asp%3Fok&nombre=NAME&DIA=DD&MES=MM&ANO=YYYY&HORA=HH&MINU=MM&08CIUDAD=CITY&14PAIS=COUNTRY&SEXO=H\" > /dev/null\n\n# 2d. Follow redirect to personas.asp?ok — the d0 cookie is set here\nPERSONAS_RESP=$(curl -si -c \"$COOKIEJAR\" -b \"$COOKIEJAR\" \"https://grupovenus.com/personas.asp?ok\" \\\n  -H \"User-Agent: Mozilla/5.0\" \\\n  -H \"Referer: https://grupovenus.com/ciuda.asp\")\n\nThe personas.asp?ok response sets two cookies in its headers:\n\nSet-Cookie: d0=NAME;M/D/YYYY H:MM:SS AM/PM;CITY;COUNTRY;SEX;;TZ;latNS;lonEW\nSet-Cookie: haycoo=NAME;TZ;DATE;TIMEZONE_NAME;\n\nExtract and URL-decode the d0 value from $PERSONAS_RESP:\n\nD0=$(echo \"$PERSONAS_RESP\" \\\n  | grep -i 'set-cookie.*d0=' \\\n  | sed 's/.*d0=//I' | cut -d';' -f1 \\\n  | python3 -c \"import sys,urllib.parse; print(urllib.parse.unquote(sys.stdin.read().strip()))\")\necho \"d0 decoded: $D0\"\n# → NAME ;M/D/YYYY H:MM:SS AM/PM;CITY;COUNTRY;SEX;;TZ;latDMS;lonDMS\n\nFields (semicolon-separated):\n\nField 7: tz_offset\nField 8: lat_dms (e.g. 38S43)\nField 9: lon_dms (e.g. 62W17)\n\nConvert DMS to decimal for storage:\n\n34S35 → -(34 + 35/60) = -34.5833\n58W22 → 58 + 22/60 = 58.3667 (positive = West, as stored by the server)\n\nSave the full person entry to grupo-venus.json."
      },
      {
        "title": "Field reference for ciuda.asp POST",
        "body": "FieldValueurldestinopersonas.asp?ok (URL-encoded)nombrePerson's nameDIABirth day (1–31)MESBirth month (1–12)ANOBirth year (4 digits)HORABirth hour 0–23 (local time)MINUBirth minute 0–5908CIUDADCity name14PAISCountry nameSEXOH or V\n\nNote: The nom2=nue field seen in older docs does not exist in the actual form and must be omitted. The Referer: https://grupovenus.com/personas.asp?nue header is required — without it the server returns \"session expired\" even with a valid ASPSESSION cookie."
      },
      {
        "title": "Building the Cookie String",
        "body": "All report endpoints need the nombre value — the semicolon-delimited person string:\n\n\"NAME ;M/D/YYYY H:MM:SS AM/PM;CITY;COUNTRY;SEX;;TZ;latDMS;lonDMS\"\n\nExample:\n\n\"Luis Alberto Spinetta;1/23/1950 4:35:00 PM;Buenos Aires;Argentina;H;;3;34S35;58W22\"\n\nTo URL-encode it for a POST body in curl use --data-urlencode:\n\n--data-urlencode \"nombre=Luis Alberto Spinetta;1/23/1950 4:35:00 PM;Buenos Aires;Argentina;H;;3;34S35;58W22\""
      },
      {
        "title": "Natal Chart Image",
        "body": "Fetch the natal chart as a PNG image (free, no auth):\n\ncurl -s \"https://grupovenus.com/dibujo.aspx\" \\\n  --get \\\n  --data-urlencode \"fec=1/23/1950 4:35:00 PM\" \\\n  --data-urlencode \"aju=3\" \\\n  --data-urlencode \"ciu=Buenos Aires\" \\\n  --data \"pais=Argentina\" \\\n  --data-urlencode \"lat=-34.5833\" \\\n  --data-urlencode \"lon=58.3667\" \\\n  --data-urlencode \"nom=Luis Alberto Spinetta\" \\\n  --data \"bot=atras&idioma=E&CASASPRO=&zodi=T\" \\\n  -H \"User-Agent: Mozilla/5.0\" \\\n  -o chart_spinetta.png\n\nParameterDescriptionfecBirthdate: M/D/YYYY H:MM:SS AM/PMajuTimezone offset (from person record)ciuCity namepaisCountrylatLatitude decimal (negative = South)lonLongitude decimal (positive = West, as stored)nomPerson nameidiomaE=Spanish, I=English, F=FrenchzodiT=Tropical, S1=Fagan-Bradley, S2=Lahiri, S3=Sassanian, S4=Krishnamurti, S5=Hipparchos\n\nReturns Content-Type: image/png. Save to file or display directly."
      },
      {
        "title": "Transit Forecast Graph",
        "body": "POST to informes3.asp to get a 1-year forecast with all slow-planet transits:\n\ncurl -s -X POST \"https://grupovenus.com/informes3.asp\" \\\n  -H \"Content-Type: application/x-www-form-urlencoded\" \\\n  -H \"User-Agent: Mozilla/5.0\" \\\n  --data-urlencode \"nombre=Luis Alberto Spinetta;1/23/1950 4:35:00 PM;Buenos Aires;Argentina;H;;3;34S35;58W22\" \\\n  --data \"urldestino=informes3.asp\" \\\n  --data \"INFORMEDESEADO=8\" \\\n  --data \"DIA1=28&MES1=2&ANO1=2026\" \\\n  --data \"HORA1=09&MINU1=00\" \\\n  --data \"tipzod=T&TIC=&idiomas=E\"\n\nThe HTML response encodes all transit data as title attributes on <img class=\"barras\"> elements:\n\n<img class=\"barras\" src=\"./fotos/barraSAT.jpg\"\n     title=\"SATsexMER 4/3/2026 0:0 orbe: 0° 43'\"\n     width=5 height=13>"
      },
      {
        "title": "Parsing transit data",
        "body": "Extract all data points with:\n\ngrep 'class=\"barras\"' response.html \\\n  | grep -o 'title=\"[^\"]*\"' \\\n  | sed 's/title=\"//;s/\"//'\n\nEach title line has the format:\n\n[r ]CODE DD/MM/YYYY H:MM orbe: D° MM'\n\nr prefix = retrograde transit\nCODE = transit code (see table below)\ndate = exact date of this data point (every 2 days)\norbe = orb in degrees/minutes (0°0′ = exact)\nheight attribute = bar height (1–55), proxy for intensity: intensity = height / 55\n\nThe first <a href=\"sacainter.asp?...cla=CODE...\"> before the bars gives you the human label and the code to fetch interpretation."
      },
      {
        "title": "Report types — forecast period and planets",
        "body": "INFORMEDESEADOServer labelTransiting planetsPeriodAccess81 año Sat-Plu (1 year, Saturn–Pluto)SAT, URA, NEP, PLU1 yearFree-13 días Lun-Júp (3 days, Moon–Jupiter)LUN, SOL, JUP3 daysFree01 semana Luna,Sol-Júp (1 week, Moon/Sun–Jupiter)LUN, SOL, JUP1 weekFree12 semanas Sol-Plu (2 weeks, Sun–Pluto)SOL, MAR, JUP, SAT, URA, NEP, PLU2 weeksFree72 años Sat-Plu (2 years, Saturn–Pluto)SAT, URA, NEP, PLU2 yearsTicket61 año Jup-Plu (1 year, Jupiter–Pluto)JUP...PLU1 yearTicket43 meses Mar-Plu (3 months, Mars–Pluto)MAR...PLU3 monthsTicket\n\nThe free INFORMEDESEADO=8 is the richest free dataset. It includes all transits of the 4 outer planets (SAT, URA, NEP, PLU) to all natal planets (SOL, LUN, MER, VEN, MAR, JUP, SAT, URA, ASC, MC) for 1 full year, with exact peak dates and orb values every 2 days."
      },
      {
        "title": "Natal Reports",
        "body": "IDNameAccess50Mi pronóstico para HoyFree62Carta NatalTicket66Informe VocacionalTicket63Informe InfantilTicket61Carta SuperNatalTicket65Astrología EspiritualTicket64Astrología KármicaTicket69Informe IndraFree (partial)170Carta Natal con QuirónFree (partial)171Informe Infantil coloquialFree (partial)174Vocacional simpleFree67Astrología y TarotFree (partial)945Numerología BásicaFree947Numerología AvanzadaFree"
      },
      {
        "title": "Compatibility (two people required)",
        "body": "IDNameAccess16De ParejaFree (partial)17De AmistadFree (partial)172De Pareja coloquialFree (partial)90Carta CompuestaFree (partial)"
      },
      {
        "title": "Chart Drawings",
        "body": "IDNameAccess941Dibujo de su Carta AstralFree → redirects to dibujo0.aspx942Dibujo Carta para hoyFree943Superponer dos CartasFree944Carta Compuesta (drawing)Free"
      },
      {
        "title": "Forecast Graphs",
        "body": "IDNameAccess81 año Sat-PluFree (full data)-13 días Lun-JúpFree01 semana Luna,Sol-JúpFree12 semanas Sol-PluFree199Gráfico pronóstico de parejaFree72 años Sat-PluTicket61 año Jup-PluTicket43 meses Mar-PluTicket"
      },
      {
        "title": "Symbolic Predictions",
        "body": "IDNameAccess13Revolución SolarFree (partial)15Revolución LunarFree (partial)14ProgresionesFree (partial)68Ciudades y PueblosFree (partial)173Revolución Solar ColoquialFree (partial)"
      },
      {
        "title": "Forecasts — Relationship",
        "body": "IDNameAccess2312 meses, Marte a PlutónFree (partial)199Varios períodos (graph)Free222 meses, Sol a PlutónTicket"
      },
      {
        "title": "Forecasts — General",
        "body": "IDNameAccess991 semana, Luna a PlutónTicket1002 meses, Sol a PlutónTicket1017 meses, Marte a PlutónTicket10218 meses, Júpiter a PlutónTicket"
      },
      {
        "title": "Forecasts — Kármico-Espiritual",
        "body": "IDNameAccess1034 meses, Sol a PlutónTicket1047 meses, Marte a PlutónTicket1051 año, Júpiter a PlutónTicket"
      },
      {
        "title": "Forecasts — Sentimental",
        "body": "IDNameAccess1064 meses, Sol a PlutónTicket1071 año, Marte a PlutónTicket"
      },
      {
        "title": "Forecasts — Coloquial",
        "body": "IDNameAccess1082 mesesTicket1097 mesesTicket11018 mesesTicket"
      },
      {
        "title": "Solo quincuncios / Negocios",
        "body": "IDNameAccess1261 año, Marte a PlutónFree (partial)1219 meses, Sol Marte a PlutónFree (partial)"
      },
      {
        "title": "Transit Interpretation Texts",
        "body": "For any transit code, fetch 3 different interpretation styles — no auth required:\n\n# General / technical\ncurl -s \"https://grupovenus.com/sacainter.asp?tabla=tratsp&cla=SATCUAASC&orb=0\" \\\n  -H \"User-Agent: Mozilla/5.0\"\n\n# Potentials / spiritual\ncurl -s \"https://grupovenus.com/sacainter.asp?tabla=starsolues&cla=SATCUAASC&orb=99\" \\\n  -H \"User-Agent: Mozilla/5.0\"\n\n# Colloquial / plain language\ncurl -s \"https://grupovenus.com/sacainter.asp?tabla=transiaw&cla=SATCUAASC&orb=99\" \\\n  -H \"User-Agent: Mozilla/5.0\"\n\nThe response is HTML. Strip tags and skip the first ~40 lines (boilerplate JS) to get the text:\n\ncurl -s \"https://grupovenus.com/sacainter.asp?tabla=tratsp&cla=CODE&orb=0\" \\\n  -H \"User-Agent: Mozilla/5.0\" \\\n  | iconv -f iso-8859-1 -t utf-8 \\\n  | sed 's/<[^>]*>//g' \\\n  | grep -v '^[[:space:]]*$' \\\n  | tail -n +40"
      },
      {
        "title": "Transit code reference",
        "body": "Format: [PLANET1][ASPECT][PLANET2]\nPLANET1 = transiting planet, PLANET2 = natal planet.\n\nPlanet codes:\n\nCodeServer nameEnglishSymbolSATSaturnoSaturn♄URAUranoUranus♅NEPNeptunoNeptune♆PLUPlutónPluto♇JUPJúpiterJupiter♃MARMarteMars♂VENVenusVenus♀MERMercurioMercury☿SOLSolSun☉LUNLunaMoon☽ASCAscendenteAscendant↑MCMedio CieloMidheaven⬆\n\nZodiac signs:\n\nServer nameEnglishSymbolAriesAries♈TauroTaurus♉GéminisGemini♊CáncerCancer♋LeoLeo♌VirgoVirgo♍LibraLibra♎EscorpioScorpio♏SagitarioSagittarius♐CapricornioCapricorn♑AcuarioAquarius♒PiscisPisces♓\n\nAspect codes:\n\nCodeServer nameEnglishDegreesSymbolCJCConjunciónConjunction0°☌SEXSextilSextile60°⚹CUACuadraturaSquare90°□TRITrígonoTrine120°△OPOOposiciónOpposition180°☍QUIQuincuncioQuincunx150°⚻\n\nUse these symbols when presenting transit readings to the user. Example: SATCUAASC → ♄ □ ↑ (Saturn square Ascendant).\n\nExamples: SATCUAASC = ♄ □ Ascendant, NEPTRIVEN = ♆ △ ♀, URACJCMER = ♅ ☌ ☿."
      },
      {
        "title": "Compatibility Reports (Two People)",
        "body": "For synastry, the nombre field must encode both people separated by |:\n\n\"Person1 data | Person2 data\"\n\nFull example (Pareja, INFORMEDESEADO=16):\n\nP1=\"Luis Alberto Spinetta;1/23/1950 4:35:00 PM;Buenos Aires;Argentina;H;;3;34S35;58W22\"\nP2=\"Charly Garcia;10/23/1951 11:20:00 AM;Buenos Aires;Argentina;H;;3;34S36;58W27\"\n\ncurl -s -X POST \"https://grupovenus.com/informes3.asp\" \\\n  -H \"Content-Type: application/x-www-form-urlencoded\" \\\n  -H \"User-Agent: Mozilla/5.0\" \\\n  --data-urlencode \"nombre=$P1 | $P2\" \\\n  --data \"urldestino=informes3.asp&INFORMEDESEADO=16&tipzod=T&TIC=&idiomas=E\"\n\nCompatibility report IDs: 16 (pareja, couple), 17 (amistad, friendship), 172 (pareja coloquial, couple casual), 90 (carta compuesta, composite chart)."
      },
      {
        "title": "Zodiac Types",
        "body": "tipzodSystemTTropical (default, most common)S1Sideral — Fagan BradleyS2Sideral — LahiriS3Sideral — SassanianS4Sideral — KrishnamurtiS5Sideral — Hipparchos"
      },
      {
        "title": "Standard POST Fields for informes3.asp",
        "body": "FieldDescriptionurldestinoAlways informes3.aspINFORMEDESEADOReport ID (see tables above)nombrePerson string (semicolon-delimited)DIA1Start day for forecastMES1Start monthANO1Start yearHORA1Start hour (local time)MINU1Start minutetipzodZodiac typeTICTicket number (leave empty for free reports)idiomasE=Spanish (Español), I=English, F=French (Français)"
      },
      {
        "title": "Surface the most intense transits",
        "body": "From a parsed INFORMEDESEADO=8 response, rank transits by bar height (intensity proxy):\n\nParse all title=\"CODE DATE orbe: D° MM'\" lines\nKeep the bar height attribute for each point\nGroup by transit code — take max(height) as peak intensity\nSort descending — top 5 are the dominant themes for the year\n\nThe orb is the complement of intensity: 0°0′ = exact = maximum impact, 1°0′ = fading. The height already encodes this visually (max 55px = exact aspect)."
      },
      {
        "title": "Identify timing windows",
        "body": "For each transit code, find the contiguous date range where height > 0. That range is the active window. Multiple windows (direct + retrograde + direct again) appear as separate bar clusters.\n\nPresent to the user as:\n\n\"Saturn square your Ascendant is active March 8 – April 14, peaks exactly March 22, then returns retrograde August 15 – November 3.\""
      },
      {
        "title": "Interpret a transit",
        "body": "For each dominant transit, fetch all 3 interpretation styles and synthesize:\n\ntratsp = technical/classical reading\nstarsolues = potential/higher-expression reading\ntransiaw = everyday colloquial reading\n\nLead with transiaw for casual conversations, tratsp for someone who wants depth."
      },
      {
        "title": "Compare two charts",
        "body": "Fetch INFORMEDESEADO=8 for Person A → parse transit codes + windows\nFetch INFORMEDESEADO=8 for Person B → parse transit codes + windows\nFind overlapping active windows — periods where both people are under major transits simultaneously\nFetch INFORMEDESEADO=16 or 17 with both persons for the synastry report\nHighlight: shared themes (both under Pluto? both under Neptune?), conflicting energies, supportive overlaps"
      },
      {
        "title": "Today's sky",
        "body": "Use INFORMEDESEADO=-1 (3 días, 3 days) or 0 (1 semana, 1 week) for short-range forecasts. These include faster planets (Moon, Sun, Jupiter). Parse the same way — the bar heights indicate what's exact or approaching today."
      },
      {
        "title": "General tone",
        "body": "You're an astrologer who knows their craft but talks like a person, not like a mystical pamphlet. Avoid:\n\n\"the stars are telling you...\" → too mystical and cliché\nlisting positions in degrees with no context → too raw\n\"this is a powerful time for growth\" → vague and useless\n\nInstead: be direct, be specific, use the symbols, name the tension or the gift without overselling it."
      },
      {
        "title": "Per-person styles",
        "body": "Each person in memory has a style field. Always read it before writing a response about them. If it's not set, ask (see Happy Path Step 1).\n\ncasual\n\nLike a friend who knows astrology. No jargon, no degrees, no house numbers unless they ask. Lead with feeling and situation, not with planet names.\n\n\"Right now something is shaking your sense of identity — who you are and how you show up. It's not comfortable, but it's not pointless either: what's falling apart probably wasn't representing you anymore.\"\n\nUse transiaw interpretations exclusively. Skip technical terms. Offer depth only if they ask.\n\ndeep\n\nFull astrological language: aspects, houses, dignities, orbs, retrograde phases. Use the symbols (♇ ☍ ↑). Mention which interpretation style you're drawing from. Structure the reading clearly.\n\n\"♇ Pluto in transit is exactly opposite (☍) your natal ↑ Ascendant at 5°♌ Leo, orb 0°. This is a long-duration transit — active from March 2026 through February 2027, exact peak on 26/3. In house terms, Pluto is transiting your 7th House, focusing the transformation on relationships and how you relate to others.\"\n\nFetch and synthesize all 3 interpretation styles (tratsp, starsolues, transiaw). Mention timing windows explicitly.\n\npractical\n\nSkip the poetry, focus on what to do and when. Windows, peaks, warnings. What's favorable, what to watch out for. Calendar-friendly.\n\n\"April 3–17: good window to start physical projects or make decisions requiring sustained energy (♄ △ ♂).\nMay 3 – February 2027: long growth period for structured projects — don't rush, consistency wins (♄ △ ♃).\nWatch June: tension between what you want to change and what the context allows (♄ □ ♅).\"\n\nUse only dates, peaks, and a one-line action note per transit. No extended interpretation unless asked.\n\nThis is the recommended flow for a first-time reading. Do not dump all available data at once. Each step should feel like a natural conversation beat."
      },
      {
        "title": "Step 1 — Register and show the chart",
        "body": "After the user provides their birth data, register them (see Adding a Person), save to memory. Before generating any reading, ask for their preferred style if it's not already set:\n\n\"How would you like me to read your chart?\n\nCasual — like a friend who knows astrology, no technical jargon\nDeep — full aspects, houses, and timing\nPractical — straight to the point: what to do and when\"\n\nSave the chosen style to their record in memory, then immediately:\n\nFetch and display the natal chart PNG (dibujo.aspx)\n\n\nWrite a brief profile — 3–4 sentences max, in plain language. Focus on:\n\nSun sign: core identity and drive\nAscendant: how they show up in the world\nMoon sign: emotional nature\nAny tight conjunctions or stelliums that stand out (e.g. Mars + Jupiter in the same sign)\n\n\nExample: \"You're ♊ Gemini with ♌ Leo rising — quick mind, strong presence. Your ☽ Moon in ♓ Pisces gives you a depth of feeling you don't always show. ♂ Mars and ♃ Jupiter together in ♌ Leo in your 1st House is a lot: energy, ambition, and a real need for what you do to matter.\"\n\n\n\nFetch the 1-year transit graph (INFORMEDESEADO=8, starting from today) and identify the 2–3 most active transits right now (highest height values in the current month).\n\n\nWrite a quick current snapshot — what's happening astrologically now, in 2–4 sentences, using the transiaw interpretation style (colloquial). Fetch sacainter.asp?tabla=transiaw for each active transit and synthesize — don't paste the raw text.\n\nExample: \"Right now you're in the middle of ♇ Pluto ☍ opposite your ↑ Ascendant — basically a long identity renovation. Things that no longer represent you are falling away, sometimes uncomfortably. At the same time ♄ Saturn is in a harmonious △ transit, so there's structure available if you reach for it.\""
      },
      {
        "title": "Step 2 — Offer next steps (short menu, not overwhelming)",
        "body": "After the snapshot, offer at most 3–4 options clearly:\n\nWhat would you like to explore?\n\nYear forecast — the most important transits month by month\nA specific transit — if something I mentioned resonated, I can go deeper\nCompatibility — if you have someone in mind, we can compare charts\nSolar return — what this birthday year brings in particular\n\nDon't mention ticket-gated reports unless the user asks for something that requires one.\n\nPast dates: INFORMEDESEADO=8 (1 year) is only free if DIA1/MES1/ANO1 is today or later. For past dates the server returns \"Para el resto de opciones necesita obtener un Ticket\" (a ticket is required). Do not offer full-year retrospective readings on the free tier."
      },
      {
        "title": "Step 3 — Go deep on demand",
        "body": "Only when the user asks to explore something specific:\n\nFetch all 3 interpretation styles (tratsp, starsolues, transiaw) for that transit\nSynthesize them into a coherent 1–3 paragraph reading\nMention timing: when is it exact, when does it fade, does it return retrograde"
      },
      {
        "title": "Conversational Suggestions",
        "body": "Multiple people stored — offer comparisons: \"I also have [name] saved. Want me to compare your charts?\"\n\n\nZodiac type — default to Tropical. Mention Sidereal (Lahiri) only if the user asks.\n\n\nPast dates — INFORMEDESEADO=8 (1 year, slow planets) only accepts dates from today forward on the free tier. Short-range reports (-1, 0, 1) may work with past dates.\n\n\nLanguage — idiomas=E (Spanish), I (English), F (French). Match the user's language in your responses regardless of which idiomas value is sent."
      },
      {
        "title": "Add a person and fetch their year forecast",
        "body": "# 1. Look up city\ncurl -s \"https://grupovenus.com/buscaciudjson.asp?q=Rosario&pais=Argentina\"\n\n# 2. Register person with cookie jar (3-step flow required)\nCOOKIEJAR=$(mktemp)\n\ncurl -s -c \"$COOKIEJAR\" -b \"$COOKIEJAR\" \"https://grupovenus.com/info.asp\" \\\n  -H \"User-Agent: Mozilla/5.0\" > /dev/null\n\ncurl -s -c \"$COOKIEJAR\" -b \"$COOKIEJAR\" \"https://grupovenus.com/personas.asp?nue\" \\\n  -H \"User-Agent: Mozilla/5.0\" \\\n  -H \"Referer: https://grupovenus.com/info.asp\" > /dev/null\n\ncurl -s -c \"$COOKIEJAR\" -b \"$COOKIEJAR\" -X POST \"https://grupovenus.com/ciuda.asp\" \\\n  -H \"Content-Type: application/x-www-form-urlencoded\" \\\n  -H \"User-Agent: Mozilla/5.0\" \\\n  -H \"Referer: https://grupovenus.com/personas.asp?nue\" \\\n  --data \"urldestino=personas.asp%3Fok&nombre=Maria&DIA=15&MES=3&ANO=1992&HORA=14&MINU=30&08CIUDAD=Rosario&14PAIS=Argentina&SEXO=V\" > /dev/null\n\n# 3. Get d0 cookie with coordinates from the redirect target\nD0=$(curl -si -c \"$COOKIEJAR\" -b \"$COOKIEJAR\" \"https://grupovenus.com/personas.asp?ok\" \\\n  -H \"User-Agent: Mozilla/5.0\" \\\n  -H \"Referer: https://grupovenus.com/ciuda.asp\" \\\n  | grep -i 'set-cookie.*d0=' \\\n  | sed 's/.*d0=//I' | cut -d';' -f1 \\\n  | python3 -c \"import sys,urllib.parse; print(urllib.parse.unquote(sys.stdin.read().strip()))\")\necho \"d0 decoded: $D0\"\n# → Maria  ;3/15/1992 2:30:00 PM;Rosario;Argentina;V;;3;32S57;60W40\n\n# 4. Fetch 1-year transit graph (no session needed for reports)\ncurl -s -X POST \"https://grupovenus.com/informes3.asp\" \\\n  -H \"Content-Type: application/x-www-form-urlencoded\" \\\n  -H \"User-Agent: Mozilla/5.0\" \\\n  --data-urlencode \"nombre=Maria;3/15/1992 2:30:00 PM;Rosario;Argentina;V;;3;32S57;60W40\" \\\n  --data \"urldestino=informes3.asp&INFORMEDESEADO=8&DIA1=1&MES1=1&ANO1=2026&HORA1=00&MINU1=00&tipzod=T&TIC=&idiomas=E\" \\\n  -o maria_transits.html\n\n# 5. Extract transit data\ngrep 'class=\"barras\"' maria_transits.html \\\n  | grep -o 'title=\"[^\"]*\"' \\\n  | iconv -f iso-8859-1 -t utf-8 \\\n  | sed 's/title=\"//;s/\"//' \\\n  | sort -t' ' -k2 -n\n\n# 6. Fetch natal chart PNG\ncurl -s \"https://grupovenus.com/dibujo.aspx\" \\\n  --get \\\n  --data-urlencode \"fec=3/15/1992 2:30:00 PM\" \\\n  --data-urlencode \"aju=3\" \\\n  --data-urlencode \"ciu=Rosario\" \\\n  --data \"pais=Argentina\" \\\n  --data-urlencode \"lat=-32.9333\" \\\n  --data-urlencode \"lon=60.6667\" \\\n  --data-urlencode \"nom=Maria\" \\\n  --data \"bot=atras&idioma=E&CASASPRO=&zodi=T\" \\\n  -H \"User-Agent: Mozilla/5.0\" \\\n  -o maria_chart.png"
      },
      {
        "title": "Notes",
        "body": "The site uses iso-8859-1 encoding. Always pipe through iconv -f iso-8859-1 -t utf-8 when reading HTML.\nPOST data to ciuda.asp must also use iso-8859-1 percent-encoding, not UTF-8. For accented characters: í = %ED, á = %E1, é = %E9, ó = %F3, ú = %FA, ñ = %F1. Using UTF-8 encoding (e.g. %C3%AD for í) causes the server to silently ignore the city and assign wrong default coordinates with empty city/country fields in the d0 cookie.\nThere is no server-side rate limiting observed, but be considerate — add a small delay between batch requests.\nSession cookies (ASPSESSIONID...) are only needed during the registration flow. Report requests (informes3.asp, dibujo.aspx, sacainter.asp) do not need any session cookie.\nAlways use a cookie jar (-c/-b flags) for the registration flow. Manually extracting and passing a single ASPSESSION cookie header will fail with \"session expired\" because the server validates multi-cookie state.\nThe registration flow is exactly 3 steps before the final personas.asp?ok call: info.asp → personas.asp?nue → POST ciuda.asp. Skipping any step causes session expiry.\nThe Referer header is required on both the personas.asp?nue GET and the ciuda.asp POST. Without it the server rejects the request.\nThe sacainter.asp referrer check is JavaScript-only — the server serves content regardless of origin.\nTicket-gated reports return HTTP 200 with a plain \"Para el resto de opciones necesita obtener un Ticket\" message in the body — detect by checking for that string."
      }
    ],
    "body": "Grupo Venus\n\nUse this skill to fetch free astrological charts, transit forecasts, and compatibility reports from grupovenus.com — a classic ASP astrology platform with a rich free tier. Manage multiple people in memory and analyze charts conversationally.\n\nUnofficial skill. Not affiliated with or endorsed by Grupo Venus. Uses the public free tier of grupovenus.com as-is.\n\nBase URL: https://grupovenus.com No API key required. Data is session-cookie based; person data is stored locally in memory.\n\nPeople Storage\n\nAll person data lives in your memory file. Load it before any operation:\n\n~/.openclaw/workspace/memory/grupo-venus.json\n\n\nStructure (we use Luis Alberto Spinetta as the example throughout this skill — because he's from another planet):\n\n{\n  \"people\": {\n    \"spinetta\": {\n      \"name\": \"Luis Alberto Spinetta\",\n      \"birthdate\": \"1/23/1950 4:35:00 PM\",\n      \"city\": \"Buenos Aires\",\n      \"country\": \"Argentina\",\n      \"sex\": \"H\",\n      \"tz_offset\": \"3\",\n      \"lat_dms\": \"34S35\",\n      \"lon_dms\": \"58W22\",\n      \"lat_decimal\": -34.5833,\n      \"lon_decimal\": 58.3667,\n      \"style\": \"deep\"\n    }\n  }\n}\n\n\nsex: H = Hombre (male), V = Varón/Mujer — use H for male, V for female. tz_offset: Hours from UTC, sign inverted: 3 = UTC-3 (Argentina), -1 = UTC+1 (Madrid). lat_dms / lon_dms: 34S35 = 34°35′S, 58W22 = 58°22′W. N/S and E/W are explicit. style: Communication style preference — casual, deep, or practical. See Voice & Style section.\n\nIf the file doesn't exist yet, create it with {\"people\": {}}.\n\nAdding a Person\nStep 1 — Look up the city coordinates\ncurl -s \"https://grupovenus.com/buscaciudjson.asp?q=CITY&pais=COUNTRY\"\n\n\nExample:\n\ncurl -s \"https://grupovenus.com/buscaciudjson.asp?q=Bahia+Blanca&pais=Argentina\"\n# → [{\"label\":\"Bahia Blanca, Argentina\"}]\n\n\nThis confirms the city/country string the server recognises. Use the exact spelling returned.\n\nStep 2 — Register the person to get coordinates + timezone\n\nThe server requires a properly established session with Referer headers. Always use a cookie jar (-c/-b) — manually passing a single ASPSESSION cookie will result in \"session expired\" errors.\n\nCOOKIEJAR=$(mktemp)\n\n# 2a. Establish session\ncurl -s -c \"$COOKIEJAR\" -b \"$COOKIEJAR\" \"https://grupovenus.com/info.asp\" \\\n  -H \"User-Agent: Mozilla/5.0\" > /dev/null\n\n# 2b. Load the registration form (sets server-side session state)\ncurl -s -c \"$COOKIEJAR\" -b \"$COOKIEJAR\" \"https://grupovenus.com/personas.asp?nue\" \\\n  -H \"User-Agent: Mozilla/5.0\" \\\n  -H \"Referer: https://grupovenus.com/info.asp\" > /dev/null\n\n# 2c. POST the person data (Referer header is required)\n# IMPORTANT: city names with accents must be encoded in iso-8859-1, NOT UTF-8.\n# e.g. \"Bahía Blanca\" → \"Bah%EDa+Blanca\" (%ED = í in Latin-1, NOT %C3%AD which is UTF-8)\n# If the city is not recognized, the server silently assigns wrong/default coordinates.\n# Verify by checking that the city and country fields are non-empty in the d0 cookie response.\ncurl -s -c \"$COOKIEJAR\" -b \"$COOKIEJAR\" -X POST \"https://grupovenus.com/ciuda.asp\" \\\n  -H \"Content-Type: application/x-www-form-urlencoded\" \\\n  -H \"User-Agent: Mozilla/5.0\" \\\n  -H \"Referer: https://grupovenus.com/personas.asp?nue\" \\\n  --data \"urldestino=personas.asp%3Fok&nombre=NAME&DIA=DD&MES=MM&ANO=YYYY&HORA=HH&MINU=MM&08CIUDAD=CITY&14PAIS=COUNTRY&SEXO=H\" > /dev/null\n\n# 2d. Follow redirect to personas.asp?ok — the d0 cookie is set here\nPERSONAS_RESP=$(curl -si -c \"$COOKIEJAR\" -b \"$COOKIEJAR\" \"https://grupovenus.com/personas.asp?ok\" \\\n  -H \"User-Agent: Mozilla/5.0\" \\\n  -H \"Referer: https://grupovenus.com/ciuda.asp\")\n\n\nThe personas.asp?ok response sets two cookies in its headers:\n\nSet-Cookie: d0=NAME;M/D/YYYY H:MM:SS AM/PM;CITY;COUNTRY;SEX;;TZ;latNS;lonEW\nSet-Cookie: haycoo=NAME;TZ;DATE;TIMEZONE_NAME;\n\n\nExtract and URL-decode the d0 value from $PERSONAS_RESP:\n\nD0=$(echo \"$PERSONAS_RESP\" \\\n  | grep -i 'set-cookie.*d0=' \\\n  | sed 's/.*d0=//I' | cut -d';' -f1 \\\n  | python3 -c \"import sys,urllib.parse; print(urllib.parse.unquote(sys.stdin.read().strip()))\")\necho \"d0 decoded: $D0\"\n# → NAME ;M/D/YYYY H:MM:SS AM/PM;CITY;COUNTRY;SEX;;TZ;latDMS;lonDMS\n\n\nFields (semicolon-separated):\n\nField 7: tz_offset\nField 8: lat_dms (e.g. 38S43)\nField 9: lon_dms (e.g. 62W17)\n\nConvert DMS to decimal for storage:\n\n34S35 → -(34 + 35/60) = -34.5833\n58W22 → 58 + 22/60 = 58.3667 (positive = West, as stored by the server)\n\nSave the full person entry to grupo-venus.json.\n\nField reference for ciuda.asp POST\nField\tValue\nurldestino\tpersonas.asp?ok (URL-encoded)\nnombre\tPerson's name\nDIA\tBirth day (1–31)\nMES\tBirth month (1–12)\nANO\tBirth year (4 digits)\nHORA\tBirth hour 0–23 (local time)\nMINU\tBirth minute 0–59\n08CIUDAD\tCity name\n14PAIS\tCountry name\nSEXO\tH or V\n\nNote: The nom2=nue field seen in older docs does not exist in the actual form and must be omitted. The Referer: https://grupovenus.com/personas.asp?nue header is required — without it the server returns \"session expired\" even with a valid ASPSESSION cookie.\n\nBuilding the Cookie String\n\nAll report endpoints need the nombre value — the semicolon-delimited person string:\n\n\"NAME ;M/D/YYYY H:MM:SS AM/PM;CITY;COUNTRY;SEX;;TZ;latDMS;lonDMS\"\n\n\nExample:\n\n\"Luis Alberto Spinetta;1/23/1950 4:35:00 PM;Buenos Aires;Argentina;H;;3;34S35;58W22\"\n\n\nTo URL-encode it for a POST body in curl use --data-urlencode:\n\n--data-urlencode \"nombre=Luis Alberto Spinetta;1/23/1950 4:35:00 PM;Buenos Aires;Argentina;H;;3;34S35;58W22\"\n\nNatal Chart Image\n\nFetch the natal chart as a PNG image (free, no auth):\n\ncurl -s \"https://grupovenus.com/dibujo.aspx\" \\\n  --get \\\n  --data-urlencode \"fec=1/23/1950 4:35:00 PM\" \\\n  --data-urlencode \"aju=3\" \\\n  --data-urlencode \"ciu=Buenos Aires\" \\\n  --data \"pais=Argentina\" \\\n  --data-urlencode \"lat=-34.5833\" \\\n  --data-urlencode \"lon=58.3667\" \\\n  --data-urlencode \"nom=Luis Alberto Spinetta\" \\\n  --data \"bot=atras&idioma=E&CASASPRO=&zodi=T\" \\\n  -H \"User-Agent: Mozilla/5.0\" \\\n  -o chart_spinetta.png\n\nParameter\tDescription\nfec\tBirthdate: M/D/YYYY H:MM:SS AM/PM\naju\tTimezone offset (from person record)\nciu\tCity name\npais\tCountry\nlat\tLatitude decimal (negative = South)\nlon\tLongitude decimal (positive = West, as stored)\nnom\tPerson name\nidioma\tE=Spanish, I=English, F=French\nzodi\tT=Tropical, S1=Fagan-Bradley, S2=Lahiri, S3=Sassanian, S4=Krishnamurti, S5=Hipparchos\n\nReturns Content-Type: image/png. Save to file or display directly.\n\nTransit Forecast Graph\n\nPOST to informes3.asp to get a 1-year forecast with all slow-planet transits:\n\ncurl -s -X POST \"https://grupovenus.com/informes3.asp\" \\\n  -H \"Content-Type: application/x-www-form-urlencoded\" \\\n  -H \"User-Agent: Mozilla/5.0\" \\\n  --data-urlencode \"nombre=Luis Alberto Spinetta;1/23/1950 4:35:00 PM;Buenos Aires;Argentina;H;;3;34S35;58W22\" \\\n  --data \"urldestino=informes3.asp\" \\\n  --data \"INFORMEDESEADO=8\" \\\n  --data \"DIA1=28&MES1=2&ANO1=2026\" \\\n  --data \"HORA1=09&MINU1=00\" \\\n  --data \"tipzod=T&TIC=&idiomas=E\"\n\n\nThe HTML response encodes all transit data as title attributes on <img class=\"barras\"> elements:\n\n<img class=\"barras\" src=\"./fotos/barraSAT.jpg\"\n     title=\"SATsexMER 4/3/2026 0:0 orbe: 0° 43'\"\n     width=5 height=13>\n\nParsing transit data\n\nExtract all data points with:\n\ngrep 'class=\"barras\"' response.html \\\n  | grep -o 'title=\"[^\"]*\"' \\\n  | sed 's/title=\"//;s/\"//'\n\n\nEach title line has the format:\n\n[r ]CODE DD/MM/YYYY H:MM orbe: D° MM'\n\nr prefix = retrograde transit\nCODE = transit code (see table below)\ndate = exact date of this data point (every 2 days)\norbe = orb in degrees/minutes (0°0′ = exact)\nheight attribute = bar height (1–55), proxy for intensity: intensity = height / 55\n\nThe first <a href=\"sacainter.asp?...cla=CODE...\"> before the bars gives you the human label and the code to fetch interpretation.\n\nReport types — forecast period and planets\nINFORMEDESEADO\tServer label\tTransiting planets\tPeriod\tAccess\n8\t1 año Sat-Plu (1 year, Saturn–Pluto)\tSAT, URA, NEP, PLU\t1 year\tFree\n-1\t3 días Lun-Júp (3 days, Moon–Jupiter)\tLUN, SOL, JUP\t3 days\tFree\n0\t1 semana Luna,Sol-Júp (1 week, Moon/Sun–Jupiter)\tLUN, SOL, JUP\t1 week\tFree\n1\t2 semanas Sol-Plu (2 weeks, Sun–Pluto)\tSOL, MAR, JUP, SAT, URA, NEP, PLU\t2 weeks\tFree\n7\t2 años Sat-Plu (2 years, Saturn–Pluto)\tSAT, URA, NEP, PLU\t2 years\tTicket\n6\t1 año Jup-Plu (1 year, Jupiter–Pluto)\tJUP...PLU\t1 year\tTicket\n4\t3 meses Mar-Plu (3 months, Mars–Pluto)\tMAR...PLU\t3 months\tTicket\n\nThe free INFORMEDESEADO=8 is the richest free dataset. It includes all transits of the 4 outer planets (SAT, URA, NEP, PLU) to all natal planets (SOL, LUN, MER, VEN, MAR, JUP, SAT, URA, ASC, MC) for 1 full year, with exact peak dates and orb values every 2 days.\n\nFull Report List\nNatal Reports\nID\tName\tAccess\n50\tMi pronóstico para Hoy\tFree\n62\tCarta Natal\tTicket\n66\tInforme Vocacional\tTicket\n63\tInforme Infantil\tTicket\n61\tCarta SuperNatal\tTicket\n65\tAstrología Espiritual\tTicket\n64\tAstrología Kármica\tTicket\n69\tInforme Indra\tFree (partial)\n170\tCarta Natal con Quirón\tFree (partial)\n171\tInforme Infantil coloquial\tFree (partial)\n174\tVocacional simple\tFree\n67\tAstrología y Tarot\tFree (partial)\n945\tNumerología Básica\tFree\n947\tNumerología Avanzada\tFree\nCompatibility (two people required)\nID\tName\tAccess\n16\tDe Pareja\tFree (partial)\n17\tDe Amistad\tFree (partial)\n172\tDe Pareja coloquial\tFree (partial)\n90\tCarta Compuesta\tFree (partial)\nChart Drawings\nID\tName\tAccess\n941\tDibujo de su Carta Astral\tFree → redirects to dibujo0.aspx\n942\tDibujo Carta para hoy\tFree\n943\tSuperponer dos Cartas\tFree\n944\tCarta Compuesta (drawing)\tFree\nForecast Graphs\nID\tName\tAccess\n8\t1 año Sat-Plu\tFree (full data)\n-1\t3 días Lun-Júp\tFree\n0\t1 semana Luna,Sol-Júp\tFree\n1\t2 semanas Sol-Plu\tFree\n199\tGráfico pronóstico de pareja\tFree\n7\t2 años Sat-Plu\tTicket\n6\t1 año Jup-Plu\tTicket\n4\t3 meses Mar-Plu\tTicket\nSymbolic Predictions\nID\tName\tAccess\n13\tRevolución Solar\tFree (partial)\n15\tRevolución Lunar\tFree (partial)\n14\tProgresiones\tFree (partial)\n68\tCiudades y Pueblos\tFree (partial)\n173\tRevolución Solar Coloquial\tFree (partial)\nForecasts — Relationship\nID\tName\tAccess\n23\t12 meses, Marte a Plutón\tFree (partial)\n199\tVarios períodos (graph)\tFree\n22\t2 meses, Sol a Plutón\tTicket\nForecasts — General\nID\tName\tAccess\n99\t1 semana, Luna a Plutón\tTicket\n100\t2 meses, Sol a Plutón\tTicket\n101\t7 meses, Marte a Plutón\tTicket\n102\t18 meses, Júpiter a Plutón\tTicket\nForecasts — Kármico-Espiritual\nID\tName\tAccess\n103\t4 meses, Sol a Plutón\tTicket\n104\t7 meses, Marte a Plutón\tTicket\n105\t1 año, Júpiter a Plutón\tTicket\nForecasts — Sentimental\nID\tName\tAccess\n106\t4 meses, Sol a Plutón\tTicket\n107\t1 año, Marte a Plutón\tTicket\nForecasts — Coloquial\nID\tName\tAccess\n108\t2 meses\tTicket\n109\t7 meses\tTicket\n110\t18 meses\tTicket\nSolo quincuncios / Negocios\nID\tName\tAccess\n126\t1 año, Marte a Plutón\tFree (partial)\n121\t9 meses, Sol Marte a Plutón\tFree (partial)\nTransit Interpretation Texts\n\nFor any transit code, fetch 3 different interpretation styles — no auth required:\n\n# General / technical\ncurl -s \"https://grupovenus.com/sacainter.asp?tabla=tratsp&cla=SATCUAASC&orb=0\" \\\n  -H \"User-Agent: Mozilla/5.0\"\n\n# Potentials / spiritual\ncurl -s \"https://grupovenus.com/sacainter.asp?tabla=starsolues&cla=SATCUAASC&orb=99\" \\\n  -H \"User-Agent: Mozilla/5.0\"\n\n# Colloquial / plain language\ncurl -s \"https://grupovenus.com/sacainter.asp?tabla=transiaw&cla=SATCUAASC&orb=99\" \\\n  -H \"User-Agent: Mozilla/5.0\"\n\n\nThe response is HTML. Strip tags and skip the first ~40 lines (boilerplate JS) to get the text:\n\ncurl -s \"https://grupovenus.com/sacainter.asp?tabla=tratsp&cla=CODE&orb=0\" \\\n  -H \"User-Agent: Mozilla/5.0\" \\\n  | iconv -f iso-8859-1 -t utf-8 \\\n  | sed 's/<[^>]*>//g' \\\n  | grep -v '^[[:space:]]*$' \\\n  | tail -n +40\n\nTransit code reference\n\nFormat: [PLANET1][ASPECT][PLANET2] PLANET1 = transiting planet, PLANET2 = natal planet.\n\nPlanet codes:\n\nCode\tServer name\tEnglish\tSymbol\nSAT\tSaturno\tSaturn\t♄\nURA\tUrano\tUranus\t♅\nNEP\tNeptuno\tNeptune\t♆\nPLU\tPlutón\tPluto\t♇\nJUP\tJúpiter\tJupiter\t♃\nMAR\tMarte\tMars\t♂\nVEN\tVenus\tVenus\t♀\nMER\tMercurio\tMercury\t☿\nSOL\tSol\tSun\t☉\nLUN\tLuna\tMoon\t☽\nASC\tAscendente\tAscendant\t↑\nMC\tMedio Cielo\tMidheaven\t⬆\n\nZodiac signs:\n\nServer name\tEnglish\tSymbol\nAries\tAries\t♈\nTauro\tTaurus\t♉\nGéminis\tGemini\t♊\nCáncer\tCancer\t♋\nLeo\tLeo\t♌\nVirgo\tVirgo\t♍\nLibra\tLibra\t♎\nEscorpio\tScorpio\t♏\nSagitario\tSagittarius\t♐\nCapricornio\tCapricorn\t♑\nAcuario\tAquarius\t♒\nPiscis\tPisces\t♓\n\nAspect codes:\n\nCode\tServer name\tEnglish\tDegrees\tSymbol\nCJC\tConjunción\tConjunction\t0°\t☌\nSEX\tSextil\tSextile\t60°\t⚹\nCUA\tCuadratura\tSquare\t90°\t□\nTRI\tTrígono\tTrine\t120°\t△\nOPO\tOposición\tOpposition\t180°\t☍\nQUI\tQuincuncio\tQuincunx\t150°\t⚻\n\nUse these symbols when presenting transit readings to the user. Example: SATCUAASC → ♄ □ ↑ (Saturn square Ascendant).\n\nExamples: SATCUAASC = ♄ □ Ascendant, NEPTRIVEN = ♆ △ ♀, URACJCMER = ♅ ☌ ☿.\n\nCompatibility Reports (Two People)\n\nFor synastry, the nombre field must encode both people separated by |:\n\n\"Person1 data | Person2 data\"\n\n\nFull example (Pareja, INFORMEDESEADO=16):\n\nP1=\"Luis Alberto Spinetta;1/23/1950 4:35:00 PM;Buenos Aires;Argentina;H;;3;34S35;58W22\"\nP2=\"Charly Garcia;10/23/1951 11:20:00 AM;Buenos Aires;Argentina;H;;3;34S36;58W27\"\n\ncurl -s -X POST \"https://grupovenus.com/informes3.asp\" \\\n  -H \"Content-Type: application/x-www-form-urlencoded\" \\\n  -H \"User-Agent: Mozilla/5.0\" \\\n  --data-urlencode \"nombre=$P1 | $P2\" \\\n  --data \"urldestino=informes3.asp&INFORMEDESEADO=16&tipzod=T&TIC=&idiomas=E\"\n\n\nCompatibility report IDs: 16 (pareja, couple), 17 (amistad, friendship), 172 (pareja coloquial, couple casual), 90 (carta compuesta, composite chart).\n\nZodiac Types\ntipzod\tSystem\nT\tTropical (default, most common)\nS1\tSideral — Fagan Bradley\nS2\tSideral — Lahiri\nS3\tSideral — Sassanian\nS4\tSideral — Krishnamurti\nS5\tSideral — Hipparchos\nStandard POST Fields for informes3.asp\nField\tDescription\nurldestino\tAlways informes3.asp\nINFORMEDESEADO\tReport ID (see tables above)\nnombre\tPerson string (semicolon-delimited)\nDIA1\tStart day for forecast\nMES1\tStart month\nANO1\tStart year\nHORA1\tStart hour (local time)\nMINU1\tStart minute\ntipzod\tZodiac type\nTIC\tTicket number (leave empty for free reports)\nidiomas\tE=Spanish (Español), I=English, F=French (Français)\nAnalysis Patterns\nSurface the most intense transits\n\nFrom a parsed INFORMEDESEADO=8 response, rank transits by bar height (intensity proxy):\n\nParse all title=\"CODE DATE orbe: D° MM'\" lines\nKeep the bar height attribute for each point\nGroup by transit code — take max(height) as peak intensity\nSort descending — top 5 are the dominant themes for the year\n\nThe orb is the complement of intensity: 0°0′ = exact = maximum impact, 1°0′ = fading. The height already encodes this visually (max 55px = exact aspect).\n\nIdentify timing windows\n\nFor each transit code, find the contiguous date range where height > 0. That range is the active window. Multiple windows (direct + retrograde + direct again) appear as separate bar clusters.\n\nPresent to the user as:\n\n\"Saturn square your Ascendant is active March 8 – April 14, peaks exactly March 22, then returns retrograde August 15 – November 3.\"\n\nInterpret a transit\n\nFor each dominant transit, fetch all 3 interpretation styles and synthesize:\n\ntratsp = technical/classical reading\nstarsolues = potential/higher-expression reading\ntransiaw = everyday colloquial reading\n\nLead with transiaw for casual conversations, tratsp for someone who wants depth.\n\nCompare two charts\nFetch INFORMEDESEADO=8 for Person A → parse transit codes + windows\nFetch INFORMEDESEADO=8 for Person B → parse transit codes + windows\nFind overlapping active windows — periods where both people are under major transits simultaneously\nFetch INFORMEDESEADO=16 or 17 with both persons for the synastry report\nHighlight: shared themes (both under Pluto? both under Neptune?), conflicting energies, supportive overlaps\nToday's sky\n\nUse INFORMEDESEADO=-1 (3 días, 3 days) or 0 (1 semana, 1 week) for short-range forecasts. These include faster planets (Moon, Sun, Jupiter). Parse the same way — the bar heights indicate what's exact or approaching today.\n\nVoice & Style\nGeneral tone\n\nYou're an astrologer who knows their craft but talks like a person, not like a mystical pamphlet. Avoid:\n\n\"the stars are telling you...\" → too mystical and cliché\nlisting positions in degrees with no context → too raw\n\"this is a powerful time for growth\" → vague and useless\n\nInstead: be direct, be specific, use the symbols, name the tension or the gift without overselling it.\n\nPer-person styles\n\nEach person in memory has a style field. Always read it before writing a response about them. If it's not set, ask (see Happy Path Step 1).\n\ncasual\n\nLike a friend who knows astrology. No jargon, no degrees, no house numbers unless they ask. Lead with feeling and situation, not with planet names.\n\n\"Right now something is shaking your sense of identity — who you are and how you show up. It's not comfortable, but it's not pointless either: what's falling apart probably wasn't representing you anymore.\"\n\nUse transiaw interpretations exclusively. Skip technical terms. Offer depth only if they ask.\n\ndeep\n\nFull astrological language: aspects, houses, dignities, orbs, retrograde phases. Use the symbols (♇ ☍ ↑). Mention which interpretation style you're drawing from. Structure the reading clearly.\n\n\"♇ Pluto in transit is exactly opposite (☍) your natal ↑ Ascendant at 5°♌ Leo, orb 0°. This is a long-duration transit — active from March 2026 through February 2027, exact peak on 26/3. In house terms, Pluto is transiting your 7th House, focusing the transformation on relationships and how you relate to others.\"\n\nFetch and synthesize all 3 interpretation styles (tratsp, starsolues, transiaw). Mention timing windows explicitly.\n\npractical\n\nSkip the poetry, focus on what to do and when. Windows, peaks, warnings. What's favorable, what to watch out for. Calendar-friendly.\n\n\"April 3–17: good window to start physical projects or make decisions requiring sustained energy (♄ △ ♂). May 3 – February 2027: long growth period for structured projects — don't rush, consistency wins (♄ △ ♃). Watch June: tension between what you want to change and what the context allows (♄ □ ♅).\"\n\nUse only dates, peaks, and a one-line action note per transit. No extended interpretation unless asked.\n\nThis is the recommended flow for a first-time reading. Do not dump all available data at once. Each step should feel like a natural conversation beat.\n\nStep 1 — Register and show the chart\n\nAfter the user provides their birth data, register them (see Adding a Person), save to memory. Before generating any reading, ask for their preferred style if it's not already set:\n\n\"How would you like me to read your chart?\n\nCasual — like a friend who knows astrology, no technical jargon\nDeep — full aspects, houses, and timing\nPractical — straight to the point: what to do and when\"\n\nSave the chosen style to their record in memory, then immediately:\n\nFetch and display the natal chart PNG (dibujo.aspx)\n\nWrite a brief profile — 3–4 sentences max, in plain language. Focus on:\n\nSun sign: core identity and drive\nAscendant: how they show up in the world\nMoon sign: emotional nature\nAny tight conjunctions or stelliums that stand out (e.g. Mars + Jupiter in the same sign)\n\nExample: \"You're ♊ Gemini with ♌ Leo rising — quick mind, strong presence. Your ☽ Moon in ♓ Pisces gives you a depth of feeling you don't always show. ♂ Mars and ♃ Jupiter together in ♌ Leo in your 1st House is a lot: energy, ambition, and a real need for what you do to matter.\"\n\nFetch the 1-year transit graph (INFORMEDESEADO=8, starting from today) and identify the 2–3 most active transits right now (highest height values in the current month).\n\nWrite a quick current snapshot — what's happening astrologically now, in 2–4 sentences, using the transiaw interpretation style (colloquial). Fetch sacainter.asp?tabla=transiaw for each active transit and synthesize — don't paste the raw text.\n\nExample: \"Right now you're in the middle of ♇ Pluto ☍ opposite your ↑ Ascendant — basically a long identity renovation. Things that no longer represent you are falling away, sometimes uncomfortably. At the same time ♄ Saturn is in a harmonious △ transit, so there's structure available if you reach for it.\"\n\nStep 2 — Offer next steps (short menu, not overwhelming)\n\nAfter the snapshot, offer at most 3–4 options clearly:\n\nWhat would you like to explore?\n\nYear forecast — the most important transits month by month\nA specific transit — if something I mentioned resonated, I can go deeper\nCompatibility — if you have someone in mind, we can compare charts\nSolar return — what this birthday year brings in particular\n\nDon't mention ticket-gated reports unless the user asks for something that requires one.\n\nPast dates: INFORMEDESEADO=8 (1 year) is only free if DIA1/MES1/ANO1 is today or later. For past dates the server returns \"Para el resto de opciones necesita obtener un Ticket\" (a ticket is required). Do not offer full-year retrospective readings on the free tier.\n\nStep 3 — Go deep on demand\n\nOnly when the user asks to explore something specific:\n\nFetch all 3 interpretation styles (tratsp, starsolues, transiaw) for that transit\nSynthesize them into a coherent 1–3 paragraph reading\nMention timing: when is it exact, when does it fade, does it return retrograde\nConversational Suggestions\n\nMultiple people stored — offer comparisons: \"I also have [name] saved. Want me to compare your charts?\"\n\nZodiac type — default to Tropical. Mention Sidereal (Lahiri) only if the user asks.\n\nPast dates — INFORMEDESEADO=8 (1 year, slow planets) only accepts dates from today forward on the free tier. Short-range reports (-1, 0, 1) may work with past dates.\n\nLanguage — idiomas=E (Spanish), I (English), F (French). Match the user's language in your responses regardless of which idiomas value is sent.\n\nExample Workflow\nAdd a person and fetch their year forecast\n# 1. Look up city\ncurl -s \"https://grupovenus.com/buscaciudjson.asp?q=Rosario&pais=Argentina\"\n\n# 2. Register person with cookie jar (3-step flow required)\nCOOKIEJAR=$(mktemp)\n\ncurl -s -c \"$COOKIEJAR\" -b \"$COOKIEJAR\" \"https://grupovenus.com/info.asp\" \\\n  -H \"User-Agent: Mozilla/5.0\" > /dev/null\n\ncurl -s -c \"$COOKIEJAR\" -b \"$COOKIEJAR\" \"https://grupovenus.com/personas.asp?nue\" \\\n  -H \"User-Agent: Mozilla/5.0\" \\\n  -H \"Referer: https://grupovenus.com/info.asp\" > /dev/null\n\ncurl -s -c \"$COOKIEJAR\" -b \"$COOKIEJAR\" -X POST \"https://grupovenus.com/ciuda.asp\" \\\n  -H \"Content-Type: application/x-www-form-urlencoded\" \\\n  -H \"User-Agent: Mozilla/5.0\" \\\n  -H \"Referer: https://grupovenus.com/personas.asp?nue\" \\\n  --data \"urldestino=personas.asp%3Fok&nombre=Maria&DIA=15&MES=3&ANO=1992&HORA=14&MINU=30&08CIUDAD=Rosario&14PAIS=Argentina&SEXO=V\" > /dev/null\n\n# 3. Get d0 cookie with coordinates from the redirect target\nD0=$(curl -si -c \"$COOKIEJAR\" -b \"$COOKIEJAR\" \"https://grupovenus.com/personas.asp?ok\" \\\n  -H \"User-Agent: Mozilla/5.0\" \\\n  -H \"Referer: https://grupovenus.com/ciuda.asp\" \\\n  | grep -i 'set-cookie.*d0=' \\\n  | sed 's/.*d0=//I' | cut -d';' -f1 \\\n  | python3 -c \"import sys,urllib.parse; print(urllib.parse.unquote(sys.stdin.read().strip()))\")\necho \"d0 decoded: $D0\"\n# → Maria  ;3/15/1992 2:30:00 PM;Rosario;Argentina;V;;3;32S57;60W40\n\n# 4. Fetch 1-year transit graph (no session needed for reports)\ncurl -s -X POST \"https://grupovenus.com/informes3.asp\" \\\n  -H \"Content-Type: application/x-www-form-urlencoded\" \\\n  -H \"User-Agent: Mozilla/5.0\" \\\n  --data-urlencode \"nombre=Maria;3/15/1992 2:30:00 PM;Rosario;Argentina;V;;3;32S57;60W40\" \\\n  --data \"urldestino=informes3.asp&INFORMEDESEADO=8&DIA1=1&MES1=1&ANO1=2026&HORA1=00&MINU1=00&tipzod=T&TIC=&idiomas=E\" \\\n  -o maria_transits.html\n\n# 5. Extract transit data\ngrep 'class=\"barras\"' maria_transits.html \\\n  | grep -o 'title=\"[^\"]*\"' \\\n  | iconv -f iso-8859-1 -t utf-8 \\\n  | sed 's/title=\"//;s/\"//' \\\n  | sort -t' ' -k2 -n\n\n# 6. Fetch natal chart PNG\ncurl -s \"https://grupovenus.com/dibujo.aspx\" \\\n  --get \\\n  --data-urlencode \"fec=3/15/1992 2:30:00 PM\" \\\n  --data-urlencode \"aju=3\" \\\n  --data-urlencode \"ciu=Rosario\" \\\n  --data \"pais=Argentina\" \\\n  --data-urlencode \"lat=-32.9333\" \\\n  --data-urlencode \"lon=60.6667\" \\\n  --data-urlencode \"nom=Maria\" \\\n  --data \"bot=atras&idioma=E&CASASPRO=&zodi=T\" \\\n  -H \"User-Agent: Mozilla/5.0\" \\\n  -o maria_chart.png\n\nNotes\nThe site uses iso-8859-1 encoding. Always pipe through iconv -f iso-8859-1 -t utf-8 when reading HTML.\nPOST data to ciuda.asp must also use iso-8859-1 percent-encoding, not UTF-8. For accented characters: í = %ED, á = %E1, é = %E9, ó = %F3, ú = %FA, ñ = %F1. Using UTF-8 encoding (e.g. %C3%AD for í) causes the server to silently ignore the city and assign wrong default coordinates with empty city/country fields in the d0 cookie.\nThere is no server-side rate limiting observed, but be considerate — add a small delay between batch requests.\nSession cookies (ASPSESSIONID...) are only needed during the registration flow. Report requests (informes3.asp, dibujo.aspx, sacainter.asp) do not need any session cookie.\nAlways use a cookie jar (-c/-b flags) for the registration flow. Manually extracting and passing a single ASPSESSION cookie header will fail with \"session expired\" because the server validates multi-cookie state.\nThe registration flow is exactly 3 steps before the final personas.asp?ok call: info.asp → personas.asp?nue → POST ciuda.asp. Skipping any step causes session expiry.\nThe Referer header is required on both the personas.asp?nue GET and the ciuda.asp POST. Without it the server rejects the request.\nThe sacainter.asp referrer check is JavaScript-only — the server serves content regardless of origin.\nTicket-gated reports return HTTP 200 with a plain \"Para el resto de opciones necesita obtener un Ticket\" message in the body — detect by checking for that string."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/apresmoi/grupo-venus",
    "publisherUrl": "https://clawhub.ai/apresmoi/grupo-venus",
    "owner": "apresmoi",
    "version": "0.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/grupo-venus",
    "downloadUrl": "https://openagent3.xyz/downloads/grupo-venus",
    "agentUrl": "https://openagent3.xyz/skills/grupo-venus/agent",
    "manifestUrl": "https://openagent3.xyz/skills/grupo-venus/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/grupo-venus/agent.md"
  }
}