Ksp и kapt нужны для генерации кода. Довольно удобно написать код один раз, а потом просто подтягивать в нужных местах с помощью аннотации. Если вы использовали Room или Dagger, то в зависимостях прописываете kapt("") и указываете плагин "org.jetbrains.kotlin.kapt". Вот как раз тут и происходит вся магия. Минутка истории: вначале появился apt (Annotation Processing Tool). И он работает только с Java. А ещё там есть рефлексия, плохая производительность, плохая безопасность и прочие радости. И самое главное: apt доступен только для чтения...