`simplecov serve` and `simplecov run` both exist, so the missing piece here is fairly small. `simplecov watch` would watch the source and test trees, re-run on save, regenerate, and push a reload to the tab `serve` already has open. ``` $ simplecov watch bundle exec rspec watching 214 files, serving http://127.0.0.1:53422 lib/simplecov/result.rb changed, running 3 files... 100.00% (+0.4%) ``` Server-sent events over the existing `serve` handler are enough for the reload, and since https://github.com/simplecov-ruby/simplecov/pull/1245 the report is a single `index.html`, so there is no half-updated state for the browser to catch. Re-running the whole suite on every save is fine on a small project and useless on a large one, which is why this gets much better once test selection (https://github.com/simplecov-ruby/simplecov/issues/1264) lands, but it is worth having before that. The fiddly parts are debouncing, ignoring the coverage directory itself so a report write does not trigger the next run, and surviving editors that save through a temporary file. `listen` is the obvious dependency and the one I would rather not take, so polling `File.mtime` over the tracked set may be the better trade for a command that is optional to begin with. This is what `vitest --coverage --watch` and `cargo watch` did for their ecosystems. It turns the report from a post-CI artifact into something you look at while writing the test.