So far as I know, autorenew is driven by the payment processor: Stripe, PayPal, GoCardless etc determine that a new payment is due based on the payment schedule that has been setup. They charge the customer and notify CiviCRM via a webhook of the new payment. CiviCRM then records the payment and updates the membership.
In the case of free membership, there is no external payment processor to trigger that renewal. There may not be a CiviRules action for that, but it shouldn't be too hard to write. But since core's UI lets you create an autorenewing free membership it would seem there should be a core method for doing the renewal, probably as a scheduled job. I'd suggest writing it up as an enhancement suggestion on https://lab.civicrm.org/dev/core/-/issues