ideally want to automatically check things like this with protocols. So as we scale up to integrate with many robots that don't have an end effector we can do checks like this more systematically
Originally posted by @spomichter in #1277
Currently coordinator.py uses isinstance(hw, ConnectedTwistBase) to guard operations like gripper commands. As more hardware types are added, this pattern requires updating coordinator logic for each new type. Instead, define capability protocols (e.g. SupportsGripper, SupportsMobility) and check against those so hardware self-declares its capabilities.