Every serious lifter knows the difference between a warm-up set and a working set. Your training app should too.

With Program Schema v1.6, coaches and program creators can now specify set intent directly in JSON files. When athletes import your program, warm-up sets are automatically excluded from effective volume — and failure sets get the 1.5x multiplier they deserve.

No manual tagging. No forgotten flags. Accurate analytics from the first session.

What's new in v1.6

Two new fields in the Set object:

That's it. Two boolean fields that solve a persistent problem: programs importing with inaccurate volume data because the app couldn't distinguish between warm-up ramps and working sets.

Why set intent matters for analytics

Consider a typical bench press prescription:

{
  "name": "Bench Press",
  "sets": [
    { "reps": 10, "suggestedWeight": 40, "isWarmUp": true },
    { "reps": 5, "suggestedWeight": 60, "isWarmUp": true },
    { "reps": 5, "suggestedWeight": 80 },
    { "reps": 5, "suggestedWeight": 80 },
    { "reps": 5, "suggestedWeight": 80, "toFailure": true }
  ]
}

Without set intent markers, that's 30 reps of volume counted equally. With v1.6:

Total Effective Volume: 1,400kg — not the misleading 2,100kg a naive calculation would produce.

This matters for progressive overload tracking. If warm-ups pollute your volume data, you can't trust week-over-week comparisons. The numbers lie.

How it works in the app

When you import a v1.6 program:

The program specifies intent. The athlete confirms reality. Analytics stay honest.

For coaches: distribute smarter programs

If you're distributing programs to athletes, v1.6 changes what you can deliver.

Previously, you'd export a program and hope athletes remembered to tag their warm-ups. Now you encode that information directly:

{
  "version": 1.6,
  "collectionName": "Strength Block - Phase 1",
  "author": "Your Name",
  "workouts": [
    {
      "workoutName": "Squat Day",
      "restDefault": 180,
      "exercises": [
        {
          "name": "Back Squat",
          "capabilities": ["weight", "reps"],
          "muscleGroups": {
            "primary": { "Legs": ["Quads", "Glutes"] },
            "secondary": { "Core": ["Abs"] }
          },
          "sets": [
            { "reps": 8, "suggestedWeight": 60, "isWarmUp": true },
            { "reps": 5, "suggestedWeight": 80, "isWarmUp": true },
            { "reps": 3, "suggestedWeight": 100, "isWarmUp": true },
            { "reps": 3, "suggestedWeight": 120 },
            { "reps": 3, "suggestedWeight": 120 },
            { "reps": 3, "suggestedWeight": 120, "toFailure": true }
          ]
        }
      ]
    }
  ]
}

Share via email, cloud storage, or direct link. No server required. Athletes import and their analytics work correctly from day one.

For AI: generate valid programs instantly

This is where it gets useful.

We've published our complete schema at intrvl.app/llms.txt — an LLM-friendly reference that ChatGPT, Claude, or any AI can use to generate valid Intrvl programs.

Ask your AI to build a 4-week hypertrophy block with proper warm-up progressions and AMRAP finishers. It generates valid JSON with set intent markers. Import directly into Intrvl. Train.

The schema includes:

No manual JSON editing. No validation errors. AI-generated programs that respect how you actually train.

Backwards compatibility

Version 1.6 is fully backwards compatible with v1.0 through v1.5. Existing programs continue to work — sets without intent markers default to working sets, exactly as before.

Upgrade your programs when you're ready. Or don't. Both work.

The complete capability set

For reference, v1.6 supports these exercise types through the capabilities system:

Type Capabilities Example
Weighted ["weight", "reps"] Bench Press
Bodyweight ["reps", "bodyweightVolume"] Pull-ups
Weighted Bodyweight ["weight", "reps", "bodyweightVolume"] Weighted Dips
Loaded Carry ["weight", "distance"] Farmer's Walk
Timed ["duration"] Plank
Banded ["band", "reps"] Band Face Pulls
Cardio ["distance", "duration"] Running

Each works with the new set intent markers. A warm-up plank hold. A farmer's walk to failure. The schema handles it.

Start using v1.6

For coaches:

  1. Update your programs to "version": 1.6
  2. Add "isWarmUp": true to warm-up sets
  3. Add "toFailure": true to failure/AMRAP sets
  4. Share with athletes

For AI generation:

  1. Point your LLM to intrvl.app/llms.txt
  2. Describe your program requirements
  3. Import the generated JSON

For developers: Full specification at intrvl.app/integrate

One payment. Lifetime access. 14-day free trial to see how set intent markers improve your tracking.

Time every interval. Track every lift. Know what works.