Multi-step guided interactive workflows that walk users through complex tasks

Quickstart

List the built-in wizards, then run one. run() is a coroutine, so drive it with asyncio.run:

import asyncio

from attune.wizards import get_wizard, list_wizards


async def main() -> None:
    for cfg in list_wizards():
        print(cfg.wizard_id, "-", cfg.name)

    wizard_cls = get_wizard("debug")
    if wizard_cls is not None:
        result = await wizard_cls().run()
        print(result.success, result.wizard_id)


asyncio.run(main())

get_wizard returns the wizard class (or None if the id is unknown); instantiate it and await run().