Commit. Stretch. Commit again.

A short exercise break after meaningful commits. Built for developers who would rather refactor than rest.

You wrote 4,800 lines today and the only muscle you used was your trapezius, complaining.

git & fit notices when you commit something real, then suggests a 3-minute break.

How it works

You commit.

Watches .git/logs/HEAD for new commits. Filesystem only. No telemetry, no daemons, no background polling.

It checks if it counts.

A chore: typo commit will not make you do squats. Defaults: 5 files, 200 lines, 60-min cooldown. Tunable per repo.

function evaluate(c: Commit) {
  if (c.files  < cfg.minFiles)  return 'trivial';
  if (c.lines  < cfg.minLines)  return 'trivial';
  if (sinceLastNudge < cooldown) return 'cooldown';
  return 'significant';   // → fire the nudge
}

You get a nudge.

One notification. Three buttons. Click Do it! and a 3–5 minute routine opens inline. Skip without guilt.

Everything the spec promises.
Nothing it does not.

20+ exercises. 3 to 5 minutes per routine.

Tailored routines.

3–5 minute sequences from 20+ exercises, weighted by sprint phase (warm-up, peak, taper).

Snooze without guilt.

Five minutes, two hours, rest of the day, or forever. We will not call you "champion".

Per-repo config.

Commit a .gitnfit.json and your whole team gets the same thresholds, intensity, and sprint cadence.

Accessible by default.

Keyboard shortcuts, ARIA labels, screen-reader support, captions on every exercise video. Adds new exercises faster than it adds settings.

Configure once.
The whole team benefits.

Commit a .gitnfit.json to your repo and every clone gets the same thresholds, sprint cadence, and intensity profile. Override per developer in settings.json.

.gitnfit.json
{
  "detection": { "minFilesChanged": 5, "minLinesChanged": 200, "cooldownMinutes": 60 },
  "sprint":    { "mode": "fixed-calendar", "lengthDays": 14, "anchorDate": "2026-01-06" },
  "routines":  {
    "durationMinutes":  4,
    "intensityByPhase": { "start": "medium", "mid": "medium", "end": "low" }
  }
}

No data leaves your machine.

No analytics. No "anonymized telemetry". No "phone home for updates". The extension runs entirely inside your VS Code instance. State lives in .vscode/ (workspace state) and your repo's .git/ (commit detection).

If you read the source you can confirm this in about ten minutes.

Read the source on GitHub

By the numbers

20+
exercises in the library

mobility · strength · stretch · posture

MIT
license — fork, sell, embed

open source on GitHub

0
telemetry endpoints

works offline · no accounts

Asked enough that we wrote them down.

Will this annoy me?
No. Thresholds default to 5 files / 200 lines / 60-min cooldown. A typical day fires 1–3 nudges. Snooze for the rest of the day if you are shipping.
Does it work without an internet connection?
Yes. All data local, no servers involved at any point.
Does it work outside VS Code?
Not yet. JetBrains and Neovim adapters are planned (gitnfit-core is editor-agnostic by design).
Can I add my own exercises?
Yes. Drop a customExercises block in your .gitnfit.json.
What if I have a wrist injury / knee injury / cannot get on the floor?
Toggle wristSensitive, kneeSensitive, or avoidFloor in your fitness profile. The planner excludes incompatible exercises.
Is it free?
Yes, MIT-licensed. No paid tier planned.
Does it require git?
Yes. The trigger is git commit. Workspaces without a .git/ directory get a no-op.
What does the name mean?
git + fit. We are not subtle.

Get back some hip flexion.

Install on VS Code Marketplace

Free · MIT · No account required