hermes-nimble-agent plugin connects Hermes to Nimble Agent API V2. It lets a Hermes user start a research run, walk away, and retrieve a cited answer later from any session.
Agent API V2 is not a single search or extract call. It runs a stateful, asynchronous research workflow on Nimble’s infrastructure. The plugin returns durable identifiers the moment a run starts, then the research continues after Hermes returns. Any later Hermes session can resume the run using those identifiers.
The standalone plugin is the recommended path. A production MCP fallback exists for clients that cannot install the plugin, but it does not offer full parity.
Overview
The plugin adds five tools and one skill to Hermes:- Five tools cover the run lifecycle: discover an agent, create one from a template if needed, start a run, check status, and fetch the result.
- One skill,
nimble-agent:agent-research, teaches Hermes the reuse-first, poll-later workflow so runs are handled correctly without manual prompting.
- Start a run. The plugin returns
agent_idandrun_idimmediately and never blocks. - The research continues on Nimble’s infrastructure.
- Check status later, from the same session or a new one, using the two identifiers.
- Fetch the terminal result once the run completes.
Prerequisites
Hermes 0.19 or later
Hermes 0.19 or later
The plugin is built and tested against
hermes-agent==0.19.0. Install it into the same Python environment as hermes-agent.Python 3.11 or later
Python 3.11 or later
Supported on Python 3.11, 3.12, and 3.13. The plugin depends on
nimble-python>=1.0.0,<2, which pip installs automatically.Nimble account and API key
Nimble account and API key
Create a Nimble account and generate an API key from Account Settings > API Keys. A free trial is available. No extra subscription, quota, or availability tier is required beyond a valid key.
Installation
Install the plugin, then enable it in Hermes.nimble-agent. Enabling adds it to the Hermes allow-list. Plugins are opt-in and stay disabled until enabled.
Verify that the plugin and its five tools loaded:
HERMES_PLUGINS_DEBUG=1 hermes plugins list to see discovery details.
Authentication
The plugin reads your key from theNIMBLE_API_KEY environment variable. It is never passed as a tool argument.
- Tools stay hidden when the key is missing. All five tools are gated on
NIMBLE_API_KEY. If it is absent or empty, Hermes does not show them to the model. Set the key and start a new session to reveal them. - The key is scrubbed from errors. The plugin never stores, logs, or echoes the key, and replaces it with
[REDACTED]in any error text before returning it.
X-Client-Source: hermes automatically. Nothing to configure.
Available tools
The toolset name isnimble_agent. Each tool returns a JSON string and never raises.
How they connect:
nimble_agents_listandnimble_agent_bootstrapproduce anagent_id(wsa_...). Reuse an existing agent before creating a new one.nimble_agent_run_starttakes thatagent_idplus atask(the research question) and returns arun_id(task_run_...).nimble_agent_run_statusandnimble_agent_run_resulttake both identifiers. They work from any session, so the two identifiers are all a later session needs.
The agent-research skill
The plugin bundles a skill namednimble-agent:agent-research. It teaches the full lifecycle: reuse before create, return identifiers within the turn, avoid tight polling, resume from identifiers alone, handle not_ready and failed runs, and present answers with citations and confidence.
Plugin skills are opt-in and do not appear in the system-prompt skill index. Load it explicitly when you want Hermes to follow the workflow:
Complete asynchronous workflow
This example uses placeholder identifiers and a generic research question. Identifier values shown are illustrative.1
Select or create an agent
List existing agents and reuse one when possible:If none fits, list templates and create an agent from one:Use a
template value from the list the first call returns. Both paths yield an agent_id such as wsa_xxxxxxxxxxxx.2
Start a research run
Start a medium-effort run. The response returns immediately:
effort is optional; omit it to use the agent’s default.3
Preserve the identifiers
Record
agent_id and run_id. They are the only state needed to resume. You can now end the session or move on to other work.4
Check status later
From the same session or a new one:
status is queued or running while active, and completed, failed, or cancelled when terminal.5
Fetch the result
Once the run is The result carries the answer and its trust block. Present the answer, then list the sources and per-claim citations.
completed:Medium and higher efforts can take several minutes. Return the identifiers to the user rather than holding a tool call open, and space status checks tens of seconds apart.
Result and trust model
nimble_agent_run_result returns the answer wrapped in the plugin’s result envelope:
output.typeistextfor a prose answer, orjsonwhen the agent is configured with an output schema. Structured runs returncontentas an object or array.sources_countandclaims_countare always present integers.
trust block (overall confidence, per-claim citations, primary and secondary source classification, and verbatim excerpts) follows the standard Agent API V2 trust model. See Trust for how grades and citations work, and the run result schema for every field.
Errors and recovery
Every failure returns a structured envelope:{ "success": false, "error_type": "...", "error": "...", "retriable": true|false }. The agent_id and run_id are preserved even on validation errors, so a run is never lost to a client-side error.
A transport error such as
timeout or connection does not necessarily end the server-side run. The run keeps going on Nimble’s infrastructure. Check status again with the same identifiers before starting over.Effort and runtime guidance
nimble_agent_run_start accepts an optional effort (low, medium, high, x-high, max). Omit it to use the agent’s default. Higher effort reads more sources and takes longer, from seconds at low to many minutes at higher tiers.
See Efforts for the full tier list, typical run times, pricing, and the default. The bundled skill suggests medium or higher when citations matter.
Because a run can take minutes, the plugin returns agent_id and run_id immediately rather than holding a tool call open. Let the model report the identifiers, then check status later and space checks tens of seconds apart.
Plugin or MCP?
The plugin is the recommended path. Generic MCP connectivity to Nimble does not by itself provide the plugin’s lifecycle handling, trust mapping, credential redaction, or bundled skill.
Production MCP fallback
Use this path only when installing the plugin is not possible. It connects Hermes to the production Nimble MCP server over Streamable HTTP. Treat the block below as a starting configuration and validate it against your Hermes and Nimble MCP versions before relying on it. Add the server to~/.hermes/config.yaml:
- Authentication uses a bearer token. Keep the key in the
NIMBLE_API_KEYenvironment variable and reference it with${NIMBLE_API_KEY}. - Attribution over MCP is manual. Add
X-Client-Source: hermesto the headers as shown. It is not sent automatically the way the plugin sends it. - The tool allowlist limits Hermes to the agent run lifecycle. Confirm the exact tool names against your server’s advertised tool list, since a name that does not match is silently filtered out, and adjust the list to your needs.
- Timeouts should allow for research that runs for minutes. Runs continue server-side even if a request times out.
- Reload the server mid-session with
/reload-mcp, or restart Hermes.
Troubleshooting
Related resources
PyPI package
Install
hermes-nimble-agent from public PyPI.GitHub repository
Source, README, and release notes.
Search Agent
Learn how Nimble Agent API V2 research runs work.
Trust and citations
How confidence, sources, and per-claim citations are produced.
Nimble MCP Server
Full reference for the production MCP fallback.
Hermes plugins
How Hermes discovers and enables plugins.