4 min read

Huginn: Self-Hosted Agents That Watch the Web for You (GitHub, Scanned)

A self-hosted IFTTT: agents that watch websites, feeds and inboxes and act on what they find.

Huginn logo
✅
Scan: safe. Nothing to warn about. Every hit is an agent doing its documented job or a placeholder in an example. Scanned Oct 26, 2026; the full report is below.

Huginn is a system of small agents that run on your own server and do things for you online. One agent scrapes a page or reads an RSS feed, an IMAP inbox, a webhook or an MQTT topic; it emits events; other agents filter, combine or transform those events and then act, by sending an email digest, posting to Slack or Telegram, calling a webhook, texting through Twilio or saving a file to S3. Chained together they form a graph you can see in the browser.

It is on this list because it is the long-running, self-hosted answer to IFTTT and Zapier, and your data stays with you. The project dates back to 2013, has more than 260 contributors, and is still released regularly, now with agents for OpenAI-compatible APIs that summarise, classify or translate text. Logic beyond the built-in agents can be written in JavaScript, Liquid templates or jq.

The limits: setting up agents means editing JSON options rather than drawing boxes, so it suits people who do not mind a little configuration. It needs an always-on server with a database, and the maintainer works on it in spare time.

  • Repository: github.com/huginn/huginn
  • Licence: MIT (MIT License)
  • Language: Ruby. Stars: 50.1K. Forks: 4,317. Last push: Oct 24, 2026.
  • Scan: safe, Oct 26, 2026, commit af23181

Who it is for

Tinkerers and developers who want automations on their own server, people tracking price drops, page changes or news, and anyone who has outgrown the free tier of a hosted automation service.

Getting started

1. Try it in one Docker container, then open http://localhost:3000

docker run -it -p 3000:3000 ghcr.io/huginn/huginn

Log in as admin with the password printed once in the container log. For real use, the README recommends the Docker Compose files in docker/single-process with MySQL or PostgreSQL so your data persists.

Safety scan

We cloned huginn/huginn at commit af23181 on Oct 26, 2026 and ran the checks described on the GitHub Tools page: credential patterns, decode-and-execute code, install-time scripts, committed binaries, risky CI workflows, every host the code talks to, known vulnerabilities in pinned dependencies, and project hygiene. A person read every hit. This is what we found.

  • The four private-key hits are not keys. Two are the bare BEGIN PRIVATE KEY header in the Google Calendar agent's instructions, showing where your own key goes, and two are the same placeholder in the README of the vendored dotenv gem.
  • The exfil-host hits are the Telegram agent calling api.telegram.org with the bot token you give it, which is how Telegram bots work, plus test stubs with a dummy token and an ngrok URL in a test comment.
  • docker/scripts/prepare pipes the NodeSource setup script into bash while building the Docker image. That runs at image build time, not on your machine.
  • package-lock.json (97 npm packages) has no known advisories. The Ruby dependencies were not checked by this scan.
  • Four workflows, no pull_request_target, and all 25 third-party actions pinned to a commit. Security policy, contributing guide and Renovate present; OpenSSF Scorecard 6.1 of 10.

What the scanner counted

CheckResult
Secrets4 candidates found and read; see the notes above.
Suspicious code7 pattern hits found and read; every one is listed under the raw findings.
Install-time code1 installer script
Committed binariesNone.
CI workflows4 workflows. None use pull_request_target. 0 of 25 third-party actions pinned to a tag rather than a commit.
Network hosts40 distinct hosts referenced from source; most often github.com, xkcd.com, api.openai.com, graph.threads.net. No URLs to bare IP addresses.
Known vulnerabilities0 advisories across 97 pinned packages: 0 critical, 0 high, 0 moderate, 0 low. package-lock.json: 97 packages, 0 advisories.
Project hygieneHas security policy, automated dependency updates, licence file, contributing guide. Missing CodeQL.
OpenSSF Scorecard6.1 out of 10, as of Oct 19, 2026.

The raw findings

Every hit the scanner wrote out, with a link to the exact line at the scanned commit. Secrets candidates are redacted.

Secret candidates (4, redacted)
WhereRuleMatch
app/models/agents/google_calendar_publish_agent.rb:32private-key-----B…--- (27 chars)
app/models/agents/google_calendar_publish_agent.rb:104private-key-----B…--- (27 chars)
vendor/gems/dotenv-3.2.0/README.md:195private-key-----B…--- (31 chars)
vendor/gems/dotenv-3.2.0/README.md:206private-key-----B…--- (31 chars)
Pattern hits (7)
WhereRuleMatch
app/models/agents/telegram_agent.rb:178exfil-host"https://api.telegram.org/bot#{interpolated['auth_token']}/#{method}"
docker/scripts/prepare:46download-piped-to-shellcurl -fsSL https://deb.nodesource.com/setup_lts.x | bash -
spec/models/agents/telegram_agent_spec.rb:155exfil-host (test/example)stub_request(:post, "https://api.telegram.org/botxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/sendMessage").
spec/models/agents/telegram_agent_spec.rb:177exfil-host (test/example)stub_request(:post, "https://api.telegram.org/botxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/getUpdates").
spec/models/agents/telegram_agent_spec.rb:188exfil-host (test/example)stub_request(:post, "https://api.telegram.org/botxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/getMe").
spec/models/agents/telegram_agent_spec.rb:195exfil-host (test/example)stub_request(:post, "https://api.telegram.org/botxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/getMe").
spec/models/agents/twilio_receive_text_agent_spec.rb:5exfil-host (test/example)# url: https://b924379f.ngrok.io/users/1/web_requests/7/sms-endpoint
Installer scripts (1)

By the numbers

Stars50.1K
Forks4,317
Contributors269
Commits4,301
Open issues606
Open pull requests82
Releases9
Latest releasev2026.10.24
LicenceMIT
Main languageRuby
Project age13 years
Last pushOct 24, 2026
Tracked files880
Lines of code63.5K
Checkout size6 MB

Lines by language: Ruby 53.1K, JSON 3,786, Markdown 2,554, JavaScript 1,862, YAML 1,498, SCSS 382.

Questions

Is Huginn free?

Yes. Huginn is MIT-licensed and free. Running it costs whatever your server costs; the README notes that managed platforms with an always-on worker usually mean a small monthly bill.

How is Huginn different from n8n?

Both are self-hosted automation tools. n8n is a visual workflow builder with a large library of app integrations. Huginn is event-driven agents configured in JSON, strong at watching websites and feeds over time. n8n is easier to start; Huginn is lighter and fully MIT-licensed.

Can Huginn use AI models?

Yes. Recent releases include agents for OpenAI-compatible APIs that can summarise, classify and translate text or generate images and speech, so you can point them at OpenAI or at a local server.


This post is part of GitHub Tools, where every repository is cloned and scanned before it is written up. The scan is a snapshot of one commit on one day; the repository has moved on since, so check it before you install.