Cagni, a defender, made his Serie A debut for Brescia in 1970, in a league match lost 4–0 to Cagliari. He played only eight Serie A matches, but gained a deep experience of Serie B, where he played 473 matches and scored 5 goals.
After a season as youth team coach in his home team Brescia, Cagni coached Centese of Serie C2 in 1989–90, and successively signed for Piacenza of Serie C1 in 1990–91, becoming one of the main authors of Piacenza's first appearance in Serie A, in 1993. Cagni stayed at Piacenza until 1996, when he moved to Hellas Verona F.C., again in Serie A. However, Cagni was not able to maintain his team to the top division, and Verona was relegated. Since then, Cagni mostly served for Serie B teams, with the exception of Piacenza, who rehired him in 2002–03 in an unsuccessful attempt to avoid relegation.
In January 2006, after the dismissal of Mario Somma, Empoli appointed Cagni as head coach. Under his tenure, the experienced boss was able to lead the team up to tenth place, then become seventh following the Calciopoli scandal. His contract with Empoli was extended on March 2007 for another year, following impressive performances which led the team to fight for and eventually gain a spot in the next UEFA Cup, the first appearance in a continental competition for both the small Tuscan club and Cagni himself. However a poor start in the Serie A 2007–08, and a UEFA Cup elimination in the first round to FC Zurich convinced Empoli's management to sack Cagni, appointing Alberto Malesani as replacement. On 31 March 2008 he was re-called at the helm of Empoli, following the club board's decision to fire Malesani too, but he did not manage to save the club from last matchday relegation. He resigned after the verdict.
On 29 May 2008, it was announced that Cagni signed a two-year contract with Parma and was to coach the club in their first season in Serie B in 18 years. However, on 30 September 2008 he was fired by his team, Parma, and replaced by Francesco Guidolin. 
On 6 October 2011 he became the new coach of Vicenza in Serie B, in place of the sacked Silvio Baldini.On 4 March 2012 he was sacked, but on 29 April 2012 he was recalled by Vicenza, but he could not save the team from relegation.