I use a variation of waterhouse's eval-w/stdout [1] that is essentially the original wrapped in an on-err:
; don't especially like name (def eval-w/stderr/out (expr) (tostring:let result nil (on-err (fn (c) (pr "Error: " #\" (details c) #\")) (fn () (let output (tostring (= result (eval expr))) (unless (empty output) (pr output)) (write result))))))
[1] http://arclanguage.org/item?id=12214