England paceman Stuart Broad (4-33) was exceptional despite physical discomfort and leg-spinner Adil Rashid (4-82) did well too as they shared six of the last seven India wickets even though the hosts would be pleased with their overall lead.
Broad sustained a foot injury and would be assessed after the ongoing test but there was no let up in hostility from the lanky paceman who troubled the Indian batsmen with his probing cutters.
Ajinkya Rahane, unbeaten overnight, was out on 26 when he surrendered to one such leg-cutter and, surprised by the extra bounce, gloved it to Alastair Cook at slip.
Broad then got Ravichandran Ashwin caught behind to peg back India before Rashid took over.
The 28-year-old spinner trapped Wriddhiman Saha leg before and then struck a body blow, inducing Virat Kohli into a wild drive only for the edge to fly to slip where an airborne Ben Stokes took the kind of one-handed catches that go viral.
Kohli missed his second century of the match but his 81 in 109 balls ensured England would have a mammoth task at hand as they chase a big target on a four-day old track.
Debutant Jayant Yadav, unbeaten on 27, and Mohammed Shami (19) added 42 for the final wicket to take India past the 200-mark in the first ever test match in the port city of Visakhapatnam.
Original source: India all out for 204, England need 405 to win