Skip to main content

What is Hermes Agent?

Hermes Agent is an open-source self-improving autonomous agent. Unlike a chatbot or a coding copilot, Hermes runs a closed learning loop by creating skills from experience, improving them during use, and building a persistent model of who you are across sessions. It runs wherever you put it: a VPS, a local machine, or serverless infrastructure. You can talk to it from your terminal, Telegram, or any supported messaging app you connect to it.

Why connect ZenRows to Hermes?

  • Every scraping task becomes a skill: When Hermes successfully scrapes a site through ZenRows, it can turn that workflow into a reusable skill. The next time you ask for competitor pricing or job board leads, it already knows how to execute your workflow.
  • Access any website data without getting blocked: Proxy rotation, anti-bot evasion, and browser orchestration run on ZenRows’ infrastructure. Hermes asks for the page and gets the content regardless of the anti-bot system protecting it.
  • Lower LLM costs per task: Raw HTML boilerplate burns tokens. ZenRows returns clean, structured, LLM-friendly Markdown or JSON, so Hermes processes only what matters and your token budget is managed.
  • Reliable scheduled tasks: When Hermes runs a cron job, such as a daily digest, a price check, or a lead monitor, a blocked page breaks the whole run. ZenRows keeps those tasks completing consistently.
  • Works across parallel subagents: Hermes can spawn up to 3 concurrent subagents by default via delegate_task, each with its own isolated context and toolset. Pair that with ZenRows and you can run a multi-source research task, with one subagent pulling competitor pricing, another monitoring job boards, and another tracking industry news, and have all three deliver structured results to your chat simultaneously.
  • Full browser automation, described in plain English: For sites that require login, pagination, or form interaction, Hermes can instruct ZenRows’ browser tools in natural language. No selectors, no scraping code.

What you can build with the Hermes-ZenRows integration

  • A self-improving competitive intelligence feed: Schedule a daily cron job that scrapes competitors’ pricing, changelogs, and job pages, compares them against the previous run, and delivers only what changed to your Telegram or Slack.
  • A parallel market research agent: Give Hermes a research brief covering competitors, news sources, and job boards, and let it spawn concurrent subagents via delegate_task, each scraping a different source through ZenRows. Hermes then synthesizes everything into a single briefing.
  • An ad research and content brief pipeline: Give Hermes a product URL and it scrapes the landing page, pulls winning hooks from Meta Ads Library and TikTok Creative Center, and writes a ready-to-use creative brief without you touching a single tab.
  • A daily news and industry digest: Schedule Hermes to scrape Hacker News, RSS feeds, and industry blogs every morning, filter for what’s actually relevant to your work, and push a tight summary to your Telegram or Discord before you start your day.
  • A pre-call research brief: Give Hermes a company name before a sales or partnership call and it uses ZenRows to scrape their site, recent news coverage, job postings, and any public announcements, then assembles a one-page brief in your messaging app before the meeting starts.
  • A 24/7 monitoring agent on a remote server: Deploy Hermes on a VPS or serverless instance, point a set of cron jobs at protected pages via ZenRows, and get messaged only when something is worth your attention.

Connecting ZenRows to Hermes

This guide uses Anthropic as the LLM provider and the ZenRows MCP server. You can substitute any supported provider, but the setup steps shown here follow the Anthropic path. Before continuing, you need a ZenRows account and API key. Obtain one from the ZenRows dashboard.
1

Install Hermes

The Hermes installer handles everything automatically: Python 3.11, Node.js 22, ripgrep, ffmpeg, and the hermes command itself. You don’t need to install those manually.Linux / macOS / WSL2:
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
Windows (native PowerShell):
iex (irm https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.ps1)
Verify the installation:
hermes doctor
2

Configure your LLM provider

Hermes requires a model with at least 64,000 tokens of context. Most hosted models meet this easily. Follow the on-screen prompts to choose your LLM provider, enter your API key, and select your preferred model.
hermes model
3

Test the chat model

Verify that chat works by running the following command:
hermes
Once the CLI-based agent loads, send a test prompt to see if Hermes loads a response from the connected model:
Go to https://www.scrapingcourse.com/antibot-challenge and summarize the page.
Hermes will attempt the page with its built-in search services and respond with a blocked page, showing its built-in tools aren’t enough to access protected pages:
Output
The site is hitting Cloudflare's anti-bot security check and blocking access.
4

Add ZenRows MCP to Hermes

ZenRows exposes its scraping and browser tools as an MCP server. Adding it to Hermes automatically gives the agent access to all ZenRows tools.Hermes has a built-in catalog of Nous-approved MCP servers that you can install with a single command (hermes mcp catalog). ZenRows isn’t in the catalog yet, so add it manually to the config file instead.Hermes configuration lives in the ~/.hermes/config.yaml file. Open it in any editor. The path depends on your OS:
  • Linux / macOS / WSL2: ~/.hermes/config.yaml
  • Windows: C:\Users\<username>\AppData\Local\hermes\config.yaml
Add ZenRows MCP to the mcp_servers block:
YAML
mcp_servers:
    zenrows:
        url: "https://mcp.zenrows.com/mcp"
        headers:
            Authorization: "Bearer <YOUR_ZENROWS_API_KEY>"
Save the file, then start Hermes:
hermes chat
Hermes discovers MCP servers at startup and registers their tools into the normal tool registry. Verify ZenRows loaded by asking:
Tell me which MCP-backed tools are available right now.
The Hermes chat agent returns ZenRows and its exposed tools:
Output
Based on the tools loaded in this session, here are all the MCP-backed tools available right now:

ZenRows MCP (mcp_zenrows_*)

Scraping:
    - mcp_zenrows_scrape - Fetch any URL as markdown/plaintext/HTML/PDF, with optional JS rendering, proxies, CSS extraction

Browser Automation:
# ... list of exposed ZenRows tools truncated for brevity
If you’re adding ZenRows to a running session or made changes to the MCP configuration at runtime, use the reload command in that chat session instead of restarting:
/reload-mcp
If the dynamic update doesn’t work, close the current chat session and rerun hermes chat to reload the Hermes agent with your changes.

Filtering ZenRows tools (optional)

If you want to restrict which ZenRows tools Hermes can use, for example allowing only the scrape tool and blocking browser automation, add a tools.include filter:
YAML
mcp_servers:
  zenrows:
    url: "https://mcp.zenrows.com/mcp"
    headers:
        Authorization: "Bearer <YOUR_ZENROWS_API_KEY>"
    tools:
        include: [scrape]

Getting started: Basic usage

With ZenRows connected, Hermes can fetch and process any page without writing a single line of code. Start a chat session and try:
Scrape the top headlines from news.ycombinator.com and summarize all the top 5 stories in one paragraph.
Hermes will call the ZenRows scrape tool, receive clean Markdown back, and summarize the content for you:
Output
Today's top Hacker News stories cover a mix of security, science, education, and programming. A researcher exposed...truncated for brevity...
Try a more targeted extraction:
Go to https://www.scrapingcourse.com/ecommerce and extract all product names and prices. Return them as a table.
Or test it against a protected site:
Go to https://www.scrapingcourse.com/antibot-challenge and summarize the page.
With ZenRows, Hermes knows when to escalate to anti-bot bypass based on the response. You don’t have to specify it unless you want to.

Advanced usage: Autonomous Scheduled Scraping

Hermes has a built-in cron scheduler. Pair it with ZenRows, and you can set up scraping tasks that run on a schedule and deliver results to any platform without you having to intervene.

Setting up a daily price monitor

From inside a chat session, use the /cron command:
/cron add "every day at 9 am" "Scrape https://www.amazon.com/s?k=headset, get the top 3 best deals based on price and ratings, and return a summary." --name "Headset deals."
The above prompt creates a cron job that runs every 24 hours. Hermes fires a fresh agent session, scrapes the page via ZenRows, and outputs a summary of the top deals.
Cron jobs run in fresh agent sessions; they don’t inherit the context of your current chat. They do have access to Hermes’s persistent memory and skills, but anything specific to your current conversation needs to be included directly in the prompt. You set the prompt once when creating the job, and Hermes runs it on every cycle. Include everything it needs directly in that prompt: the URL, what to extract, and how to format the output.

Monitoring important responses using the [SILENT] flag

For monitoring jobs, you only want to see when something changes. Include a [SILENT] flag to only get relevant alerts:
/cron add "1d" "Scrape https://www.indeed.com/q-london-uk-jobs.html and extract all job postings. Identify roles that signal buying intent such as new engineering hires, scaling teams, or data infrastructure roles. If nothing changed since the last run, respond with [SILENT]. Otherwise, list new postings added today." --name "Buying intent monitor."
When the agent’s final response contains [SILENT], delivery is suppressed. No notification noise on quiet days. Manage your cron jobs with the following commands:
/cron list                              # List all active jobs
/cron run <job_id>                      # Trigger immediately for testing
/cron pause <job_id>                    # Pause without deleting
/cron edit <job_id> --schedule "4h"     # Change schedule
/cron remove <job_id>                   # Delete permanently
To learn how to run parallel scraping workstreams across multiple sources simultaneously, see Delegation Patterns in the Hermes docs.

Set up a messaging channel (optional)

Once ZenRows and Hermes are working, you can connect a messaging platform to receive scraping results and cron job outputs directly in your preferred chat app. The messaging gateway is a background process that handles all connected platforms and runs the cron scheduler. You need it running for message delivery to work.
1

Configure your platform

hermes gateway setup
The above command starts an interactive chat channel setup. Select your preferred channel and follow the instructions to set it up. This connects Hermes to Telegram, Discord, Slack, WhatsApp, Signal, or any of 20+ supported platforms.This guide uses Telegram. Set up a Telegram bot by sending the /newbot command to @BotFather. Follow @BotFather’s instructions and enter the given bot ID into the interactive CLI. Once set up, scheduled cron jobs and agent results can be delivered straight to your preferred channel.
2

Install and start the gateway as a background service

hermes gateway install   # Registers as a system service
hermes gateway start     # Starts the service
hermes gateway status    # Confirms it's running
hermes gateway stop      # Stops a running service
Once installed, the gateway runs in the background and starts automatically whenever your machine boots.When the Hermes server starts, run a scraping prompt through the Telegram bot you created. It uses the ZenRows scrape tool to access your target and loads the response via the connected AI model.

Troubleshooting

No response is returned in Telegram

The message was delivered to the bot, but the gateway isn’t running, so nothing is processing it.
  1. Confirm the gateway is running:
    hermes gateway status
    
  2. If it’s stopped, restart it:
    hermes gateway start
    
Check that your Telegram bot token is correct and the bot was created via @BotFather. An invalid token means the gateway connects but cannot send messages back.

ZenRows tools not loading after adding to config

  • Confirm the config was saved to ~/.hermes/config.yaml.
  • Restart Hermes with the hermes start command.
  • Verify your API key is correct and the ZenRows MCP endpoint is entered correctly.

Scraping returns empty or blocked content

ZenRows handles anti-bot systems automatically, but Hermes may sometimes use its built-in browser tool instead. If you’re seeing unexpected results, explicitly instruct Hermes to use ZenRows:
Use ZenRows to scrape https://www.scrapingcourse.com/ and summarize the page.

Cron job runs, but no message is delivered

  • Confirm the gateway is running: hermes gateway status.
  • Run the job manually with /cron run <job_id> to see the output immediately.

FAQ (Frequently asked questions)

No. ZenRows tools are added via MCP and are registered separately under the mcp_zenrows_ prefix. They sit alongside Hermes’s native tools and the agent uses whichever is best for the task.
Yes. Hermes has a native browser tool (available via Nous Portal’s Tool Gateway) and ZenRows runs as a separate MCP-backed toolset. They coexist cleanly. For heavy-duty scraping with anti-bot evasion, ZenRows is the better choice; for simple navigation tasks you control, the native browser may be sufficient.
Hermes reasons about the task. For pages that are known to be protected or dynamic, it will reach for ZenRows tools. You can also instruct it explicitly: “use ZenRows to scrape this URL.”
Yes. Hermes is designed to run anywhere: a VPS, a cloud VM, Docker, or serverless infrastructure via Daytona or Modal. The setup is identical: install Hermes, add ZenRows to ~/.hermes/config.yaml, configure your messaging platform, and your scraping agent runs 24/7 without you needing to SSH in.
Hermes can save content to skills and memory if you instruct it to. Scraped data that’s useful as a reference can be persisted as a skill or written to a file. By default, raw scrape output stays in the current session.
Yes. ZenRows supports both a remote HTTP server and a local stdio server via the @zenrows/mcp npm package. Both options expose the same tools and capabilities. The remote URL (https://mcp.zenrows.com/mcp) is recommended for Hermes since it requires no local installation. If you prefer the local stdio approach, you need Node.js installed and use this config instead:
YAML
mcp_servers:
    zenrows:
        command: "npx"
        args: ["-y", "@zenrows/mcp"]
        env:
            ZENROWS_API_KEY: "<YOUR_ZENROWS_API_KEY>"
Yes. Hermes supports multiple MCP servers in the same config. Each gets its own named block under mcp_servers, and its tools are registered separately:
YAML
mcp_servers:
    zenrows:
        url: "https://mcp.zenrows.com/mcp"
        headers:
            Authorization: "Bearer <YOUR_ZENROWS_API_KEY>"
    github:
        command: "npx"
        args: ["-y", "@modelcontextprotocol/server-github"]
        env:
            GITHUB_PERSONAL_ACCESS_TOKEN: "<YOUR_TOKEN>"
The ZenRows MCP server itself is free to connect. Each tool call is billed against your ZenRows subscription: scrape calls use Universal Scraper API credits, and browser_* calls use Scraping Browser credits. You can monitor usage on your ZenRows Analytics page.
The Hermes catalog (hermes mcp catalog) lists Nous-approved MCP servers. ZenRows isn’t currently in the catalog, so this guide walks through adding it manually to config.yaml. You can check the latest catalog entries by running hermes mcp catalog in your terminal.