{
  "tool_id": "hybrid_training",
  "slug": "hybrid-training-planner",
  "path": "/hybrid-training-planner/",
  "mode": "engine_module",
  "usage": "Import https://aifithub.io/engines/hybrid-training-planner.js as an ES module and call compute(input) with the fields in input_schema (every field is optional and falls back to its default). Input is validated: an unknown field, a wrong type, or a value outside enum/minimum/maximum throws an Error that names the field. The same calculator runs at https://aifithub.io/hybrid-training-planner/.",
  "methodology": "https://aifithub.io/methodology/hybrid-training-planner/",
  "sample_input": {
    "weekly_run_km": 30,
    "easy_pct": 70,
    "tempo_pct": 20,
    "interval_pct": 10,
    "lifting_sessions": 3,
    "primary_goal": "balanced"
  },
  "input_schema": {
    "type": "object",
    "properties": {
      "weekly_run_km": {
        "type": "number",
        "description": "Weekly running distance, km (sets 2–5 run days: ≤15, ≤30, ≤50, more).",
        "x-unit": "km/week",
        "minimum": 0,
        "maximum": 200,
        "default": 30
      },
      "easy_pct": {
        "type": "number",
        "description": "Share of running at easy pace, percent (70 = 70%); the three shares are scaled to 100.",
        "x-unit": "percent",
        "minimum": 0,
        "maximum": 100,
        "default": 70
      },
      "tempo_pct": {
        "type": "number",
        "description": "Share of running at tempo, percent.",
        "x-unit": "percent",
        "minimum": 0,
        "maximum": 100,
        "default": 20
      },
      "interval_pct": {
        "type": "number",
        "description": "Share of running as intervals, percent.",
        "x-unit": "percent",
        "minimum": 0,
        "maximum": 100,
        "default": 10
      },
      "lifting_sessions": {
        "type": "number",
        "description": "Lifting sessions per week (whole number).",
        "x-unit": "sessions/week",
        "minimum": 2,
        "maximum": 6,
        "default": 3
      },
      "primary_goal": {
        "type": "string",
        "description": "Which modality gets the prime slots: strength (lift-first), endurance (run-first) or balanced (alternating).",
        "enum": [
          "strength",
          "endurance",
          "balanced"
        ],
        "default": "balanced"
      }
    },
    "additionalProperties": false
  },
  "output_schema": {
    "type": "object",
    "properties": {
      "schedule": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "day": {
              "type": "string"
            },
            "am": {
              "type": "string"
            },
            "pm": {
              "type": "string"
            },
            "type": {
              "type": "string"
            }
          }
        },
        "description": "7 days of { day, am, pm, type } where type is run, lift, combo or rest; runs are Easy run, Tempo run or Intervals."
      },
      "warnings": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "message": {
              "type": "string"
            },
            "severity": {
              "type": "string"
            }
          }
        },
        "description": "Array of { message, severity }: interference between adjacent days, volume cautions, scaling and dropped sessions."
      },
      "totalTrainingLoad": {
        "type": "number",
        "description": "Rough relative load: 5 per lift + 0.8/1.5/2.0 per easy/tempo/interval km."
      },
      "runVolume": {
        "type": "object",
        "properties": {
          "easy": {
            "type": "number"
          },
          "tempo": {
            "type": "number"
          },
          "interval": {
            "type": "number"
          }
        },
        "description": "{ easy, tempo, interval } km per week."
      },
      "recoveryNote": {
        "type": "string",
        "description": "Recovery guidance for the load band (<30, 30–60, >60)."
      }
    }
  },
  "summary": "A Monday–Sunday hybrid schedule (am/pm sessions; the interval and tempo runs on their own days where possible) from weekly running volume, its easy/tempo/interval split, lifting sessions and a priority, with run kilometres by intensity, interference warnings and a rough relative load index."
}
