A cautious England spared India the ignominy of a follow-on but set them a record 420-run run chase on the penultimate day of the opening Test at Chennai's MA Chidambaram Stadium.
England, who had posted a mammoth 578 in the first innings, bowled India out for 337 but opted against putting them straight back in on Monday.
England walked out to bat instead and were bowled out for 178 an hour before stumps, while baffling many by their refusal to declare which would have given them more time to bowl out the hosts.
India finished the penultimate day on 1-39, still 381 behind the target, with Shubhman Gill on 15 and Cheteshwar Pujara on 12.
Earlier on Monday, Washington Sundar had led India's rearguard resistance with an unbeaten 85 before he ran out of partners.
The allrounder added 80 runs with Ravichandran Ashwin in a spirited seventh-wicket stand to take India, who had resumed on 6-257, past the 300-mark.
Jack Leach had bled 94 runs in 17 wicketless overs on Sunday when Rishabh Pant smacked him for five sixes.
But the left-arm spinner finally tasted success when he dismissed Ashwin for 31 and went on to claim the wicket of Shahbaz Nadeem (nought) as well.
James Anderson had also toiled without success on Sunday but claimed the last two Indian wickets, leaving Sundar stranded 15 runs from a maiden Test century.
When England came out for their second innings, Ashwin dismissed Rory Burns with the very first ball and went on to claim 6-61.
Ishant Sharma dismissed Dan Lawrence to claim his 300th Test wicket and Joe Root, who had smashed 218 in the first innings of his 100th Test, made 40 before Jasprit Bumrah trapped him lbw.
Ashwin then ran through the order, dismissing Dom Sibley, Ben Stokes and Dom Bess and finally removing Jofra Archer and James Anderson in the same over.
India lost opener Rohit Sharma early, with Leach spinning one past the bat to hit the off-stump to leave England still as the favourites.