Hermes Agent, with rates it can act on.

Hermes Agent is Nous Research’s open-source personal agent — it remembers you, runs on a schedule, and can operate terminal commands as well as native MCP tools. Start it with the RateAPI CLI: live credit union rates with the institution named, an observed date and a link to its own page on every number, and membership eligibility resolved from your facts with no credit pull. The result is an agent that recommends the best rate behind a door you can open, not the best rate in the state.

Updated 2026-09-18CLI-first setupOptional MCP profile: 24 tools

Set up

Use the CLI through Hermes terminal tools first. Add MCP later only if you want RateAPI to remain in Hermes’ native tool registry.

  1. Install once and load the agent protocol

    $Hermes terminal
    npm install --global @rateapi/cli
    rateapi agent --json
  2. Verify first; authenticate only with approval

    $RateAPI CLI
    rateapi demo --json
    rateapi doctor --json
    # Only after the human approves key creation and secure local storage:
    printf '%s
    ' '{"email":"[email protected]"}' | \
    rateapi login --input @- --confirm-key --json
    The demo is synthetic and free. doctor reuses an environment or stored credential when one exists. The agent must ask separately before key creation/storage and before every metered request.
  3. Optional: keep RateAPI as native MCP tools

    $~/.hermes/.env
    # ~/.hermes/.env — Hermes resolves ${RATEAPI_API_KEY} from here at connect time
    RATEAPI_API_KEY=rk_your_key_here
    //~/.hermes/config.yaml
    # ~/.hermes/config.yaml
    mcp_servers:
    rateapi:
    url: "https://mcp.rateapi.dev/mcp?profile=personal"
    headers:
    x-api-key: "${RATEAPI_API_KEY}"
    $Equivalent Hermes command
    # Optional persistent native MCP connection:
    hermes mcp add rateapi --url "https://mcp.rateapi.dev/mcp?profile=personal" --header "x-api-key:${RATEAPI_API_KEY}"
    # ?profile=personal already narrows the 89-tool registry to the consumer
    # surface, in loop order. Drop the query string for the full developer registry.
    CLI and MCP credentials are separate. Use an existing key from the dashboard in the environment that launches Hermes; do not copy the CLI credential file into config. Restart Hermes after adding MCP.

Why an agent needs eligibility before price

The lowest rate in the state and the lowest rate this user can get are different numbers. A real response, captured 2026-08-28 and unedited except for length.

JSget_financing_decision — mortgage, $420k, Charlotte NC, 740 (captured 2026-08-28)
{
"summary": "Shop Around - Better rates available",
"resolved_county": { "county": "Mecklenburg", "source": "explicit" },
"top_offers": [
{
"rank": 1, "provider": "State Employees' Credit Union", "product": "30-Year Fixed",
"rate": "6%", "apr": "6.073%", "points": 0, "monthly_payment": "$2,538",
"eligibility": { "status": "unknown", "unknown_reason": "charter_type_not_geo_matchable" },
"eligibility_explanation": { "reason": "Eligibility at State Employees' Credit Union is undetermined; it is not ruled out.", "evidence_url": "https://www.ncsecu.org/join" }
},
{
"rank": 2, "provider": "Piedmont Advantage Credit Union", "product": "30-Year Fixed",
"rate": "6.125%", "apr": "6.284%", "points": 0, "monthly_payment": "$2,595",
"eligibility": { "status": "likely_eligible" },
"eligibility_explanation": { "status": "eligible", "reason": "You qualify for membership at Piedmont Advantage Credit Union.", "source": "graph" }
},
{
"rank": 3, "provider": "Allegacy Credit Union", "product": "30-Year Fixed",
"rate": "6.625%", "apr": "6.625%", "points": 0.25, "monthly_payment": "$2,689",
"eligibility": { "status": "unknown", "unknown_reason": "low_confidence_record" }
}
],
"rate_range": { "min": "6.073%", "max": "6.625%" }
}
// Observed 2026-08-28. Trimmed. The agent leads with #2: it is the best offer behind a door this user can open.
// #1 is not ruled out — a state employee would qualify — so the agent asks, rather than hides it.
Read the eligibility field, not the rank. The best APR in the state belongs to a credit union whose membership rule this user’s facts cannot decide. The second offer is 21 basis points higher and the user qualifies today, by a published county rule with the evidence attached.
JSrate_sanity_check — 6.625% quoted, NC 30-year (observed 2026-08-28)
{
"quote": { "rate": 6.625, "apr": 6.625 },
"percentile": 20, "classification": "plausible",
"market": { "min": 6.073, "median": 6.8845, "max": 7.197, "count": 40, "as_of": "2026-08-28T04:36:37Z" },
"note": "This quote beats 80% of the 40 live NC 30-year mortgage offers we track (median 6.885%).",
"better_offers": [
{ "credit_union_name": "State Employees' Credit Union", "apr": 6.073, "apr_delta_bps": 55,
"estimated_monthly_savings": 144.23, "can_you_join": "unknown" },
{ "credit_union_name": "Piedmont Advantage Credit Union", "apr": 6.284, "apr_delta_bps": 34,
"estimated_monthly_savings": 89.52, "can_you_join": "yes" }
],
"share_url": "https://rateapi.dev/rate-check?product=mortgage&state=NC&rate=6.625&term=360&zip=28202"
}
// Observed 2026-08-28. "can_you_join: yes" is the field that turns a percentile into a plan.

The first conversation

Prompts that exercise the whole loop. The CLI routes each request through its capability catalog; a persistent MCP connection exposes the corresponding native tools.

Because Hermes keeps memory, the facts from the first prompt — ZIP, employer — carry into every later one. Tell it once.

1
“I live in 28202 and work at Atrium Health. Which credit unions can I actually join, and what is the best 30-year rate among them for a $420k purchase with a 740 score?”
2
“I was quoted 6.625% on a 30-year in North Carolina. Is that good, and can I do better somewhere that will have me?”
3
“Watch NC 30-year rates and tell me when something I can join drops below 6.1%.”
4
“Which credit unions have a branch within 10 miles of 28202, and what do they charge on a 60-month used auto loan?”
Start terminal agents with rateapi agent --json, then use the narrowest CLI capability for the job. If you later add persistent MCP, connect to https://mcp.rateapi.dev/mcp?profile=personal so the server advertises only the consumer surface (24 of 89 tools, in loop order). The corresponding first-conversation tools are: find_eligible_credit_unions, get_financing_decision, rate_sanity_check, subscribe_rate_alert, find_credit_unions_near_zip, get_eligibility_coverage. Drop ?profile=personal for the full developer registry.

A real run, captured 2026-08-28

Hermes Agent v0.20.6 on Gemini 3.6 Flash, captured with the persistent MCP option before the CLI-first onboarding shipped. The data contract and loop are the same; unedited except for length.

Tool sequence
find_eligible_credit_unions → check_membership_eligibility → find_product_rates_near_zip → find_credit_unions_near_zip → get_financing_decision → get_credit_union — 21 calls, 51 seconds. Eligibility first, price second, without being told to.
Its answer, on the best rate
“If you or an immediate family member have a connection to NC state employment, SECU offers the lowest rate at 6.000% (6.073% APR). Otherwise, Piedmont Advantage Credit Union offers the best directly eligible rate for Mecklenburg County residents.”
On the quote (second prompt)
“Your quote sits in the top 20th percentile of the 30-year fixed mortgage market in North Carolina… YES — Piedmont Advantage Credit Union: 6.125% rate / 6.284% APR (0 points). Cuts your APR by 34 basis points… Membership Eligibility: 100% YES. PACU has a community charter covering Mecklenburg County.” — and it pasted the share_url so the user could re-check live. 5 calls, 19 seconds.
What it got from the tools, not from memory
The Truliant, Skyla and Allegacy membership paths it listed (American Consumer Council association, family of member) appear in the get_credit_union and eligibility results in the session export — grounded, with the reason for each verdict.
Every rate in both answers carried an institution and an observed date, and the agent added “published pricing is not an offer” on its own — the tool descriptions carry the rules, so the agent inherits them.

What the agent will and will not do

These constraints ship in every tool description, so the agent inherits them without prompting.

Every rate is attributed and dated
“6.284% APR at Piedmont Advantage Credit Union, observed 2026-08-28, per its published rate sheet.” Never a bare number; never a rate outside the freshness window.
Unknown is never no
When eligibility cannot be confirmed the agent says so, with the reason, and asks the one question that would resolve it. It does not hide the institution.
No approvals
Published pricing is not an offer. Membership first, then the lender underwrites. The agent finds reachable offers and shows the evidence.
No national average
Benchmarks are medians across the credit unions tracked, labelled as such.
Credit unions only
About 2,950 with fresh rates across 55 states and territories. Not banks, not indices, not non-US lenders — the agent says so rather than guessing.
No credit pull
Eligibility is decided from published rules and the user’s own facts. Score, income and debt are never requested to decide who they can join.

Frequently asked