Ótimo trabalho!
Idealmente, você pode considerar empacotar isso como um plugin para evitar a necessidade de um executável ou script separado: Developing Discourse Plugins - Part 1 - Create a basic plugin
Arquitetonicamente, você também pode considerar usar os Eventos nativos do Discourse para capturar o momento em que deseja enviar uma mensagem a um usuário — isso evitaria agendar qualquer coisa.
Mas, se você precisar disso, o Discourse também possui um ótimo agendador e há vários plugins que criam ‘Jobs’ personalizados. Scheduling jobs from a plugin - #2 by simon