Ideas
Class senf::console::ScopedDirectory< Owner >
This proxy could be made obsolete by allowing to allocate node objects statically. This could be achieved by moving back to an intrusive_ptr implementation for normal pointing needs with an added twist: Give each node a smart_ptr member pointing to itself with a null deleter. This allows to create weak_ptr's to the nodes which will automatically expire when the node is deleted (either statically or by the intrusive_ptr).
Class senf::console::Server
To support blocking commands, we could give the Client 'suspend()' and 'resume()' members. suspend() would probably throw some kind of exception to transfer control back to the Client instance. on resume(), the command would be called again, maybe setting some flag or something. Example for use: Host name resolution: Here we can just built our own little host-name cache. When the name is not found, we ask the resolver to resolve it and call 'resume' when the name is found. Since it is in the cache now, the command will now complete.