A software consultancy builds a private Slack assistant that answers questions about the company

Echobind wrote up a Hermes Slack bot that runs on a small private server and answers questions about the company from a condensed summary and a folder of scraped knowledge pages. The write-up is useful mainly for the configuration problems it records, including one where a default setting quietly overrode the Slack tool restrictions.

Community reportRead the original (opens in a new tab)Source read 2026-10-20
Runs onA 2GB DigitalOcean Droplet (Ubuntu LTS), reachable only over a Tailscale private network; the Hermes gateway runs as a systemd service
ModelsClaude Sonnet 4.5 via OpenRouter
ChannelsSlack (Socket Mode)
IntegrationsOpenRouter, Tailscale, Custom Python scraper for echobind.com, Observability dashboard

Who built it

Echobind, a US software consultancy with offices in Boston and Encinitas. The post doesn't name an author and presents the project as a proof of concept.

How it works

The bot lives on a small cloud server with inbound traffic blocked by default; it can only be reached over Tailscale, and login is by SSH key only. Since nothing can connect in, the Slack app uses Socket Mode, which has the bot open an outbound connection to Slack instead of needing a public URL. The Hermes gateway runs as a systemd service so it keeps running after SSH sessions end.

Company knowledge comes in two layers. A condensed summary of Echobind sits in a context file that is loaded into every prompt, so common questions are answered without any tool calls. More detailed markdown pages, scraped from the company website with a custom script, are kept in subfolders, and the bot opens them with its file-reading tool when a question needs detail. The team kept company knowledge out of the AGENTS.md file that Hermes updates itself, so the agent's own edits wouldn't overwrite it.

Access is limited in two ways. SLACK_ALLOWED_USERS whitelists the Slack members who can use the bot, and per-platform tool lists limit which toolsets the bot can use from Slack. The bot replies when @mentioned in channels it has been invited to, remembers preferences such as formatting through Hermes memory, and can schedule reminders as cron jobs.

The write-up is open about what went wrong. The model setting had to be a nested key rather than a flat string; with the flat form, Hermes fell back to a different, more expensive model. Context discovery failed until a root AGENTS.md existed. Most importantly, a global toolset default of 'all' overrode the Slack-specific restrictions until it was changed. An issue with interrupting an active session was fixed by running hermes update.

The authors report running costs of a $12/month server and Tailscale's free tier, with model usage as the cost that grows with how often people mention the bot. Later, after enabling file and terminal tools, they used Hermes to extend its own monitoring dashboard.

Lessons you can use

  • Split company knowledge into a short summary that is always loaded and detailed files the agent reads only when needed; this keeps prompts small and answers grounded.
  • Keep your own reference material separate from files the agent edits itself.
  • Use Socket Mode plus a private network so a Slack bot never needs an open inbound port.
  • After restricting tools for a platform, check that no global setting overrides the restriction; the authors found one that did.
  • Always set an allowed-users list for a team bot, and remember to include your own IDs.
  • Check which model is actually answering after a config change, since a malformed setting can silently fall back to another model.

Try a smaller version

  1. 1

    Follow the official Slack setup with Socket Mode and set SLACK_ALLOWED_USERS before inviting the bot anywhere. See the Slack docs.

  2. 2

    Write a one-page company summary as a context file that loads every session, and keep longer reference pages in a folder the agent can read with its file tools. See the Context files docs.

  3. 3

    Limit what the Slack bot can do with hermes tools (per-platform toolsets), then confirm the restriction holds by asking it to do something it shouldn't, such as run a terminal command. See the Tools docs and Configuration docs.

  4. 4

    Run the gateway as a background service on a small server or spare machine so it stays up, and keep that host off the public internet. See the Messaging docs.

  5. 5

    Ask the bot to set a short reminder to confirm cron delivery to Slack works end to end. See the Cron docs.

Caveats

  • The authors call this a proof of concept and report no formal testing of answer accuracy.
  • The knowledge base is a one-time scrape of the website, so answers will go stale unless the scrape is re-run; the post doesn't describe a refresh process.
  • The configuration problems described are specific to the Hermes version used at the time; Hermes changes quickly, so check the current docs instead of assuming the same behaviour.

Original source

An original summary written from the public source on 2026-10-20. Figures and outcomes are the author’s own reports and were not independently verified.

Spotted something wrong or out of date? Tell us on X at @HermesWatcher (opens in a new tab) and we will fix it.