 
 (defn -action-event
   [source-signal-id action]
-  [(random-uuid) source-signal-id action])
+  {:id               (random-uuid)
+   :source-signal-id source-signal-id
+   :enabled?         true
+   :action           action})
+
+(defn -update-actions*
+  "model must be immutable."
+  [model pred f & args]
+  (s/transform [:actions s/ALL pred]
+               #(apply f % args)
+               model))
+
+(defn -update-action
+  "model must be immutable."
+  [model id f & args]
+  (apply -update-actions* model #(= (:id %) id) f args))
+
+(defn -toggle-action
+  "dev-model is a ratom."
+  [dev-model id]
+  (swap! dev-model
+         -update-action id
+         update :enabled? not))
 
 (defn -devtools-view
   "dev-model must be a ratom."

             [:span [:strong (pr-str (first signal))] " " (clojure.string/join " " (rest signal))]
             [:span [:strong (pr-str signal)]])

           (for [[id _signal-id_ action] (filter #(= (second %) signal-id) (:actions @dev-model))]
             ^{:key id}
             [:div {:style {:margin-left "10px"}}
              "⇣"
              (if (coll? action)
                [:div
                 [:strong (pr-str (first action))] " " (clojure.string/join " " (rest action))]

   :initial-model-saved? false
   ; list of [id signal]
   :signals              (list)
   ; list of {id source-signal-id enabled? action}
   :actions              (list)})

(defn -signal-event
