`formatter_loader` references `reporter` and `reporter` references `formatter_loader`.  It's little confusing.  Actually, it's unclear to me why you do this `formatter_loader.setup_default` business within `reporter` -- is that necessary?

Anyhow, if it is, could it be restructured to something like this?

``` ruby
def formatter_loader
  ensure_formatter_loader_and_reporter_loaded
  @formatter_loader
end

def reporter
  ensure_formatter_loader_and_reporter_loaded
  @reporter
end

private

def ensure_formatter_loader_and_reporter_loaded
  return if @reporter
  @reporter = Reporter.new(self)
  @formatter_loader = Formatters::Loader.new(@reporter, output_stream, deprecation_stream)
end
```

This makes it explicit that these things need to be initialized together.  It also uses one step of formatter loader init (by passing the streams to `new`) rather than two steps -- any reason you had split it into two steps like that?