After bowling the hosts out for 222 before lunch, India set about extending its 75-run first innings lead but lost top order wickets at regular intervals to stall its momentum.
Spinner Roston Chase (2-69) snared both openers, having Mayank Agarwal trapped lbw for 16 before bowling KL Rahul for 38.
In the next over, Kemar Roach bowled Cheteshwar Pujara for 25 to reduce India to 81-3 in the 31st over. Kohli (51 not out) and Rahane (53 not out) then combined for a watchful 104-run stand to steady the tourists innings,
Rahane scored his second fifty of the match off 128 balls with three fours, shortly before Kohli brought up his 21st half-century in 76 tests with a boundary off Miguel Cummins in the penultimate over of the day.
The West Indies resumed Saturday at its overnight score of 189-8, still trailing India by 108 runs. Captain Jason Holder made a composed 39, sharing a 41-run partnership with tailender Cummins who faced 45 balls for no runs – the second longest innings for no score in Test cricket – in his 96-minute cameo before he was bowled by Ravindra Jadeja. Ishant Sharma finished with 5-43 for his eighth five-wicket haul in 90 tests.