I would first clean the IAC(idle air control) valve, computer uses this to set idle RPMs.
IAC uses a Step Motor(stepper motor), this is a "digital controlled" electric motor.
Step motor will have over 100 "steps" the computer can "call up", each step represents a degree of turning of the motor
Step 10 might turn motor from "start" to 90deg(1/4 turn)
Step 50 might turn motor from "start" to 450deg(1 and 1/4 turn)
Steps are "called" using voltage pulses from computer to IAC Valve, like a Morse Code.
The IAC valve is a "learned" control, the computer "learns" what Step is 650rpm on warm engine, and what Step is 1,000rpm on cold engine.
The computer has "target" RPMs in memory, these are related to engine temp.
My 4.0l Manual trans has "target" idle of 625rpm warm, when last checked it was 623 to 628rpm, so very precise.
On my 4.0l 628 rpms might be Step 20, one another 4.0l it might be Step 19 or Step 21, computer "learns" and remembers what Step to use to get "target", and this "learning" is on going
The IAC valve is pushed and pulled, closed and open by the motor turning.
If valve should get sticky it may not be closing enough so computer calls a Lower Step to force it closed more and idle drops down to low, and before computer can raise it back up engine stalls or opening IAC valve a little more doesn't help because it is sticking again so computer calls higher Step and RPMs run up too high.
And as computer "learns" new Steps they change again when valve sticks, lol, so intermittent issues.
4cyl does idle slightly higher than V6/V8, I would expect warm engine idle for manual trans 2.3l to be 700-750, automatic 750-800
I think 925-950 is too high for warmed up engine with manual trans, but never had a 2.3l Duratec engine.