Hello! Have you considered using coroutines to process messages in agents? It would be good solution for waiting messages with saving context.
Something like that
class SomeAgent: public agent_t
{
// ...
coro_type sendRequestWaitResponse()
{
so_5::send<Request>(someMbox);
auto response = co_await so_5::receive<Response>(someMbox);
// handle response
}
//...
};