refactor grimoire to be some more promise-oriented