feat: add Hermes Agent as a third-party harness#9255
feat: add Hermes Agent as a third-party harness#9255jcrabapple wants to merge 1 commit intowarpdotdev:masterfrom
Conversation
|
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.
|
|
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 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
fb44031 to
30d7023
Compare
|
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. |
There was a problem hiding this comment.
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.rsconverts only Oz, Claude Code, and Gemini fromwarp_graphql::ai::AgentHarness, whilecrates/graphql/src/api/ai.rsalso lacks a Hermes variant. As a result, Hermes conversations created by this runner will come back asAIAgentHarness::Unknown, so the new Hermes restore/display branches will not be reached.
Security
- The Hermes runner expands the staged prompt into the
hermesprocess 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"); |
There was a problem hiding this comment.
💡 [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.
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.rs—ThirdPartyHarnessimpl withHermesHarnessandHermesHarnessRunnerapp/src/ai/agent_sdk/driver/harness/hermes_tests.rs— Unit testsapp/assets/bundled/svg/hermes.svg— Brand iconModified files (18):
crates/warp_cli/src/agent.rs— AddHarness::Hermesvariantcrates/warp_core/src/ui/icons.rs— AddHermesLogoicon variantapp/src/terminal/cli_agent.rs— AddCLIAgent::Hermeswith detection, display name, brand color (#00B4D8 teal)app/src/ai/agent_sdk/driver/harness/mod.rs— Wire intoharness_kind()factoryapp/src/ai/harness_display.rs— Display metadata (name, icon, color)app/src/terminal/view/ambient_agent/harness_selector.rs— Add to harness dropdownapp/src/terminal/view/ambient_agent/view_impl.rs— Harness detectionapp/src/ai/agent_sdk/mod.rs— Orchestration labelapp/src/ai/ambient_agents/task.rs— Harness name parsingapp/src/ai/agent_management/view.rs— Agent management listapp/src/ai/agent/conversation.rs—AIAgentHarness::Hermesvariantapp/src/ai/blocklist/history_model/conversation_loader.rs— Conversation loadingapp/src/pane_group/mod.rs— Pane group harness mappingapp/src/pane_group/pane/local_harness_launch.rs— Local child launch supportapp/src/server/telemetry/events.rs—CLIAgentType::Hermestelemetryapp/src/terminal/cli_agent_sessions/listener/mod.rs— Session listenerapp/src/terminal/cli_agent_sessions/plugin_manager/mod.rs— Plugin managerapp/src/terminal/view/use_agent_footer/mod.rs— Rich input strategyDesign Decisions
hermes chat -q(non-interactive query mode) with--yolofor auto-approving tool calls, matching how Claude Code uses--dangerously-skip-permissions. This avoids PTY/prompt_toolkit compatibility issues.$(cat ...)to avoid shell-quoting issues with complex content (skill instructions, code blocks, etc.).DefaultSessionListener(same as Claude, OpenCode, Gemini, Auggie) since Hermes does not yet emit structured OSC events.fetch_resume_payloaddefault returnsOk(None).hermes chat -q <prompt> --yolo, added toparse_local_child_harness.Testing
cargo check -p warp_cli— passescargo check -p warp— passes (full app crate)hermes_tests.rscover harness variant, CLI agent, install docs URL, command generation, and harness_kind dispatchRelated