git & fit
Commit. Stretch. Commit again.
A VS Code extension that suggests 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 exercise break.
- Triggers on real commits — a
chore: typo commit will not make
you do squats. Default thresholds: 5 files / 200 lines / 60-min
cooldown. Tunable per repo.
- Tailored routines — 3–5 minute sequences picked from 20+
exercises across mobility, stretch, strength, cardio, and posture.
Weighted by sprint phase.
- Snooze without guilt — 5 / 30 / 120 minutes, rest of day, or
forever. No motivational language.
- Privacy first — zero telemetry, zero network calls, zero
accounts. All state in
.vscode/ and .git/. Open source under MIT.
Preview: v0.1.0 is an early release. Defaults and a few internal
APIs may shift before 1.0. File any rough edges as
GitHub issues.
Install
From the VS Code Marketplace:
ext install twentydeka.gitnfit-vscode
Or click Install at the top of the listing page.
Quick start
Open a git repository in VS Code.
Run git & fit: Enable for Workspace from the Command Palette
(Ctrl+Shift+P). Or commit a .gitnfit.json to the repo root —
see Per-repo config below.
Make commits as usual. When one crosses the thresholds, a
notification slides in from the bottom-right:
git & fit — Time for a quick break! You committed 8 lines
across 2 files. [Do it!] [Snooze] [Skip]
Click Do it! and a 3–5 minute routine opens inline. Keyboard:
Space pause, N next, Esc close.
Per-repo config
Drop a .gitnfit.json in the repo root to share settings with your
team:
{
"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" }
}
}
Custom exercises are supported via a customExercises block. See
the sample config
for the full schema.
User settings
Settings → Extensions → git & fit:
| Setting |
Default |
What it does |
gitnfit.enabled |
true |
Master on/off switch for suggestions. |
gitnfit.profile.defaultIntensity |
"medium" |
low / medium / high — biases the planner's exercise picks. |
gitnfit.profile.avoidFloor |
false |
Skip exercises requiring floor space. |
gitnfit.profile.quietMode |
true |
Avoid jumping or stomping exercises. |
gitnfit.profile.wristSensitive |
false |
Skip wrist-intensive exercises. |
gitnfit.profile.kneeSensitive |
false |
Skip knee-intensive exercises. |
gitnfit.notification.timeout |
60000 |
Auto-dismiss timeout for the notification (ms). |
gitnfit.audio.enabled |
false |
Play audio cues during routines (scaffolded; muted in 0.1.0). |
Commands
Open the Command Palette (Ctrl+Shift+P) and type git & fit:
- Enable for Workspace / Disable for Workspace
- Start a Break Routine — manually trigger a routine without a commit
- Pick Exercise from Library — pick a single exercise
- Configure Fitness Profile — quick-setup wizard
How it works
- Commit detection. A filesystem watcher on
.git/logs/HEAD
notices new commits. No polling, no background daemon.
- Significance check. Commits are compared against the
detection thresholds. Trivial commits are ignored.
- Cooldown check. Ensures enough time has passed since the last
nudge.
- Sprint inference. Detects the current sprint phase (start /
mid / end) via fixed-calendar, branch-name, or commit-cadence
mode.
- Routine planning. Picks a 3–5 minute sequence from the
exercise library, weighted by sprint phase and filtered by the
user's fitness profile.
- Notification + panel. Slides in a notification; on Do it!,
opens the routine webview with timer, video, and controls.
Privacy
- ✅ All computation on your machine.
- ✅ No network requests. Works offline.
- ✅ No telemetry, analytics, accounts, or cloud sync.
- ✅ Commit history never leaves your workstation.
- ✅ Source available under MIT — audit in ~10 minutes.
Troubleshooting
- No suggestion after a commit: verify your commit crosses the
thresholds (
detection.minFilesChanged / minLinesChanged) and
that you're not in cooldown. Output panel → "Extension Host" shows
what the evaluator saw.
- "Pick Exercise" panel won't open: check
Help → Toggle Developer Tools for webview errors. Most often a corporate CSP policy on the
user-data dir.
- Wrong sprint phase: confirm
.gitnfit.json sprint.anchorDate
is correct; or switch sprint.mode to disabled to fall back to
generic routines.
Detailed reports → GitHub issues.
Links
Commit. Stretch. Commit again.