         [clojure.walk :only [walk]]
 		[clojure.contrib.def :only [defvar- defvar]]))
 
-(def bash-reset "\033[0m")
-(def bash-bold "\033[1m")
-(def bash-redbold "\033[1;31m")
-(def bash-greenbold "\033[1;32m")
+(def {^private: true} bash-reset "\033[0m")
+(def {^private: true} bash-bold "\033[1m")
+(def {^private: true} bash-redbold "\033[1;31m")
+(def {^private: true} bash-greenbold "\033[1;32m")
+
+(defmacro cli-bash-bold [& content]
+  `(str bash-bold ~@content bash-reset))
+
+(defmacro cli-bash-redbold [& content]
+  `(str bash-redbold ~@content bash-reset))
+
+(defmacro cli-bash-greenbold [& content]
+  `(str bash-greenbold ~@content bash-reset))
 
 (defvar- *runtime* (Runtime/getRuntime))
 

	(.waitFor process)))
(defn gen-log
  [host tag content]
  (str bash-redbold host ":" bash-greenbold tag ": " bash-reset (join " " content)))

(defn log-with-tag
  [host tag & content]

			   (let [task-arg-count (- (arg-count task) 3)]
				 (when-exit (not= task-arg-count (count args)) (str "Task " (name taskName) " just needs " task-arg-count " arguments")))
			   (let [map-fn (if parallel pmap map)]
				 (println  (cli-bash-bold "Performing " (name clusterName) (if parallel " in parallel")))
				 (dorun (pmap #(perform % user cluster task taskName args) addresses))
				 (dorun (pmap #(perform (:host %) (:user %) cluster task taskName args) clients))
				 (shutdown-agents)))))
