 (defn is-ip? [s]
   (re-matches #"(?:\d{1,3}\.){3}\d{1,3}" s))
 
-(def Session
-  "A schema for a session spec."
+(def Capabilities {s/Any s/Any})
+
+(def SessionInRedis
+  "A session, as represented in redis."
+  {:id                            s/Str
+   (s/optional-key :tags)        [s/Str]
+   (s/optional-key :reserved)     s/Bool
+   (s/optional-key :current-url)  s/Str
+   (s/optional-key :browser-name) s/Str
+   (s/optional-key :node-id)      s/Str})
+
+(def SessionView
+  "A session, as presented to library users."
   {:id                            s/Str
    (s/optional-key :tags)        [s/Str]
    (s/optional-key :reserved)     s/Bool

  "Asynchronously point a session to a url.
  Return nil or :webdriver-is-dead."
  (webdriver-go-to-url (resume-webdriver-from-id session-id) url))

(defn modify-session
  [session-id {:keys [browser-name

            nil)
        (car/return (view-model session-id))))
    nil))

(def CreateArg
  "Session-creation args"
  {(s/optional-key :browser-name) s/Str
   (s/optional-key :capabilities) Capabilities
   (s/optional-key :node-id) s/Str})

(defn create-session
  [{:keys [browser-name
