WIP: Knock Knock Jokes


Greetings, everyone. I guess I get to kick off a whole category!

I’ve been working constantly on the “knock knock” joke skill I started at the East Coast hack-a-thon in February. It’s great fun, and I’m learning a lot. If anybody wants to check it out, it’s on GitHub at:


The project currently (properly) handles the protocol, using MIMs; encapsulates the joke repository; and provides for picking randomly from categories of responses so you don’t get the same laugh every time. Lots more still to come.

Update: jokes are no longer stored in an array.


I gave it a quick try and I like it very much…simple and fun. Two quick points that jumped out at me:

  1. The explanation was too cumbersome…when I think of Jibo, I always think of quick, witty phrases, so shortening the initial paragraph he speaks down to a sentence or two would be more in his spirit.

  2. Not sure if the “filling up” audio fits well at the end as much as something more like giggling.

Very cool though…can’t wait to see others experience it to from the Jibo Store. Good job, Chris!


The explanation is a bit cumbersome, that’s why I made it optional. What’s there now is quick and dirty. My thinking down the road is I would keep track by user as to who was known not to need an explanation, and also offer incrementally more detailed explanations if the user has trouble with the joke protocol. I think that’s most in spirit from my read of the UX guidelines.

I’ve definitely got some work to do on animations. I didn’t want sampled human laughter, because Jibo’s not a human. I’m experimenting with various synth sounds to get something more like computer-generated laughter. I’ve got a framework in place so I can just drop in new animations and they are instantly available to the skill - no need to change code - so I can easily (and would like to) have a lot of different laugh animations with a lot of variety. (long/short, noisy/quieter, sudden guffaws and quiet chuckles, if you will).

[If anyone wants to add animations, feel free to fork and pull request. Make sure you credit yourself in the README.md.]

Thanks for checking it out. I don’t intend to put this one on the store when it’s available - my intent is to keep it open source so people can get a free laugh from their Jibo on day 1.


Ok, I made the explanation more of an example than a discourse. It should flow better now. But ultimately I’ll work toward training the user instead of explaining.


Hi Chris,
Love this and have started to play with it and fun i think a bug.

Jibo will ask “Now will you please tell me a knock knock joke?” sometimes he will let me other he will start his Tell joke script.

I am new to all of this, but i did try to see if i could debug it but… not yet.


Ok looks like something happens after the Setup notepad.MainBreak: Undefined

some times Jibo will go to Attentive and follow the Attentive setup notepad.MainBreak:undefined and that is when the Main loop decorator init: notepad.MainBreak: false will trigger.

The times when Jibo doesn’t wait for me to do my Knock knock is goes from notepad.MainBreak: Undefined to Waiting animation then grab random builder



Yes, the bit where it asks for the joke then skips to telling one is a known bug with the SDK. The Jibo SDK devs are working it.

Sorry for the confusion. I should update the README with the known bugs. I’ll do that tonight or tomorrow.


Ok Np still this one is going to give me a good start on how to build things.


If you go to the branch “flatten-some-subtrees”, you’ll find a workaround that avoids the bug. But it’s not merged with a lot of the newer code from the master.

UPDATE: I merged master back into flatten-some-subtrees, so you can get the non-glitchy experience by using the flatten-some-subtrees branch.


Updated to jibo-sdk 1.3.4. This fixed the bug where portions of the behavior were being skipped, so that other branch isn’t needed anymore. The issue with TimeoutJS being compiled before the rest of the behaviors is also fixed, so no more Subtree workaround for dynamic timeouts.