Official Agent Suggestions Thread #353

alias1 opened this Issue Jun 1, 2014 · 176 comments
alias1 commented Jun 1, 2014 edited

(Started from discussions in #344)

Official 'suggest an agent' thread for Huginn!!

Have a cool idea for an agent that you want to see implemented?

  • Firstly, please check to see if the agent is already on the list.
  • Also have a quick look through the Issues to make sure it's not already being worked on.
  • Comment on this thread and we will add it to the list below!
  • If the agent is already on this list but you still want to throw extra support behind it, feel free to comment with your +1

Want to work on one of the agents on the list?

  • Create a new issue/pull request to discuss it and reference this issue so we can reference it on the list below and mark it as being in progress.
  • If there is already an issue reference and it's closed, tag one of us to reopen the issue for you.

Agent Suggestions

(Note: This list should be maintained in alphabetical order, ticked items mean in progress/actively being worked on, ticked items should be moved to 'in progress' list)

In Progress


  • AfterShip Agent (#295)
  • AgentCreatorAgent(#459)
  • AgentDiagnosticAgent(#459)
  • support (incl. for Broadcasts and other Channels)
  • Bitcoin Agent - send and receive Bitcoin payments
  • Bitcoin Spending Agent (#183)
  • Boxcar support for sending push notification messages to iOS devices
  • CalendarAgent (#459)
  • CalendarOutputAgent (like DataOutputAgent; I would probably write one - @knu)
  • Clipper Agent (#66)
  • DeviantArt Agent (#289)
  • Dropbox Agent (#321)
  • Evernote Agent (#320)
  • Fancy Hands Agent (#319)
  • Feedly support (get marked for later)
  • Geofencing Agent (#5)
  • GitHub agent see
  • Gmail Agent (#10)
  • Google Calendar Agent (#344)
  • Google Diff Match Patch support
  • Google Search results (changes in SERP for specified keyword and/or specified url)
  • Google Spreadsheets
  • Hubot Agent (#352)
  • IFTTT -> Huginn Bridge Agent (#331)
  • IRC Agent (#113)
  • A Jabber Agent that listens for incoming messages and spits them out as Events
  • Naive Bayes Agent - classify events based on training data
  • MailFetching Agent (#129)
  • Mqtt subscriber/publisher (see
  • Monitoring 'acceleration/deceleration' of values (#178)
  • PagerDuty - trigger PagerDuty incidents based on events, or take different actions based on incoming PagerDuty incidents.
  • Pocket support ( put something into read queue)
  • Readability support ( put something into read later)
  • Reddit Agent (#16)
  • RescueTime support (detect/report productivity or lack thereof)
  • Agent
  • Tumblr Agent (#290)
  • Website status monitoring (alert when website is down)
  • Websockets Agent (#192)
  • Whois tracking (detect changes in whois details for a domain)
  • WSDL-defined web-service Agent
  • Agent


  • CommanderAgent (AgentRunnerAgent #459 -> #570)
  • Pushover support (#233)

Similar services to Huginn (for inspiration)

@alias1 alias1 assigned alias1 and unassigned alias1 Jun 1, 2014

@cantino / @dsander I can see this checklist getting pretty long/unruly pretty quickly, and perhaps management a bit painful. Do you think an official Huginn Agent Suggestion Trello board might be a good idea? (would have a similar setup to above, can still reference GitHub issues, and should be a bit cleaner/easier to manage)

@alias1 alias1 referenced this issue Jun 1, 2014

Clipper agent #66


Various agents I'd be interested in contributing to (have existing ruby doing parts of this, which might only need UI/adapting)

  • Google tasks agent (So when I add an email as a google task, I can send it to trello)
  • Trello agent
  • Xero agent (So when I book leave, it can be added to a calendar)

Much bigger integrations/possibilities:

  • Ninjablocks integration - - a mix of Node, Physical sensors and MQTT (newer versions) lets you fire events for door opening, xbmc playing or actuate power switches. Has rudimentary rules engine built in; but rather than re-invent the wheel something like huginn could go a long way. Useful because it speaks 433mhz.
  • TheThingSystem integration - - NodeJS + Raspberry Pi + a load of plugins. Integrates with everything from lightbulbs, aircons, to Telsa Model S. Much more developer focused at the moment.

These all sound very interesting @CloCkWeRX, we'd love to have your involvement!


@CloCkWeRX Definitely a fan of Trello (#346 related), and Xero could be interesting too (does that mean you're an aussie too (Canberra based myself), or do they do international stuff?)


Am an Aussie (SA based). I have a few days free, so I'll spend a bit getting my local dev env happy. I'll probably focus on the xero part first - what I've got works with the payroll API for who's taking leave; though there's plenty of other bits and pieces that are interesting if you a small/medium business (invoice raised, payment made events?).


Cool :)

I've done a little with Xero through work. There are 3 auth methods for the API: private (public/private key), public (Oauth, key only valid for 30mins) and partner (Oauth, key doesn't expire)

The most useful one for something like Huginn is obviously partner, but there are a bunch of hoops and stuff to jump through to get that one as I understand it.

Will definitely be interested to see what you come up with!


So, are pretty much pre-made and trivial to refactor.

Here for example is a nikeplus agent (untested) -

Available, licensing etc dependent:

Name    Description Author
App Store Rating and Votes  Get the average rating and total votes of your iOS App  Stefano Bortolotti
Asana Tasks Today's tasks in Asana  Will Johnson
Atlassian Jira Agile: Remaining Sprint Days Displays the remaining days for the active sprint for a given scrum board   Christian Galsterer
Atlassian Jira: Number of issues in a Jira filter query Displays the number of issues in any filter query. Supports multiple filters and widgets in a single dashboard. Christian Galsterer
Atlassian JIRA Open Issues  Displays number of open issues currently in JIRA for a given project    ahanmal
Badge Overflow: Unearned Badges Calculates progress towards unearned Stack Overflow badges  Adam & Stephanie Sharp
Bacula widget   Displays the bacula state of your backup environment    visibilityspots
B-Cycle Bikes Available Get bikes and docks available for B-cycle (bike sharing service)    Stephen
Badge Overflow: User Profile    Displays Stack Overflow profile info, including reputation and number of awarded badges Adam & Stephanie Sharp
Bamboo Plan Status  Atlassian Bamboo plan build status  Gavin Bunney
Betaseries  tv-shows airing next retrieved from betaseries  Antoine Brisseau
Big Image   Scale an image to fit in the widget Benbria
Bitbucket User Followers    Users followers from Bitbucket  jeroenbegyn
Broadsoft Queue Count   Call center Queue calls waiting Alsoongit
Camera Widget   Displays and updates static jpeg images from IP security cameras    Jake Champlin
Capital Bikeshare   Get bikes and docks available for Capital Bikeshare (Cabi)  Derrick Bryant
CircleCI    Circle CI Project Build Status  Pete Hamilton
CircleCI (List) Circle CI Project Build Statuses    Pete Hamilton
CircleCI: Forecast  Circle CI Project Status Forecast   Chavez
Cloudability    Cloudability monthly spend  Colby Aley
Code Climate    Code Climate GPA    dgehrett
Code Climate    Code Climate widget Rafael Carvalho
Code Ship   Code Ship widget    Rafael Carvalho
Coderwall Rank  Show your team's Coderwall rank mathias
Countdown   Countdown widget    Ruleb
Daily Dilbert   Daily Dilbert strip retrieved from  Brunas Case Count Get the number of cases in your account, using their API   Runar
Disqus  Display Comment Count from Disqus   SeanJA
EC2 CloudWatch  CloudWatch stats in Dashing Benbria
Errbit  Displays the unresolved errors from the projects you've specified on your Errbit server kevintuhumury
FB link stats   Details of facebook link shares Gregology
FB page stats   Details of facebook page stats  ephigenia
Fikket participants Amount of participants for a Fikket event   joren
Fitbit  Displays your steps, calories, distance, battery level and more from kevintuhumury Weather Displays weather from   mjamieson w/ Climacons    Displays extensive weather information from with Climacons  ysim w/ Skycons  Displays weather from with Skycons  toddq
Foursquare Widget   Checkins with images for a Foursquare venue parthibanloganathan
Foursquare chekins widget   Simple display of total # checked in people at a venue  visibilityspots
Foursquare Venue Checkins   Checkins on a foursquare venue  ephigenia
Freshdesk Dash  Display a short list of Freshdesk users with the most tickets assigned. Kent Dahl
FridayBeer  Show your need for a friday-afternoon beer  mr-deamon
FullPie chart   Show awesome pie charts with ease   mattia72
GitHub Next Milestone   Show next GitHub Milestone and due date Benbria
GitHub Next Milestone (multiple projects)   Show next GitHub Milestone and due date for multiple projects   Jurre
GitHub Organization News Feed   Display your organization's activities and events   kimh
GitHub OctoStatus   Pulling out all the stop(light)s while displaying the current GitHub status David Campbell
GitHub Repositories List    User or Organisation Repositories Watchers/Forks    ephigenia
GitHub Repository Stats Various stats for a given repository    cmaujean, erikh
GitHub Status   Displays the current status of GitHub   Iain Mitchell/Ben Flowers
GitHub User Info    User Info from GitHub   ephigenia
Gitlab issues and bugs  Gitlab issues and bugs widget per project.  joren
Gitlab repo + issue open    Gitlab acces via API show a list of project and issues opened   Fiyorden
Google Calendar Google Calendar events widget with custom calendar colors   designoid
Google Calendar Attendees   Google Calendar event attendees widget  blackjid @ platanus
Google Maps Google Map widget with custom colors    andmcgregor
Google Play Market  Google Play Market application score and voter count    ephigenia
Google Play Advanced    Google Play market statistics with advanced list support    designoid
Graphite Graphs Displays Graphite graph images and auto-resizes and refreshes them  josno
Havag Info  Displays departure times of trams and buses in Halle (Saale), Germany   Terminal.21
Heroku Dynos    Displays number of active Heroku dynos  robotmay
Heroku Status   Shows Heroku status bhankus
Honeybadger Errors  Displays top Honeybadger errors bhankus
Hotness Changes the widget's colour depending on the value displayed    DashboardDude
Instagram by Location   Displays Instagram Photos based on location mjamieson
Instagram User Info Instagram User’s info: followers, following, photos   ephigenia
Jenkins Build   Displays Jenkins build progress steintore, mavimo
Jenkins Last Commit Displays information about last SCM commit for a Jenkins job    kalenwatermeyer
KACE K1000 Ticket Counter   Shows open ticket count for the KACE K1000 service desk Paul Liu
Klout Score Klout Score ephigenia
KVB next trains Show the next KVB Trains from a station next to you bascht
LastFM  Display the most recently played or currently playing track Craig Coles
Librato Metrics Create a graph based on metrics reported by Librato Matt Towers
Load Averages   Load Averages for *nix servers  Gregology
Loggly  Graph log data from loggly  Ben Flowers
Mandrill Mail   Mail stats from Mandrill    dgehrett
MixPanel Event Total    Display total number of events from MixPanel    Ilya Katz
MyWind  Displays information about your Italian Wind mobile contract (SMS, voice minutes, data, ...)    Simone Busoli
Nagios  Nagios warning and error counts Alexander Else
Nest    Nest thermostat data    Eric Gonzalez
Newrelic    Newrelic metrics    assimovt
News    Displays the latest BBC News top stories    Iain Mitchell
New York Subway Displays the New York subway status from the MTA    John Barker
Nike+   Displays data of your last Nike+ activity   danillotuhumury
Ntile   Takes any timestamped data feed and displays the value for the current day (or defined time period) in statistical context. PareidoliaX
Opsview Displays Opsview Criticals, Warnings, Hosts Up/Down hawk554
OC Transpo  Display arrival times for OC Transpo Buses  Benbria
PagerDuty   Show PagerDuty incidents and on-call information    thegreenrobot
PageViews   Display the Pageviews From GA   SeanJA
Pianobar    Display song information from Pianobar, a Pandora client    Kyle Johnson
Pie chart   Show awesome pie charts with ease   stevenleeg
Pingdom Displays a list of Pingdom statuses james
Pingdom bundle  Bundle of Pingdom widgets including status and uptime   Rafael Carvalho
Pingdom Uptime  Displays the mean of all or part uptime probes  pydubreucq
Pivotal Tracker Pivotal Tracker Story Statuses  dirkkelly
Pivotal Tracker Burndown    Pivotal Tracker current iteration's burndown    gaelrottier
Pivotal Tracker Iteration   Pivotal Tracker Iteration Stats marcus
PuppetDB Stats  PuppetDB Stats  bitflingr
RandomAww   Display a random cute picture   chelsea
Reddit  Display top 5 posts/score/comment count per subreddit(s) of your choosing   kevinquillen
Reload  Periodically reload the dashboard to get around JS memory hogging   Alexander Else
Remember The Milk   Display your overdue tasks (or configure it to do something else)   kevintuhumury
Remember The Milk   A clone of the widget from kevintuhumury using icalendar instead of milkman to access the tasks luzifer
Remote Reload   Reload your dashboard when you make changes Benbria
Rickshaw Graph  Drop-in replacement for the built in Graph widget   Benbria
RSS Feeds   Display multiple RSS news feeds.    toddq
Semaphore CI    Display build status of project on Semaphore CI rastasheep
Sensu   Display Sensu alerts    Matthew Richardson
Server Density  Display current server density alerts   johnwards
Server Status   Display status of servers   Will Johnson
Server Status Squares   Display status of servers using squares Welsh
Sidekiq Display stats for a Sidekiq Background system   pallan
SirPortly tickets   Show open tickets for a SirPortly department    joren
Slideshare User Info    Slideshare User Info (Followers, Number of Slides)  ephigenia
SNMP Interface Bandwidth    Display bandwidth utilization over time RAdzima
Sonar   Display Sonar metrics   EHadoux
Sonar Secured   Display and configure Sonar metrics for a secured or unsecured Sonar repository.    Aaron Kaka
Soundcloud Listens  Display Soundcloud listens. pezholio
Squeezebox Now Playing  Display currently playing song of a Squeezebox player.  tobru
Startup quote   Daily wisdom about startups assimovt
Stash Pull Requests Display open pull requests for projects or specific repositories from Stash warmfusion
Subway Info Subway information like train arrival time, station, etc. for New York and other cities.    parthibanloganathan
TeamCity    Display TeamCity CI build status    Jurre Stender
TFL London Underground Status   London Underground Tube Status  Khash Sajadi
Thruk nagios status Nagios status with thruk front end  Nicolas Leclercq
Time Since Last Tracks time past since the last occurrence of an event  hannesfostie
Traffic from TomTom Ranks drivings times of routes using dynamic traffic data   sighmin
Travis CI   Display Travis CI build status  Zendesk
Trello  Display Trello boards info  mordonez
Twitch.TV   Add Twitch Stream to Dashboard  magicguitarist
Twitter Search  Twitter Search with v1.1 API    jeroenbegyn
Twitter User Info   Twitter Followers/Following/Tweet Count ephigenia
Vimeo User Info Vimeo User contacts, albums, likes etc. ephigenia
Vimeo User Videos   List Vimeo user’s videos by likes, comments or sum    ephigenia
Visitor Count   Google Analytics visitor count (OAuth2) Matt Towers
Visitor Count (multiple sites)  Google Analytics visitor count (OAuth2) fork to support multiple sites  Will Johnson
Visitor Count Real Time Google Analytics visitor count (OAuth2) fork to support real time   Robert Boloc
Weather Displays weather info from Yahoo    David Underwood
World Clock Displays the time in another time zone  Steve Klise
World Cup Brazil 2014   Displays the next matches for the Brazil 2014 World Cup blackjid @ platanus
World Clock Displays time at multiple locations Wei Lu
Yahoo Stock Quote   Yahoo Stock Quote   ephigenia
Yahoo Weather   Displays weather information using Climacons.   danillotuhumury
Youtube Video Stats Youtube Video Stats ephigenia
Zabbix Trigger  Show number of zabbix triggers  chojayr

The widgets feel like they have a lot of moving pieces. Huginn Agents have one, or sometimes two, files, plus a spec. If we're going to bundle lots of assets, I wonder if we should extract Agents into gems first.


I definitely like the idea of using dashing for our dashboard (why reinvent the wheel), and if we can make a nice interface from Huginn -> Dashboard widget, all the better!

I think there is merit to being able to potentially use the widgets, but I don't think it's a priority due to the complexity I feel it would add. And I definitely think that we should be looking at seperating our agents out into their own gems/whatever first, and/or the 'Huginn API' idea (since isn't dashing a nodejs thing?)

As an interim, either reimplement the dashing widget in Huginn if it makes sense, or create the concept of a Huginn -> Dashing shim agent (or reuse an existing agent for it, not sure of the specifics, but I assume Dashing can provide stuff in a consumable format like JSON?) That way we can get the benefits of integration without a huge level of complexity. Quick wins!

The way I see it, if we are running dashing, there is no reason you can't have the 'standard widgets' alongside 'Huginn widgets'.

I think an easy way to run Huginn and dashing side by side (default?) would be good, but also the ability to point to a seperated instance of Dashing if the user wants to. (ease, but also flexibility)


And I definitely think that we should be looking at seperating our agents out into their own gems/whatever first, and/or the 'Huginn API' idea

Yeah I agree there, I guess my main point was to examine a project like that to find the real world patterns/problems they have solved.

Interestingly, they rely on git repos or gists, not gems.

There's at least a structure similar to:

widgets/ # scss, coffeescript and other template type concerns
jobs/  # mix of wiring up the scheduler and the doing bit
lib/ # Supporting libraries # Usually pretty good documentation here

No specs by default.

The project itself contains a 'gist downloader' rather than relying on rubygems, something seen in projects like ninjablocks (copy/paste a gist url to add a new widget). I guess this lowers the bar for contribution/quick hacky agents.

Having played with some of the various plugins and thinking about how to seamlessly transition them to Dashing, it's a pain - the assumption of a global SCHEDULER means it's executing code the moment you load it.

I'd encourage us to adopt a similar structure, possibly even include a jobs/ folder with a default schedule and put our agents in lib/ as it's a bit neater.

(since isn't dashing a nodejs thing?)

Sinatra based, bunch of frontend JS to get data to widgets.


Sinatra based

Ah. I remembered it wasn't rails at least! :p


Alrighty, have a Google calendar publish agent pretty much ready to go, need to get signoff re open sourcing it from 1-2 folks.

It's based on service accounts, not OAuth, which is a little more complex to setup than a 'grant permission X to system Y' UI flow; but a lot simpler from a development perspective - no callbacks, etc.

It should also introduce a helper library that makes it easy to make a GoogleCalendarReadAgent, and with the general service account approach + enable a bunch of other agents (Drive, Tasks, Google+, etc)


Will @dsander's #324 branch help with this? Perhaps we can get that released soon, before I launch Scenarios.


New idea to add @alias1: Integration with Fara, for tracking packages.

I've yet to find a comparable service in terms of features, and certainly nothing on the open source side of things. Most delivery services require users to register their own API account. Fara covers 24 (?) or so different delivery services.

They don't have an open API at this time, but I have reached out to their team via email to see if they'd be interested in allowing us to develop a module for Huginn. Their terms only forbid "bots" for automated registrations, so it's possible that the module could do some rudimentary scraping/interfacing instead of using an official API without breaking their ToS.


Haven't looked into it much, and don't know where the 'ethical' line lies with Huginn, but #384 (comment) mentioned which sounds kind of cool.

On that same sort of notion, things like Yify API, SABnzb, Sick Beard, Headphones, etc

(Disclaimer: ..for monitoring, statistical analysis and/or making legal backups of your owned media with regards to all laws and regulations in your area, etc..)


Zendesk API (new ticket arrived, quick lookup the public transport timetable so you don't have to deal with it!) - just started tinkering on my local this morning.


@imsoftware Bittorent Sync looks awesome! Hadn't seen it before.


How about a Jabber agent that can accept a limited repotoire of commands for the rest of the agent network? Here's my thinking:

Earlier this week I noticed that I hadn't received any alerts from my agents for a couple of days. I logged into my VM, restarted Huginn, and was suddenly caught up on everything that they'd done as the alerts piled in. I'm not sure if it was outbound e-mail that wasn't working or if the scheduler messed up, or what; that's another issue. Anyway, it would have been useful to send an XMPP message to a listening agent that would have caused it to ping the other agents in my Huginn instance for status updates ("ROBOTS, REPORT."), bundle them into an XMPP message, and send them to me. If no response had come back it would have been an early warning that something was amiss.

Such an agent could support a number of status report commands, such as listing agents, showing the number of events an agent (or all agents) have picked up, CPU and memory utilization, or things like that.


"Mailboxes know a lot. Use them.
Context.IO is a REST email API that makes it easy and fast
to integrate your users' email data in your application."

First 5000 mailboxes

Mailboxes 5001 and above
10¢ per mailbox per month


@virtadpt Sorry to hear that your agents stopped running. If you want to make an issue, maybe we can figure it out. I like the XMPP idea, but am not clear exactly how it'd work. Would it be agents consuming XMPP, or more of a side-band XMPP API?

@alias1 Interesting!

@CloCkWeRX Zendesk API agents (or maybe just PostAgents?) would be super helpful.


Two fairly similar sites (both probably be achieved natively), but might be worth checking out. Basically data extraction/turning unstructured websites into API's.


@cantino I don't have logs from the time of the lockup, I'm running Huginn from inside of Screen. If it happens again, I'll open a ticket with the information I've got and we can work from there.

The agent would consume XMPP. i.e., connect to an XMPP server as a user and listen for stanzas from a particular JID. If any of the stanzas from the trusted JID contained one of a handful of commands it'd follow them ('status', 'stop', 'restart'), so that Huginn as a whole could be controlled in a limited fashion through a sideband connection.


An agent which can e-mail a short list of recipients. Here's my reasoning:

I'm building an agent scenario ("Shake, Rattle, and Roll") that periodically polls the USGS Earthquake Hazards API for detectable seismic events where I live. Sending e-mail and XMPP messages to myself is trivial with the existing agent roster but I'd like to be able to e-mail the members of my family at the same time without their having to create accounts on my Huginn instance and clone SR&R for themselves (because they don't use XMPP on their phones, unlike myself).


Hey @virtadpt, that's a good idea. Would a modification of the email agents to just optionally accept a list of emails work for you?




Adding in #408, @virtadpt.


sms agent.
both incoming and outgoing. the outgoing bit is easy. most/all cell providers have email gateways. so all that is needed is a dropdown for providers and a mapping of those to the gateways combined with the normal email agent. incoming will require a sms gateway of one's own and i'm not sure what is available there.


is anyone working on the bayesian agent yet? if so link to the code please?


@haxwithaxe There is a Twilio agent that can do SMS and phone.


@cantino Thank you!


A Dashboard made with dashing as an agent could be very useful.

Why dashing ? because it does not rely on third parties provider to support a nice dashboard.
There is also dashing-rails which is pretty the same thing but for rails (not sinatra).


i also just started to write the email gateway version and it's way more complicated to choose the right gateway than i expected :P
i was hoping to avoid yet another cost per text but i don't think it's worth the hassle of writing a whole new agent for it.


@haxwithaxe Wow. If someone has a pre-made mapping of email-to-sms gateways, that'd be useful. Otherwise, I suppose you could volunteer to either build a JSON lookup webservice or a Ruby gem that provides a community-maintained mapping. ;)


-making- made a webscraper for the page :D but in python cause i'm new to ruby still. json or ruby output though.


Not sure if this is the best place to post this, but I put together an Android Tasker Profile to interact with the Huginn User Locations Agent here. You can set Tasker up to turn your GPS/location services on every 30 minutes or whatever, snag your location, and then send a POST to Huginn pretty easily. If there are any Android users in here that want to try, I put instructions on that repo. (Hopefully the instructions are clear enough, though.) You can even do cool things like telling it to NOT get your location under certain circumstances. For example, I have mine set to not activate when I'm connected to my home or work wi-fi.

I think there could be a lot of cool Tasker/Huginn interactions. An agent that would consume various pieces of data from your phone could be interesting, I think. (Tasker also has a pretty big community, and I think that a lot of them would like Huginn, as they are somewhat conceptually similar.)

On another note, has anybody considered a CSV export feature for events? Could be useful.


Awesome @naiyt! I think it'd be worth adding a page or link to the wiki about this, if you have time.


Support for Lift habit tracking


Another dashboardy type thing:

@alias1 alias1 referenced this issue Aug 4, 2014

Dashboards #132


Sure, @cantino, I'll write something up for the wiki once I get some time.

By the way, do you guys know if somebody is working on the "Website status monitoring" listed in the ideas? If not, I might hack on that in a month or so, since it's something I would like.


@naiyt Thanks! I don't know if anyone is working it-- that'd be a nice addition!


How about adding xmlrpc format to the post agent.


Is there any kind of AgentAgent? Some kind of agent to make changes or control other agents' settings, IE schedule, parameters, enabled/disabled?


Yup! #459


Thanks @cantino, I knew about that one but haven't looked at the issue in a couple weeks, it's much more robust than I originally thought!


An alternative to the Twilio agent could be one that connects to Textbelt (source). It exposes a simple API that then turns around and sends SMS messages via a multitude of provider's email-to-SMS gateways.

knu commented Sep 8, 2014

Added some agent ideas found in the #459 thread.


An agent that is specifically geared to catch error conditions emitted as events from other agents would be nice. It'd make debugging agents much easier because they wouldn't fail silently anymore (like WeatherAgent does). It would also make it possible to gracefully alert on error conditions; for example, I'd like to run them through an instance of JabberAgent to let me know that something went wrong. It would also make it possible to instantiate error handling agents multiple times, and associate them with different scenarios.


@virtadpt Making an Agent that consumes the AgentLogs of other Agents would probably be fairly straightforward, if you're interested in trying it.

@darkpixel for time tracking! :)



Given a URL, this agent downloads the file to a specified or default place on disk and returns the filename, file path and an MD5 of the file. The file can either be immediately deleted or it can be kept on disk.

Similarly: S3Agent for manipulating files within S3.


Cool ideas!


@knu any word on the AgentRunnerAgent? I'm trying to get a workflow to run another agent only on Sunset, that seems like the ideal way to do it


@snicker You mean you have an agent to emit an event for every sunset and sunrise, which you want to use as a trigger to enable and disable another agent, respectively? That'd be a cool use case. I'll put that on my task list.


I'd be interested in a Flickr agent, one that can fetch public photos (search by keyword, get latest from my contacts' photostreams, etc.), and my private photos through the API.

My use-case is wanting to send an email digest to family members when I post new pictures on there (most of the are family-private) and/or create Flickr "passes" to send the pictures to non-Flickr-using friends via email when I upload them.


I would be interested in Podio agent with similar functionnality as provided in Zapier.


I'm looking to use huginn as a local stand-in for IFTTT type of functionality. I just prefer to have it all on my own servers.

I already use node-red ( for connectivity between my various home sensors and actuators. Data comes in on TCP sockets, and is routed to charting apps like graphite/grafana, or to a local data store, to other APIs (like turning on/off X10 devices), or sometimes to external apps like Xively,

Has anyone thought about or have any ideas about how these two applications might work together?

Can huginn agents work with TCP Sockets?

Thanks for any tips,


Hey @TinajaLabs, nodered looks quite interesting. We have a MQTTAgent that I believe people use for home automation. It would also be straightforward to add TCP support to Huginn, someone just needs to finish #111. You might ask @CloCkWeRX or @knu about MQTT.


There is already a JabberAgent that can send Jabber messages but the opposite is missing.
An Agent that listens for incoming messages and spits them out as event would be cool!


Would a ZoneMinder agent be possible?


@K1773R That would likely be pretty straightforward to add.

@mstinaff Probably? Assuming ZoneMinder has a reasonable API.


Hey! I'm thinking about writing a Firebase agent. Are there any existing agents that interact with databases that I might want to look at for reference?


@alias1 @cantino Maybe the dropbox agent should be marked as done, cause of #582 and #572?


Yup @bennlich, thanks!


@bennlich A Firebase Agent would be awesome. Want to make a new issue to discuss it?


Done! #700


Could you add my Jabber idea (above) to the Backlog?


Is there a plan for google+ agent?

knu commented May 1, 2015

@MartinDelille Not currently on the list, but you could ask us to add one. Can you share the use cases in your mind? IIRC, Google+ API is basically read-only. Is that still the case?


I just installed huginn for the first time and am playing around with it. An instagram agent would be great :)


Welcome @benjsing!

That'd be a great contribution if someone wants to build it! 😄


Thanks @cantino
I am just getting into huginn, so it might be a while... but if I can figure out how to implement the instagram api, I will.


I just installed huginn. An emacsclient agent would be great. The agent could place an orgmode agenda entry for emails or weather alarms...


That'd be interesting @trenkert.


+1 to agents for Pocket and Reddit especially, but also IRC and an IFTTT "bridge".


An amazing idea would be to create an agent that sends notifications to smartphones and such.
For now I think the easiest is to use : and create an agent based on their API.


@farfeduc We already have an agent for does pushover do anything different?


@dsander I guess it is quite similar. I did not know Pushbullet before. Thanks for sharing it.
It seems though that Pushbullet is free. Pushover is not.
I'll try and tell you if it's what I was searching for. Thanks !

knu commented Aug 3, 2015

We already have PushoverAgent as well as PushbulletAgent. You can even use PostAgent without them as long as they have REST API.


What about an OpenHAB 2 / Eclipse SmartHome Agent?
Imagine Huginn controll your lighting, locks, thermostats, cameras in your home..


Hey @LorbusChris, I think that'd be a great contribution if you want to work on it!


It'd be awesome if there was an agent to interact with different ownCloud features, especially the core file functionality.


I was looking for a pocket agent too but there are two work-arounds.
First is to use IFTTT to put an RSS feed into pocket (which I was using wth yahoo pipes).
second is to use the email agent to send to (you have to register the address sent from with your pocket account first)
I'm trying both at the moment - both seem reliable but first allows you to add tags on the way


@johnleeming those both seem like good solutions unless someone feels like adding a PocketAgent.


I suggest so we could act when our docker images are pushed to the registry.



Maybe put OpenHAB 2 on the list. Its not just MQTT, its got its own API. Their WebUI demonstrates the use of it:
Once OpenHAB2 is out in a stable release, I will come around and set up an agent, but if anyone would like to start with it now, it think having a look at their Paper WebUI is the right way to start.


I think currency rate exchange agent would be useful.


@MOZGIII This can be done relatively simple via the WebsiteAgent and one of the services in the following link:


Yeah, and there is @RubyMoney which provides enough abstraction and functionalinty to work with money relatively simple. I haven't got the time to implement this stuff yet however.


If no one's currently working on the evernote agent, I'd like to implement it. A couple questions: Does it make sense to break it into two agents - one for reading and one for writing notes? Are there any other agents I should look at for reference, or things I should keep in mind? I'm very new to this project, so I appreciate any guidance anyone might have. Thanks!


Hey @bencornelis, I'm not aware of anyone working on it. Please do! I think one Agent is probably cleaner. I'd suggest that it have a "mode" switch for update vs. read. If you want to discuss it, you could make a new Issue for that.


Great, I'll try it with one agent. In case anyone has any other thoughts - #1010.


I like to give the hint, that most people that are interested in huginn might have an special interest in selfhosting and thus open source services. Usually this projects implement standard interfaces for read/write data or trigger events (RSS, caldav, cardav, ...). But of course there are popular ones who doesn't.

This said, my interest would be write/post agents:

Also read/trigger for some open standards would be nice:

  • podcast / videocast rss feeds
  • open311 - civic reporting
  • CKAN - Open Data repositories

I hope this isn't to broad, but might give some ideas of what people might be interested in. Unfortunatly I'm not skilled in RoR :-/


@Matthias84, thanks for the feedback. We'd love to have you involved with the project if you'd like to learn some Rails.


An iCal agent for pulling calendar feeds (in particular Google Calendar feeds, because they'll be terminating the XML feeds on 18 November 2015) and doing things with the entries.


My suggestion for a new agent is an agent being able to filter similar texts based on percentage similarity between two strings like the PHP Similar_Text() function (

This is specially useful for an scenario where we have different RSS feeds as a sources and we want to create a new RSS filtering the items not repeated and the ones that are really different (depending on the percentage similarity/difference that we set on the agent configuration).

De Duplication Agent only filters by unique events. Not sure if we should create a new agent or upgrade the current DeDuplicationAgent.

What do you think guys?


@jn11 I like to extend your idea, that (expanded) URLs might be useful to filter e.g. social media. Sounds like extensions to DeDublicationAgent to me?


Here's a use case I have: I want to be able to hit an API endpoint that issues an HTTP redirect to some image with a long random URL, and do something with the image when its URL changes.

As far as I can tell this needs two bits of functionality:

  • A "changed" agent, to watch to see if something changed
  • An HTTP agent, to actually make the request to put the image into an event (this could possibly be folded into the existing WebsiteAgent)



Hey @strugee. I don't think we have an Agent right now that can fetch a file (or do a HEAD request?) and return the final URL directly, but you might be able to use the uri_expand Liquid filter to fetch the URL and return the final URL, then pass that to a ChangeDetectorAgent.


@cantino thanks! Seems like we need some new code :)


Sometimes we want to have completely static website (hosten on S3 or other static sites hosting), but we need to have there web form (e.g. contact form). This form need some HTTP server where browsers can send POST data and this server can be Huginn.

Agent for this could be modified WebHook, but it should have some specifics: It should support HTTP POST request send by HTML forms (so no JSON) and some optional security checks - validate referer, support for Recaptha, etc.


For the JSON part, agents that accept web requests can handle both "application/x-www-form-urlencoded" and "application/json" payloads.


When creating a web form, reCAPTCHA seemed to me like a good idea, so I implemented it as above!


The enctype multipart/form-data is also already supported, but since WebhookAgent currently does not handle binary data, it chokes on file upload. Actually there's no way to encode arbitrary binary data into a JSON payload. We'll have to define how an uploaded file should be encoded in WebhookAgent.



It would be nice to have the opportunity to use Huginn in order to do a search over a search engine inside a website in order to receive news entries in the website.

For insteance on this website : if Huginn can make a request to and have the result it would be great.

What do you think about it ?


@LorbusChris, have you started working on OH1 or OH2 agent interface ? If not let me know how to proceed, so that I can start working on this agent.


A "difference agent" might be useful that performs a diff between a named field in the current event and a named field in the previous event that are related by a value in some common field (returning nothing on first run, I'd guess).
The use case is monitoring unstructured websites. Any website with a list of 'stuff' such as news events or press releases can already be managed very well by the existing Huginn website agent, and an event gets emitted when a new element on the list of 'stuff' is added to the target website. However, not all websites are structured this way and although the website agent can be configured to emit something on a general change to an unstructured website, it's not easy to find out what has changed.
For example, a website agent configured something like this (below) will emit an event when text at changes :

  "expected_update_period_in_days": "30",
  "url": [
  "type": "html",
  "mode": "on_change",
  "extract": {
    "body": {
      "xpath": "/html/body",
      "value": "normalize-space(translate(string(.), '\\\n\\\r\\\t', ' '))"
    "title": {
      "xpath": "/html/body",
      "value": "concat('Web page changed', '')"
    "url": {
      "xpath": "/html/body",
      "value": "concat('{{url}}', '')"

... I could emit the extracted body text rather than just "Web page changed", but it's not very useful. It would be useful to know what has changed; a text diff between event[previous].body and event[current].body where url = "" in both events.


Is it possible to remove the requirement to select a device for the pushbullet agent in order to allow broadcasting notifications to all linked devices rather than having to have one agent per device?
EDIT: SEE #1190


Hey @JamiePhonic. That seems like a reasonable change, but I don't know much about the PushBullet service myself. @berendt or @dsander, is that an easy change?

Edit: @JamiePhonic, would you mind making a new issue for this-- this thread is more for general suggestions.


@kirantpatil I havent started with it, nor will I be able to do soin the forseeable future. I just wanted to throw in the idea of an OpenHab Agent. I'd love to see someone take it on.

Maybe the author of OpenHAB @kaikreuzer has some ideas where to start, what protocols to use etc.


@LorbusChris Huginn has an MQTT agent you may be able to make use of in the mean time. You just need an MQTT server like mosquitto.


A fixed event emitter could be useful; rather like the manual event generator, except schedulable and with a persistent configuration. The agent would support Liquid templating and would emit a fixed event when run.
Use cases could be
1. to emit a regular calendar event, or a regular post to a blog.
2. to modularise custom web or RSS agent configurations. For example, if you want to parse the same website several times with different variables (encoded in the URL, for example) you could schedule an upstream fixed event emitter to send each variable, or group of variables, into a website agent.
Note : at the moment the RSS agent doesn't take incoming events, so this wouldn't work.


Has anyone worked on a LinkedIn agent yet? I'm going to start one and was curious if anyone's had much success.


Transmission/Deluge agent in order to inform about torrents/taking action on them.


A Todoist ( agent would be nice. Quick adding of tasks and fetching of completed tasks.


I started working on Boxcar agent for mobile notifications. Should I be creating a ticket for this ?


Would there be any interest in a GNU Social agent? There seems to be an API (including a Twitter-compatible one - maybe an option for the Twitter agents to supply an optional hostname to retarget them?)


Is there a kind of regex agent?
An agent who can filter values for regex groups.
For example; I have a semi-structured email body, and want to extract the first date in the format \d{2}.\d{2}.\d{4}

It should be possible with existing agents, but an own agent seems reasonable.


@MrSunday334 There is a general Liquid tag, and the EventFormattingAgent can do match group extraction.


Current implementation of User Location Agent does not help much when I need to know whether the location belongs to a pre-defined area or not. So I created a JS Agent which generates "enter" or "leave" events depending on previous locations and the circle area defined by a GPS coordinate and a radius.
Here is the code below if someone needs it. Feel free to play with it, if you find it useful.

 * Process list of positions and emit an event when area is leaved or entered.
Agent.check = function() {
  var insideAreaList = this.memory('inside_area_list') ? JSON.parse(this.memory('inside_area_list')) : [];
  if (insideAreaList.length < 2) {

  var now = new Date();
  var previouslyInsideArea = insideAreaList[0];
  for (var i = 1; i < insideAreaList.length; i++) {
    var insideArea = insideAreaList[i];
    if (insideArea != previouslyInsideArea) {
      if (insideArea) {
        this.createEvent({ 'action': 'enter', 'time': { 'hours': now.getHours(), 'minutes': now.getMinutes() } });
      } else {
        this.createEvent({ 'action': 'leave', 'time': { 'hours': now.getHours(), 'minutes': now.getMinutes() } });
    previouslyInsideArea = insideArea;

  this.memory('inside_area_list', JSON.stringify(insideAreaList.splice(-1,1)));

 * Process recieved coordinates and create a list of positions.
Agent.receive = function() {
  // Agent configuration
  var config = {"distance": 0.5, "latitude": 0.0, "longitude": 0.0};
  var events = this.incomingEvents();
  var insideAreaList = this.memory('inside_area_list') ? JSON.parse(this.memory('inside_area_list')) : [];
  for(var i = 0; i < events.length; i++) {
    var location = events[i].payload;
    insideAreaList.push(distance(location.latitude, location.longitude, config.latitude, config.longitude) < config.distance);

  this.memory('inside_area_list', JSON.stringify(insideAreaList));

 * Returns the distance between 2 GPS coordinates in kilometers.
function distance(lat1, lon1, lat2, lon2) {
  var deg2rad = 0.017453292519943295; // === Math.PI / 180
  var cos = Math.cos;
  lat1 *= deg2rad;
  lon1 *= deg2rad;
  lat2 *= deg2rad;
  lon2 *= deg2rad;
  var a = (
    (1 - cos(lat2 - lat1)) +
    (1 - cos(lon2 - lon1)) * cos(lat1) * cos(lat2)
  ) / 2;

  return 12742 * Math.asin(Math.sqrt(a)); // Diameter of the earth in km (2 * 6371)

I am working on the github agent. Be back soon :)


Neat @elvetemedve! If you're interested, you could make a Wiki page documenting some of the more interesting JS agents you're building.

Awesome @Jngai!


It would be cool to have an agent / set of hooks for fieldbook -


I have decided to start of with something easier so I am working on aftership agent instead. Making decent progress so far.


Does an 'agent' classify as a single-service task or is it a wrapper around the whole API?

For example, when I want to use github as an agent, do I get multiple options for which task I'd like to do (fetch top 10 repos, fetch top 10 followed-users, push repo-updates to Slack/HipChat/IRC) or will each of the options listed in brackets be a separate agent?


Based on the current agents, the idea would be that "github" would be an agent that hits githubs API to get the information you want, like fetch top 10 repos, fetch top 10 followed-users, etc, Then that agent would create events that a seperate IRC or slack agent would receive and do stuff with. That way you can use the IRC or slack agent to do other things with, like send an IRC message when a build is completed on a jenkins server or something else.


@JamiePhonic what does the actual list of agents look like? I see only a few tick-boxes checked (above - and it seems kind of cluttered), so is the number of agents only a few (like maybe 5 or 10)?

Also, if someone can point me in the direction of where each agents source-code is stored, I can try generating a nice wiki-page for each agent, and then add some details about each.


@Kentoseth this is the suggestions thread, so the list at the top is a list of suggested agents. The ones that are ticked off are the ones that have been implemented.
There's at least a good 50 to 60 or so agents already implemented, and you can find the source code for each agent in "app/models/agents"

Some of the file names may not be the most descriptive, however each agent actually already has a basic explanation of what it does written into it which shows up when you configure it. its written in markdown in each agents source file. just look for the line description do <<-MD near the top of each file and read down from there.


@cantino you should remove aftership agent from the list.


Checked it off :)


Does anybody have a need for a agent? It seems possible to assemble this functionality with a PostAgent, but it's a little hacky.


Could we get an agent for


Just an idea for an agent, would be pretty cool. I may take a look at it myself when finals are over.


That'd be awesome @charle692

breyno127 commented May 2, 2016 edited

@MrSunday334 I have been kicking around the Idea of hacking on a agent on the weekends. There exists Would using that gem for interaction with the todoist API be the best practice, or should I use HTTP requests on their API?

alias1 commented May 3, 2016 edited

@breyno127 I think it depends on how much code would be needed to implement the functionality the gem would give you. todolist-ruby only depends on faraday which we already require, so it should be fine to use.


Website status monitoring (alert when website is down) is in the list, but I am already doing that with Http Status Agent and a Trigger Agent..
Is there any need to make a separate Agent?


@fermuch probably just easier to setup and integrate with other agents. I made a simple one awhile back: master...naiyt:uptime_agent

Nothing special, but I was using it to monitor some of my sites for awhile.


I agree, though, @fermuch, that the HttpStatusAgent gives us what we need, so I checked it off.


Is there some kind of Facebook Agent?

I don't use Facebook and thats not gonna change, but some interesting websites only use Facebook for their news.

I could use a WebsiteAgent, but maybe there is a nicer way?


An agent for instances would be nice. It's an FLOSS alternative to slack and in use for 'chatops'.


Also would like to see Trello agent!


An iCal agent would be very useful, also.


I'd like some sort of agent that could emit a series of template-based events. Here's the use-case: currently I have ~30 agents that each monitor a distinct subdomain of my website. Most of them are the exact same agent except for the URL and name. I'd like this hypothetical agent to periodically loop over an array of strings and emit one templated event per string. Then I could just have one status check agent, and set its event source to the looping agent.

Does this make sense to anyone else?


Most of them are the exact same agent except for the URL and name.

You can use a single agent and use the urls as an array 😉


@thiagotalma that works? Huh, didn't know about that.

In my case though it doesn't help because the HttpStatusAgent has a form-based configuration. You can't manually input JSON.


I wish form-based agents' editing page could toggle into a JSON editor. Anyone want to make that?


I wish form-based agents' editing page could toggle into a JSON editor. Anyone want to make that?

@cantino Can you explain, please? Do you have any examples?


I'm picturing the current form configurable editor, but with a tab at the top that switches it to the JSON editor, similar to how the JSON editor can switch to text mode.


For those of you who are interested in a Trello agent, I'm currently working on it. I have a few agents complete that I know I would use. I just wanted to ask what type of Trello agents would people be interested in?


I'm picturing the current form configurable editor, but with a tab at the top that switches it to the JSON editor, similar to how the JSON editor can switch to text mode.

@cantino Are you thinking of changing the component for edit json agents?
It would not be bad, that we have is not the best ;)

You think of something along these lines?

With a quick search on Github you can find several options.


FYI, just opened up a new agent suggestion issue: #1583

I put it in a separate issue instead of here because (as you can tell from the amount of text in that initial description) it's very, very complicated and I didn't want to pollute this issue.


@thiagotalma If someone wants to attempt using one of those to replace it, or to add a JSON mode for the form configurable agents, that'd be cool.


@cantino That would be great because it has the ability to use fields with defined options:


That's pretty slick.


@thiagotalma The potential of the JSON editor is awesome, especially when combined with JSON Schema (#832), the biggest problem I see is that the default UI/UX is not very intuitive. We also have a issue about improving the JSON editing experience #243.

judi0713 commented Jul 16, 2016 edited

Is there any plan to create a organization?

Recently I started use huginn, and I found huginn is a powerful tool.I want to contribute to it.Is there develop plan site like trello? I just find gitter🙁

Apart from this, I am an iOS developer.I know Rails 5 have more friendly api mode, is there any idea about mobile app about huginn?I think I can contribute more.

Maybe you can move this project to an Github organization. So developer can create many application about huginn, like iOS and Android app.And we can Integration push service on like DataOutputAgent!

I really regret meet huginn so late.Thank all of yours make such awesome website!


Hey @judi0713. I had polled some contributors at one point and there wasn't much interest in switching to an Org. I'm not opposed, but haven't put any effort into it. What's stopping you from starting a repo for an iOS app for Huginn? (Which I think is a fantastic idea, BTW!)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment