../ runs index

Campaign a2a-hermes-v0.6.0-r9 PASS

Agent group
hermes (homogeneous)
ai-memory ref
v0.6.0
Completed at
2026-04-21T01:16:25Z
Overall pass
true
Skipped reports
1

Infrastructure

Provider
digitalocean
Region
nyc3
Droplet size
s-2vcpu-4gb
Topology
4-node federation mesh (W=2/N=4)
Scenarios started
2026-04-21T01:15:59Z
Scenarios ended
2026-04-21T01:16:25Z
Dispatched by
alphaonedev
Harness SHA
dfca0fb8eeef
Workflow run
https://github.com/alphaonedev/ai-memory-ai2ai-gate/actions/runs/24698095429

Node roster

#RoleAgent IDPublic IPPrivate IP
1agentai:alice167.71.87.12310.252.0.3
2agentai:bob138.197.125.510.252.0.4
3agentai:charlie64.225.62.21310.252.0.2
4memory-only165.227.209.25210.252.0.5

Baseline attestation BASELINE OK

Per the authoritative baseline spec, every agent node must emit a self-attestation before any scenario is permitted to run. This run's attestation:

Spec version: 1.2.0 — see authoritative baseline.

NodeAgentFrameworkAuthenticMCP ai-memoryxAI cfgxAI defaultAgent IDFederationUFW offiptablesdead-manF1 xAIF2a substrateF2b agent (non-gating)Config SHAPass
node-1ai:alicehermes Hermes Agent v0.10.0 (2026.4.16)fa358f9a9059PASS
node-2ai:bobhermes Hermes Agent v0.10.0 (2026.4.16)21635cf63640PASS
node-3ai:charliehermes Hermes Agent v0.10.0 (2026.4.16)ce52d772ef5aPASS
a2a-baseline.json
{
	"baseline_pass": true,
	"per_node": [
		{
			"spec_version": "1.2.0",
			"agent_type": "hermes",
			"agent_id": "ai:alice",
			"node_index": "1",
			"framework_version": "Hermes Agent v0.10.0 (2026.4.16)",
			"ai_memory_version": "0.6.0",
			"peer_urls": "http://10.252.0.4:9077,http://10.252.0.2:9077,http://10.252.0.5:9077",
			"config_file_sha256": "fa358f9a90597243fb96224babd541399bd7b1e972f364605308ab1e2d9dd2c7",
			"config_attestation": {
				"framework_is_authentic": true,
				"mcp_server_ai_memory_registered": true,
				"llm_backend_is_xai_grok": true,
				"llm_is_default_provider": true,
				"mcp_command_is_ai_memory": true,
				"agent_id_stamped": true,
				"federation_live": true,
				"ufw_disabled": true,
				"iptables_flushed": true,
				"dead_man_switch_scheduled": true
			},
			"negative_invariants": {
				"_description": "Alternative A2A channels must be OFF so a passing scenario is only passing via ai-memory shared memory. Any true here = thesis-preserving.",
				"a2a_protocol_off": true,
				"sub_agent_or_sessions_spawn_off": true,
				"alternative_channels_off": true,
				"tool_allowlist_is_memory_only": true,
				"a2a_gate_profile_locked": true
			},
			"functional_probes": {
				"xai_grok_chat_reachable": true,
				"xai_grok_sample_reply": "READY",
				"substrate_http_canary_f2a": true,
				"substrate_http_canary_uuid": "0c0e238a-1669-45a1-8016-c4817686bafe",
				"agent_mcp_canary_f2b": false,
				"agent_mcp_canary_uuid": "bfc76955-7617-4c4a-9ccf-6eba61bb5855",
				"agent_canary_response_head": "Traceback (most recent call last):   File \"/usr/local/bin/hermes\", line 11, in <module>     main()   File \"/root/.hermes/hermes-agent/hermes_cli/main.py\", line 8487, in main     args.func(args)   File \"/root/.hermes/hermes-agent/hermes_cli/main.py\", line 1071, in cmd_chat     if not _has_any_provider_configured():            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   File \"/root/.hermes/hermes-agent/hermes_cli/main.py\", line 209, in _has_any_provider_configured     from hermes_cli.auth import get_auth_sta",
				"_f2b_note": "F2b is LLM-dependent and non-blocking. F2a (deterministic HTTP substrate) gates baseline_pass.",
				"agent_mcp_ai_memory_canary": true,
				"canary_uuid": "0c0e238a-1669-45a1-8016-c4817686bafe",
				"canary_namespace": "_baseline_canary_f2a"
			},
			"baseline_pass": true
		},
		{
			"spec_version": "1.2.0",
			"agent_type": "hermes",
			"agent_id": "ai:bob",
			"node_index": "2",
			"framework_version": "Hermes Agent v0.10.0 (2026.4.16)",
			"ai_memory_version": "0.6.0",
			"peer_urls": "http://10.252.0.3:9077,http://10.252.0.2:9077,http://10.252.0.5:9077",
			"config_file_sha256": "21635cf6364057fd2a004d28aac89abf8438671d85f9fd2ed1e654d812d23ff1",
			"config_attestation": {
				"framework_is_authentic": true,
				"mcp_server_ai_memory_registered": true,
				"llm_backend_is_xai_grok": true,
				"llm_is_default_provider": true,
				"mcp_command_is_ai_memory": true,
				"agent_id_stamped": true,
				"federation_live": true,
				"ufw_disabled": true,
				"iptables_flushed": true,
				"dead_man_switch_scheduled": true
			},
			"negative_invariants": {
				"_description": "Alternative A2A channels must be OFF so a passing scenario is only passing via ai-memory shared memory. Any true here = thesis-preserving.",
				"a2a_protocol_off": true,
				"sub_agent_or_sessions_spawn_off": true,
				"alternative_channels_off": true,
				"tool_allowlist_is_memory_only": true,
				"a2a_gate_profile_locked": true
			},
			"functional_probes": {
				"xai_grok_chat_reachable": true,
				"xai_grok_sample_reply": "READY",
				"substrate_http_canary_f2a": true,
				"substrate_http_canary_uuid": "60ce33df-75a7-472e-82dc-87ed4c55f515",
				"agent_mcp_canary_f2b": false,
				"agent_mcp_canary_uuid": "e64205ba-65dc-4390-b9dd-12d599a364ad",
				"agent_canary_response_head": "Traceback (most recent call last):   File \"/usr/local/bin/hermes\", line 11, in <module>     main()   File \"/root/.hermes/hermes-agent/hermes_cli/main.py\", line 8487, in main     args.func(args)   File \"/root/.hermes/hermes-agent/hermes_cli/main.py\", line 1071, in cmd_chat     if not _has_any_provider_configured():            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   File \"/root/.hermes/hermes-agent/hermes_cli/main.py\", line 209, in _has_any_provider_configured     from hermes_cli.auth import get_auth_sta",
				"_f2b_note": "F2b is LLM-dependent and non-blocking. F2a (deterministic HTTP substrate) gates baseline_pass.",
				"agent_mcp_ai_memory_canary": true,
				"canary_uuid": "60ce33df-75a7-472e-82dc-87ed4c55f515",
				"canary_namespace": "_baseline_canary_f2a"
			},
			"baseline_pass": true
		},
		{
			"spec_version": "1.2.0",
			"agent_type": "hermes",
			"agent_id": "ai:charlie",
			"node_index": "3",
			"framework_version": "Hermes Agent v0.10.0 (2026.4.16)",
			"ai_memory_version": "0.6.0",
			"peer_urls": "http://10.252.0.3:9077,http://10.252.0.4:9077,http://10.252.0.5:9077",
			"config_file_sha256": "ce52d772ef5a00968db29fb80eea7a14206b0a258a00ff2165db725405474618",
			"config_attestation": {
				"framework_is_authentic": true,
				"mcp_server_ai_memory_registered": true,
				"llm_backend_is_xai_grok": true,
				"llm_is_default_provider": true,
				"mcp_command_is_ai_memory": true,
				"agent_id_stamped": true,
				"federation_live": true,
				"ufw_disabled": true,
				"iptables_flushed": true,
				"dead_man_switch_scheduled": true
			},
			"negative_invariants": {
				"_description": "Alternative A2A channels must be OFF so a passing scenario is only passing via ai-memory shared memory. Any true here = thesis-preserving.",
				"a2a_protocol_off": true,
				"sub_agent_or_sessions_spawn_off": true,
				"alternative_channels_off": true,
				"tool_allowlist_is_memory_only": true,
				"a2a_gate_profile_locked": true
			},
			"functional_probes": {
				"xai_grok_chat_reachable": true,
				"xai_grok_sample_reply": "READY",
				"substrate_http_canary_f2a": true,
				"substrate_http_canary_uuid": "09a4b125-7659-4247-9eca-660652805fd2",
				"agent_mcp_canary_f2b": false,
				"agent_mcp_canary_uuid": "e1571730-c8e1-481d-ae4b-df373d075f05",
				"agent_canary_response_head": "Traceback (most recent call last):   File \"/usr/local/bin/hermes\", line 11, in <module>     main()   File \"/root/.hermes/hermes-agent/hermes_cli/main.py\", line 8487, in main     args.func(args)   File \"/root/.hermes/hermes-agent/hermes_cli/main.py\", line 1071, in cmd_chat     if not _has_any_provider_configured():            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   File \"/root/.hermes/hermes-agent/hermes_cli/main.py\", line 209, in _has_any_provider_configured     from hermes_cli.auth import get_auth_sta",
				"_f2b_note": "F2b is LLM-dependent and non-blocking. F2a (deterministic HTTP substrate) gates baseline_pass.",
				"agent_mcp_ai_memory_canary": true,
				"canary_uuid": "09a4b125-7659-4247-9eca-660652805fd2",
				"canary_namespace": "_baseline_canary_f2a"
			},
			"baseline_pass": true
		}
	]
}

raw file

F3 — peer A2A via shared memory F3 OK

Workflow-level probe answering "can agents communicate through ai-memory?". Writer ai:alice posted canary UUID 0d2b344e-b6bd-4013-9c15-4ef18aa9d82c to namespace _baseline_peer_canary via node-1's local ai-memory serve HTTP. After W=2 fanout settle, probe confirmed the canary on each of the 3 peer nodes via their local GET /api/v1/memories.

f3-peer-a2a.json
{
	"probe": "F3",
	"name": "peer-a2a-via-shared-memory",
	"description": "Writer agent posts a canary via local ai-memory HTTP on node-1; verifies the row propagates to the 3 peer nodes (W=2/N=4 quorum) before scenarios run.",
	"canary_uuid": "0d2b344e-b6bd-4013-9c15-4ef18aa9d82c",
	"canary_namespace": "_baseline_peer_canary",
	"writer_agent": "ai:alice",
	"pass": true
}

raw file

AI NHI analysis

No per-campaign narrative recorded yet. scripts/analyze_run.py will generate one on the next dispatch.

Tests performed in this run

Every scenario that produced a JSON report in this campaign, in testbook order. Click a row's scenario id to jump to its full report below. See the Every test performed page for the authoritative catalog.

IDTitleResultReason
S1Per-agent write + read (MCP stdio)?
S1bPer-agent write + read (HTTP)PASS

Scenario 1 — Per-agent write + read (MCP stdio) UNKNOWN

scenario-1.json (report)

          

raw file

scenario-1.log (console trace)
[scenario-1 hermes] phase A: each agent writes 10 memories via MCP
[scenario-1 hermes]   agent ai:alice on node-a (167.71.87.123)
Traceback (most recent call last):
  File "/usr/local/bin/hermes", line 11, in <module>
    main()
  File "/root/.hermes/hermes-agent/hermes_cli/main.py", line 8487, in main
    args.func(args)
  File "/root/.hermes/hermes-agent/hermes_cli/main.py", line 1071, in cmd_chat
    if not _has_any_provider_configured():
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.hermes/hermes-agent/hermes_cli/main.py", line 209, in _has_any_provider_configured
    from hermes_cli.auth import get_auth_status
  File "/root/.hermes/hermes-agent/hermes_cli/auth.py", line 38, in <module>
    import httpx
ModuleNotFoundError: No module named 'httpx'

raw file

Scenario 1b — Per-agent write + read (HTTP) PASS

scenario-1b.json (report)
{
	"scenario": "1b",
	"pass": true,
	"agent_group": "hermes",
	"path": "serve-http",
	"expected_per_reader": 20,
	"per_agent": {
		"ai:alice": {
			"recall": 20
		},
		"ai:bob": {
			"recall": 20
		},
		"ai:charlie": {
			"recall": 20
		}
	},
	"reasons": []
}

raw file

scenario-1b.log (console trace)
[scenario-1b hermes] phase A: each agent POSTs 10 memories to local serve
[scenario-1b hermes]   agent ai:alice on node-a (167.71.87.123)
[scenario-1b hermes]   agent ai:bob on node-b (138.197.125.5)
[scenario-1b hermes]   agent ai:charlie on node-c (64.225.62.213)
[scenario-1b hermes] settle 15s for W=2/N=4 convergence
[scenario-1b hermes] phase B: each reader counts rows in the OTHER two namespaces via local serve
[scenario-1b hermes]   ai:alice sees 20 rows from the other two namespaces
[scenario-1b hermes]   ai:bob sees 20 rows from the other two namespaces
[scenario-1b hermes]   ai:charlie sees 20 rows from the other two namespaces
[scenario-1b hermes] phase C: cross-cluster identity verification via node-4
[scenario-1b hermes]   ns=scenario1b-ai:alice count=10 wrong_agent_id=0
[scenario-1b hermes]   ns=scenario1b-ai:bob count=10 wrong_agent_id=0
[scenario-1b hermes]   ns=scenario1b-ai:charlie count=10 wrong_agent_id=0

raw file

All artifacts