Luton Town slumped to their eighth successive away-day defeat with this reverse against the Robins which was sign-posted in the fourth minute when Marley Watkins opened the scoring.
The Robins doubled their tally on the stroke of half time from the penalty spot through Famara Diedhiou and the game was wrapped up by the 66th minute through Andreas Weimann's impudent back-heel flick finish.
They were the icing and cherry on the cake, but it's becoming part of the recipe that Town concede first and when Luke Bolton allowed Niclas Eliasson to cross, Watkins stooped to head home.
It was the fifth time this term Town had conceded inside the opening 10 minutes and they could not recover.
Boss Graeme Jones made two changes to the starting line-up that drew 3-3 with Harry Cornick preferred in place of Callum McManaman and James Shea returning in-between the sticks at the expense of an injured Simon Sluga (calf).
The stopper had to be alert to prevent the Robins goalscorer from doubling his and City's tally half an hour after his opener, after a period of comfortably dominance from his side. Bolton was beaten again by Eliasson, who got the byline and stood up a cross to the back stick, but Shea was there to produce an instinctive block.
But, on the stroke of half time, Kazenga LuaLua tripped Jack Hunt in the penalty area and Diedhiou sent the spot-kick down the middle to leave Luton with a mountain to climb.
They made some inroads after the restart with a big penalty shout for a push, not given, before Harry Cornick had the Hatters' first real chance. Daniel Bentley got an outstretched glove to the low drive and Hunt then hacked off the line. It was as close as they would come.
Diedhiou almost made it 3-0 soon after when he connected with a Weimann deep free-kick, yet found Shea well-placed to gather.
But it finally came in the 66th minute when Hunt whipped in a low cross that Weimann cheekily converted inside the near post.
It was then a long 24 minutes to wait for referee Oliver Langford to put Luton out of their misery.
Bristol City: Bentley, Hunt, Dasilva (Rowe, 68), Nagy, Brownhill, Diedhiou (Rodri, 84), Weimann, Watkins (Smith, 80), Eliasson, Kalas, Williams
Unused subs: Maenpaa, Semenyo, Moore, Massengo
Luton: Shea, Tunnicliffe (Moncur, 60), Bradley, Pearson, Berry, Cornick, Mpanzu, Collins, Bolton (Cranie, 45), LuaLua (Sheehan, 81), Bree
Unused subs: Stech, McManaman, Shinnie, Butterfield
Referee: Oliver Langford
Attendance: 22,216 (1,109)