client: improve watcher interface