Yetibot

πŸ€– Extreme chatops bot for Slack, Discord, Mattermost, IRC πŸ”§ New contributors welcome πŸ—

Last verified:

Visit Yetibot

What is Yetibot?

Yetibot is a powerful, expressive chatops platform written in Clojure that acts as a communal command line inside your chat applications. It supports Slack, Discord, Mattermost, and IRC, allowing teams to run commands, automate workflows, and have fun directly from their chat channels. The bot excels at teaching teams how to run internal automation, boosting productivity through Jenkins/JIRA integration and SSH access, and providing entertainment through meme generation, Giphy lookups, and more.

Key features include Unix-style pipes that allow tremendous expressiveness in chaining together complex commands, sub-expressions that let you embed command output into outer commands with arbitrary nesting depth, and aliases that parameterize complex expressions for team-specific usages. Observers enable Yetibot to respond automatically to user events using regex matching on messages and reactions. Scrapers let Yetibot fetch data from websites and parse HTML or JSON into queryable data structures. Cron support allows running expressions on intervals with second-level precision.

Yetibot is designed for development teams, DevOps engineers, and operations teams who want to centralize automation and tooling in their chat infrastructure. It's particularly valuable for distributed teams who need to run SSH commands on servers, manage JIRA tickets, interact with GitHub, and access internal APIs without leaving their chat client. The open-source nature makes it ideal for teams who want full control over their chatbot and the ability to build custom plugins.

The platform includes extensive collection utilities (range, list, xargs, random, head, tail, shuffle, grep, sort, sum, count), a built-in GraphQL API for programmatic access, SSH capabilities for running commands on remote servers, and JIRA integration for creating/updating/resolving issues. Karma tracking, meme generation, and fun commands keep team culture alive while maintaining productivity.

Yetibot pricing

Pricing model: Freemium

Yetibot is open-source software released under the Eclipse Public License 1.0 (EPL-1.0), meaning it is completely free to use, modify, and distribute. There are no paid tiers or subscription plans. Teams self-host their own instance using Docker, Docker Compose, Kubernetes with Helm, or by running from source with Leiningen. The official public demo instance at public.yetibot.com is available for free to try out in Slack. All features including pipes, aliases, observers, scrapers, cron, SSH, JIRA, GitHub, and the GraphQL API are included at no cost.

Yetibot pros

  • Unix-style pipes enable complex command chaining
  • Sub-expressions support arbitrary nesting depth
  • Aliases allow parameterized team-specific commands
  • Supports Slack, Discord, Mattermost, and IRC
  • Observers react automatically to messages and reactions
  • Web scrapers parse HTML and JSON with JSON Path
  • Cron scheduling with second-level precision
  • Built-in GraphQL API for programmatic access
  • SSH support for running remote server commands
  • Powerful JIRA integration with JQL support
  • GitHub integration for PRs, repos, and contributors
  • Collection utilities (xargs, random, grep, sort, sum)
  • Open-source with EPL-1.0 license
  • Docker and Kubernetes (Helm) deployment options
  • Per-channel settings and category toggles
  • Karma tracking system for team engagement
  • Built-in web dashboard at port 3003
  • nREPL exposure for runtime debugging
  • Render command with Selmer templating support
  • Active community Slack with dedicated channels

Yetibot cons

  • Requires Java 11+ to run
  • Needs Postgres database setup
  • Eval command is insecure and admin-only
  • Campfire adapter no longer supported
  • Steeper learning curve for complex expressions
  • Configuration can be complex with multiple sources
  • Tee command doesn't work in GraphQL API yet
  • Only key-based SSH authentication supported
  • Slack auto-reconnect limited to 500 attempts

Frequently asked questions about Yetibot

What is Yetibot?

Yetibot is a powerful, expressive chatops platform written in Clojure that acts as a communal command line inside chat applications. It supports Slack, Discord, Mattermost, and IRC, enabling teams to run commands, automate workflows, and have fun directly from chat channels. Yetibot excels at teaching internal automation, productivity through Jenkins/JIRA integration and SSH access, and entertainment through meme generation and Giphy lookups.

How do I get started with Yetibot?

You can get an invite to the official Yetibot Slack at slack.yetibot.com to play with a public demo instance. To self-host, use Docker Compose for the quickest setup - run docker-compose up from the Yetibot repo to start Postgres and Yetibot containers. Alternatively, use the official yetibot-helm chart for Kubernetes, clone the repo and run lein run, or depend on Yetibot in your own project for ultimate customizability.

What chat platforms does Yetibot support?

Yetibot supports Slack, Discord, Mattermost, and IRC through its adapter system. IRC channels are configured in config.edn or via the /invite command. Slack bots must be invited with /invite @yetibot. Campfire is no longer supported. If your platform isn't supported, you can open an issue - adding adapters is described as quite easy due to Yetibot's plugin-based architecture.

How do Unix-style pipes work in Yetibot?

Pipes allow chaining commands together using the output of one command as input to another, similar to Unix shells. The default behavior appends output separated by spaces, but you can control placement using %s. For example: !echo 1 | echo 2 | echo 3 chains three echo commands. You can also use !echo foo | echo %sbar to place the pipe output in a specific position.

What are observers and how do they work?

Observers listen for patterns and automatically run commands when triggered. They support message events (default), react events (Slack reactions), enter events (when user joins channel), and leave events. Observers support regex matching and optional filtering by channel (-c) and username (-u). For example: !obs sushi = react :sushi: makes Yetibot react with 🍣 whenever sushi is mentioned. Templating is available with variables like {{username}}, {{body}}, and {{channel}}.

How do I integrate JIRA with Yetibot?

JIRA integration supports creating, updating, resolving, describing, deleting, assigning, logging work, and commenting on issues. It can search using JQL syntax with !jira search or !jira jql. Configuration includes :user, :password, :domain, default project, and optional per-project settings. Commands include !jira create, !jira recent, !jira show, !jira assign, !jira comment, !jira resolve, !jira delete, and !jira worklog. Per-channel JIRA projects can be set with !channel set jira-project.

How do I deploy Yetibot with Docker?

Run docker-compose up from the Yetibot repo root to start Postgres and Yetibot containers configured for IRC. For Slack, set environment variables like YB_ADAPTERS_SLACK_TYPE=slack and YB_ADAPTERS_SLACK_TOKEN=xoxb-my-token. The dashboard runs at http://localhost:3456. You can override the default command but must activate the docker profile (lein with-profile +docker run) for proper JVM Sandbox configuration. Postgres defaults to postgresql://localhost:5432/yetibot if not configured.

What is the GraphQL API in Yetibot?

Yetibot serves a GraphQL endpoint as part of its web app, accessible at https://public.yetibot.com/graphql for the public instance. You can query adapters, stats (uptime, adapter_count, user_count, command_count), karma scores, and user information. Examples include {adapters {uuid platform}} to list adapters and {stats {uptime adapter_count user_count command_count}} for bot statistics. Karma is also exposed via GraphQL with queries like {karmas(report: SCORES) {user_id score}}.

How does Yetibot handle configuration?

Yetibot supports multiple configuration mechanisms in order of precedence: environment variables override leiningen profiles EDN, which override config EDN file. Config can be prefixed with yb or yetibot. Immutable config (chat adapters, credentials, DB connection) uses EDN files, profiles, or environment. Mutable config (IRC channels, channel settings) is stored in the database. Environment variables are exploded into nested maps using the dec library. Sample configs include config.sample.edn, profiles.sample.clj, and sample.env.

Categories

Use cases

Browse all AI tools on NeedAnAI