There is no stratum protocol specification that would allow on-the-fly algorithm change without reconnect.
But if that happens, and if the stratum is a bit reorganized - so the auth handshaking is performed FIRST and then mining begins (not vice verse like now), then we have a chance to implement something similar as you suggested.
Keep in mind that we wanted to make it simple. Simplicity has proven to work in this scene, where people rather get paid less, as long as they don't have to work so much. The current needed work is only to put pools into your config, the rest is done by us.
Don't get me wrong, I understand this is just a start and I'll be definitely be testing it. I have to disagree though with defining algo-specific parameters for each pool. It would be just as simple to have a section for algorithms/kernels/whatever:
"algorithms": [
{
"name" : "scrypt",
"kernel" : "zuikkis",
"nfactor" : "10",
"gpu-engine" : "1000",
"thread-concurrency" : "8192"
},
...
and then just reference it in the pool config:
"pools": [
{
"name" : "NiceHash_Scrypt_multi",
"url" : "stratum+tcp://stratum.nicehash.com:4333",
"user" : "BTC_address",
"pass" : "d=1024",
"algorithm" : "scrypt"
},
It's simple, clean, and reusable for more than just nicehash. I just don't see why thread-concurrency and other parameters need to be pool-specific.