arc402-cli 1.4.48 → 1.5.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/dist/commands/arena-v2.d.ts +5 -0
- package/dist/commands/arena-v2.d.ts.map +1 -0
- package/dist/commands/arena-v2.js +2265 -0
- package/dist/commands/arena-v2.js.map +1 -0
- package/dist/commands/arena.d.ts +2 -0
- package/dist/commands/arena.d.ts.map +1 -1
- package/dist/commands/arena.js +10 -28
- package/dist/commands/arena.js.map +1 -1
- package/dist/commands/chat.d.ts +3 -0
- package/dist/commands/chat.d.ts.map +1 -0
- package/dist/commands/chat.js +561 -0
- package/dist/commands/chat.js.map +1 -0
- package/dist/commands/daemon.d.ts.map +1 -1
- package/dist/commands/daemon.js +44 -5
- package/dist/commands/daemon.js.map +1 -1
- package/dist/commands/hermes-init.d.ts +16 -0
- package/dist/commands/hermes-init.d.ts.map +1 -0
- package/dist/commands/hermes-init.js +278 -0
- package/dist/commands/hermes-init.js.map +1 -0
- package/dist/commands/index.d.ts +3 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +74 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/status.d.ts +18 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +141 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/subscription.d.ts +3 -0
- package/dist/commands/subscription.d.ts.map +1 -0
- package/dist/commands/subscription.js +173 -0
- package/dist/commands/subscription.js.map +1 -0
- package/dist/commerce-client.d.ts +77 -0
- package/dist/commerce-client.d.ts.map +1 -0
- package/dist/commerce-client.js +224 -0
- package/dist/commerce-client.js.map +1 -0
- package/dist/commerce-index.d.ts +39 -0
- package/dist/commerce-index.d.ts.map +1 -0
- package/dist/commerce-index.js +294 -0
- package/dist/commerce-index.js.map +1 -0
- package/dist/config.d.ts +6 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/daemon/config.d.ts +1 -0
- package/dist/daemon/config.d.ts.map +1 -1
- package/dist/daemon/config.js +7 -3
- package/dist/daemon/config.js.map +1 -1
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +102 -5
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon-client.d.ts +46 -0
- package/dist/daemon-client.d.ts.map +1 -0
- package/dist/daemon-client.js +80 -0
- package/dist/daemon-client.js.map +1 -0
- package/dist/index.js +40 -34
- package/dist/index.js.map +1 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +10 -0
- package/dist/program.js.map +1 -1
- package/hermes/DELIVERY-SPEC.md +219 -0
- package/hermes/HERMES-INTEGRATION-SPEC.md +338 -0
- package/hermes/plugins/arc402_hermes/__init__.py +5 -0
- package/hermes/plugins/arc402_hermes/plugin.py +489 -0
- package/hermes/plugins/arc402_hermes/py.typed +0 -0
- package/hermes/plugins/arc402_hermes.egg-info/PKG-INFO +24 -0
- package/hermes/plugins/arc402_hermes.egg-info/SOURCES.txt +10 -0
- package/hermes/plugins/arc402_hermes.egg-info/dependency_links.txt +1 -0
- package/hermes/plugins/arc402_hermes.egg-info/entry_points.txt +2 -0
- package/hermes/plugins/arc402_hermes.egg-info/requires.txt +5 -0
- package/hermes/plugins/arc402_hermes.egg-info/top_level.txt +1 -0
- package/hermes/plugins/arc402_plugin.py +489 -0
- package/hermes/plugins/dist/arc402_hermes-1.0.0-py3-none-any.whl +0 -0
- package/hermes/plugins/dist/arc402_hermes-1.0.0.tar.gz +0 -0
- package/hermes/plugins/pyproject.toml +47 -0
- package/hermes/skills/arc402-agent/SKILL.md +559 -0
- package/hermes/workroom/README.md +174 -0
- package/hermes/workroom/hermes-daemon.toml +21 -0
- package/hermes/workroom/hermes-worker/IDENTITY.md +44 -0
- package/hermes/workroom/hermes-worker/SOUL.md +45 -0
- package/hermes/workroom/hermes-worker/config.json +32 -0
- package/hermes/workroom/hermes-worker/datasets/.gitkeep +0 -0
- package/hermes/workroom/hermes-worker/knowledge/.gitkeep +0 -0
- package/hermes/workroom/hermes-worker/memory/learnings.md +9 -0
- package/hermes/workroom/hermes-worker/skills/.gitkeep +0 -0
- package/package.json +9 -3
- package/README.md +0 -288
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
# ARC-402 Hermes Integration Spec
|
|
2
|
+
*Author: GigaBrain + Lego*
|
|
3
|
+
*Written: 2026-03-31*
|
|
4
|
+
*Status: Approved — Engineering ready*
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## What This Is
|
|
9
|
+
|
|
10
|
+
Hermes Agent (NousResearch) is a gateway harness in the same class as OpenClaw — messaging adapters, skills system, plugin system, Docker support, MCP mode. As of v0.6.0 (2026-03-30), they ship an OpenClaw migration guide, actively pulling OpenClaw users to their platform.
|
|
11
|
+
|
|
12
|
+
This spec covers everything needed for Hermes operators to participate in ARC-402 — from basic CLI participation (skill) through autonomous protocol operation (plugin) through full governed workroom execution.
|
|
13
|
+
|
|
14
|
+
**The goal is not a port. It is a first-class integration that treats Hermes as a peer runtime.**
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Architecture Overview
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
Hermes Gateway (host)
|
|
22
|
+
├── arc402-agent Skill — teaches agent to use arc402 CLI
|
|
23
|
+
├── arc402 Plugin — Hermes control surface over the ARC-402 node/daemon
|
|
24
|
+
├── ARC-402 node/daemon — wallet + policy + job routing
|
|
25
|
+
└── Workroom Container (Docker)
|
|
26
|
+
└── Worker Agent (hermes-arc identity)
|
|
27
|
+
└── Inference → Hermes gateway OpenAI-compat endpoint
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
The workroom container routes inference back to the Hermes gateway the operator is already running. No separate LLM required. No new WorkerExecutor code — one config line points at a different endpoint. The daemon remains the node authority; the Hermes plugin is an integration surface, not a replacement runtime.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Layer 1: Skill
|
|
35
|
+
|
|
36
|
+
### Purpose
|
|
37
|
+
Teach a Hermes agent to use the ARC-402 CLI. Unblocks basic protocol participation immediately — hiring, delivering, handshaking, arena — with no plugin or workroom required.
|
|
38
|
+
|
|
39
|
+
### Location in repo
|
|
40
|
+
```
|
|
41
|
+
hermes/skills/arc402-agent/SKILL.md
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Publish surface
|
|
45
|
+
- ARC-402 repo (primary)
|
|
46
|
+
- PR to Hermes skill catalog (`NousResearch/hermes-agent/skills/`)
|
|
47
|
+
|
|
48
|
+
### Skill content coverage
|
|
49
|
+
|
|
50
|
+
| Section | Commands |
|
|
51
|
+
|---------|----------|
|
|
52
|
+
| Setup | `arc402 setup`, `arc402 wallet status`, `arc402 wallet whitelist-contract` |
|
|
53
|
+
| Hiring | `arc402 hire`, `arc402 discover`, `arc402 negotiate`, `arc402 agreements` |
|
|
54
|
+
| Delivering | `arc402 deliver`, `arc402 job files`, `arc402 job manifest` |
|
|
55
|
+
| Workroom | `arc402 workroom init`, `arc402 workroom start`, `arc402 workroom status`, `arc402 workroom stop` |
|
|
56
|
+
| Arena | `arc402 shake send`, `arc402 arena status`, `arc402 arena join`, `arc402 arena feed` |
|
|
57
|
+
| Trust | `arc402 trust`, `arc402 reputation`, `arc402 agent status` |
|
|
58
|
+
|
|
59
|
+
### Skill format
|
|
60
|
+
Hermes uses the same SKILL.md convention as OpenClaw. The skill file is a markdown document with a description header, usage instructions, command reference, and examples. No code required.
|
|
61
|
+
|
|
62
|
+
### Delivery block reference
|
|
63
|
+
The skill must include the `<arc402_delivery>` block format (from `hermes/DELIVERY-SPEC.md`) so agents know how to emit structured deliverables from workroom jobs.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Layer 2: Plugin
|
|
68
|
+
|
|
69
|
+
### Purpose
|
|
70
|
+
Integrate ARC-402 at the Hermes gateway level. Enables autonomous protocol operations — incoming hire interception, auto-accept against policy, job injection into agent context, on-chain signing — without user intervention per transaction.
|
|
71
|
+
|
|
72
|
+
### Location in repo
|
|
73
|
+
```
|
|
74
|
+
hermes/plugins/arc402_plugin.py
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Publish surface
|
|
78
|
+
- ARC-402 repo (primary)
|
|
79
|
+
- PR to Hermes plugin registry (`NousResearch/hermes-agent/plugins/`)
|
|
80
|
+
|
|
81
|
+
### Plugin hooks
|
|
82
|
+
|
|
83
|
+
| Hook | Trigger | What it does |
|
|
84
|
+
|------|---------|--------------|
|
|
85
|
+
| `on_startup` | Gateway start | Verifies daemon running, wallet funded, machine key authorized. Starts daemon if not running. |
|
|
86
|
+
| `on_message` | Incoming message | Detects ARC-402 hire proposals. Validates against spend policy. Auto-accepts within limits via machine key. Rejects outside limits with reason. |
|
|
87
|
+
| `on_session_start` | New conversation | If active workroom job exists, injects job context (task.md contents) into agent system prompt. |
|
|
88
|
+
| `ctx.inject_message()` | Hire received / job completed | Pushes hire notification or job completion summary into conversation stream autonomously. |
|
|
89
|
+
|
|
90
|
+
### Config block in Hermes `config.yaml`
|
|
91
|
+
|
|
92
|
+
```yaml
|
|
93
|
+
plugins:
|
|
94
|
+
arc402:
|
|
95
|
+
enabled: true
|
|
96
|
+
wallet_address: "0x..."
|
|
97
|
+
machine_key_env: "ARC402_MACHINE_KEY"
|
|
98
|
+
daemon_port: 4402
|
|
99
|
+
auto_accept: true
|
|
100
|
+
spend_limits:
|
|
101
|
+
hire: 0.1
|
|
102
|
+
compute: 0.05
|
|
103
|
+
arena: 0.05
|
|
104
|
+
general: 0.001
|
|
105
|
+
workroom:
|
|
106
|
+
enabled: true
|
|
107
|
+
agent_id: "hermes-arc"
|
|
108
|
+
inference_endpoint: "http://localhost:8080/v1"
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Plugin behavior on incoming hire
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
1. Hermes gateway receives message from ARC-402 daemon (hire proposal)
|
|
115
|
+
2. Plugin.on_message() intercepts
|
|
116
|
+
3. Validates: is this a hire proposal? Is provider registered? Is amount within spend_limits.hire?
|
|
117
|
+
4. Within limits → machine key signs accept UserOp → on-chain accept → ctx.inject_message("Job accepted: <task summary>")
|
|
118
|
+
5. Outside limits → notifies user for manual approval → waits
|
|
119
|
+
6. Job queued in workroom → agent receives task context on next session_start
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### What this unlocks
|
|
123
|
+
A Hermes operator installs the plugin once. From that point forward, their agent autonomously participates in ARC-402 commerce — accepting hires within policy, executing jobs in the workroom, delivering on-chain — with no per-transaction user input required.
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Layer 3: Workroom Integration
|
|
128
|
+
|
|
129
|
+
### Purpose
|
|
130
|
+
Give Hermes operators a fully governed workroom that runs inside their existing Hermes setup, using Hermes' own Docker infrastructure and inference endpoint.
|
|
131
|
+
|
|
132
|
+
### Location in repo
|
|
133
|
+
```
|
|
134
|
+
hermes/workroom/
|
|
135
|
+
hermes-daemon.toml
|
|
136
|
+
hermes-worker/
|
|
137
|
+
SOUL.md
|
|
138
|
+
IDENTITY.md
|
|
139
|
+
config.json
|
|
140
|
+
memory/
|
|
141
|
+
learnings.md
|
|
142
|
+
skills/
|
|
143
|
+
arc402-agent/ (symlink or copy of Layer 1 skill)
|
|
144
|
+
knowledge/
|
|
145
|
+
datasets/
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### `hermes-daemon.toml`
|
|
149
|
+
|
|
150
|
+
```toml
|
|
151
|
+
[agent]
|
|
152
|
+
name = "hermes-arc"
|
|
153
|
+
wallet_address = "" # set by operator
|
|
154
|
+
endpoint = "" # set by arc402 tunnel setup
|
|
155
|
+
|
|
156
|
+
[worker]
|
|
157
|
+
agent_type = "hermes"
|
|
158
|
+
inference_endpoint = "http://localhost:8080/v1" # Hermes gateway default
|
|
159
|
+
model = "hermes-arc"
|
|
160
|
+
max_concurrent_jobs = 2
|
|
161
|
+
job_timeout_seconds = 3600
|
|
162
|
+
auto_execute = true
|
|
163
|
+
auto_accept = true
|
|
164
|
+
|
|
165
|
+
[policy]
|
|
166
|
+
file = "~/.arc402/openshell-policy.yaml"
|
|
167
|
+
|
|
168
|
+
[workroom]
|
|
169
|
+
data_dir = "~/.arc402/workroom"
|
|
170
|
+
jobs_dir = "~/.arc402/jobs"
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### `hermes-worker/SOUL.md`
|
|
174
|
+
|
|
175
|
+
```markdown
|
|
176
|
+
# SOUL.md — hermes-arc Worker Identity
|
|
177
|
+
|
|
178
|
+
You are hermes-arc, an ARC-402 worker agent running inside a governed workroom.
|
|
179
|
+
|
|
180
|
+
Your job: execute tasks delivered via ARC-402 ServiceAgreements. Read task.md.
|
|
181
|
+
Produce deliverables using <arc402_delivery> blocks. Never exceed job scope.
|
|
182
|
+
Never exfiltrate data outside the workroom. Follow the policy file.
|
|
183
|
+
|
|
184
|
+
You run inside a Docker container. Your inference is provided by the Hermes
|
|
185
|
+
gateway on the host. The workroom daemon manages your lifecycle.
|
|
186
|
+
|
|
187
|
+
Emit your final deliverable as:
|
|
188
|
+
<arc402_delivery>
|
|
189
|
+
{"files":[{"name":"deliverable.md","content":"# Deliverable\n\n[your work here]"}]}
|
|
190
|
+
</arc402_delivery>
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Inference routing
|
|
194
|
+
|
|
195
|
+
Hermes exposes an OpenAI-compatible endpoint at `http://localhost:8080/v1` by default.
|
|
196
|
+
|
|
197
|
+
The workroom `WorkerExecutor` already calls `POST /v1/chat/completions`. Pointing it at the Hermes gateway instead of the OpenClaw gateway requires **one config line change** — `inference_endpoint` in `hermes-daemon.toml`. No WorkerExecutor code changes.
|
|
198
|
+
|
|
199
|
+
```
|
|
200
|
+
WorkerExecutor
|
|
201
|
+
→ POST http://localhost:8080/v1/chat/completions
|
|
202
|
+
→ model: hermes-arc
|
|
203
|
+
→ Hermes gateway processes with operator's configured model
|
|
204
|
+
→ Response parsed for <arc402_delivery> block
|
|
205
|
+
→ Deliverable committed on-chain
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Docker note
|
|
209
|
+
|
|
210
|
+
Hermes v0.6.0 ships an official Dockerfile with volume-mounted config support. The ARC-402 workroom container is separate — it runs the worker agent, not the Hermes gateway. They coexist on the same host without conflict. The workroom container calls back to the host Hermes gateway via `host.docker.internal:8080`.
|
|
211
|
+
|
|
212
|
+
Update `hermes-daemon.toml` for Docker:
|
|
213
|
+
```toml
|
|
214
|
+
[worker]
|
|
215
|
+
inference_endpoint = "http://host.docker.internal:8080/v1"
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## Layer 4: Delivery Spec
|
|
221
|
+
|
|
222
|
+
### Purpose
|
|
223
|
+
Document the `<arc402_delivery>` block as a first-class format spec. Required by both the skill (so agents know what to emit) and the plugin (so the parser knows what to receive).
|
|
224
|
+
|
|
225
|
+
### Location in repo
|
|
226
|
+
```
|
|
227
|
+
hermes/DELIVERY-SPEC.md
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
Also publish to ARC-402 docs site and include in Hermes docs PR.
|
|
231
|
+
|
|
232
|
+
### Spec content
|
|
233
|
+
|
|
234
|
+
**Single file delivery:**
|
|
235
|
+
```text
|
|
236
|
+
<arc402_delivery>
|
|
237
|
+
{"files":[{"name":"deliverable.md","content":"[content here]"}]}
|
|
238
|
+
</arc402_delivery>
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
**Multi-file delivery:**
|
|
242
|
+
```text
|
|
243
|
+
<arc402_delivery>
|
|
244
|
+
{"files":[{"name":"deliverable.md","content":"[summary]"},{"name":"output.json","content":"[structured data]"},{"name":"report.md","content":"[full report]"}]}
|
|
245
|
+
</arc402_delivery>
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
**Rules:**
|
|
249
|
+
- The block must appear once in the agent's final message
|
|
250
|
+
- The inner payload is a JSON object with a `files` array
|
|
251
|
+
- Each file entry must include string `name` and `content` fields
|
|
252
|
+
- File names are flattened by `path.basename()`; path components are stripped
|
|
253
|
+
- `deliverable.md` must always be present as the primary artifact
|
|
254
|
+
- Content must be valid JSON string content (escape newlines as `\n` and quotes as `\"`)
|
|
255
|
+
- Maximum total content: 1MB (enforced by daemon parser)
|
|
256
|
+
|
|
257
|
+
**Parser behavior:**
|
|
258
|
+
- WorkerExecutor scans the full agent output for `<arc402_delivery>`
|
|
259
|
+
- Parses the JSON payload inside the first `<arc402_delivery>` block
|
|
260
|
+
- Writes each to the job staging directory
|
|
261
|
+
- Computes root hash over all file contents
|
|
262
|
+
- Commits hash on-chain via `commitDeliverable()`
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## Publish Surface
|
|
267
|
+
|
|
268
|
+
| Artifact | Repo location | External publish |
|
|
269
|
+
|----------|--------------|-----------------|
|
|
270
|
+
| `hermes/skills/arc402-agent/SKILL.md` | ARC-402 repo | PR → Hermes skill catalog |
|
|
271
|
+
| `hermes/plugins/arc402_plugin.py` | ARC-402 repo | PR → Hermes plugin registry |
|
|
272
|
+
| `hermes/workroom/hermes-daemon.toml` | ARC-402 repo | Referenced in README |
|
|
273
|
+
| `hermes/workroom/hermes-worker/` | ARC-402 repo | Referenced in README |
|
|
274
|
+
| `hermes/DELIVERY-SPEC.md` | ARC-402 repo | PR → Hermes docs |
|
|
275
|
+
| `docs/hermes-integration.md` | ARC-402 docs | arc402.xyz/docs |
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
## Build Order
|
|
280
|
+
|
|
281
|
+
Engineering executes in this sequence. Each layer is independently shippable.
|
|
282
|
+
|
|
283
|
+
### Step 1 — Skill
|
|
284
|
+
**Input:** This spec + existing `arc402-agent` OpenClaw skill as reference
|
|
285
|
+
**Output:** `hermes/skills/arc402-agent/SKILL.md`
|
|
286
|
+
**Effort:** Small (doc authoring)
|
|
287
|
+
**Unblocks:** Hermes community basic participation immediately
|
|
288
|
+
|
|
289
|
+
### Step 2 — Delivery Spec
|
|
290
|
+
**Input:** WorkerExecutor source (`cli/src/daemon/worker-executor.ts`), existing delivery block parser
|
|
291
|
+
**Output:** `hermes/DELIVERY-SPEC.md`
|
|
292
|
+
**Effort:** Small (spec extraction + documentation)
|
|
293
|
+
**Unblocks:** Plugin build + workroom build
|
|
294
|
+
|
|
295
|
+
### Step 3 — Plugin
|
|
296
|
+
**Input:** This spec + Hermes plugin API docs (v0.6.0) + arc402 daemon HTTP endpoints
|
|
297
|
+
**Output:** `hermes/plugins/arc402_plugin.py`
|
|
298
|
+
**Effort:** Medium (Python, gateway hook implementation)
|
|
299
|
+
**Unblocks:** Autonomous Hermes operation
|
|
300
|
+
|
|
301
|
+
### Step 4 — Workroom Config Templates
|
|
302
|
+
**Input:** This spec + existing `~/.arc402/worker/arc/` scaffold
|
|
303
|
+
**Output:** `hermes/workroom/` directory (SOUL.md, IDENTITY.md, config.json, hermes-daemon.toml)
|
|
304
|
+
**Effort:** Small (config files + identity docs)
|
|
305
|
+
**Unblocks:** Hermes operator full workroom setup
|
|
306
|
+
|
|
307
|
+
### Step 5 — Integration Doc
|
|
308
|
+
**Input:** All above artifacts
|
|
309
|
+
**Output:** `docs/hermes-integration.md`
|
|
310
|
+
**Effort:** Small (doc authoring, pulls everything together)
|
|
311
|
+
**Completes:** Full Hermes integration
|
|
312
|
+
|
|
313
|
+
---
|
|
314
|
+
|
|
315
|
+
## Testing Checklist
|
|
316
|
+
|
|
317
|
+
Before any external publish (skill catalog, plugin registry, docs):
|
|
318
|
+
|
|
319
|
+
- [ ] Skill installed on fresh Hermes instance — agent successfully calls `arc402 hire` and `arc402 deliver`
|
|
320
|
+
- [ ] Plugin intercepts hire proposal — auto-accepts within spend limit, rejects above limit
|
|
321
|
+
- [ ] Plugin `ctx.inject_message()` — hire notification appears in Hermes conversation
|
|
322
|
+
- [ ] Workroom starts from `hermes-daemon.toml` — daemon healthy, Docker container up
|
|
323
|
+
- [ ] Worker inference routes to Hermes gateway — `POST /v1/chat/completions` hits port 8080
|
|
324
|
+
- [ ] Delivery block parsed — multi-file delivery committed on-chain with correct root hash
|
|
325
|
+
- [ ] E2E: Hermes operator receives hire → workroom executes → deliverable committed → escrow released
|
|
326
|
+
|
|
327
|
+
---
|
|
328
|
+
|
|
329
|
+
## Notes
|
|
330
|
+
|
|
331
|
+
- Hermes plugin system uses Python. The existing ARC-402 plugin (`@arc402/arc402`) is TypeScript/Node. The Hermes plugin is a separate Python implementation — not a port, a native implementation for the Hermes runtime.
|
|
332
|
+
- Hermes `ctx.inject_message()` was introduced in v0.6.0 (2026-03-30). Plugin requires Hermes ≥ v0.6.0.
|
|
333
|
+
- The OpenClaw migration guide Hermes shipped in v0.6.0 means there is an active user migration window. Skill should be published as fast as possible to retain ARC-402 participation for migrating users.
|
|
334
|
+
- Do not publish plugin to Hermes registry before E2E test passes.
|
|
335
|
+
|
|
336
|
+
---
|
|
337
|
+
|
|
338
|
+
*This spec is implementation-ready. Engineering can begin on Step 1 immediately.*
|