Command names are sent over the ssh pipe as plain text, followed by a newline. Arguments are sent as [argname] [value length]\n, followed by the value. Responses are [response length]\n, followed by the response.
send: heads response: 41 482d3fb47d80693f929101f95944bf019009dd79
Because older Mercurial versions give no/zero-length responses to unknown commands, you must first send the hello command followed by a command with known output, and then determine if the hello command responded before the known output was sent.