You just need a supervisor if your plugins might crash and you want celluloid to restart them.
What you want to do could be as simple as using pools and futures.
To have a shared pool for your plugins you need a new actor for that.
class PluginRunner
include Celluloid
def run(plugin)
plugin.run
end
end
plugin_runner = PluginRunner.pool(size: 4)
plugins = [LastFmPlugin, TwitterPlugin]
results = plugins.map {|p| plugin_runner.future.run(p) }.map(&:value)
persist_results(results)