Many commands / worker messages result in a DirectoryInfo being sent to the UI. This DirectoryInfo also triggers a FetchDirectoryContents/Threaded, which for some workers takes a significant amount of time. When an archive operation is done, and the parent directories are created, a ListDirectories is performed, which then gathers all of the directory info again.
For a common operation, such as marking a message as read and moving it to archive, this can result in a minimum of 3 FetchDirectoryContents/Threaded calls, and many more if multiple parents are attempted for creation.
A few things to look at: Do we need to ListDirectories after creation/deletion? If we don't actually create a directory, don't list directories Decide if we need DirectoryInfo for Flag ops. Decide if we need FS watchers for deleted/moved messages
About "Decide if we need FS watchers for deleted/moved messages": if the user relies on mbsync through a system service, aerc can show an outdated message list, so I'd say yes.