Take a look at full Visual Studio, it's a much better IDE for F#, the free version beats vscode for F# dev hands down.
Though I like VS code for its portability.
Just a guess, but CO2 levels in our body are much lower which would mean small changes are easier to detect.
Also just a guess, when we were all just fish making a first few steps into land, atmosphere O2 concentration was lower, CO2 higher, so maybe we evolved to detect what was more abundant then.
A few observations from my freediving days (I've trained competitively for a few years).
The urge to breathe you get when you're holding your breath long enough is from elevated CO2 in your blood and the subsequent change in PH (as a comment here already stated).
That urge is actually your diaphragm contracting involuntarily, but you can learn to endure that feeling which is the key for apnea attempts.
But besides that, there are no almost no other indications before you pass out.
Black-outs are quite common in freediving competitions because of that fact (freedivers just ignore the breathing reflex and nothing else tells them when to stop).
O2 saturation may fall 20-40% during your breath hold.
You generally won't feel anything until it's too late.
The problem is that you won't feel the difference between 99% and 65% saturation and you may black-out at 64% (those numbers are not the same for everyone).
The signs you can detect before blacking out are blurred vision, tunnel vision, fingers tingling, metallic taste in your mouth...
But, you have only a very small window of time between those symptoms starting and blacking out (literally a second or two if you're lucky).
Interestingly, the window of time depends on the discipline - the more physically engaged you are the window is bigger.
The static apnea (just floating face down in water) gives you almost no warning at all while at longer dynamic apnea attempts you have a few seconds when you can "detect" something is funky with your body.