I think that since the the browser is being provided by the caller, then the caller is the 'owner' of the browser and Saga is just manipulating it, so it doesn't seem unreasonable to me for the caller to be responsible for the disposition of the browser.  I think that Saga should leave the browser in the same state on returning to the caller (opened) as it was when it was called.

On the other hand, since the caller is creating the browser instance, it could subclass and override the quit() method so that it doesn't actually do anything when called by Saga.  This seems kind of hackish to me, but if you feel strongly about not quitting the browser, then this could work.

The "post-run" callback technique you suggest seems more appropriate to an alternative approach where Saga creates the web driver and browser objects and allows the caller to do "post-run" processing on it.  While this achieves the same goal of letting the caller interpret the test results, it lacks the flexibility of allowing the caller to choose driver capabilities, etc., or to subclass and override driver/browser methods.