From b755c6966cd0b09e9d121b51d839b268dea8ec15 Mon Sep 17 00:00:00 2001 From: A <258483684+la14-1@users.noreply.github.com> Date: Sun, 1 Mar 2026 19:04:38 -0800 Subject: [PATCH] feat: add local/hermes to complete the 7x7 matrix (#2091) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #2079 — local/hermes was the only remaining missing entry in the cloud×agent matrix. All 49 entries are now implemented. Agent: ux-engineer Co-authored-by: B <6723574+louisgv@users.noreply.github.com> Co-authored-by: Claude Sonnet 4.5 --- manifest.json | 2 +- packages/cli/package.json | 2 +- sh/local/README.md | 2 ++ sh/local/hermes.sh | 29 +++++++++++++++++++++++++++++ 4 files changed, 33 insertions(+), 2 deletions(-) create mode 100755 sh/local/hermes.sh diff --git a/manifest.json b/manifest.json index ff06f0a2..3ecf82b5 100644 --- a/manifest.json +++ b/manifest.json @@ -429,7 +429,7 @@ "sprite/codex": "implemented", "sprite/opencode": "implemented", "sprite/kilocode": "implemented", - "local/hermes": "missing", + "local/hermes": "implemented", "hetzner/hermes": "implemented", "aws/hermes": "implemented", "daytona/hermes": "implemented", diff --git a/packages/cli/package.json b/packages/cli/package.json index 7df8893b..f54a178b 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@openrouter/spawn", - "version": "0.11.24", + "version": "0.11.25", "type": "module", "bin": { "spawn": "cli.js" diff --git a/sh/local/README.md b/sh/local/README.md index f9ab400d..8d2276b2 100644 --- a/sh/local/README.md +++ b/sh/local/README.md @@ -14,6 +14,7 @@ spawn openclaw local spawn zeroclaw local spawn codex local spawn kilocode local +spawn hermes local ``` Or run directly without the CLI: @@ -24,6 +25,7 @@ bash <(curl -fsSL https://openrouter.ai/labs/spawn/local/openclaw.sh) bash <(curl -fsSL https://openrouter.ai/labs/spawn/local/zeroclaw.sh) bash <(curl -fsSL https://openrouter.ai/labs/spawn/local/codex.sh) bash <(curl -fsSL https://openrouter.ai/labs/spawn/local/kilocode.sh) +bash <(curl -fsSL https://openrouter.ai/labs/spawn/local/hermes.sh) ``` ## Non-Interactive Mode diff --git a/sh/local/hermes.sh b/sh/local/hermes.sh new file mode 100755 index 00000000..6310cfa8 --- /dev/null +++ b/sh/local/hermes.sh @@ -0,0 +1,29 @@ +#!/bin/bash +set -eo pipefail + +# Thin shim: ensures bun is available, runs bundled local.js (local or from GitHub release) + +_ensure_bun() { + if command -v bun &>/dev/null; then return 0; fi + printf '\033[0;36mInstalling bun...\033[0m\n' >&2 + curl -fsSL --show-error https://bun.sh/install | bash >/dev/null || { printf '\033[0;31mFailed to install bun\033[0m\n' >&2; exit 1; } + export PATH="$HOME/.bun/bin:$PATH" + command -v bun &>/dev/null || { printf '\033[0;31mbun not found after install\033[0m\n' >&2; exit 1; } +} + +_ensure_bun + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" 2>/dev/null && pwd)" + +# Local checkout — run from source +if [[ -n "$SCRIPT_DIR" && -f "$SCRIPT_DIR/../../packages/cli/src/local/main.ts" ]]; then + exec bun run "$SCRIPT_DIR/../../packages/cli/src/local/main.ts" hermes "$@" +fi + +# Remote — download bundled local.js from GitHub release +LOCAL_JS=$(mktemp) +trap 'rm -f "$LOCAL_JS"' EXIT +curl -fsSL "https://github.com/OpenRouterTeam/spawn/releases/download/local-latest/local.js" -o "$LOCAL_JS" \ + || { printf '\033[0;31mFailed to download local.js\033[0m\n' >&2; exit 1; } + +exec bun run "$LOCAL_JS" hermes "$@"