             timeout           : undefined
             bwlimit           : undefined
             cb                : required
-        # copy a path using rsync from one project to another
-
+
+    # read a file or directory from disk
     read_file: (opts) =>
         opts = defaults opts,
             path    : required
             maxsize : 3000000    # maximum file size in bytes to read
             cb      : required
-        # read a file or directory from disk
-
-    set_settings: (opts) =>
-        # set various quotas
+
+    # set various quotas
+    set_quotas: (opts) =>
         opts = defaults opts,
             disk_quota   : undefined
             cores        : undefined

###
# Client code -- runs in hub
###


compute_server_cache = undefined
exports.compute_server = (project_id) ->
    if not compute_server_cache?
        compute_server_cache = new ComputeServerClient()
    return compute_server_cache

class ComputeServerClient
    constructor: () ->

    add_server: (opts) =>
        defaults opts,
            hostname : required
            cb       : required

    servers: (opts) =>
        defaults opts,
            cb       : required
        # compute server id's and health/load info

    call: (opts) =>
        defaults opts,
            server_id : required
            mesg      : undefined
            cb        : required
        # send message to a server and get back result


client_project_cache = {}

        opts = defaults opts,
            project_id : required

    # open project files on some node
    open: (opts) =>
        opts = defaults opts,
            cb     : required

    # start local_hub daemon running (must be opened somewhere)
    start: (opts) =>
        opts = defaults opts,
            cb     : required

    # kill everything and remove project from this compute node  (must be opened somewhere)
    close: (opts) =>
        opts = defaults opts,
            force  : false
            nosave : false
            cb     : required

    # move project from one compute node to another one
    move: (opts) =>
        opts = defaults opts,
            target : required
            cb     : required

    # kill all processes, then start
    restart: (opts) =>
        opts = defaults opts,
            cb     : required

    # kill all processes
    stop: (opts) =>
        opts = defaults opts,
            cb     : required

    # create snapshot, save incrementals to cloud storage
    save: (opts) =>
        opts = defaults opts,
            cb     : required

    # project location and listening port
    address: (opts) =>
        opts = defaults opts,
            cb     : required

    # information about project (ports, state, etc.)
    status: (opts) =>
        opts = defaults opts,
            cb     : required

    # the state of the project, which is one of:
    #   closed, opened, running,
    #   opening, starting, restarting, stopping
    #   error
    state: (opts) =>
        opts = defaults opts,
            cb     : required


    # copy a path using rsync from one project to another
    copy_path: (opts) =>
        opts = defaults opts,
            target_project_id : required
