step agent rewrite in go