From c837139e6cf3dff7bbbd3c847a56da119490612f Mon Sep 17 00:00:00 2001 From: Lx Date: Sat, 4 Jul 2026 13:20:17 +0800 Subject: [PATCH] feat: add Hermes and OpenClaw harness install targets (#2433) * feat: add Hermes and OpenClaw harness install targets - Add scripts/lib/install-targets/hermes-home.js and openclaw-home.js - Register new adapters in registry.js and helpers.js - Add hermes/openclaw to SUPPORTED_INSTALL_TARGETS, schema enum, and install help text - Add .hermes/ and .openclaw/ platform source directories with READMEs - Update install-modules.json so rules/agents/commands/platform-configs cover the new targets Verification: - npx ecc doctor reports all 13 targets OK (including hermes-home and openclaw-home) - install-targets regression guard passes for new targets - Catalog check passes * fix(install): register hermes/openclaw in install-modules schema enum + npm files allowlist --------- Co-authored-by: Lxcardoza993 <265670745+Lxcardoza993@users.noreply.github.com> Co-authored-by: Affaan Mustafa --- .hermes/README.md | 21 +++++++++++++++++ .openclaw/README.md | 21 +++++++++++++++++ manifests/install-modules.json | 24 +++++++++++++++----- package.json | 2 ++ schemas/ecc-install-config.schema.json | 4 +++- schemas/install-modules.schema.json | 4 +++- scripts/install-apply.js | 2 ++ scripts/lib/install-manifests.js | 16 ++++++++++++- scripts/lib/install-targets/helpers.js | 2 ++ scripts/lib/install-targets/hermes-home.js | 10 ++++++++ scripts/lib/install-targets/openclaw-home.js | 10 ++++++++ scripts/lib/install-targets/registry.js | 4 ++++ 12 files changed, 111 insertions(+), 9 deletions(-) create mode 100644 .hermes/README.md create mode 100644 .openclaw/README.md create mode 100644 scripts/lib/install-targets/hermes-home.js create mode 100644 scripts/lib/install-targets/openclaw-home.js diff --git a/.hermes/README.md b/.hermes/README.md new file mode 100644 index 000000000..f1cdf6157 --- /dev/null +++ b/.hermes/README.md @@ -0,0 +1,21 @@ +# ECC for Hermes + +This directory contains the ECC (Everything Claude Code) configuration for the Hermes harness. + +## What is installed + +- `rules/ecc/` — shared coding rules and guidelines +- `skills/ecc/` — reusable skills +- `commands/` — slash commands +- `AGENTS.md` — agent instructions + +## Manual install + +```bash +bash ./install.sh --target hermes --profile minimal +``` + +## Notes + +- Hermes config files (`config.yaml`, `.env`, etc.) are **not** touched by ECC install. +- Use `npx ecc doctor --target hermes` to check install health. diff --git a/.openclaw/README.md b/.openclaw/README.md new file mode 100644 index 000000000..7f0b19c29 --- /dev/null +++ b/.openclaw/README.md @@ -0,0 +1,21 @@ +# ECC for OpenClaw + +This directory contains the ECC (Everything Claude Code) configuration for the OpenClaw harness. + +## What is installed + +- `rules/ecc/` — shared coding rules and guidelines +- `skills/ecc/` — reusable skills +- `commands/` — slash commands +- `AGENTS.md` — agent instructions + +## Manual install + +```bash +bash ./install.sh --target openclaw --profile minimal +``` + +## Notes + +- OpenClaw config files (`openclaw.json`, `config.toml`, `.env`, etc.) are **not** touched by ECC install. +- Use `npx ecc doctor --target openclaw` to check install health. diff --git a/manifests/install-modules.json b/manifests/install-modules.json index a7415061c..64d0308a7 100644 --- a/manifests/install-modules.json +++ b/manifests/install-modules.json @@ -16,7 +16,9 @@ "codebuddy", "joycode", "qwen", - "zed" + "zed", + "hermes", + "openclaw" ], "dependencies": [], "defaultInstall": true, @@ -41,7 +43,9 @@ "codebuddy", "joycode", "qwen", - "zed" + "zed", + "hermes", + "openclaw" ], "dependencies": [], "defaultInstall": true, @@ -66,7 +70,9 @@ "codebuddy", "joycode", "qwen", - "zed" + "zed", + "hermes", + "openclaw" ], "dependencies": [], "defaultInstall": true, @@ -108,7 +114,9 @@ ".zed", "mcp-configs", "scripts/auto-update.js", - "scripts/setup-package-manager.js" + "scripts/setup-package-manager.js", + ".hermes", + ".openclaw" ], "targets": [ "claude", @@ -121,7 +129,9 @@ "codebuddy", "joycode", "qwen", - "zed" + "zed", + "hermes", + "openclaw" ], "dependencies": [], "defaultInstall": true, @@ -276,7 +286,9 @@ "codebuddy", "joycode", "qwen", - "zed" + "zed", + "hermes", + "openclaw" ], "dependencies": [ "platform-configs" diff --git a/package.json b/package.json index a0732c7b5..aae1bcd9d 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,9 @@ ".codex-plugin/", ".cursor/", ".gemini/", + ".hermes/", ".opencode/", + ".openclaw/", ".qwen/", ".zed/", ".mcp.json", diff --git a/schemas/ecc-install-config.schema.json b/schemas/ecc-install-config.schema.json index dc5923d02..f98372321 100644 --- a/schemas/ecc-install-config.schema.json +++ b/schemas/ecc-install-config.schema.json @@ -28,7 +28,9 @@ "codebuddy", "joycode", "qwen", - "zed" + "zed", + "hermes", + "openclaw" ] }, "profile": { diff --git a/schemas/install-modules.schema.json b/schemas/install-modules.schema.json index b8d9a0951..143390cbb 100644 --- a/schemas/install-modules.schema.json +++ b/schemas/install-modules.schema.json @@ -58,7 +58,9 @@ "codebuddy", "joycode", "qwen", - "zed" + "zed", + "hermes", + "openclaw" ] } }, diff --git a/scripts/install-apply.js b/scripts/install-apply.js index 2e3009dd6..cfd52257c 100755 --- a/scripts/install-apply.js +++ b/scripts/install-apply.js @@ -42,6 +42,8 @@ Targets: joycode - Install commands, agents, skills, and flattened rules into ./.joycode/ qwen - Install commands, agents, skills, rules, and Qwen config into ~/.qwen/ zed - Install project settings, commands, agents, skills, and flattened rules into ./.zed/ + hermes - Install shared rules/skills/commands into ~/.hermes/ + openclaw - Install shared rules/skills/commands into ~/.openclaw/ Options: --profile Resolve and install a manifest profile diff --git a/scripts/lib/install-manifests.js b/scripts/lib/install-manifests.js index 4fb04b7a9..2736fc3c8 100644 --- a/scripts/lib/install-manifests.js +++ b/scripts/lib/install-manifests.js @@ -4,7 +4,7 @@ const path = require('path'); const { getInstallTargetAdapter, planInstallTargetScaffold } = require('./install-targets/registry'); const DEFAULT_REPO_ROOT = path.join(__dirname, '../..'); -const SUPPORTED_INSTALL_TARGETS = ['claude', 'claude-project', 'cursor', 'antigravity', 'codex', 'gemini', 'opencode', 'codebuddy', 'joycode', 'qwen', 'zed']; +const SUPPORTED_INSTALL_TARGETS = ['claude', 'claude-project', 'cursor', 'antigravity', 'codex', 'gemini', 'opencode', 'codebuddy', 'joycode', 'qwen', 'zed', 'hermes', 'openclaw']; const COMPONENT_FAMILY_PREFIXES = { baseline: 'baseline:', language: 'lang:', @@ -73,6 +73,20 @@ const LEGACY_COMPAT_BASE_MODULE_IDS_BY_TARGET = Object.freeze({ 'platform-configs', 'workflow-quality', ], + hermes: [ + 'rules-core', + 'agents-core', + 'commands-core', + 'platform-configs', + 'workflow-quality', + ], + openclaw: [ + 'rules-core', + 'agents-core', + 'commands-core', + 'platform-configs', + 'workflow-quality', + ], }); const LEGACY_LANGUAGE_ALIAS_TO_CANONICAL = Object.freeze({ c: 'c', diff --git a/scripts/lib/install-targets/helpers.js b/scripts/lib/install-targets/helpers.js index fa1b9fec4..6ffe805a5 100644 --- a/scripts/lib/install-targets/helpers.js +++ b/scripts/lib/install-targets/helpers.js @@ -7,8 +7,10 @@ const PLATFORM_SOURCE_PATH_OWNERS = Object.freeze({ '.codex': 'codex', '.cursor': 'cursor', '.gemini': 'gemini', + '.hermes': 'hermes', '.joycode': 'joycode', '.opencode': 'opencode', + '.openclaw': 'openclaw', '.codebuddy': 'codebuddy', '.qwen': 'qwen', '.zed': 'zed', diff --git a/scripts/lib/install-targets/hermes-home.js b/scripts/lib/install-targets/hermes-home.js new file mode 100644 index 000000000..f87922d4b --- /dev/null +++ b/scripts/lib/install-targets/hermes-home.js @@ -0,0 +1,10 @@ +const { createInstallTargetAdapter } = require('./helpers'); + +module.exports = createInstallTargetAdapter({ + id: 'hermes-home', + target: 'hermes', + kind: 'home', + rootSegments: ['.hermes'], + installStatePathSegments: ['ecc-install-state.json'], + nativeRootRelativePath: '.hermes', +}); diff --git a/scripts/lib/install-targets/openclaw-home.js b/scripts/lib/install-targets/openclaw-home.js new file mode 100644 index 000000000..89dab4696 --- /dev/null +++ b/scripts/lib/install-targets/openclaw-home.js @@ -0,0 +1,10 @@ +const { createInstallTargetAdapter } = require('./helpers'); + +module.exports = createInstallTargetAdapter({ + id: 'openclaw-home', + target: 'openclaw', + kind: 'home', + rootSegments: ['.openclaw'], + installStatePathSegments: ['ecc-install-state.json'], + nativeRootRelativePath: '.openclaw', +}); diff --git a/scripts/lib/install-targets/registry.js b/scripts/lib/install-targets/registry.js index e4e3e7c44..a0ee98f43 100644 --- a/scripts/lib/install-targets/registry.js +++ b/scripts/lib/install-targets/registry.js @@ -5,7 +5,9 @@ const codebuddyProject = require('./codebuddy-project'); const codexHome = require('./codex-home'); const cursorProject = require('./cursor-project'); const geminiProject = require('./gemini-project'); +const hermesHome = require('./hermes-home'); const joycodeProject = require('./joycode-project'); +const openclawHome = require('./openclaw-home'); const opencodeHome = require('./opencode-home'); const qwenHome = require('./qwen-home'); const zedProject = require('./zed-project'); @@ -17,7 +19,9 @@ const ADAPTERS = Object.freeze([ antigravityProject, codexHome, geminiProject, + hermesHome, opencodeHome, + openclawHome, codebuddyProject, joycodeProject, qwenHome,