Should be implemented as metaclass, not a decorator (mypy still fails to understand class decorators). It could, for example, look like this: ```py from typing import Literal, Protocol, TypeIs from optype.typing import ProtoType class HasSpam(Protocol, metaclass=ProtoType): spam: ClassVar[Literal["spam"]] @HasSpam.on_isinstance def type_has_spam(obj: object, /) -> TypeIs[HasSpam]: return getattr(type(obj), "spam", None) == "spam" @HasSpam.on_issubclass def has_spam(tp: object, /) -> TypeIs[type[HasSpam]]: return isinstance(obj, type) and getattr(obj, "spam", None) == "spam" ```