Hopefully it will be helpful to others. I dabbled with this month ago after discovering it on the Tivo Community forums here:
http://www.tivocommunity.com/tivo-vb/showthread.php?t=392385 but couldn't get it work successfully in VC and I had decent control working through my iTach with IR commands (thanks to some patient help from the VC forums) so I left it. Decided to give it another try a couple of weeks ago and finally got it to work correctly. I've been meaning to post it ever since but work has kept me busy.
I use a listen command specific to the Tivo that disables my XBMC command group since the phrases used sometimes overlap (pause, play, fast forward, etc). All commands are basic telnet and when I tried before I always used TCP.Single.Write. I had tried with and without /x0D/x0A and subsets but I could never get it working for some reason. So this time I decided to open a connection during the listen command and issue TCP.Client.WriteLn for individual commands. That seemed to be the secret. Just TCP.Client.WriteLn with no terminator set in the session open. I set my 'don't listen' command and 'idle timeout' to close the session and re-enable the XBMC group (as I now use it for media more often than the Tivo).
My holy grail would be to have someone write a plug-in or Python command group that uses the rpcRequest options discovered by Arantius and fleshed out by Moyekj (the creator of KMTTG) in this thread (allowing for much more XBMC like control.. "skip to 50%", "show episodes of 'big bang theory'"), but that's way beyond my meager skills.
http://www.tivocommunity.com/tivo-vb/showthread.php?t=462980&page=3 Here are the commands I use to get VC to list and open and close the TCP session:
<?xml version="1.0" encoding="utf-16"?>
<command id="787" name="Listen" enabled="true" alwaysOn="True" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>VC.On</cmdType>
<cmdString />
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Sound.PlayWav</cmdType>
<cmdString>C:\Vox Commando\Sounds\Tivo upper.wav</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>TCP.Single.Write</cmdType>
<cmdString>{M:GcTV.TV MUTE}</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>VC.DisableGroup*</cmdType>
<cmdString>XBMC</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>VC.EnableGroup</cmdType>
<cmdString>Network Tivo Commands</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Tcp.Client.Connect</cmdType>
<cmdString>TIVO&&192.168.1.54&&31339</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>OK</phrase>
<phrase>Tivo</phrase>
</command>
<?xml version="1.0" encoding="utf-16"?>
<command id="8" name="Don't Listen" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>VC.Standby</cmdType>
<cmdString />
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>TCP.Single.Write</cmdType>
<cmdString>{M:GcTV.TV MUTE}</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>VC.EnableGroup*</cmdType>
<cmdString>XBMC</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>VC.DisableGroup</cmdType>
<cmdString>Network Tivo Commands</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Sound.PlayWav</cmdType>
<cmdString>C:\Vox Commando\Sounds\Tivo Thumbs Down.wav</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>TCP.Client.Disconnect</cmdType>
<cmdString>TIVO</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>ignore me,don't listen,stand by,stop listening</phrase>
</command>
<?xml version="1.0" encoding="utf-16"?>
<command id="719" name="Mute on Idle" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>TCP.Single.Write</cmdType>
<cmdString>{M:GcTV.TV MUTE}</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>VC.EnableGroup*</cmdType>
<cmdString>XBMC</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>VC.DisableGroup</cmdType>
<cmdString>Network Tivo Commands</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Sound.PlayWav</cmdType>
<cmdString>C:\Vox Commando\Sounds\Tivo Thumbs Down.wav</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>TCP.Client.Disconnect</cmdType>
<cmdString>TIVO</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<event>vc.idletimeout</event>
</command>
And here is the Network Commands Group
<?xml version="1.0" encoding="utf-16"?>
<commandGroup open="False" name="Network Tivo Commands" enabled="True" prefix="" priority="0" requiredProcess="" description="">
<command id="532" name="Tivo Channel Up" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>Tcp.Client.WriteLn</cmdType>
<cmdString>TIVO&&IRCODE CHANNELUP&&200</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>Channel Up</phrase>
</command>
<command id="543" name="Tivo Channel Down" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>Tcp.Client.WriteLn</cmdType>
<cmdString>TIVO&&IRCODE CHANNELDOWN&&200</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>Channel Down</phrase>
</command>
<command id="547" name="Tivo - Tivo" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>Tcp.Client.WriteLn</cmdType>
<cmdString>TIVO&&IRCODE TIVO&&200</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>Main Menu</phrase>
</command>
<command id="559" name="Tivo - Select" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>Tcp.Client.WriteLn</cmdType>
<cmdString>TIVO&&IRCODE SELECT&&200</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>Select</phrase>
</command>
<command id="572" name="Tivo - Live/Switch" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>Tcp.Client.WriteLn</cmdType>
<cmdString>TIVO&&IRCODE LIVETV&&200</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>Switch Tuners,Live TV</phrase>
</command>
<command id="576" name="Tivo - Guide" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>Tcp.Client.WriteLn</cmdType>
<cmdString>TIVO&&IRCODE GUIDE&&200</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>Guide</phrase>
</command>
<command id="606" name="Tivo - Clear/Delete" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>Tcp.Client.WriteLn</cmdType>
<cmdString>TIVO&&IRCODE CLEAR&&200</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>Clear, Delete</phrase>
</command>
<command id="604" name="Tivo - Info" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>Tcp.Client.WriteLn</cmdType>
<cmdString>TIVO&&IRCODE DISPLAY&&200</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>Info, Information,Display</phrase>
</command>
<command id="607" name="Tivo - Up" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="300" loopMax="10" description="">
<action>
<cmdType>Tcp.Client.WriteLn</cmdType>
<cmdString>TIVO&&IRCODE UP&&250</cmdString>
<cmdRepeat>{1}</cmdRepeat>
</action>
<phrase optional="true">Tivo, Move</phrase>
<phrase>Up</phrase>
<payloadRange>1,10</payloadRange>
</command>
<command id="610" name="Tivo - Down" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="300" loopMax="10" description="">
<action>
<cmdType>Tcp.Client.WriteLn</cmdType>
<cmdString>TIVO&&IRCODE DOWN&&250</cmdString>
<cmdRepeat>{1}</cmdRepeat>
</action>
<phrase optional="true">Tivo, Move</phrase>
<phrase>Down</phrase>
<payloadRange>1,10</payloadRange>
</command>
<command id="637" name="Tivo - Right" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>Tcp.Client.WriteLn</cmdType>
<cmdString>TIVO&&IRCODE RIGHT&&200</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase optional="true">Tivo, Move</phrase>
<phrase> Right</phrase>
</command>
<command id="638" name="Tivo - Left/Back" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>Tcp.Client.WriteLn</cmdType>
<cmdString>TIVO&&IRCODE LEFT&&200</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase optional="true">Tivo, Move</phrase>
<phrase> Back</phrase>
</command>
<command id="643" name="Tivo - Enter/Last" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>Tcp.Client.WriteLn</cmdType>
<cmdString>TIVO&&IRCODE ENTER&&200</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>Enter</phrase>
</command>
<command id="657" name="Tivo - Replay" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="300" loopMax="10" description="">
<action>
<cmdType>Tcp.Client.WriteLn</cmdType>
<cmdString>TIVO&&IRCODE REPLAY&&400</cmdString>
<cmdRepeat>{1}</cmdRepeat>
</action>
<phrase>Replay</phrase>
<payloadRange optional="true">1,10</payloadRange>
</command>
<command id="667" name="Tivo - Pause" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>Tcp.Client.WriteLn</cmdType>
<cmdString>TIVO&&IRCODE PAUSE&&200</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>Pause</phrase>
</command>
<command id="681" name="Tivo - Play" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>Tcp.Client.WriteLn</cmdType>
<cmdString>TIVO&&IRCODE PLAY&&200</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>Play</phrase>
</command>
<command id="713" name="Tivo - FFW <#>" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="300" loopMax="3" description="">
<action>
<cmdType>Tcp.Client.WriteLn</cmdType>
<cmdString>TIVO&&IRCODE FORWARD&&250</cmdString>
<cmdRepeat>{1}</cmdRepeat>
</action>
<phrase optional="true">Tivo</phrase>
<phrase>Fast Forward</phrase>
<payloadRange optional="true">1,3</payloadRange>
</command>
<command id="723" name="Tivo - REW <#>" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="300" loopMax="3" description="">
<action>
<cmdType>Tcp.Client.WriteLn</cmdType>
<cmdString>TIVO&&IRCODE REVERSE&&250</cmdString>
<cmdRepeat>{1}</cmdRepeat>
</action>
<phrase optional="true">Tivo</phrase>
<phrase>Rewind</phrase>
<payloadRange optional="true">1,3</payloadRange>
</command>
<command id="714" name="Tivo - REC" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>Tcp.Client.WriteLn</cmdType>
<cmdString>TIVO&&IRCODE RECORD&&200</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>Record</phrase>
<phrase optional="true">This, This Program</phrase>
</command>
<command id="717" name="Tivo - Skip <#>" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="300" loopMax="6" description="">
<action>
<cmdType>Tcp.Client.WriteLn</cmdType>
<cmdString>TIVO&&IRCODE ADVANCE&&250</cmdString>
<cmdRepeat>{1}</cmdRepeat>
</action>
<phrase optional="true">Tivo</phrase>
<phrase>Skip</phrase>
<payloadRange optional="true">1,6</payloadRange>
</command>
<command id="768" name="Tivo channel {1}" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="1">
<action>
<cmdType>TTS.SpeakSync</cmdType>
<cmdString>Switching to channel: {PF.1}</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Tcp.Client.WriteLn</cmdType>
<cmdString>TIVO&&SETCH {1}&&1000</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.RegEx</cmdType>
<cmdString>CH_STATUS\\x20(.*?)\\&&&&{Var.TivoResponse}</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>TTS.SpeakSync</cmdType>
<cmdString>Channel is now: {M:CoxChannelNames.{Match.1}}&&1000</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>Change Channel to</phrase>
<payloadFromXML phraseOnly="False" use2partPhrase="False" phraseConnector="by" Phrase2wildcard="anyone" optional="False">payloads\CableChannels.xml</payloadFromXML>
</command>
<command id="793" name="What Channel is this?" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="1">
<action>
<cmdType>Results.RegEx</cmdType>
<cmdString>CH_STATUS\\x20(.*?)\\&&&&{Var.TivoResponse}</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>TTS.SpeakSync</cmdType>
<cmdString>Channel is now: {M:CoxChannelNames.{Match.1}}&&1000</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>What Channel is this?</phrase>
</command>
<command id="736" name="Tivo - List" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>Tcp.Client.WriteLn</cmdType>
<cmdString>TIVO&&TELEPORT NOWPLAYING&&200</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>Show</phrase>
<phrase>List, Now Playing, Now Playing List</phrase>
</command>
<command id="766" name="Tivo - Thumbs Up" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>Tcp.Client.WriteLn</cmdType>
<cmdString>TIVO&&IRCODE THUMBSUP&&200</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>Thumbs Up</phrase>
</command>
<command id="800" name="Tivo - Thumbs Down" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>Tcp.Client.WriteLn</cmdType>
<cmdString>TIVO&&IRCODE THUMBSDOWN&&200</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>Thumbs Down</phrase>
</command>
<command id="789" name="Tivo - Slow" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>Tcp.Client.WriteLn</cmdType>
<cmdString>TIVO&&IROCODE SLOW&&200</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>Slow, SloMo, Slow Motion</phrase>
</command>
<command id="790" name="Set Tivo Response Variable" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>Results.SetVar</cmdType>
<cmdString>TivoResponse&&{1}</cmdString>
<cmdRepeat>1</cmdRepeat>
</action>
<event>TIVO</event>
</command>
</commandGroup>