I believe all I/O is blocking unless you use something that wraps NIO. This is definitely true for core.async threads, but I'm not sure why it would any different for agents.
This is also a bit of a departure for people coming from Go or Erlang/Elixir.