From 5ab2d913eb9cb7069815afcb67df1b3a8b870dc4 Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Fri, 21 Aug 2026 04:16:27 +0000 Subject: [PATCH] fix(hermes): allow two durable CLI workers --- services/hermes/agent-configmap.yaml | 4 +++- services/hermes/execution-coordinator-patch.yaml | 4 +++- testing/tests/test_hermes_agent_layout.py | 2 ++ testing/tests/test_hermes_execution_pool_assignment.py | 2 +- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/services/hermes/agent-configmap.yaml b/services/hermes/agent-configmap.yaml index d339b8c2..4718723f 100644 --- a/services/hermes/agent-configmap.yaml +++ b/services/hermes/agent-configmap.yaml @@ -84,7 +84,9 @@ data: failure_limit: 2 orchestrator_profile: default default_assignee: cli-auto - max_in_progress_per_profile: 1 + # Allow two in-progress tasks for each normal Hermes gateway profile. + # Direct cli-* runner concurrency is set in execution-coordinator-patch.yaml. + max_in_progress_per_profile: 2 auto_decompose: true auto_decompose_per_tick: 2 # In-pod autonomous supervisor (kanban_supervisor.py). Default false so it diff --git a/services/hermes/execution-coordinator-patch.yaml b/services/hermes/execution-coordinator-patch.yaml index b0526d8e..b964ff50 100644 --- a/services/hermes/execution-coordinator-patch.yaml +++ b/services/hermes/execution-coordinator-patch.yaml @@ -18,7 +18,9 @@ spec: - name: cli-lane-runner env: - {name: HERMES_CLI_LANE_OWNED_WORKSPACES_ONLY, value: "true"} - - {name: HERMES_CLI_LANE_CONCURRENCY, value: "1"} + # Cap simultaneous direct cli-* Codex/Claude runner processes; + # normal Hermes profiles use kanban.max_in_progress_per_profile. + - {name: HERMES_CLI_LANE_CONCURRENCY, value: "2"} - name: execution-pool-coordinator image: registry.bstein.dev/bstein/hermes-agent@sha256:81970563e542f0720773e72297810b3a844b83e381e278f25c0916c78d930107 imagePullPolicy: IfNotPresent diff --git a/testing/tests/test_hermes_agent_layout.py b/testing/tests/test_hermes_agent_layout.py index 36cdff8e..df2c81b0 100644 --- a/testing/tests/test_hermes_agent_layout.py +++ b/testing/tests/test_hermes_agent_layout.py @@ -107,8 +107,10 @@ def test_agent_uses_one_native_kanban_control_plane(): "default": "atlas/auto/balanced", "model": "atlas/auto/balanced", } + assert config["gateway"]["api_server"]["max_concurrent_runs"] == 4 assert config["kanban"]["dispatch_in_gateway"] is True assert config["kanban"]["default_assignee"] == "cli-auto" + assert config["kanban"]["max_in_progress_per_profile"] == 2 assert config["plugins"]["enabled"] == ["auto-router"] deployment = _agent_deployment() diff --git a/testing/tests/test_hermes_execution_pool_assignment.py b/testing/tests/test_hermes_execution_pool_assignment.py index d2fd91bd..faf13540 100644 --- a/testing/tests/test_hermes_execution_pool_assignment.py +++ b/testing/tests/test_hermes_execution_pool_assignment.py @@ -124,7 +124,7 @@ def test_additive_patch_replaces_local_lane_without_touching_base_deployment(): environment = {item["name"]: item["value"] for item in local["env"]} assert environment == { "HERMES_CLI_LANE_OWNED_WORKSPACES_ONLY": "true", - "HERMES_CLI_LANE_CONCURRENCY": "1", + "HERMES_CLI_LANE_CONCURRENCY": "2", } assert pool["resources"]["requests"] == {"cpu": "50m", "memory": "128Mi"} access = next(item for item in pool["volumeMounts"] if item["name"] == "runtime-access") -- 2.47.2