Thanks again Scott... I'm taking notes here (too bad I can't get Hal to take the notes for me... ah... another project! [

]) I can see now that what is going to give me the most trouble is understanding the dll file, what it does and doesn't do and what I can do in scripts versus what I need to use it for, but that will come with experience. Its just a matter of learning the quirks of the language.
My basic idea for the reminder with persistence was to use the existing code for appointments with a few modifications. Rather than a specific date, it would use a random number compared to a variable.
Call the variable P for persistence.
When you ask Hal to remind you of something in this way, it asks you first what the reminder is... whatever you say next it stores as the reminder, which it will call up again and feed back to you when the event is triggered.
Next it asks you how important this is or how often you want to be reminded.
As an example, if you say its very important then Hal keys on the word VERY and compares that word to an internal lookup to get a number... lets call it 50.
It then generates a number from 1-100 or 1-1000 or whatever... if P > RandNum it triggers a reminder event. Obviously theres a lot of room here for tinkering with the timing. With 1-100, a 50 means its going to spend half its time reminding you to do somthing... which would constitute harassment (can you get a restraining order against your bot? LOL)
To make this work a bit better, we might add an additional function that says it generates this number once every so many milliseconds... so that in reality it only generates this number once every minute or so... and then decides. Even still... at a value of 50 on 1-100 at once per minute the average reminder will come once every two minutes... still a lot. But you get the idea.
Anyway, once triggered, Hal then pulls up your reminder from wherever it stored it and perhaps adds a prefix or suffix statement for a little variety.
That's about all there would be to the basic logic. Detecting for Idle time would take some additional code to do what I want, but its manageable I think.