Just for the heck of it, here's a video demo of the above suggested solution:
http://www.screencast.com/t/wMiXbbS0JMaybe it's easier to understand what's happening.
Sorry for the poor audio quality; it was an improvised recording so I didn't bother to plug in a decent microphone.
----
... For the video I added a couple bells & whistles so that VC announces when the to-do list is empty and varies the dialogue more:
<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.1.3.8-->
<commandGroup open="True" name="remind me to" enabled="True" prefix="" priority="0" requiredProcess="" description="">
<command id="578" name="add reminder" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>File.AppendLine</cmdType>
<params>
<param>skype.txt</param>
<param>{1}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<event>type event name here</event>
<phrase>remember to, add reminder to, don't forget to</phrase>
<payloadList>walk the dog, call mum, rule the world, rock the planet, eat breakfast, go to bed</payloadList>
</command>
<command id="579" name="read reminder" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>File.Read</cmdType>
<params>
<param>skype.txt</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.RegEx</cmdType>
<params>
<param>(\w.*?)\r</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<if ifBlockDisabled="False" ifNot="False">
<ifType>(A)==(B)</ifType>
<ifParams>{#M}&&0</ifParams>
<then>
<action>
<cmdType>OSD.ShowText</cmdType>
<params>
<param>You've nothing left on your to-do list.</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>The to-do list is empty.|You have no reminders left.|Looks like you're all caught up.</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>VC.StopMacro</cmdType>
<params />
<cmdRepeat>1</cmdRepeat>
</action>
</then>
<else />
</if>
<if ifBlockDisabled="False" ifNot="False">
<ifType>(A)==(B)</ifType>
<ifParams>{1}&&True</ifParams>
<then>
<action>
<cmdType>OSD.ShowText</cmdType>
<params>
<param>The remaining reminders are:</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>The remaining reminders are:|You should still remember:|The following items are left to do</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</then>
<else>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>You asked me to remind you to:</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>OSD.ShowText</cmdType>
<params>
<param>Reminders:</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</else>
</if>
<if ifBlockDisabled="False" ifNot="True">
<ifType>(A)==(B)</ifType>
<ifParams>{#M}&&0</ifParams>
<then>
<action>
<cmdType>OSD.AddText</cmdType>
<params>
<param>{i}. {Match.{i}}</param>
</params>
<cmdRepeat>{#M}</cmdRepeat>
</action>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>{i}. {Match.{i}}</param>
</params>
<cmdRepeat>{#M}</cmdRepeat>
</action>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>res{i}</param>
<param>{Match.{i}}</param>
</params>
<cmdRepeat>{#M}</cmdRepeat>
</action>
</then>
<else />
</if>
<phrase>read my reminders</phrase>
<event>reset</event>
</command>
<command id="580" name="delete reminder" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>File.Read</cmdType>
<params>
<param>skype.txt</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.RegExReplace</cmdType>
<params>
<param>{var.res{1}}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>File.Write</cmdType>
<params>
<param>skype.txt</param>
<param>{LastResult}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>VC.TriggerEvent</cmdType>
<params>
<param>reset</param>
<param>True</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>delete reminder</phrase>
<payloadRange>1,10</payloadRange>
</command>
</commandGroup>
[Cleaned-up xml, updated 9-Feb-2015 --> the original accidentally had some repeated logic in it. Don't think it affected the command. It was just residual mess from creating the commands.]