diff --git a/agkyra/cli.py b/agkyra/cli.py
index ddc74bbd65d44738c32a1f85a3c084d9c5ca13c2..d6531339fb26ca7f09716f2f07ac5e99c531300c 100644
--- a/agkyra/cli.py
+++ b/agkyra/cli.py
@@ -13,62 +13,50 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+from ws4py.client import WebSocketBaseClient
 import cmd
 import sys
 import logging
-from agkyra.syncer import setup, syncer
-from agkyra.syncer.pithos_client import PithosFileClient
-from agkyra.syncer.localfs_client import LocalfsFileClient
 from agkyra import config
 
 
 LOG = logging.getLogger(__name__)
 
 
-class AgkyraCLI(cmd.Cmd):
-    """The CLI for """
+class AgkyraCLI(cmd.Cmd, WebSocketBaseClient):
+    """The CLI for Agkyra is connected to a protocol server"""
 
     cnf = config.AgkyraConfig()
-    is_shell = False
-
-    def init(self):
-        """initialize syncer"""
-        # Read settings
-        sync = self.cnf.get('global', 'default_sync')
-        LOG.info('Using sync: %s' % sync)
-        cloud = self.cnf.get_sync(sync, 'cloud')
-        url = self.cnf.get_cloud(cloud, 'url')
-        token = self.cnf.get_cloud(cloud, 'token')
-        container = self.cnf.get_sync(sync, 'container')
-        directory = self.cnf.get_sync(sync, 'directory')
-
-        # Prepare syncer settings
-        self.settings = setup.SyncerSettings(
-            sync, url, token, container, directory,
-            ignore_ssl=True)
-        LOG.info('Local: %s' % directory)
-        LOG.info('Remote: %s of %s' % (container, url))
-        # self.exclude = self.cnf.get_sync(sync, 'exclude')
-
-        # Init syncer
-        master = PithosFileClient(self.settings)
-        slave = LocalfsFileClient(self.settings)
-        self.syncer = syncer.FileSyncer(self.settings, master, slave)
 
     def preloop(self):
-        """This runs when the shell loads"""
-        print 'Loading Agkyra (sometimes this takes a while)'
-        if not self.is_shell:
-            self.is_shell = True
-            self.prompt = '\xe2\x9a\x93 '
-            self.init()
+        """Prepare agkyra shell"""
+        self.prompt = '\xe2\x9a\x93 '
         self.default('')
 
+    def precmd(self):
+        print 'PRE'
+
+    def postcmd(self):
+        print 'POST'
+
+    def do_config(self, line):
+        """Commands for managing the agkyra settings
+        list   [global|cloud|sync [setting]]          List all or some settings
+        set    <global|cloud|sync> <setting> <value>  Set a setting
+        delete <global|cloud|sync> [setting]          Delete a setting or group
+        """
+        args = line.split(' ')
+        try:
+            method = getattr(self, 'config_' + args[0])
+            method(args[1:])
+        except AttributeError:
+            self.do_help('config')
+
     def print_option(self, section, name, option):
         """Print a configuration option"""
         section = '%s.%s' % (section, name) if name else section
         value = self.cnf.get(section, option)
-        print '  %s: %s' % (option, value)
+        sys.stdout.write('  %s: %s\n' % (option, value))
 
     def list_section(self, section, name):
         """list contents of a section"""
@@ -94,18 +82,14 @@ class AgkyraCLI(cmd.Cmd):
         for section in self.cnf.sections():
             self.list_section_type(section)
 
-    def do_list(self, line):
-        """List current settings (\"help list\" for details)
-        list global                 List all settings
-        list global <option>        Get the value of this global option
-        list cloud                  List all clouds
-        list cloud <name>           List all options of a cloud
-        list cloud <name> <option>  Get the value of this cloud option
-        list sync                   List all syncs
-        list sync <name>            List all options of a sync
-        list sync <name> <option>   Get the value of this sync option
+    def config_list(self, args):
+        """List (all or some) options
+        list                                List all options
+        list <global | cloud | sync>        List global | cloud | sync options
+        list global OPTION                  Get global option
+        list <cloud | sync> NAME            List options a cloud or sync
+        list <cloud | sync> NAME OPTION     List an option from a cloud or sync
         """
-        args = line.split()
         try:
             {
                 0: self.list_sections,
@@ -114,20 +98,24 @@ class AgkyraCLI(cmd.Cmd):
                 3: self.print_option
             }[len(args)](*args)
         except Exception as e:
-            sys.stderr.write('%s\n' % e)
-            cmd.Cmd.do_help(self, 'list')
+            LOG.debug('%s\n' % e)
+            sys.stderr.write(self.config_list.__doc__ + '\n')
 
     def set_global_setting(self, section, option, value):
         assert section in ('global'), 'Syntax error'
         self.cnf.set(section, option, value)
 
     def set_setting(self, section, name, option, value):
-        assert section in self.sections(), 'Syntax error'
+        assert section in self.cnf.sections(), 'Syntax error'
         self.cnf.set('%s.%s' % (section, name), option, value)
 
-    def do_set(self, line):
-        """Set a setting"""
-        args = line.split()
+    def config_set(self, args):
+        """Set an option
+        set global OPTION VALUE                 Set a global option
+        set <cloud | sync> NAME OPTION VALUE    Set an option on cloud or sync
+                                                Creates a sync or cloud, if it
+                                                does not exist
+        """
         try:
             {
                 3: self.set_global_setting,
@@ -135,66 +123,34 @@ class AgkyraCLI(cmd.Cmd):
             }[len(args)](*args)
             self.cnf.write()
         except Exception as e:
-            sys.stderr.write('%s\n' % e)
-            cmd.Cmd.do_help(self, 'set')
-
-    def do_start(self, line):
-        """Start syncing"""
-        if not getattr(self, '_syncer_initialized', False):
-            self.syncer.probe_and_sync_all()
-            self._syncer_initialized = True
-        if self.syncer.paused:
-            self.syncer.start_decide()
-
-    def do_pause(self, line):
-        """Pause syncing"""
-        if not self.syncer.paused:
-            self.syncer.pause_decide()
-
-    def do_status(self, line):
-        """Get current status (running/paused, progress)"""
-        print 'paused' if self.syncer.paused else 'running'
-
-    # def do_shell(self, line):
-    #     """Run system, shell commands"""
-    #     if getattr(self, 'is_shell'):
-    #         os.system(line)
-    #     else:
-    #         try:
-    #             self.prompt = '\xe2\x9a\x93 '
-    #             self.is_shell = True
-    #         finally:
-    #             self.init()
-    #             self.cmdloop()
-
-    def do_help(self, line):
-        """List commands with \"help\" or detailed help with \"help cmd\""""
-        if not line:
-            self.default(line)
-        cmd.Cmd.do_help(self, line)
-
-    def do_quit(self, line):
-        """Quit Agkyra shell"""
-        return True
-
-    def default(self, line):
-        """print help"""
-        sys.stderr.write('Usage:\t%s <command> [args]\n\n' % self.prompt)
-        for arg in [c for c in self.get_names() if c.startswith('do_')]:
-            sys.stderr.write('%s\t' % arg[3:])
-            method = getattr(self, arg)
-            sys.stderr.write(method.__doc__.split('\n')[0] + '\n')
-        sys.stderr.write('\n')
-
-    def emptyline(self):
-        if not self.is_shell:
-            return self.default('')
-
-    def run_onecmd(self, argv):
-        self.prompt = argv[0]
-        self.init()
-        self.onecmd(' '.join(argv[1:]))
+            LOG.debug('%s\n' % e)
+            sys.stderr.write(self.config_set.__doc__ + '\n')
+
+    def delete_option(self, section, name, option):
+        """Delete a config secttion (sync or cloud)"""
+        assert section in self.cnf.sections(), 'Syntax error'
+        if section == config.CLOUD_PREFIX:
+            self.cnf.remove_from_cloud(name, option)
+        elif section == config.SYNC_PREFIX:
+            self.cnf.remove_from_sync(name, option)
+        else:
+            self.cnf.remove_option('%s.%s' % (section, name), option)
 
+    def config_delete(self, args):
+        """Delete an option
+        delete global OPTION                Delete a global option
+        delete <cloud | sync> NAME          Delete a sync or cloud
+        delete <cloud |sync> NAME OPTION    Delete a sync or cloud option
+        """
+        try:
+            {
+                2: self.cnf.remove_option,
+                3: self.delete_option
+            }[len(args)](*args)
+            self.cnf.write()
+        except Exception as e:
+            LOG.debug('%s\n' % e)
+            sys.stderr.write(self.config_delete.__doc__ + '\n')
 
 # AgkyraCLI().run_onecmd(sys.argv)