Use your own AI

Badger has no AI in it and no opinion about which one you use. What it has is your data in formats you can hand to something else: a CSV of every set you have logged, and routines as plain .badger files. Point whichever assistant you already pay for at those, and you have a coach that knows your training, without Badger running a service, holding a key, or seeing any of it.

Your data, your AI, your subscription. Nothing on this page asks you to sign in anywhere, and Badger never sends your training to anyone: every step below is you exporting a file and choosing where to put it.

What you can hand it

  • Your training context, as text. The easiest one to start with. Settings, then Your data, then Copy context for AI. Badger assembles a short briefing on your device: your training notes, your active program with its current targets, your last ten sessions, your records, the equipment at your gym, and anything you have marked as avoided. You see the whole thing before you copy it, and it closes with instructions telling the AI how to read it and how to write a routine back. It is trimmed to fit a chat window, so unlike the CSV you can paste it straight in. The same action sits at the bottom of your training notes page. See copying your context.
  • Your training history, as CSV. Settings, then Your data, then Export. One row per set, every set the app holds, with dates, weights, reps, RPE, RIR, your notes, and an is_complete column saying whether you actually performed the set. See exporting data.
  • A routine, as a .badger file. Open a routine and pick Share routine from its menu. It carries the plan and nothing about your history. The program gallery has seven ready to read.
  • Your gym, as a .badger file. Open a gym and pick Share gym from its menu. It lists the machines, bars, and accessories you actually have, so a program can be planned around your equipment instead of a generic gym - the write-me-a-program prompt below knows what to do with it.
  • The format itself. The .badger format is documented in public so an AI can write a file Badger will import.

Prompts worth starting from

These are starting points, not incantations. Edit the bracketed parts, cut what does not apply, and argue with the answers.

Analyze my training

For the CSV export, which is every set you have ever logged, one row per set. Paste the prompt, then attach or paste the CSV underneath it.

I train with a workout tracker called Badger. Below (or attached) is a CSV export of every set I have logged, one row per set, with these columns:

date, workout_id, exercise_name, category, set_number, is_warmup, weight, weight_unit, reps, duration_seconds, distance, rpe, rir, comment, is_complete, is_skipped, heart_rate, weight_per_side

How to read it:
- Only rows where is_complete is true were actually performed. A workout started from a routine creates all of its sets up front, so a session I began and abandoned still has rows here, filled in with what I planned to lift. Count only completed sets as training.
- is_skipped marks a set I deliberately passed on. It is never training either.
- Weights are stored in the unit named in weight_unit and are never converted, so convert before comparing kg and lbs rows.
- Rows where is_warmup is true are warmups. Leave them out of working volume.
- Empty cells mean the exercise does not use that field: a plank has duration_seconds and no reps.
- rpe is 1-10, rir is reps in reserve. Both are optional and often blank.
- heart_rate is my heart rate at the end of that set, in beats per minute, read from Apple Health or Health Connect. It is optional and usually blank: it only exists for sets logged while I was wearing a watch, with that feature switched on. Never treat a blank as zero.
- weight_per_side says what the weight column MEANS for that row: true means the number is what was loaded on one side (iso-lateral machines), false means it is the total, and blank means the row predates the setting and is unknown. The number itself is never doubled or converted, so treat a true row as roughly half the total load when you compare it with a total row, and say so when you do.

Please:
1. Summarize how I have actually been training: sessions per week, which lifts I do most, how volume splits across categories, and how consistent I am.
2. Show the trend on my main lifts: best working set and estimated 1RM over time, and whether each is climbing, flat, or slipping.
3. Point out imbalances, neglected movement patterns, and anything that looks like a plateau. Say what evidence you used for each.
4. Tell me what you would change, in priority order, and where you are unsure.

Ask me about my goals, my schedule, and any injuries before assuming them.

Review my program

For a routine you exported from Badger, or one from the program gallery. Paste the prompt, then the contents of the .badger file.

Below is a training program as a .badger file: the plain JSON format used by the Badger workout tracker. It is documented at https://badger.fit/badger-format

Read it and tell me:
1. What this program actually is: how many sessions a week, what it prioritizes, and who it suits.
2. Where it is thin or unbalanced. Which muscle groups and movement patterns get little or no work?
3. How hard it is to recover from, and whether the volume is sane for someone training this often.
4. What you would change for my situation, and why. If I paste my gym's .badger file underneath, also say whether the program fits the equipment I actually have.

My situation: [training age, days a week I can train, goal, equipment, anything I need to work around].

Do not rewrite the file yet. Tell me what you would change first, then I will ask.

Write me a program as a .badger file

The round trip: your AI writes a routine, you save it with a .badger extension, tap it, and Badger imports it. Fill in the bracketed parts before sending. Optionally paste your gym's .badger file underneath, and the program gets planned around the machines you actually have.

Write me a training program as a .badger file for the Badger workout tracker, so I can import it directly.

The format is documented at https://badger.fit/badger-format and there is a small worked example at https://badger.fit/programs/example-routine.badger

Follow the format exactly:
- Top level: "badger": "share/v1", "type": "routine", plus app_version, created_at, and payload.
- payload has routine, days, exercises, and machines (machines can be an empty array).
- Every exercise a day references must also appear in payload.exercises with the same name and type.
- Use ordinary exercise names ("Barbell Back Squat", not "BB squat"), so they match exercises I already have instead of creating duplicates.
- For a rep range, set reps to the bottom of the range and reps_max to the top. For an exact target, use reps alone.
- For an open-topped ("AMRAP") set, set reps to the minimum and "is_amrap": true, and leave reps_max out. That reads as "8+": at least 8 reps, then as many as possible. A set to failure is reps 1 with is_amrap true. Never set both is_amrap and reps_max on the same set.
- Leave weight out. I fill in my own weights.
- Never put reps_max or is_amrap on a warmup set.
- Order matters: days, exercises, and sets import in the order they appear in their arrays.
- To pair exercises as a superset, give both slots the same "superset_key". To pre-assign swap options, use "alternatives" with names that also appear in payload.exercises. For a tempo prescription, put it in "tempo" on the slot, like "3-1-2-0".
- If I paste a gym .badger file below, plan around its equipment: only pick machine exercises its machines support (barbell, dumbbell, and bodyweight movements are always available). For an exercise done on one of those machines, set default_machine_name to that machine's name exactly as written in my file, and copy the machine's entry into payload.machines verbatim. Never invent or rename a machine.
- A gym file may also list "bars" and "accessories". Read them for what the gym has, but do not put them in the routine: a routine slot carries no default bar and no accessories, so mention band or chain work in your explanation underneath instead of trying to encode it.

What I want:
- Days a week: [4]
- Experience: [about two years of consistent lifting]
- Goal: [get stronger on the main barbell lifts while keeping some size work]
- Equipment: [full gym: rack, barbell, dumbbells, cables, common machines]
- Session length: [about an hour]
- Avoid: [nothing]

Give me the complete JSON in one code block, then explain the program in a few sentences underneath: what progresses, how, and when I should change something.

Before you import what it writes back

An AI will hand you confident, well-formatted nonsense if you let it. The import preview is your check, and so are you.

  • Save it with a .badger extension, then tap the file. Badger opens with a preview before anything is written. Your file manager, or Files on an iPhone, opens it just as well.
  • Read the new-exercise count in that preview. A program of familiar lifts should create few or no new exercises. A long list of new ones means the AI invented names: fix the names in the file, and it will land on the exercises you already have, with the history and PRs attached to them.
  • If the preview warns that exercises could not be matched, the AI used a name in a day that has no matching definition in exercises (or gave it the wrong type). Nothing breaks - those slots are skipped - but fix the names in the file and the full program comes in.
  • If you gave it your gym file, the preview should create zero new machines. A new machine in the preview means the AI misspelled one. Fix the name in the file so the exercise lands on the machine you already track.
  • If it will not open, the file is malformed, or badger is not share/v1, or type is not routine. Paste the error back and ask for a corrected file.
  • Nothing is overwritten either way. An import that turns out to be rubbish is a routine you delete. Your history is not involved.
  • Judge the program yourself. Nothing here validates whether the training is any good, and neither does the app.

What this costs you in privacy

Worth being plain about, since the rest of Badger works hard to keep your training on your phone. Badger sends nothing: the export lands on your device and stops there. The moment you paste it into a chat, though, it goes to whoever runs that chat, under their terms, and some of them use what you send to train on unless you turn that off. That is a trade you make deliberately, not one the app makes for you.

  • A routine file is the safe one. It is a plan: exercise names, sets, reps. No history, no dates, nothing about you.
  • The CSV is your training history. Dates, weights, reps, and any per-set notes you wrote. No name, no email, no device identifier, no location, because Badger does not hold any of those. Have a look before you paste it if you write personal things in set comments.
  • A local model keeps it local, if the point of all this for you is that it never leaves the house.

Everything on this page works with the app exactly as it ships today: export, paste, import. No account, no key stored in Badger, nothing to switch on. See the promise for why it is built that way.