At the break, Kohli (53) and Ravichandran Ashwin (6) went back undefeated after England managed to take three more wickets in the post-lunch session.
Resuming the second session at a precarious 76/3, Kohli and Ajinkya Rahane (15) started on a watchful note, helping India reach the three-figure mark before all-rounder Ben Stokes struck twice to inject further agony in the visitors’ dressing room.
Stokes first accounted for the wicket of Rahane, who needlessly flirted at a short of length delivery only to be caught comfortably by Keaton Jennings at third slip.
The all-rounder then cleaned up stumper Dinesh Karthik with a straight delivery, to claim his 100th Test wicket.
Stokes could have immediately jolted the Indians with the wicket of new man Hardik Pandya (22), only for the reviews to change the decision of the umpire.
Thereafter, Pandya played the perfect second fiddle, raising 48 runs for the sixth wicket with his skipper, who took full advantage of the life he got on 21 when Dawid Malan dropped him at second slip of James Anderson.
Kohli not only surpassed his previous best score of 41 in England but also went ahead to notch his 17th Test fifty off 100 balls before Pandya departed after being trapped in front by Curran.
Struggling at 148/6, Ashwin joined Kohli in the middle and the right-handed duo took India safely to tea.
Earlier in the morning session, Curran rocked India with three quick wickets of Murali Vijay (20), Shikhar Dhawan (26) and Lokesh Rahul (4) to spoil a bright 50-run opening stand in reply to England’s first innings total of 287.
Brief Scores: England 287 (Joe Root 80, Jonny Bairstow 70, Keaton Jennings 42; Ravichandran Ashwin 4/62, Mohammed Shami 3/64) vs India 160/6 (Virat Kohli 53 not out, Shikhar Dhawan 26, Hardik Pandya 22, Sam Curran 4/38).