@agentproto/adapter-hermes 0.1.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/HERMES.md ADDED
@@ -0,0 +1,95 @@
1
+ ---
2
+ name: hermes
3
+ id: hermes
4
+ description: Nous Research's Hermes Agent — autonomous CLI agent with skills, sandboxes, memory plugins, and a built-in ACP server. Spawned as `hermes acp` and driven over stdio JSON-RPC; per-turn streaming via ACP session/update notifications. Use when an operator wants the Hermes runtime as its execution surface (multimodal, multi-provider, agentskills.io-compatible).
5
+ version: 0.1.0
6
+ bin: hermes
7
+ bin_args: [acp]
8
+ install:
9
+ - method: curl
10
+ url: https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh
11
+ - method: brew
12
+ package: hermes-agent
13
+ experimental: true
14
+ version_check:
15
+ cmd: hermes --version
16
+ parse: "(\\d+\\.\\d+\\.\\d+)"
17
+ range: ">=0.13.0 <1.0.0"
18
+ timeout_ms: 5000
19
+ auth:
20
+ ref: ./SECRETS.md
21
+ state:
22
+ env: [OPENROUTER_API_KEY, ANTHROPIC_API_KEY, OPENAI_API_KEY]
23
+ sandbox: ./SANDBOX.md
24
+ protocol: acp
25
+ acp: ./hermes-acp.ACP.md
26
+ session:
27
+ mode: persistent
28
+ idle_timeout_ms: 1800000
29
+ context_carryover: true
30
+ models:
31
+ default: anthropic/claude-sonnet-4-6
32
+ allowed:
33
+ - anthropic/claude-sonnet-4-6
34
+ - anthropic/claude-opus-4-7
35
+ - openai/gpt-4
36
+ - meta-llama/llama-3.3-70b
37
+ env:
38
+ anthropic: ANTHROPIC_API_KEY
39
+ openrouter: OPENROUTER_API_KEY
40
+ openai: OPENAI_API_KEY
41
+ capabilities:
42
+ streaming: true
43
+ tool_calls: true
44
+ sub_agents: true
45
+ file_io: true
46
+ multimodal: true
47
+ resumable: false
48
+ bidirectional: true
49
+ tags: [hermes, nous, acp, agent-runtime]
50
+ ---
51
+
52
+ # Hermes Agent
53
+
54
+ Nous Research's open-source autonomous agent CLI. Implements the
55
+ Agent Client Protocol server-side, exposing its agent loop —
56
+ skills (agentskills.io-compatible), tools, sandboxed subagents,
57
+ plugin-based memory (Honcho, mem0, supermemory, …), and
58
+ multi-provider model routing — over stdio JSON-RPC.
59
+
60
+ ## When to use this manifest
61
+
62
+ Bind an AIP-9 operator to Hermes when the operator should run inside
63
+ Hermes' agent loop instead of in-process. Common cases: surfacing
64
+ the Guilde / Katchy operator inside an IDE Shell view (M5), running
65
+ a power-user-style agent CLI under operator governance, or letting
66
+ the operator delegate to Hermes-native skills the host doesn't ship.
67
+
68
+ ## Auth
69
+
70
+ Hermes consumes per-provider API keys via environment variables.
71
+ [`./SECRETS.md`](./SECRETS.md) inventories the slots; values are
72
+ resolved from the operator's secret store and passed via
73
+ `sandbox.env.set` (never argv). At minimum one of
74
+ `OPENROUTER_API_KEY`, `ANTHROPIC_API_KEY`, or `OPENAI_API_KEY` MUST
75
+ be present at boot.
76
+
77
+ ## Protocol
78
+
79
+ `protocol: acp` — Hermes ships an ACP server in
80
+ [`acp_adapter/`](https://github.com/NousResearch/hermes-agent/tree/main/acp_adapter).
81
+ The `[hermes-acp.ACP.md](./hermes-acp.ACP.md)` sidecar (AIP-44)
82
+ declares the wire profile this manifest binds to.
83
+
84
+ ## Sandbox
85
+
86
+ [`./SANDBOX.md`](./SANDBOX.md) declares a `local` provider for dev.
87
+ Production deployments swap to `mastra-modal` / `mastra-daytona` for
88
+ process isolation; the runner change is one field, no driver edits.
89
+
90
+ ## Versioning
91
+
92
+ Hermes pre-1.0 versions API surface frequently. The
93
+ `version_check.range` pin is conservative (`>=0.13.0 <1.0.0`). Bump
94
+ the manifest's `version` whenever Hermes ships a behaviour or
95
+ protocol change that affects this binding.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 agentproto contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/SECRETS.md ADDED
@@ -0,0 +1,59 @@
1
+ ---
2
+ name: hermes-secrets
3
+ id: hermes-secrets
4
+ description: Secret slots Hermes Agent reads at boot. At minimum one model-provider key MUST be present; additional integrations (search, voice, vision providers) optionally widen the operator's tool surface.
5
+ version: 0.1.0
6
+ slots:
7
+ - name: ANTHROPIC_API_KEY
8
+ description: Anthropic API key — enables claude-* models.
9
+ required: false
10
+ sensitivity: high
11
+ - name: OPENROUTER_API_KEY
12
+ description: OpenRouter API key — enables 200+ models behind one provider.
13
+ required: false
14
+ sensitivity: high
15
+ - name: OPENAI_API_KEY
16
+ description: OpenAI API key — enables gpt-* models.
17
+ required: false
18
+ sensitivity: high
19
+ - name: GEMINI_API_KEY
20
+ description: Google Gemini API key.
21
+ required: false
22
+ sensitivity: high
23
+ - name: GROQ_API_KEY
24
+ description: Groq inference API key.
25
+ required: false
26
+ sensitivity: high
27
+ constraints:
28
+ - kind: at-least-one-of
29
+ of:
30
+ - ANTHROPIC_API_KEY
31
+ - OPENROUTER_API_KEY
32
+ - OPENAI_API_KEY
33
+ - GEMINI_API_KEY
34
+ - GROQ_API_KEY
35
+ tags: [hermes, secrets, model-providers]
36
+ ---
37
+
38
+ # Hermes Agent — secrets inventory
39
+
40
+ Hermes routes turns to whichever model the operator selects (or its
41
+ own default) and reads provider keys from the environment. The
42
+ `at-least-one-of` constraint enforces that at least one provider is
43
+ configured before spawn; the runner refuses to start otherwise.
44
+
45
+ ## Threat surface
46
+
47
+ - Provider keys leak via misconfigured logging or a tool call that
48
+ shells out with `env | grep API_KEY`. Hosts MUST scrub provider
49
+ env from any user-visible diagnostic output.
50
+ - Hermes' own plugin layer (memory, image-gen) may read additional
51
+ env vars not enumerated here. The host SHOULD pass only the slots
52
+ declared in this manifest, no broader passthrough.
53
+
54
+ ## Operator binding
55
+
56
+ The operator's secret store resolves these slots and the runner
57
+ injects them via `sandbox.env.set`. Tools the operator does not have
58
+ permission to use (per AIP-7 governance) MUST NOT receive the
59
+ matching key.
@@ -0,0 +1,25 @@
1
+ import { AgentCliHandle, AgentCliRuntime } from '@agentproto/driver-agent-cli';
2
+ export { AgentCliHandle, AgentCliRuntime } from '@agentproto/driver-agent-cli';
3
+
4
+ /**
5
+ * @agentproto/adapter-hermes — AIP-45 adapter for Nous Research's Hermes Agent.
6
+ *
7
+ * Re-exports a `defineAgentCli` instance plus the runtime factory so
8
+ * a host can boot Hermes with one import:
9
+ *
10
+ * import { hermes, hermesRuntime } from "@agentproto/adapter-hermes"
11
+ * const session = await hermesRuntime().start({ env: { OPENROUTER_API_KEY } })
12
+ * for await (const evt of session.send({ role: "user", content: "..." })) {
13
+ * console.log(evt)
14
+ * }
15
+ * await session.close()
16
+ *
17
+ * The companion HERMES.md / SECRETS.md / hermes-acp.ACP.md files in
18
+ * this package describe the manifest, secret slots, and ACP wire
19
+ * profile.
20
+ */
21
+
22
+ declare const hermes: AgentCliHandle;
23
+ declare function hermesRuntime(): AgentCliRuntime;
24
+
25
+ export { hermes, hermesRuntime };
package/dist/index.mjs ADDED
@@ -0,0 +1,70 @@
1
+ import { defineAgentCli, createAgentCliRuntime } from '@agentproto/driver-agent-cli';
2
+
3
+ /**
4
+ * @agentproto/adapter-hermes v0.1.0-alpha
5
+ * AIP-45 adapter for Nous Research's Hermes Agent.
6
+ */
7
+
8
+ var hermes = defineAgentCli({
9
+ name: "hermes",
10
+ id: "hermes",
11
+ description: "Nous Research's Hermes Agent \u2014 autonomous CLI agent with skills, sandboxes, memory plugins, and a built-in ACP server. Spawned as `hermes acp` and driven over stdio JSON-RPC.",
12
+ version: "0.1.0",
13
+ bin: "hermes",
14
+ bin_args: ["acp"],
15
+ install: [
16
+ {
17
+ method: "curl",
18
+ url: "https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh"
19
+ }
20
+ ],
21
+ version_check: {
22
+ cmd: "hermes --version",
23
+ parse: "(\\d+\\.\\d+\\.\\d+)",
24
+ range: ">=0.13.0 <1.0.0",
25
+ timeout_ms: 5e3
26
+ },
27
+ auth: {
28
+ ref: "./SECRETS.md",
29
+ state: { env: ["OPENROUTER_API_KEY", "ANTHROPIC_API_KEY", "OPENAI_API_KEY"] }
30
+ },
31
+ sandbox: "./SANDBOX.md",
32
+ protocol: "acp",
33
+ acp: "./hermes-acp.ACP.md",
34
+ session: {
35
+ mode: "persistent",
36
+ idle_timeout_ms: 18e5,
37
+ context_carryover: true
38
+ },
39
+ models: {
40
+ default: "anthropic/claude-sonnet-4-6",
41
+ allowed: [
42
+ "anthropic/claude-sonnet-4-6",
43
+ "anthropic/claude-opus-4-7",
44
+ "openai/gpt-4",
45
+ "meta-llama/llama-3.3-70b"
46
+ ],
47
+ env: {
48
+ anthropic: "ANTHROPIC_API_KEY",
49
+ openrouter: "OPENROUTER_API_KEY",
50
+ openai: "OPENAI_API_KEY"
51
+ }
52
+ },
53
+ capabilities: {
54
+ streaming: true,
55
+ tool_calls: true,
56
+ sub_agents: true,
57
+ file_io: true,
58
+ multimodal: true,
59
+ resumable: false,
60
+ bidirectional: true
61
+ },
62
+ tags: ["hermes", "nous", "acp", "agent-runtime"]
63
+ });
64
+ function hermesRuntime() {
65
+ return createAgentCliRuntime(hermes);
66
+ }
67
+
68
+ export { hermes, hermesRuntime };
69
+ //# sourceMappingURL=index.mjs.map
70
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;AAyBO,IAAM,SAAyB,cAAA,CAAe;AAAA,EACnD,IAAA,EAAM,QAAA;AAAA,EACN,EAAA,EAAI,QAAA;AAAA,EACJ,WAAA,EACE,qLAAA;AAAA,EACF,OAAA,EAAS,OAAA;AAAA,EACT,GAAA,EAAK,QAAA;AAAA,EACL,QAAA,EAAU,CAAC,KAAK,CAAA;AAAA,EAChB,OAAA,EAAS;AAAA,IACP;AAAA,MACE,MAAA,EAAQ,MAAA;AAAA,MACR,GAAA,EAAK;AAAA;AACP,GACF;AAAA,EACA,aAAA,EAAe;AAAA,IACb,GAAA,EAAK,kBAAA;AAAA,IACL,KAAA,EAAO,sBAAA;AAAA,IACP,KAAA,EAAO,iBAAA;AAAA,IACP,UAAA,EAAY;AAAA,GACd;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,GAAA,EAAK,cAAA;AAAA,IACL,OAAO,EAAE,GAAA,EAAK,CAAC,oBAAA,EAAsB,mBAAA,EAAqB,gBAAgB,CAAA;AAAE,GAC9E;AAAA,EACA,OAAA,EAAS,cAAA;AAAA,EACT,QAAA,EAAU,KAAA;AAAA,EACV,GAAA,EAAK,qBAAA;AAAA,EACL,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,YAAA;AAAA,IACN,eAAA,EAAiB,IAAA;AAAA,IACjB,iBAAA,EAAmB;AAAA,GACrB;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,6BAAA;AAAA,IACT,OAAA,EAAS;AAAA,MACP,6BAAA;AAAA,MACA,2BAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,GAAA,EAAK;AAAA,MACH,SAAA,EAAW,mBAAA;AAAA,MACX,UAAA,EAAY,oBAAA;AAAA,MACZ,MAAA,EAAQ;AAAA;AACV,GACF;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,SAAA,EAAW,IAAA;AAAA,IACX,UAAA,EAAY,IAAA;AAAA,IACZ,UAAA,EAAY,IAAA;AAAA,IACZ,OAAA,EAAS,IAAA;AAAA,IACT,UAAA,EAAY,IAAA;AAAA,IACZ,SAAA,EAAW,KAAA;AAAA,IACX,aAAA,EAAe;AAAA,GACjB;AAAA,EACA,IAAA,EAAM,CAAC,QAAA,EAAU,MAAA,EAAQ,OAAO,eAAe;AACjD,CAAC;AAEM,SAAS,aAAA,GAAiC;AAC/C,EAAA,OAAO,sBAAsB,MAAM,CAAA;AACrC","file":"index.mjs","sourcesContent":["/**\n * @agentproto/adapter-hermes — AIP-45 adapter for Nous Research's Hermes Agent.\n *\n * Re-exports a `defineAgentCli` instance plus the runtime factory so\n * a host can boot Hermes with one import:\n *\n * import { hermes, hermesRuntime } from \"@agentproto/adapter-hermes\"\n * const session = await hermesRuntime().start({ env: { OPENROUTER_API_KEY } })\n * for await (const evt of session.send({ role: \"user\", content: \"...\" })) {\n * console.log(evt)\n * }\n * await session.close()\n *\n * The companion HERMES.md / SECRETS.md / hermes-acp.ACP.md files in\n * this package describe the manifest, secret slots, and ACP wire\n * profile.\n */\n\nimport {\n createAgentCliRuntime,\n defineAgentCli,\n type AgentCliHandle,\n type AgentCliRuntime,\n} from \"@agentproto/driver-agent-cli\"\n\nexport const hermes: AgentCliHandle = defineAgentCli({\n name: \"hermes\",\n id: \"hermes\",\n description:\n \"Nous Research's Hermes Agent — autonomous CLI agent with skills, sandboxes, memory plugins, and a built-in ACP server. Spawned as `hermes acp` and driven over stdio JSON-RPC.\",\n version: \"0.1.0\",\n bin: \"hermes\",\n bin_args: [\"acp\"],\n install: [\n {\n method: \"curl\",\n url: \"https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh\",\n },\n ],\n version_check: {\n cmd: \"hermes --version\",\n parse: \"(\\\\d+\\\\.\\\\d+\\\\.\\\\d+)\",\n range: \">=0.13.0 <1.0.0\",\n timeout_ms: 5000,\n },\n auth: {\n ref: \"./SECRETS.md\",\n state: { env: [\"OPENROUTER_API_KEY\", \"ANTHROPIC_API_KEY\", \"OPENAI_API_KEY\"] },\n },\n sandbox: \"./SANDBOX.md\",\n protocol: \"acp\",\n acp: \"./hermes-acp.ACP.md\",\n session: {\n mode: \"persistent\",\n idle_timeout_ms: 1_800_000,\n context_carryover: true,\n },\n models: {\n default: \"anthropic/claude-sonnet-4-6\",\n allowed: [\n \"anthropic/claude-sonnet-4-6\",\n \"anthropic/claude-opus-4-7\",\n \"openai/gpt-4\",\n \"meta-llama/llama-3.3-70b\",\n ],\n env: {\n anthropic: \"ANTHROPIC_API_KEY\",\n openrouter: \"OPENROUTER_API_KEY\",\n openai: \"OPENAI_API_KEY\",\n },\n },\n capabilities: {\n streaming: true,\n tool_calls: true,\n sub_agents: true,\n file_io: true,\n multimodal: true,\n resumable: false,\n bidirectional: true,\n },\n tags: [\"hermes\", \"nous\", \"acp\", \"agent-runtime\"],\n})\n\nexport function hermesRuntime(): AgentCliRuntime {\n return createAgentCliRuntime(hermes)\n}\n\nexport type { AgentCliHandle, AgentCliRuntime }\n"]}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@agentproto/adapter-hermes",
3
+ "version": "0.1.0-alpha.0",
4
+ "description": "@agentproto/adapter-hermes — AIP-45 AGENT-CLI adapter for Nous Research's Hermes Agent. Spawns `hermes acp` and drives it as an agentproto agent CLI via the ACP protocol arm of @agentproto/driver-agent-cli.",
5
+ "keywords": [
6
+ "agentproto",
7
+ "aip-45",
8
+ "hermes",
9
+ "nous",
10
+ "acp",
11
+ "agent-cli",
12
+ "adapter"
13
+ ],
14
+ "homepage": "https://agentproto.sh/docs/aip-45",
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "https://github.com/agentproto/ts",
18
+ "directory": "adapters/hermes"
19
+ },
20
+ "license": "MIT",
21
+ "type": "module",
22
+ "main": "dist/index.mjs",
23
+ "module": "dist/index.mjs",
24
+ "types": "dist/index.d.ts",
25
+ "exports": {
26
+ ".": {
27
+ "types": "./dist/index.d.ts",
28
+ "import": "./dist/index.mjs",
29
+ "default": "./dist/index.mjs"
30
+ },
31
+ "./HERMES.md": "./HERMES.md",
32
+ "./SECRETS.md": "./SECRETS.md",
33
+ "./package.json": "./package.json"
34
+ },
35
+ "files": [
36
+ "dist",
37
+ "HERMES.md",
38
+ "SECRETS.md",
39
+ "README.md",
40
+ "LICENSE"
41
+ ],
42
+ "publishConfig": {
43
+ "access": "public"
44
+ },
45
+ "dependencies": {
46
+ "@agentproto/driver-agent-cli": "0.1.1"
47
+ },
48
+ "devDependencies": {
49
+ "@types/node": "^25.6.2",
50
+ "tsup": "^8.5.1",
51
+ "typescript": "^5.9.3",
52
+ "vitest": "^3.2.4",
53
+ "@agentproto/tooling": "0.1.0-alpha.0"
54
+ },
55
+ "scripts": {
56
+ "dev": "tsup --watch",
57
+ "build": "tsup",
58
+ "clean": "rm -rf dist",
59
+ "check-types": "tsc --noEmit",
60
+ "test": "vitest run --passWithNoTests",
61
+ "test:watch": "vitest"
62
+ }
63
+ }