Day 4 · Give It Hands: Search, Terminal, Browser
Today’s Goal
Section titled “Today’s Goal”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.
Prerequisites
Section titled “Prerequisites”- 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)
Tools ≠ Skills
Section titled “Tools ≠ Skills”A common source of confusion early on:
| Tool | Skill | |
|---|---|---|
| Granularity | Low: one atomic capability | High: a reusable workflow |
| Examples | web_search, terminal, read_file | code-review, daily-standup |
| Who decides to use it | Hermes itself, based on the conversation | You trigger explicitly (/skill-name) or Hermes infers from context |
| Where it’s defined | Built-in, ships with every release | Community packages, installed from Skills Hub |
Today is about tools. Skills are Day 5.
-
See which tools are available
Inside a conversation:
/tools listOr in the terminal (after exiting a session):
Terminal window hermes tools --summaryYou’ll see tools grouped by toolset. Core toolsets include:
Toolset What’s inside webweb_search,web_extract— search the web and extract page contentterminalterminal,process,read_file,patch— shell execution, file read/writebrowserbrowser_navigate,browser_snapshot,browser_vision— drive Chromevisionvision_analyze— image understandingmemorymemory,session_search— read/write long-term memory (Day 6)todotodo— manage task listscronjobcronjob— scheduled tasks (Day 7) -
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 directoryHermes should:
- Tell you what command it’s about to run (something like
find . -name "*.md" | wc -l) - Wait for you to confirm (dangerous commands always require confirmation; ordinary commands can be set to auto-approve)
- Return the result
- Tell you what command it’s about to run (something like
-
Try web_search — first resolve the API key
Hermes’s web search defaults to Firecrawl (a professional web-scraping SaaS). Three options:
Option How to configure Best for Firecrawl cloud hermes config set FIRECRAWL_API_KEY fc-xxx(register at firecrawl.dev)Easiest, okay with cloud calls Self-hosted Firecrawl Start with Docker, then hermes config set FIRECRAWL_API_URL http://localhost:3002High privacy requirements, 4–8 GB free RAM Nous Tool Gateway Nous Portal subscription — tool routing happens automatically Already paying for Nous Portal Nothing configured Falls back to built-in duckduckgo-search(free but lower quality)Just trying it out, low frequency -
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 2025Hermes should:
- Recognize this requires internet access (post-training-cutoff information)
- Call
web_search - Follow up with
web_extractto pull content from a few result pages - 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. -
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 & -
Connect and use the browser
Inside a Hermes conversation:
You: /browser connectShould 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_navigate→browser_snapshot(reads the accessibility tree) → summarize the results. You can watch it click in that Chrome window in real time.When done:
You: /browser disconnectThis closes the CDP connection and returns Hermes to its default mode.
-
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 toolsTypical security configuration:
Platform Enabled toolsets CLI (local terminal) All Telegram / Discord / Slack web,memory,todoonly — disableterminalandbrowserWebUI web,browser,visionThis config lives in the
toolsetsfield in~/.hermes/config.yamland can be edited by hand.
Expected Output
Section titled “Expected Output”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])