{
  "schemaVersion": "1.0",
  "item": {
    "slug": "farmos-weather",
    "name": "Farmos Weather",
    "source": "tencent",
    "type": "skill",
    "category": "数据分析",
    "sourceUrl": "https://clawhub.ai/brianppetty/farmos-weather",
    "canonicalUrl": "https://clawhub.ai/brianppetty/farmos-weather",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/farmos-weather",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=farmos-weather",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "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. 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. 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-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.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/farmos-weather"
    },
    "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/farmos-weather",
    "agentPageUrl": "https://openagent3.xyz/skills/farmos-weather/agent",
    "manifestUrl": "https://openagent3.xyz/skills/farmos-weather/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/farmos-weather/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. 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. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "FarmOS Weather",
        "body": "Current conditions and forecasts for farm fields, sourced from the Agronomy module."
      },
      {
        "title": "When to Use This",
        "body": "What this skill handles: Current weather conditions, forecasts, growing degree days (GDD), spray condition evaluation, and historical weather data for farm fields.\n\nTrigger phrases: \"what's the weather\", \"can we spray\", \"GDD for field X\", \"forecast\", \"will it rain this week?\", \"temperature and wind right now\", \"field conditions?\"\n\nWhat this does NOT handle: Field observations about weather damage like hail, flooding, or frost injury (use farmos-observations with weather_damage type -- that logs the damage for tracking). This skill tells you what the weather IS; observations logs what the weather DID.\n\nMinimum viable input: \"Weather\" or a field reference. If no field is specified, any nearby field ID works since all 69 fields are in central Indiana."
      },
      {
        "title": "API Base",
        "body": "http://100.102.77.110:8012"
      },
      {
        "title": "Health Check",
        "body": "GET /api/weather/health\n\nReturns: Weather service health status."
      },
      {
        "title": "Current Weather",
        "body": "GET /api/weather/field/{field_id}/current\n\nReturns: Current conditions for a specific field (temperature, precipitation, wind)."
      },
      {
        "title": "Forecast",
        "body": "GET /api/weather/field/{field_id}/forecast?days=7\n\nReturns: Daily and hourly forecast data (up to 14 days)."
      },
      {
        "title": "Historical",
        "body": "GET /api/weather/field/{field_id}/historical?days=30\n\nReturns: Historical weather records for a field."
      },
      {
        "title": "Growing Degree Days",
        "body": "GET /api/weather/field/{field_id}/gdd?startDate=YYYY-MM-DD&endDate=YYYY-MM-DD&baseTemp=10\n\nReturns: GDD accumulation for a field over a date range."
      },
      {
        "title": "Spray Conditions",
        "body": "GET /api/weather/field/{field_id}/spray-conditions\n\nReturns: Spray condition evaluation (wind, rain probability, temperature checks)."
      },
      {
        "title": "Weather by Coordinates",
        "body": "GET /api/weather/coordinates?latitude={lat}&longitude={lon}&type=current\n\nReturns: Weather by coordinates (no field ID required). Use type=forecast for forecast data."
      },
      {
        "title": "Integration Dashboard",
        "body": "GET /api/integration/dashboard\n\nReturns: Agronomy summary including weather data if available."
      },
      {
        "title": "Data Completeness",
        "body": "The /api/integration/dashboard returns agronomy summary data — use it for a quick overview only, not as the primary weather source.\nIf a weather endpoint fails or returns empty, say so: \"The weather service isn't responding right now.\" Don't guess the weather.\nFor GDD queries, always include the date range in your response so the user knows the scope: \"GDD from April 1 to today: 1,142.\""
      },
      {
        "title": "Cross-Module Context",
        "body": "When answering weather questions, think about what else on the farm is affected:\n\nWeather → Tasks:\n\nBefore answering \"can we spray?\" or \"should we get in the field?\", check farmos-tasks for what's on the board. Connect the forecast to specific scheduled work: \"Rain Thursday through Saturday — if you're planning to spray field 14, today's your window.\"\nWhen reporting the forecast, flag weather-sensitive tasks that conflict: \"You've got 3 spray tasks this week but wind picks up Wednesday. Today and tomorrow are your best shot.\"\nGDD milestones trigger agronomic actions. When GDD data crosses key thresholds (V6 ~450 GDD, VT ~1,100 GDD, R1 ~1,400 GDD for corn), connect to tasks: \"Field 12 just hit 1,100 GDD — that's your V6 marker. Side-dress window is now. Want me to create a task?\"\n\nWeather → Observations:\n\nAfter extended rain + warm temps, flag disease pressure: \"We've had 3 days of rain and highs in the 80s — conditions are ripe for gray leaf spot and tar spot. Worth scouting the corn this week.\"\nAfter frost or severe weather, suggest damage checks: \"First frost was last night. Might be worth checking the late-planted fields for damage.\"\nConnect recent weather to existing observation patterns: if there are recent disease observations, note the weather connection.\n\nWeather → Equipment:\n\nIf rain is coming and there are field operations scheduled, note the equipment implication: \"Rain starts Thursday — anything that needs to be in the field should get there before then.\"\n\nQuery farmos-tasks and farmos-observations alongside weather for any field operation question. You don't need to cross-reference on every simple \"what's the temperature?\" question — use judgment. Cross-reference when the weather materially affects the plan."
      },
      {
        "title": "Units — Already Imperial, Display Directly",
        "body": "The weather API returns all values in US imperial units. Display them as-is — no conversion needed.\n\nAPI fieldUnitExample displaytemperature_max / temperature_min°F\"high of 55°F\"precipitation_suminches\"about a quarter inch of rain\"wind_speed_10m_max / wind_gusts_10m_maxmph\"winds up to 21 mph\"\n\nDo not convert, do not relabel. 0.25 means 0.25 inches. 55 means 55°F. 16 means 16 mph."
      },
      {
        "title": "Date Handling — Anchor to Today",
        "body": "The API returns dates as YYYY-MM-DD strings starting from today. The first entry is today, not tomorrow.\n\nUse your system date to label each day correctly: \"Today (Feb 28)\", \"Tomorrow (Mar 1)\", \"Wednesday (Mar 2)\"\nDo not assume the first forecast entry is tomorrow — it is today\nIf you're unsure of today's date, say so rather than guess"
      },
      {
        "title": "Usage Notes",
        "body": "Farm is located in central Indiana. If specific field weather isn't available, general local weather is fine.\nSpray conditions matter: wind speed under 10mph, no rain in forecast for 24hrs, temperature ranges.\n\"Can we spray?\" is a common question -- check wind, rain probability, and temperature via the spray-conditions endpoint.\nField IDs are integers -- 69 fields across the operation. Most weather queries can use any nearby field ID since they are all in the same area.\nFor coordinates-based queries without a field ID, use the /coordinates endpoint with the farm's approximate location (latitude ~40.25, longitude ~-85.67)."
      }
    ],
    "body": "FarmOS Weather\n\nCurrent conditions and forecasts for farm fields, sourced from the Agronomy module.\n\nWhen to Use This\n\nWhat this skill handles: Current weather conditions, forecasts, growing degree days (GDD), spray condition evaluation, and historical weather data for farm fields.\n\nTrigger phrases: \"what's the weather\", \"can we spray\", \"GDD for field X\", \"forecast\", \"will it rain this week?\", \"temperature and wind right now\", \"field conditions?\"\n\nWhat this does NOT handle: Field observations about weather damage like hail, flooding, or frost injury (use farmos-observations with weather_damage type -- that logs the damage for tracking). This skill tells you what the weather IS; observations logs what the weather DID.\n\nMinimum viable input: \"Weather\" or a field reference. If no field is specified, any nearby field ID works since all 69 fields are in central Indiana.\n\nAPI Base\n\nhttp://100.102.77.110:8012\n\nEndpoints\nHealth Check\n\nGET /api/weather/health\n\nReturns: Weather service health status.\n\nCurrent Weather\n\nGET /api/weather/field/{field_id}/current\n\nReturns: Current conditions for a specific field (temperature, precipitation, wind).\n\nForecast\n\nGET /api/weather/field/{field_id}/forecast?days=7\n\nReturns: Daily and hourly forecast data (up to 14 days).\n\nHistorical\n\nGET /api/weather/field/{field_id}/historical?days=30\n\nReturns: Historical weather records for a field.\n\nGrowing Degree Days\n\nGET /api/weather/field/{field_id}/gdd?startDate=YYYY-MM-DD&endDate=YYYY-MM-DD&baseTemp=10\n\nReturns: GDD accumulation for a field over a date range.\n\nSpray Conditions\n\nGET /api/weather/field/{field_id}/spray-conditions\n\nReturns: Spray condition evaluation (wind, rain probability, temperature checks).\n\nWeather by Coordinates\n\nGET /api/weather/coordinates?latitude={lat}&longitude={lon}&type=current\n\nReturns: Weather by coordinates (no field ID required). Use type=forecast for forecast data.\n\nIntegration Dashboard\n\nGET /api/integration/dashboard\n\nReturns: Agronomy summary including weather data if available.\n\nData Completeness\nThe /api/integration/dashboard returns agronomy summary data — use it for a quick overview only, not as the primary weather source.\nIf a weather endpoint fails or returns empty, say so: \"The weather service isn't responding right now.\" Don't guess the weather.\nFor GDD queries, always include the date range in your response so the user knows the scope: \"GDD from April 1 to today: 1,142.\"\nCross-Module Context\n\nWhen answering weather questions, think about what else on the farm is affected:\n\nWeather → Tasks:\n\nBefore answering \"can we spray?\" or \"should we get in the field?\", check farmos-tasks for what's on the board. Connect the forecast to specific scheduled work: \"Rain Thursday through Saturday — if you're planning to spray field 14, today's your window.\"\nWhen reporting the forecast, flag weather-sensitive tasks that conflict: \"You've got 3 spray tasks this week but wind picks up Wednesday. Today and tomorrow are your best shot.\"\nGDD milestones trigger agronomic actions. When GDD data crosses key thresholds (V6 ~450 GDD, VT ~1,100 GDD, R1 ~1,400 GDD for corn), connect to tasks: \"Field 12 just hit 1,100 GDD — that's your V6 marker. Side-dress window is now. Want me to create a task?\"\n\nWeather → Observations:\n\nAfter extended rain + warm temps, flag disease pressure: \"We've had 3 days of rain and highs in the 80s — conditions are ripe for gray leaf spot and tar spot. Worth scouting the corn this week.\"\nAfter frost or severe weather, suggest damage checks: \"First frost was last night. Might be worth checking the late-planted fields for damage.\"\nConnect recent weather to existing observation patterns: if there are recent disease observations, note the weather connection.\n\nWeather → Equipment:\n\nIf rain is coming and there are field operations scheduled, note the equipment implication: \"Rain starts Thursday — anything that needs to be in the field should get there before then.\"\n\nQuery farmos-tasks and farmos-observations alongside weather for any field operation question. You don't need to cross-reference on every simple \"what's the temperature?\" question — use judgment. Cross-reference when the weather materially affects the plan.\n\nUnits — Already Imperial, Display Directly\n\nThe weather API returns all values in US imperial units. Display them as-is — no conversion needed.\n\nAPI field\tUnit\tExample display\ntemperature_max / temperature_min\t°F\t\"high of 55°F\"\nprecipitation_sum\tinches\t\"about a quarter inch of rain\"\nwind_speed_10m_max / wind_gusts_10m_max\tmph\t\"winds up to 21 mph\"\n\nDo not convert, do not relabel. 0.25 means 0.25 inches. 55 means 55°F. 16 means 16 mph.\n\nDate Handling — Anchor to Today\n\nThe API returns dates as YYYY-MM-DD strings starting from today. The first entry is today, not tomorrow.\n\nUse your system date to label each day correctly: \"Today (Feb 28)\", \"Tomorrow (Mar 1)\", \"Wednesday (Mar 2)\"\nDo not assume the first forecast entry is tomorrow — it is today\nIf you're unsure of today's date, say so rather than guess\nUsage Notes\nFarm is located in central Indiana. If specific field weather isn't available, general local weather is fine.\nSpray conditions matter: wind speed under 10mph, no rain in forecast for 24hrs, temperature ranges.\n\"Can we spray?\" is a common question -- check wind, rain probability, and temperature via the spray-conditions endpoint.\nField IDs are integers -- 69 fields across the operation. Most weather queries can use any nearby field ID since they are all in the same area.\nFor coordinates-based queries without a field ID, use the /coordinates endpoint with the farm's approximate location (latitude ~40.25, longitude ~-85.67)."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/brianppetty/farmos-weather",
    "publisherUrl": "https://clawhub.ai/brianppetty/farmos-weather",
    "owner": "brianppetty",
    "version": "1.0.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/farmos-weather",
    "downloadUrl": "https://openagent3.xyz/downloads/farmos-weather",
    "agentUrl": "https://openagent3.xyz/skills/farmos-weather/agent",
    "manifestUrl": "https://openagent3.xyz/skills/farmos-weather/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/farmos-weather/agent.md"
  }
}