Saints got off to a fast start in front of an expectant home crowd, with Fraser Dingwall making a nuisance of himself in midfield before feeding Smith to exploit a gap to run in and score.
But they were pegged back soon after.
With Tom Litchfield in the sin-bin for not rolling away following Bernard van der Linde's midfield break, the ball eventually found its way to Hennessey on the wing and he crossed to score.
With Bath reduced to 14 men following a deliberate knock-on from Will Muir, the Saints restored their lead with Alex Mitchell finding Tommy Freeman to go over in the corner.
Saints soon added a third through Sleightholme, who powered down the wing untouched following quick interplay between Freeman and George Hendy in midfield.
But Bath were not to be held off for long. Off the back of a scrum, Hennessey did well to draw multiple defenders before freeing his arms to feed Will Butt, who offloaded to Green to go over for a well-worked second.
With Bath knocking on the door again, the Saints snaffled the ball in their own 22 with Sleightholme leading a breathless counter-attack into the visitors' half.
Having been tackled by Josh Bayliss, the ball was recycled and eventually ended up in the hands of Freeman, who went over for the Saints' bonus-point score.