I am trying to make our internal build farm more dynamic than a set of predefined SSH agents, and swarm client is quite a successful replacement for us.
We do however miss some of the generic agents' configurability that we need as different workers are used for different cases.
One such item is ability to pass Environment variables (and/alternately to Prepare jobs environment, from EnvInject plugin) as part of the swarm client's configuration, perhaps from file handling similar to what is now done for labels. We need it to set up proxies, paths, etc. as applicable to this or that agent deployment. At least, for this half of of the problem we can export the fixed variables from the wrapper script (service method) which starts the swarm client for us, as a workaround. We can not change the definitions without restarting the client, however.
The other problem is harder to work around: restriction of jobs executions, at least the option to filter by regex of the job name(s). We have use-cases where node labels are good, and some cases where they come short (e.g. we don't want or can't change a node label definition in an experimental project branch, but want that branch practically built on dedicated workers and not intermix with master development - filtering by full-jobname regex supported this use-case well).