Skip to content

Day 4 · Give It Hands: Search, Terminal, Browser

In a single conversation, have Hermes invoke at least 2 built-in tools (terminal + web_search recommended) and observe it deciding which tool to use and why.


  • Day 2 complete — the main conversation works
  • Chrome installed on this machine (needed for the browser section; the first two tools don’t require it)

A common source of confusion early on:

ToolSkill
GranularityLow: one atomic capabilityHigh: a reusable workflow
Examplesweb_search, terminal, read_filecode-review, daily-standup
Who decides to use itHermes itself, based on the conversationYou trigger explicitly (/skill-name) or Hermes infers from context
Where it’s definedBuilt-in, ships with every releaseCommunity packages, installed from Skills Hub

Today is about tools. Skills are Day 5.


  1. See which tools are available

    Inside a conversation:

    /tools list

    Or in the terminal (after exiting a session):

    Terminal window
    hermes tools --summary

    You’ll see tools grouped by toolset. Core toolsets include:

    ToolsetWhat’s inside
    webweb_search, web_extract — search the web and extract page content
    terminalterminal, process, read_file, patch — shell execution, file read/write
    browserbrowser_navigate, browser_snapshot, browser_vision — drive Chrome
    visionvision_analyze — image understanding
    memorymemory, session_search — read/write long-term memory (Day 6)
    todotodo — manage task lists
    cronjobcronjob — scheduled tasks (Day 7)
  2. Try the terminal tool

    You already used this in Day 1, but today we watch it consciously:

    You: Use the terminal to count how many .md files are in the current directory

    Hermes should:

    1. Tell you what command it’s about to run (something like find . -name "*.md" | wc -l)
    2. Wait for you to confirm (dangerous commands always require confirmation; ordinary commands can be set to auto-approve)
    3. Return the result
  3. Try web_search — first resolve the API key

    Hermes’s web search defaults to Firecrawl (a professional web-scraping SaaS). Three options:

    OptionHow to configureBest for
    Firecrawl cloudhermes config set FIRECRAWL_API_KEY fc-xxx (register at firecrawl.dev)Easiest, okay with cloud calls
    Self-hosted FirecrawlStart with Docker, then hermes config set FIRECRAWL_API_URL http://localhost:3002High privacy requirements, 4–8 GB free RAM
    Nous Tool GatewayNous Portal subscription — tool routing happens automaticallyAlready paying for Nous Portal
    Nothing configuredFalls back to built-in duckduckgo-search (free but lower quality)Just trying it out, low frequency
  4. Try web_search

    With the key configured, start Hermes and ask something that requires current information:

    You: Search for the release timeline of Claude 4 in 2025

    Hermes should:

    1. Recognize this requires internet access (post-training-cutoff information)
    2. Call web_search
    3. Follow up with web_extract to pull content from a few result pages
    4. Summarize with citations

    The reply should include citation markers like [1] [2] linking to the source pages. That’s your confirmation the tool call succeeded.

  5. Try the browser tool — first launch Chrome with CDP

    The browser tool works via Chrome DevTools Protocol (CDP): Hermes connects to a Chrome instance running with a debug port open and drives it through the protocol. Chrome must be running before Hermes can connect.

    macOS:

    Terminal window
    "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
    --remote-debugging-port=9222 \
    --user-data-dir="$HOME/.hermes/chrome-debug" \
    --no-first-run &

    Linux:

    Terminal window
    google-chrome \
    --remote-debugging-port=9222 \
    --user-data-dir="$HOME/.hermes/chrome-debug" \
    --no-first-run &
  6. Connect and use the browser

    Inside a Hermes conversation:

    You: /browser connect

    Should reply Connected to ws://localhost:9222. Then give it a task:

    You: Open https://news.ycombinator.com and tell me the titles and links of the top 5 posts on the front page.

    Hermes will call browser_navigatebrowser_snapshot (reads the accessibility tree) → summarize the results. You can watch it click in that Chrome window in real time.

    When done:

    You: /browser disconnect

    This closes the CDP connection and returns Hermes to its default mode.

  7. Enable different tools per platform

    You probably don’t want a Telegram bot executing shell commands. hermes tools (in the terminal, not inside a conversation) opens an interactive per-platform configuration interface:

    Terminal window
    hermes tools

    Typical security configuration:

    PlatformEnabled toolsets
    CLI (local terminal)All
    Telegram / Discord / Slackweb, memory, todo only — disable terminal and browser
    WebUIweb, browser, vision

    This config lives in the toolsets field in ~/.hermes/config.yaml and can be edited by hand.


A complete conversation should show Hermes autonomously selecting and invoking tools:

You: Which releases were merged into NousResearch/hermes-agent this month?
Hermes: Let me check the latest release information.
→ [tool] web_search: "NousResearch hermes-agent releases 2026"
→ [tool] web_extract: https://github.com/NousResearch/hermes-agent/releases
Based on the latest data, releases merged this month include ... (sources [1][2])