Skip to content

feat: add Hermes Agent as a third-party harness#9255

Open
jcrabapple wants to merge 1 commit intowarpdotdev:masterfrom
jcrabapple:feat/add-hermes-agent-harness
Open

feat: add Hermes Agent as a third-party harness#9255
jcrabapple wants to merge 1 commit intowarpdotdev:masterfrom
jcrabapple:feat/add-hermes-agent-harness

Conversation

@jcrabapple
Copy link
Copy Markdown

Summary

Adds Hermes Agent (by Nous Research) as a first-class third-party harness alongside Claude Code and Gemini CLI.

Hermes Agent is an open-source, provider-agnostic AI agent framework that runs in terminals and on messaging platforms. It supports 20+ LLM providers (OpenRouter, Anthropic, OpenAI, DeepSeek, local models, etc.), persistent cross-session memory, 200+ skills, and a multi-platform gateway (Telegram, Discord, Slack, Signal, Email, and more).

Changes

New files:

  • app/src/ai/agent_sdk/driver/harness/hermes.rsThirdPartyHarness impl with HermesHarness and HermesHarnessRunner
  • app/src/ai/agent_sdk/driver/harness/hermes_tests.rs — Unit tests
  • app/assets/bundled/svg/hermes.svg — Brand icon

Modified files (18):

  • crates/warp_cli/src/agent.rs — Add Harness::Hermes variant
  • crates/warp_core/src/ui/icons.rs — Add HermesLogo icon variant
  • app/src/terminal/cli_agent.rs — Add CLIAgent::Hermes with detection, display name, brand color (#00B4D8 teal)
  • app/src/ai/agent_sdk/driver/harness/mod.rs — Wire into harness_kind() factory
  • app/src/ai/harness_display.rs — Display metadata (name, icon, color)
  • app/src/terminal/view/ambient_agent/harness_selector.rs — Add to harness dropdown
  • app/src/terminal/view/ambient_agent/view_impl.rs — Harness detection
  • app/src/ai/agent_sdk/mod.rs — Orchestration label
  • app/src/ai/ambient_agents/task.rs — Harness name parsing
  • app/src/ai/agent_management/view.rs — Agent management list
  • app/src/ai/agent/conversation.rsAIAgentHarness::Hermes variant
  • app/src/ai/blocklist/history_model/conversation_loader.rs — Conversation loading
  • app/src/pane_group/mod.rs — Pane group harness mapping
  • app/src/pane_group/pane/local_harness_launch.rs — Local child launch support
  • app/src/server/telemetry/events.rsCLIAgentType::Hermes telemetry
  • app/src/terminal/cli_agent_sessions/listener/mod.rs — Session listener
  • app/src/terminal/cli_agent_sessions/plugin_manager/mod.rs — Plugin manager
  • app/src/terminal/view/use_agent_footer/mod.rs — Rich input strategy

Design Decisions

  • One-shot mode: Uses hermes chat -q (non-interactive query mode) with --yolo for auto-approving tool calls, matching how Claude Code uses --dangerously-skip-permissions. This avoids PTY/prompt_toolkit compatibility issues.
  • Prompt via temp file: Prompt content is written to a temp file and read via $(cat ...) to avoid shell-quoting issues with complex content (skill instructions, code blocks, etc.).
  • Session handler: Uses the DefaultSessionListener (same as Claude, OpenCode, Gemini, Auggie) since Hermes does not yet emit structured OSC events.
  • No resume support yet: Like Gemini, Hermes does not support conversation resume. The fetch_resume_payload default returns Ok(None).
  • Local child harness: Supported via hermes chat -q <prompt> --yolo, added to parse_local_child_harness.

Testing

  • cargo check -p warp_cli — passes
  • cargo check -p warp — passes (full app crate)
  • Unit tests in hermes_tests.rs cover harness variant, CLI agent, install docs URL, command generation, and harness_kind dispatch

Related

@cla-bot
Copy link
Copy Markdown

cla-bot Bot commented Apr 28, 2026

Thank you for your pull request and welcome to our community. We could not parse the GitHub identity of the following contributors: Beer Hike Dev.
This is most likely caused by a git client misconfiguration; please make sure to:

  1. check if your git client is configured with an email to sign commits git config --list | grep email
  2. If not, set it up using git config --global user.email email@example.com
  3. Make sure that the git commit email is configured in your GitHub account settings, see https://github.com/settings/emails

@oz-for-oss
Copy link
Copy Markdown
Contributor

oz-for-oss Bot commented Apr 28, 2026

@jcrabapple

I'm starting a first review of this pull request.

You can follow along in the session on Warp.

I requested changes on this pull request and posted feedback.

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

Hermes Agent (by Nous Research) is an open-source, provider-agnostic AI
agent framework that runs in terminals and on messaging platforms. It
supports 20+ LLM providers, persistent cross-session memory, 200+
skills, and multi-platform gateway (Telegram, Discord, Slack, etc.).

This integration adds Hermes as a first-class third-party harness
alongside Claude Code and Gemini CLI:

- Add  to the execution harness enum
- Add  for CLI agent detection and session handling
- Implement  trait with  and
   (modelled after the Gemini harness)
- Add  icon with brand SVG
- Wire into harness selector UI, display metadata, telemetry,
  conversation loader, plugin manager, and local child launch
- Hermes uses `hermes chat -q` one-shot mode with `--yolo` for
  auto-approving tool calls

Install: https://hermes-agent.nousresearch.com/docs/
Repo: https://github.com/NousResearch/hermes-agent
@jcrabapple jcrabapple force-pushed the feat/add-hermes-agent-harness branch from fb44031 to 30d7023 Compare April 28, 2026 17:09
@cla-bot
Copy link
Copy Markdown

cla-bot Bot commented Apr 28, 2026

Thank you for your pull request and welcome to our community. We require contributors to sign our Contributor License Agreement, and we don't seem to have the users @jcrabapple on file. In order for us to review and merge your code, each contributor must visit https://cla.warp.dev to read and agree to our CLA.

Copy link
Copy Markdown
Contributor

@oz-for-oss oz-for-oss Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overview

This PR adds Hermes Agent as a third-party harness across CLI parsing, UI metadata, session detection, local child launch, telemetry, and a new ThirdPartyHarness runner.

Concerns

  • Server-loaded conversation metadata still cannot deserialize Hermes: app/src/server/server_api/ai.rs converts only Oz, Claude Code, and Gemini from warp_graphql::ai::AgentHarness, while crates/graphql/src/api/ai.rs also lacks a Hermes variant. As a result, Hermes conversations created by this runner will come back as AIAgentHarness::Unknown, so the new Hermes restore/display branches will not be reached.

Security

  • The Hermes runner expands the staged prompt into the hermes process argv, which can expose prompt contents through process listings; prefer stdin or a CLI-supported prompt-file option if available.

Verdict

Found: 0 critical, 1 important, 1 suggestions

Request changes

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

/// shell-quoting issues, and `--yolo` to auto-approve tool calls (matching
/// how Claude Code uses `--dangerously-skip-permissions`).
fn hermes_command(cli_name: &str, prompt_path: &str, system_prompt_path: Option<&str>) -> String {
let mut cmd = format!("{cli_name} chat -q \"$(cat '{prompt_path}')\" --yolo");
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 [SUGGESTION] [SECURITY] This expands the full prompt into the hermes process argv, so prompt contents can be exposed via process listings; prefer stdin or a Hermes prompt-file flag if available.

@captainsafia captainsafia added the external-contributor Indicates that a PR has been opened by someone outside the Warp team. label Apr 30, 2026 — with Warp Dev Github Integration
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

external-contributor Indicates that a PR has been opened by someone outside the Warp team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants