The interior ministry said the operation had been launched with ground forces moving from Kunduz airport – where they had massed since the city fell – over roads that had been mined by the insurgents.
Ministry spokesman Sediq Sediqqi claimed troops had taken control of the city but conceded that an operation “to clear the city is ongoing” and could take days.
He said the effort to retake Kunduz was a joint army and police operation and that roadblocks set up by the Taleban to prevent any movement had been removed. He said essential supplies, including food and medicine, would be delivered soon to residents.
Mr Sediqqi said around 200 Taleban fighters had been killed so far but did not provide a figure for government casualties.
Kunduz police chief Sarwar Hussaini said bodies of dead Taleban fighters lay on some city streets but that the clearance operation was complicated because some of the insurgents had hidden inside people’s homes.
Residents reported street battles and gunfire in various areas of the city.
Zabihullah, a Kunduz resident living close to the main city square, who like many Afghans prefers to use one name, said: “The situation is really critical and getting worse, and I’ve just heard a huge explosion from a bomb near my house.”
The capture of the city by the Taleban, which began with a co-ordinated attack on Monday, took the government, military and intelligence agencies by surprise.
On Wednesday, Afghan troops, backed by US air strikes, massed on the outskirts of the city and at the airport in a build-up of what was expected to be a long and difficult campaign to drive out the Taleban.
The fall of Kunduz marked a major setback for Afghan government forces, who have struggled to combat insurgents with limited aid from the US and Nato troops. The international forces’ role shifted to training and support after all Nato combat forces withdrew from Afghanistan at the end of last year.
The Taleban denied losing the city. The group’s spokesman said “the Taleban flag is still flying” and “life in Kunduz is normal”.