The problem is solved by making the arguments optional:
#[derive(Args)] #[group(required = true, multiple = false)] struct Exclusive { #[arg(short)] a: Option<u8>, #[arg(short)] b: Option<u8>, }