We used to run Hubot on Heroko until it crashed, not sure what happened exactly but we didn't bother bring it back due more pressing issues within our company.

Then I saw one of the most georgeous presentations ever, Intergalactic Javascript Robots from Outer Space, and it got me excited to run a Hubot again.

This time I wanted to Deploy Hubot onto UNIX. I followed the excellent article, and made some adjustments below in this blogpost to accomodate better system integration and copypastability :)

First Off

I'm assuming you use Campfire. Let's create a bot user by the name hubot there. Make sure has a working email address because Campfire will want to validate it.

Hint: It's fun to give your a nice avatar at

All done? Let's install!


# Prerequisites
aptitude install build-essential libssl-dev git-core redis-server libexpat1-dev logtail

# If you don't have node 0.6+
pushd /usr/local
  tar xf ${NODE_BASE}.tar.gz -C src && cd src/${NODE_BASE}
  ./configure && make && make install

# Coffeescript
npm install -g coffee-script

# Hubot
pushd /usr/local
  git clone git:// && cd hubot
  npm install

Note that npm is bundled with node since v0.6.3.

Hubot System User

$ adduser --disabled-password --gecos "" hubot

Upstart Script

$ cat <<EOF > /etc/init/hubot.conf
description "Hubot Campfire bot"

# Campfire-specific environment variables. Change these:
env HUBOT_CAMPFIRE_ACCOUNT='companyname' # the one in: <companyname>
env HUBOT_CAMPFIRE_TOKEN='afafafafafafafafafafcdcdcdcdcdcdcdcdcdc'

# Subscribe to these upstart events
# This will make Hubot start on system boot
start on filesystem or runlevel [2345]
stop on runlevel [!2345]

# Path to Hubot installation
env HUBOT_DIR='/usr/local/hubot/'
env HUBOT='bin/hubot'
env ADAPTER='campfire'
env HUBOT_USER='hubot' # system account
env HUBOT_NAME='bot' # what hubot listens to
env PORT='5555'

# Keep the process alive, limit to 5 restarts in 60s
respawn limit 5 60

exec start-stop-daemon --start --chuid \${HUBOT_USER} --chdir \${HUBOT_DIR} \
  --exec \${HUBOT_DIR}\${HUBOT} -- --name \${HUBOT_NAME} --adapter \${ADAPTER}  >> /var/log/hubot.log 2>&1

Now don't forget to $EDITOR /etc/init/hubot.conf and change the 3 HUBOT_CAMPFIRE_ environment variables.

To start, type:

$ start hubot

To check the log, type:

$ logtail /var/log/hubot.log


Now check Campfire to see if Hubot entered the room, and tell him to send you an image; type:

bot: image me donuts

Some other commands to get you started may be retrieved by issuing:

bot help

This will show you:

bot <user> is a badass guitarist - assign a role to a user
bot <user> is not a badass guitarist - remove a role from a user
bot animate me <query> - The same thing as `image me`, except adds a few parameters to try to return an animated GIF instead.
bot convert me <expression> to <units> - Convert expression to given units.
bot die - End hubot process
bot echo <text> - Reply back with <text>
bot help - Displays all of the help commands that Hubot knows about.
bot help <query> - Displays all help commands that match <query>.
bot image me <query> - The Original. Queries Google Images for <query> and returns a random top result.
bot map me <query> - Returns a map view of the area returned by `query`.
bot math me <expression> - Calculate the given expression.
bot mustache me <query> - Searches Google Images for the specified query and mustaches it.
bot mustache me <url> - Adds a mustache to the specified URL.
bot ping - Reply with pong
bot pug bomb N - get N pugs
bot pug me - Receive a pug
bot show storage - Display the contents that are persisted in the brain
bot show users - Display all users that hubot knows about
bot the rules - Make sure hubot still knows the rules.
bot time - Reply with current time
bot translate me <phrase> - Searches for a translation for the <phrase> and then prints that bad boy out.
bot translate me from <source> into <target> <phrase> - Translates <phrase> from <source> into <target>. Both <source> and <target> are optional
bot who is <user> - see what roles a user has
bot youtube me <query> - Searches YouTube for the query and returns the video embed link.

Going Forward

You can write your own Hubot Scripts, or use those by others.

Happy hubbing :)