Made `Agent` an abstract trait

pushed existing implementation into a private `SecretAgent` class. See #3108