feat: add 'onStarted' hook