I beg to differ.  I do find "def foo(a, *, b)" gets in the way of

Rhodri James *-* Kynesim Ltd

In what way?

In any case, focusing on the calling syntax being proposed, is there anything unreadable about:

foo(a, *, b)

compared to

foo(a, b=b)

? I think in the proposed syntax it's quite easy to understand that we're passing arguments 'a' and 'b' even if we have no idea what the '*' means, and it's small enough that it's fairly easy to mentally filter out.