@embassys/ambassador 0.2.6 → 0.2.8
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/README.md +28 -25
- package/dist/agent-capabilities.js +7 -7
- package/dist/agent-capabilities.js.map +1 -1
- package/dist/ambassador-options.d.ts +3 -6
- package/dist/ambassador-options.js +6 -24
- package/dist/ambassador-options.js.map +1 -1
- package/dist/cli.js +3 -5
- package/dist/cli.js.map +1 -1
- package/dist/credential-store.d.ts +1 -1
- package/dist/credential-store.js +112 -12
- package/dist/credential-store.js.map +1 -1
- package/dist/direct-delivery.d.ts +0 -1
- package/dist/direct-delivery.js +1 -4
- package/dist/direct-delivery.js.map +1 -1
- package/dist/gateway-application.d.ts +1 -1
- package/dist/gateway-application.js +2 -3
- package/dist/gateway-application.js.map +1 -1
- package/dist/gateway-paths.d.ts +1 -0
- package/dist/gateway-paths.js +1 -0
- package/dist/gateway-paths.js.map +1 -1
- package/dist/local-mcp.d.ts +1 -1
- package/dist/local-mcp.js +4 -14
- package/dist/local-mcp.js.map +1 -1
- package/docs/getting-started-claude.md +25 -85
- package/docs/getting-started-codex.md +22 -88
- package/docs/getting-started-gemini.md +23 -78
- package/docs/getting-started-hermes.md +42 -74
- package/docs/getting-started-openclaw.md +40 -74
- package/docs/live-qualification.md +124 -10
- package/package.json +2 -1
|
@@ -1,87 +1,32 @@
|
|
|
1
1
|
# Get started with Gemini CLI
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
against Gemini CLI 0.58.0, and its exact ACP initialization contract passed.
|
|
5
|
-
Real-agent direct and webhook qualification remain open under the one-release
|
|
6
|
-
qualification exception in ADR 0015.
|
|
3
|
+
## Before you start
|
|
7
4
|
|
|
8
|
-
|
|
5
|
+
- Install Node.js `>=24.19.0 <25`.
|
|
6
|
+
- Install and sign in to Gemini CLI `0.58.0`.
|
|
7
|
+
- Gemini supplies native ACP through `gemini --acp`; no adapter is needed.
|
|
8
|
+
- Ambassador never receives your Gemini or Google credential.
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
| --- | --- |
|
|
12
|
-
| MCP `clientInfo` | `gemini-cli-mcp-client` / `0.58.0` |
|
|
13
|
-
| Delivery modes | direct and webhook |
|
|
14
|
-
| Direct command | `gemini --acp` |
|
|
15
|
-
| Accepted ACP `agentInfo` | `gemini-cli` / `0.58.0` |
|
|
16
|
-
| Ambassador MCP in the direct session | ACP HTTP MCP injection |
|
|
10
|
+
## Set up direct delivery
|
|
17
11
|
|
|
18
|
-
Gemini CLI
|
|
19
|
-
adapter. The reviewed release is
|
|
20
|
-
[`v0.58.0`](https://github.com/google-gemini/gemini-cli/tree/v0.58.0). Its
|
|
21
|
-
[`ACP mode documentation`](https://github.com/google-gemini/gemini-cli/blob/v0.58.0/docs/cli/acp-mode.md)
|
|
22
|
-
defines `gemini --acp`. Its
|
|
23
|
-
[`acpRpcDispatcher.ts`](https://github.com/google-gemini/gemini-cli/blob/v0.58.0/packages/cli/src/acp/acpRpcDispatcher.ts)
|
|
24
|
-
returns the `gemini-cli` ACP identity, and
|
|
25
|
-
[`acpSessionManager.ts`](https://github.com/google-gemini/gemini-cli/blob/v0.58.0/packages/cli/src/acp/acpSessionManager.ts)
|
|
26
|
-
maps session MCP configuration into Gemini CLI. The MCP client identity comes
|
|
27
|
-
from
|
|
28
|
-
[`mcp-client.ts`](https://github.com/google-gemini/gemini-cli/blob/v0.58.0/packages/core/src/tools/mcp-client.ts).
|
|
29
|
-
Other versions fail closed until the registry is reviewed and updated.
|
|
30
|
-
|
|
31
|
-
## Setup
|
|
32
|
-
|
|
33
|
-
1. Install Node.js `>=24.19.0 <25`, then install and authenticate Gemini CLI
|
|
34
|
-
0.58.0 using its normal setup. Ambassador never installs or updates Gemini.
|
|
35
|
-
2. For noninteractive provider authentication, set the appropriate approved
|
|
36
|
-
Gemini or Vertex variables outside chat. The profile accepts
|
|
37
|
-
`GEMINI_API_KEY`, `GOOGLE_API_KEY`, `GOOGLE_CLOUD_PROJECT`,
|
|
38
|
-
`GOOGLE_CLOUD_LOCATION`, and `GOOGLE_GENAI_USE_VERTEXAI`.
|
|
39
|
-
3. Generate the local MCP token without putting its value in chat or a command
|
|
40
|
-
argument:
|
|
41
|
-
|
|
42
|
-
```sh
|
|
43
|
-
export AMBASSADOR_LOCAL_TOKEN="$(
|
|
44
|
-
node -e "process.stdout.write(require('node:crypto').randomBytes(24).toString('hex'))"
|
|
45
|
-
)"
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
4. If you may choose webhook delivery, create its secret in the same shell
|
|
49
|
-
before starting Ambassador:
|
|
12
|
+
1. From the directory Gemini CLI may access, keep Ambassador running:
|
|
50
13
|
|
|
51
14
|
```sh
|
|
52
|
-
|
|
53
|
-
node -e "process.stdout.write(require('node:crypto').randomBytes(24).toString('hex'))"
|
|
54
|
-
)"
|
|
15
|
+
npx --yes @embassys/ambassador@latest start
|
|
55
16
|
```
|
|
56
17
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
with direct as the default.
|
|
73
|
-
8. For direct mode, choose direct. The follow-up repeats the same `email` and
|
|
74
|
-
optional `display_name` and adds `delivery: {"mode":"direct"}`. Ambassador
|
|
75
|
-
starts `gemini --acp` and injects its authenticated HTTP MCP server into the
|
|
76
|
-
new ACP session.
|
|
77
|
-
9. For webhook mode, choose webhook and provide the HTTPS receiver URL plus
|
|
78
|
-
the environment-variable name `AMBASSADOR_WEBHOOK_SECRET`. The follow-up
|
|
79
|
-
repeats the registration fields and adds `delivery.mode`, `delivery.url`,
|
|
80
|
-
and `delivery.secret_env`; it never sends the secret value.
|
|
81
|
-
10. Enter the email verification code when Gemini CLI asks for it. Gemini CLI
|
|
82
|
-
calls `verify_email` with that `email` and six-digit `code`; the central
|
|
83
|
-
token and DPoP key stay inside Ambassador.
|
|
84
|
-
|
|
85
|
-
Gemini owns provider authentication and history. Ambassador never receives the
|
|
86
|
-
provider credentials, central token, or DPoP private key. Never put the local
|
|
87
|
-
token or a provider credential in chat or registration arguments.
|
|
18
|
+
2. Add `http://127.0.0.1:8787/mcp` as a Streamable HTTP MCP server in Gemini
|
|
19
|
+
CLI's normal MCP configuration. Do not configure authentication.
|
|
20
|
+
3. Start or restart Gemini CLI so it sees the MCP server.
|
|
21
|
+
4. Ask Gemini CLI to register your email; it calls Ambassador's
|
|
22
|
+
`register_agent` tool.
|
|
23
|
+
5. Enter the six-digit code sent to your email. Gemini CLI is direct-only, so
|
|
24
|
+
Ambassador does not ask a delivery question.
|
|
25
|
+
|
|
26
|
+
Ambassador will launch `gemini --acp` when a central message arrives. That is
|
|
27
|
+
a new gateway-managed session, not the chat used for registration.
|
|
28
|
+
|
|
29
|
+
The qualification probe records the installed version without rejecting it.
|
|
30
|
+
Production still checks the exact MCP client and ACP identities in the compiled
|
|
31
|
+
profile, so a new incompatible release fails closed. See
|
|
32
|
+
[Qualification](qualification.md) for compatibility evidence.
|
|
@@ -1,84 +1,52 @@
|
|
|
1
1
|
# Get started with Hermes Agent
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
against Hermes Agent 0.21.0. Real-agent direct and webhook qualification remain
|
|
5
|
-
open under the one-release qualification exception in ADR 0015.
|
|
3
|
+
## Before you start
|
|
6
4
|
|
|
7
|
-
|
|
5
|
+
- Install Node.js `>=24.19.0 <25`.
|
|
6
|
+
- Install and authenticate Hermes Agent `0.20.5` or `0.21.0`.
|
|
7
|
+
- Make sure `hermes-acp` is on `PATH` for direct delivery.
|
|
8
|
+
- Ambassador never receives your provider credential.
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
| Delivery modes | direct and webhook |
|
|
13
|
-
| Direct command | `hermes-acp` |
|
|
14
|
-
| Accepted ACP `agentInfo` | `hermes-agent` / `0.21.0` |
|
|
15
|
-
| Ambassador MCP in the direct session | ACP HTTP MCP injection |
|
|
10
|
+
Hermes Agent `0.20.5` passed both live delivery modes and is included in
|
|
11
|
+
Ambassador 0.2.8's direct profile. The qualification probe records the installed
|
|
12
|
+
version without treating the observation itself as a failure.
|
|
16
13
|
|
|
17
|
-
|
|
18
|
-
`1cb3ab617363ffab9e55239a7d2ab0d6f9c10473`. Hermes pins Python MCP 2.0.0 and
|
|
19
|
-
constructs `ClientSession` without overriding its client identity in
|
|
20
|
-
[`mcp_tool.py`](https://github.com/NousResearch/hermes-agent/blob/1cb3ab617363ffab9e55239a7d2ab0d6f9c10473/tools/mcp_tool.py).
|
|
21
|
-
That SDK's exact `mcp` / `0.1.0` identity is defined by Python MCP 2.0.0's
|
|
22
|
-
[`DEFAULT_CLIENT_INFO`](https://github.com/modelcontextprotocol/python-sdk/blob/6f69a3758ebf2ee55ce050f58b470ce11af71133/src/mcp/client/session.py).
|
|
23
|
-
Hermes declares the `hermes-acp` entry point in
|
|
24
|
-
[`pyproject.toml`](https://github.com/NousResearch/hermes-agent/blob/1cb3ab617363ffab9e55239a7d2ab0d6f9c10473/pyproject.toml)
|
|
25
|
-
and returns its ACP identity in
|
|
26
|
-
[`acp_adapter/server.py`](https://github.com/NousResearch/hermes-agent/blob/1cb3ab617363ffab9e55239a7d2ab0d6f9c10473/acp_adapter/server.py).
|
|
27
|
-
Later versions fail closed until the registry is reviewed and updated.
|
|
14
|
+
## Set up direct delivery
|
|
28
15
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
1. Install Node.js `>=24.19.0 <25`, then install and authenticate Hermes Agent
|
|
32
|
-
0.21.0 using its normal provider setup. Ambassador never installs or updates
|
|
33
|
-
Hermes.
|
|
34
|
-
2. Generate the local MCP token without putting its value in chat or a command
|
|
35
|
-
argument:
|
|
36
|
-
|
|
37
|
-
```sh
|
|
38
|
-
export AMBASSADOR_LOCAL_TOKEN="$(
|
|
39
|
-
node -e "process.stdout.write(require('node:crypto').randomBytes(24).toString('hex'))"
|
|
40
|
-
)"
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
3. If you may choose webhook delivery, create its secret in the same shell
|
|
44
|
-
before starting Ambassador:
|
|
16
|
+
1. From the directory Hermes may access, keep Ambassador running:
|
|
45
17
|
|
|
46
18
|
```sh
|
|
47
|
-
|
|
48
|
-
node -e "process.stdout.write(require('node:crypto').randomBytes(24).toString('hex'))"
|
|
49
|
-
)"
|
|
19
|
+
npx --yes @embassys/ambassador@latest start
|
|
50
20
|
```
|
|
51
21
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
Hermes ACP session and verifies the exact reviewed `clientInfo` when Hermes
|
|
84
|
-
calls the bounded qualification tool.
|
|
22
|
+
2. Add `http://127.0.0.1:8787/mcp` as a Streamable HTTP MCP server in Hermes's
|
|
23
|
+
normal MCP configuration. Do not configure authentication.
|
|
24
|
+
3. Start or restart Hermes so it sees the MCP server.
|
|
25
|
+
4. Ask Hermes to register your email; it calls Ambassador's `register_agent`
|
|
26
|
+
tool.
|
|
27
|
+
5. Choose **Send directly to this Hermes agent**.
|
|
28
|
+
6. Enter the six-digit code sent to your email.
|
|
29
|
+
|
|
30
|
+
Ambassador will launch `hermes-acp` when a central message arrives. That is a
|
|
31
|
+
new gateway-managed session, not the chat used for registration.
|
|
32
|
+
|
|
33
|
+
## Use a webhook instead
|
|
34
|
+
|
|
35
|
+
- Before step 1, set the receiver secret in the same shell:
|
|
36
|
+
|
|
37
|
+
```sh
|
|
38
|
+
export AMBASSADOR_WEBHOOK_SECRET="$(
|
|
39
|
+
node -e "process.stdout.write(require('node:crypto').randomBytes(24).toString('hex'))"
|
|
40
|
+
)"
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
- During registration, choose **Send to a webhook**.
|
|
44
|
+
- Give Hermes the HTTPS webhook URL and the variable name
|
|
45
|
+
`AMBASSADOR_WEBHOOK_SECRET`.
|
|
46
|
+
- Hermes supplies `delivery.url` and `delivery.secret_env`; it never receives
|
|
47
|
+
the secret value.
|
|
48
|
+
|
|
49
|
+
Production still checks the exact MCP client and ACP identities in the compiled
|
|
50
|
+
profile, so a new incompatible release fails closed. See
|
|
51
|
+
[Qualification](qualification.md) for the artifact-specific compatibility
|
|
52
|
+
evidence.
|
|
@@ -1,83 +1,49 @@
|
|
|
1
1
|
# Get started with OpenClaw
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
against OpenClaw 2026.8.1. Real-agent direct and webhook qualification remain
|
|
5
|
-
open under the one-release qualification exception in ADR 0015.
|
|
3
|
+
## Before you start
|
|
6
4
|
|
|
7
|
-
|
|
5
|
+
- Install Node.js `>=24.19.0 <25`.
|
|
6
|
+
- Install and authenticate OpenClaw `2026.8.1`.
|
|
7
|
+
- Make sure `openclaw` is on `PATH` for direct delivery.
|
|
8
|
+
- Ambassador never receives your provider credential.
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
| --- | --- |
|
|
11
|
-
| MCP `clientInfo` | `openclaw-bundle-mcp` / `0.0.0` |
|
|
12
|
-
| Delivery modes | direct and webhook |
|
|
13
|
-
| Direct command | `openclaw acp` |
|
|
14
|
-
| Accepted ACP `agentInfo` | `openclaw-acp` / `2026.8.1` |
|
|
15
|
-
| Ambassador MCP in the direct session | provider configuration required |
|
|
10
|
+
## Set up direct delivery
|
|
16
11
|
|
|
17
|
-
|
|
18
|
-
`a68a4e39684168cf83201cf48261be23174bad3d`. The source defines the MCP alias in
|
|
19
|
-
[`agent-bundle-mcp-runtime.ts`](https://github.com/openclaw/openclaw/blob/a68a4e39684168cf83201cf48261be23174bad3d/src/agents/agent-bundle-mcp-runtime.ts),
|
|
20
|
-
the ACP identity in
|
|
21
|
-
[`acp/types.ts`](https://github.com/openclaw/openclaw/blob/a68a4e39684168cf83201cf48261be23174bad3d/src/acp/types.ts),
|
|
22
|
-
and the command in
|
|
23
|
-
[`acp-cli.ts`](https://github.com/openclaw/openclaw/blob/a68a4e39684168cf83201cf48261be23174bad3d/src/cli/acp-cli.ts).
|
|
24
|
-
Later versions fail closed until the registry is reviewed and updated.
|
|
25
|
-
|
|
26
|
-
## Setup
|
|
27
|
-
|
|
28
|
-
1. Install Node.js `>=24.19.0 <25`, then install and authenticate OpenClaw
|
|
29
|
-
2026.8.1 using its normal provider setup. Ambassador never installs or
|
|
30
|
-
updates OpenClaw.
|
|
31
|
-
2. Generate the local MCP token without putting its value in chat or a command
|
|
32
|
-
argument:
|
|
33
|
-
|
|
34
|
-
```sh
|
|
35
|
-
export AMBASSADOR_LOCAL_TOKEN="$(
|
|
36
|
-
node -e "process.stdout.write(require('node:crypto').randomBytes(24).toString('hex'))"
|
|
37
|
-
)"
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
3. If you may choose webhook delivery, create its secret in the same shell
|
|
41
|
-
before starting Ambassador:
|
|
12
|
+
1. From the directory OpenClaw may access, keep Ambassador running:
|
|
42
13
|
|
|
43
14
|
```sh
|
|
44
|
-
|
|
45
|
-
node -e "process.stdout.write(require('node:crypto').randomBytes(24).toString('hex'))"
|
|
46
|
-
)"
|
|
15
|
+
npx --yes @embassys/ambassador@latest start
|
|
47
16
|
```
|
|
48
17
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
For the opt-in real-agent suite, configure this same provider-side MCP entry at
|
|
82
|
-
`http://127.0.0.1:8787/mcp` using `AMBASSADOR_QUALIFICATION_LOCAL_TOKEN`; the
|
|
83
|
-
runner verifies that OpenClaw calls it with the exact reviewed `clientInfo`.
|
|
18
|
+
2. Add `http://127.0.0.1:8787/mcp` as a Streamable HTTP MCP server in
|
|
19
|
+
OpenClaw's normal MCP configuration. Do not configure authentication.
|
|
20
|
+
3. Start or restart OpenClaw so it sees the MCP server.
|
|
21
|
+
4. Ask OpenClaw to register your email; it calls Ambassador's `register_agent`
|
|
22
|
+
tool.
|
|
23
|
+
5. Choose **Send directly to this OpenClaw agent**.
|
|
24
|
+
6. Enter the six-digit code sent to your email.
|
|
25
|
+
|
|
26
|
+
Ambassador will launch `openclaw acp` when a central message arrives. OpenClaw
|
|
27
|
+
does not accept session MCP injection, so keep the provider-side MCP entry from
|
|
28
|
+
step 2 configured.
|
|
29
|
+
|
|
30
|
+
## Use a webhook instead
|
|
31
|
+
|
|
32
|
+
- Before step 1, set the receiver secret in the same shell:
|
|
33
|
+
|
|
34
|
+
```sh
|
|
35
|
+
export AMBASSADOR_WEBHOOK_SECRET="$(
|
|
36
|
+
node -e "process.stdout.write(require('node:crypto').randomBytes(24).toString('hex'))"
|
|
37
|
+
)"
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
- During registration, choose **Send to a webhook**.
|
|
41
|
+
- Give OpenClaw the HTTPS webhook URL and the variable name
|
|
42
|
+
`AMBASSADOR_WEBHOOK_SECRET`.
|
|
43
|
+
- OpenClaw supplies `delivery.url` and `delivery.secret_env`; it never receives
|
|
44
|
+
the secret value.
|
|
45
|
+
|
|
46
|
+
The qualification probe records the installed version without rejecting it.
|
|
47
|
+
Production still checks the exact MCP client and ACP identities in the compiled
|
|
48
|
+
profile, so a new incompatible release fails closed. See
|
|
49
|
+
[Qualification](qualification.md) for compatibility evidence.
|
|
@@ -10,8 +10,11 @@ general reply operations. It does test the deployed, action-specific
|
|
|
10
10
|
|
|
11
11
|
The runner covers the current package name, guided registration, one
|
|
12
12
|
full-message webhook target, and one direct target. The default direct target
|
|
13
|
-
is the deterministic mock ACP agent.
|
|
14
|
-
|
|
13
|
+
is the deterministic mock ACP agent. Separately confirmed modes use the fixed
|
|
14
|
+
Codex or Hermes profiles and their supported exact agent and adapter versions.
|
|
15
|
+
Real-provider modes use isolated provider configuration copies. Their
|
|
16
|
+
installed-version probes are observational; the compiled-in production profile
|
|
17
|
+
still decides ACP compatibility by exact identity matching.
|
|
15
18
|
|
|
16
19
|
## Safety
|
|
17
20
|
|
|
@@ -25,10 +28,10 @@ fixed Codex profile and `codex-acp` 1.8.0 with an isolated Codex login.
|
|
|
25
28
|
## Required live checks after the cutover
|
|
26
29
|
|
|
27
30
|
1. Pack and scan the exact candidate package.
|
|
28
|
-
2. Create two disposable identities through
|
|
31
|
+
2. Create two disposable identities through loopback local MCP.
|
|
29
32
|
3. Use the exact enabled `clientInfo` aliases for one webhook profile and one
|
|
30
|
-
direct profile. Prove
|
|
31
|
-
|
|
33
|
+
direct profile. Prove a dual-mode profile advertises direct as its default;
|
|
34
|
+
prove a direct-only profile proceeds without a delivery question.
|
|
32
35
|
4. Receive and use both verification emails without persisting their codes.
|
|
33
36
|
5. Restart and prove encrypted credential and nonsecret profile loading.
|
|
34
37
|
6. Prove valid Bearer plus DPoP requests and the negative DPoP matrix.
|
|
@@ -70,11 +73,43 @@ export AMBASSADOR_CONFIRM_LIVE_QUALIFICATION=run-live-qualification-with-real-co
|
|
|
70
73
|
pnpm run qualify:live
|
|
71
74
|
```
|
|
72
75
|
|
|
73
|
-
The runner rejects an ordinary user home,
|
|
74
|
-
|
|
75
|
-
accepts a command override.
|
|
76
|
-
|
|
77
|
-
after the
|
|
76
|
+
The runner rejects an ordinary user home, records the installed version when
|
|
77
|
+
one can be observed, uses the compiled-in Codex command and profile, and never
|
|
78
|
+
accepts a command override. The observation does not establish compatibility;
|
|
79
|
+
the exact ACP identity check remains authoritative. The runner also lets
|
|
80
|
+
abandoned server-side polls expire after the restart check before it enqueues a
|
|
81
|
+
message. Delete the isolated home after the run.
|
|
82
|
+
|
|
83
|
+
For Hermes, prepare an owner-only temporary home containing only `.hermes/.env`,
|
|
84
|
+
`.hermes/auth.json`, `.hermes/config.yaml`, and
|
|
85
|
+
`.hermes/shared/nous_auth.json` copied from the authenticated installation.
|
|
86
|
+
Remove unrelated MCP entries only from that copy. Put Hermes Agent 0.20.5 or
|
|
87
|
+
0.21.0 and `hermes-acp` on `PATH`, then choose one fixed mode:
|
|
88
|
+
|
|
89
|
+
```sh
|
|
90
|
+
export AMBASSADOR_HERMES_QUALIFICATION_HOME=/absolute/path/to/isolated/home
|
|
91
|
+
export AMBASSADOR_LIVE_DIRECT_AGENT=hermes-direct
|
|
92
|
+
export AMBASSADOR_CONFIRM_LIVE_QUALIFICATION=run-live-qualification-with-real-hermes-direct-and-two-disposable-mailosaur-identities
|
|
93
|
+
pnpm run qualify:live
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
or:
|
|
97
|
+
|
|
98
|
+
```sh
|
|
99
|
+
export AMBASSADOR_HERMES_QUALIFICATION_HOME=/absolute/path/to/isolated/home
|
|
100
|
+
export AMBASSADOR_LIVE_DIRECT_AGENT=hermes-webhook
|
|
101
|
+
export AMBASSADOR_CONFIRM_LIVE_QUALIFICATION=run-live-qualification-with-real-hermes-webhook-and-two-disposable-mailosaur-identities
|
|
102
|
+
pnpm run qualify:live
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
The runner rejects the ordinary Hermes home and non-owner-only copies. It uses
|
|
106
|
+
exact MCP `clientInfo` `mcp` / `0.1.0`, launches only compiled-in
|
|
107
|
+
`hermes-acp` for direct mode, and configures Ambassador MCP only in the isolated
|
|
108
|
+
copy. The runner records the installed Hermes version when it can, but does not
|
|
109
|
+
use that observation as a compatibility gate; direct ACP identity matching
|
|
110
|
+
remains exact. Webhook mode starts Hermes's authenticated generic route,
|
|
111
|
+
requires its bearer filter and native HMAC V2 validation, and suppresses
|
|
112
|
+
provider output. Delete the isolated home after every attempt.
|
|
78
113
|
|
|
79
114
|
## Required report
|
|
80
115
|
|
|
@@ -148,6 +183,85 @@ behavior passed. The supported-Node repeat remains part of the qualification
|
|
|
148
183
|
record even though the user approved 0.2.6 as a one-release exception before
|
|
149
184
|
that repeat.
|
|
150
185
|
|
|
186
|
+
## Hermes 0.20.5 observations
|
|
187
|
+
|
|
188
|
+
On 2026-09-03, Hermes Agent 0.20.5 ran on macOS 26.5.2 arm64 with Node
|
|
189
|
+
24.19.0. Both live cases reviewed central source revision
|
|
190
|
+
`ac3f7a6e33829eb80301c7944f611d29cc2499b5`; the live deployment did not
|
|
191
|
+
expose its revision. The actual npm artifact was downloaded from the registry,
|
|
192
|
+
clean-installed, and used through its installed `ambassador` CLI. Its npm
|
|
193
|
+
integrity was
|
|
194
|
+
`sha512-qaL4IHTrMwpyrY1OisPXMexytmnNfO7Bjc5tXgLCF3LolXQW2R8GrzErqJkMIlM+Zh8Cce9ijN+zfYb3xiNHSQ==`,
|
|
195
|
+
its registry SHA-1 was `c0179df957bc05de921da578344fab6c1ba4a713`,
|
|
196
|
+
and its tarball SHA-256 was
|
|
197
|
+
`312b514ce2dd43de81502debd63004ea9a84da79099d4730c301b52e593c97c8`.
|
|
198
|
+
The installed CLI started without options, rejected a forbidden option, and
|
|
199
|
+
passed the packed-runtime scan.
|
|
200
|
+
|
|
201
|
+
The artifact-specific outcomes were:
|
|
202
|
+
|
|
203
|
+
| Delivery case | Ambassador artifact | Outcome |
|
|
204
|
+
| --- | --- | --- |
|
|
205
|
+
| Webhook | Published `@embassys/ambassador@0.2.7` | Passed the complete live round trip |
|
|
206
|
+
| Direct eligibility probe | Published `@embassys/ambassador@0.2.7` | Ambassador capability-registry rejection at `startup_failed`, as required by its exact 0.21.0 profile |
|
|
207
|
+
| Direct | Source candidate adding exact Hermes ACP 0.20.5 | Passed the complete live round trip |
|
|
208
|
+
|
|
209
|
+
The source-built direct candidate was not substituted for the published
|
|
210
|
+
artifact checks. Its tarball SHA-256 was
|
|
211
|
+
`1d434e8a5dbf027a42326a7e6b42a58094fe17cfdbf8cf96a4e7d314a24835be`,
|
|
212
|
+
and the direct qualification runner SHA-256 was
|
|
213
|
+
`7b6a680bba64abe8d86c9f2328a7562360b15def1eea1d7cf11f21d8f7dea24f`.
|
|
214
|
+
The final strict webhook pass used runner SHA-256
|
|
215
|
+
`e2506c09012f5e7bb3630acb70b5844be3a1769b5baaef3fc76dda07ed27c8c0`.
|
|
216
|
+
No later source change altered the direct profile or delivery implementation
|
|
217
|
+
used by that candidate.
|
|
218
|
+
|
|
219
|
+
Each pass registered and email-verified a controlled requester and the real
|
|
220
|
+
Hermes target through separate local Ambassador MCP endpoints, then restarted
|
|
221
|
+
both gateways and reloaded the encrypted credentials and delivery profiles.
|
|
222
|
+
The requester obtained `get_phone_number` permission, Hermes called
|
|
223
|
+
`respond_to_permission` with a grant, the requester called `call_action` with
|
|
224
|
+
approved synthetic data, and Hermes received the complete correlated
|
|
225
|
+
`action_call`. The real model called `submit_action_result` exactly once with
|
|
226
|
+
the supplied call ID, success status, and approved synthetic phone object.
|
|
227
|
+
The requester received the matching `action_response`. Local webhook custody
|
|
228
|
+
or ACP completion was observed before each corresponding central
|
|
229
|
+
acknowledgement.
|
|
230
|
+
|
|
231
|
+
Both modes passed Bearer plus DPoP behavior, the negative DPoP matrix, the
|
|
232
|
+
deployed six-action catalog, zero central MCP requests, artifact scanning, and
|
|
233
|
+
Mailosaur and temporary-state cleanup. Direct mode proved ACP v1 initialization
|
|
234
|
+
and injected Ambassador MCP. Webhook mode proved the Hermes receiver's bearer
|
|
235
|
+
filter, HMAC V2 authentication, and custody before acknowledgement. The normal
|
|
236
|
+
Hermes home was not changed; owner-only credential copies were removed after
|
|
237
|
+
the runs.
|
|
238
|
+
|
|
239
|
+
The live DPoP positive case needed no nonce. The deployed catalog names and
|
|
240
|
+
input-schema SHA-256 digests were:
|
|
241
|
+
|
|
242
|
+
| Action | Input schema SHA-256 |
|
|
243
|
+
| --- | --- |
|
|
244
|
+
| `create_calendar_event` | `4b9c97f146bfbb4c2cc1ec0812ada60406ce563d59c5abc807fcb6ba2dc0270c` |
|
|
245
|
+
| `get_email` | `032af9a4835a30e280f7c122f8971565b4e2527b25d9fcb0ad2f778f654aecbd` |
|
|
246
|
+
| `get_free_busy_permission` | `7775afae503f343ae09ed3510c66410cb361ea4125b28047d15321e7430f4f96` |
|
|
247
|
+
| `get_phone_number` | `6c7954b7f42f818db7f93433bd07dc2aac273bd4599a637d2233529c6149bc48` |
|
|
248
|
+
| `read_calendar_event_by_title` | `92ddb62ec62f187cdd1cfe0995d01afd06f283f2c174f6f24173083b1aab0d2f` |
|
|
249
|
+
| `read_calendar_permission` | `27deb9a2fbadef8582fa9036fa9bc4a173eeaa92034d0fab8f4e12b1dfdf0662` |
|
|
250
|
+
|
|
251
|
+
One earlier strict webhook attempt failed at
|
|
252
|
+
`action_response_webhook_timeout_failed` after the real target had granted the
|
|
253
|
+
permission, submitted one successful correlated result, accepted both target
|
|
254
|
+
messages, and received both target acknowledgements. Ambassador reported no
|
|
255
|
+
stderr. The safe evidence cannot distinguish central response queueing from a
|
|
256
|
+
consuming-poll delivery loss, so this is classified in the central REST
|
|
257
|
+
action-response delivery phase, not as Ambassador target delivery, Hermes
|
|
258
|
+
webhook custody, model execution, or MCP invocation. A fresh isolated rerun of
|
|
259
|
+
the same strict case passed. No compatibility fallback or replay was added.
|
|
260
|
+
|
|
261
|
+
These observations approve the source registry's exact Hermes ACP 0.20.5
|
|
262
|
+
entry. They do not show that published Ambassador 0.2.7 supports Hermes 0.20.5
|
|
263
|
+
direct mode. Ambassador 0.2.8 contains the candidate change.
|
|
264
|
+
|
|
151
265
|
## Earlier direct observation
|
|
152
266
|
|
|
153
267
|
On 2026-09-02, real Codex had already passed delivery, injected Ambassador MCP
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@embassys/ambassador",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.8",
|
|
4
4
|
"description": "Local Ambassador for the Embassys agent network",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
"clean": "node scripts/clean.mjs",
|
|
47
47
|
"format": "biome check --write .",
|
|
48
48
|
"lint": "biome check .",
|
|
49
|
+
"probe:agents": "node scripts/probe-agent-versions.mjs",
|
|
49
50
|
"qualify:agents": "node scripts/qualify-agents.mjs",
|
|
50
51
|
"qualify:live": "node scripts/live-qualification.mjs",
|
|
51
52
|
"test": "pnpm run test:build && node scripts/run-tests.mjs",
|