Install
openclaw skills install @voronindenis5/bike-fit-estimatorUse when buying a bike, setting one up, or diagnosing ride pain — computes frame size and stack/reach from your body (inseam×0.885 saddle height, Holmes 25–35° knee angle, crank length, standover clearance by discipline), dials position by flexibility and ride type, and routes pain symptoms (numb hands, front/back knee, hot foot, saddle numbness, neck) to ranked fit causes with the exact adjustment to try first.
openclaw skills install @voronindenis5/bike-fit-estimatorA bad bike fit turns a healthy activity into a pain generator: knees, hands, neck, perineum. Professional fits cost $150–400; a lot of what they do is geometry you can compute from two measurements (inseam + height) and a symptom table you can follow.
This skill sizes the frame, sets the contact points (saddle height, setback, bar drop/reach, cleat fore-aft), and routes ride pain to its most likely fit cause with the adjustment to try first.
Don't use for: post-crash pain, pain at rest/night, or any neurological symptoms (numbness that persists off the bike) — medical.
size — frame + contact points: saddle height (BB-to-top =
inseam × 0.885, the LeMond method; cross-check Holmes 25–35° knee angle),
setback (KOPS starting point), crank length, standover check, estimated
stack/reach class.position — bar drop and reach by flexibility × ride type:
endurance/commute (comfort-first) → sportive → aggressive. Includes
saddle tilt and transition protocol (change ONE thing, 2–3 rides).pain — symptom → ranked causes → first fix. Change one variable at
a time, 2–5 mm increments; log rides.# Frame size + contact points: 178 cm, 84 cm inseam, road bike
python3 scripts/bike_fit.py size --inseam 84 --height 178 --type road
# Position by flexibility
python3 scripts/bike_fit.py position --height 178 --flexibility medium --type road
# Diagnose: hands go numb after 45 minutes
python3 scripts/bike_fit.py pain --symptom numb-hands
# Check a listing: 56cm frame, your 84cm inseam
python3 scripts/bike_fit.py standover --inseam 84 --standover-height 80 --type road
Stdlib-only Python 3. Offline.
| Symptom | Most likely (try first) | Then |
|---|---|---|
| Front of knee | saddle too LOW or too far forward | +2–3 mm height |
| Back of knee | saddle too HIGH or too far back | −2–3 mm height |
| Outside of knee | cleat rotation/angle | float check |
| Numb hands | weight too far forward: bars low/reach long, saddle nose down | raise bars, shorten reach, level saddle |
| Numb/lady-parts | saddle width/shape, too much drop | level saddle, wider/cutout saddle, less drop |
| Hot foot | cleat too far forward, shoes tight | move cleat back 2–4 mm |
| Neck/traps | drop too deep for flexibility | raise stem, shorter reach |
| Lower back | reach long, drop deep, saddle nose down | shorten reach, level saddle |
| Hip rocking | saddle too high | lower 2–3 mm until rock stops |
references/fit-science.md — the geometry, angles, formulas, flexibility
tests, cleat science, and the full pain table with reasoningreferences/used-bike-buying.md — decoding listings, stack/reach
comparison, contact-point refresh budget (bars/saddle/tape are wear items)