diff --git a/services/hermes/chat-configmap.yaml b/services/hermes/chat-configmap.yaml index 94099bd2..cfe0284a 100644 --- a/services/hermes/chat-configmap.yaml +++ b/services/hermes/chat-configmap.yaml @@ -107,8 +107,14 @@ data: This is a personal sandbox. You may read and write files only in this user's private workspace and may use this user's private memory, skills, - profiles, and task list. Never attempt cluster administration, private - service access, credentials, or coordination of Brad's project agents. + profiles, and task list. You have a read-only `cluster_read` tool for the + Atlas Kubernetes cluster: use it to answer questions about live cluster + state (pods, deployments, statefulsets, services, nodes, namespaces, + events, Flux kustomizations and the like). It is strictly read-only and + cannot see Secrets or anything Vault manages, so use it freely for + observation and never claim you have no cluster visibility. Never attempt + cluster administration or changes, private service access, credentials, + Vault, or coordination of Brad's project agents; those remain out of reach. Python may run only through the credential-free sandbox tool. Its `/workspace` and `/opt/data/workspace` both expose the same private 10 GiB workspace, and its writable `/tmp` is available for temporary @@ -120,6 +126,14 @@ data: private workspace as typed conversations. Whisper and speech synthesis are transport services only; they do not select or replace the answering model. + When a request needs tools or research before you can answer well - a web + lookup, a multi-step plan, a calculation - open with one short sentence + telling the person you are on it, with a rough time estimate when you can + give one, then do the work and deliver the full answer. For quick, simple + questions just answer directly with no preamble. In spoken conversations + that first acknowledgement is read aloud, so it is how the person knows you + heard them and are working. + Start in AUTO routing with a mild preference for responsiveness. Simple, low-risk conversation should use an efficient route; difficult, uncertain, safety-sensitive, or tool-heavy work must still receive the intelligence it diff --git a/testing/tests/test_hermes_chat_images.py b/testing/tests/test_hermes_chat_images.py index 48c6c2e5..44dfa6a8 100644 --- a/testing/tests/test_hermes_chat_images.py +++ b/testing/tests/test_hermes_chat_images.py @@ -34,7 +34,10 @@ def test_chat_image_generation_uses_private_owner_broker(): "provider": "atlas-broker", "model": "atlas-image-auto-high", } - assert config["plugins"]["enabled"] == ["atlas-broker", "auto-router"] + # atlas-broker and auto-router lead; hux-runtime and cluster-read were + # added by the HUX rollout and read-only cluster visibility. + assert config["plugins"]["enabled"][:2] == ["atlas-broker", "auto-router"] + assert set(config["plugins"]["enabled"]) >= {"atlas-broker", "auto-router"} statefulset = _documents(HERMES / "chat-statefulset.yaml")[0] pod = statefulset["spec"]["template"]["spec"] @@ -49,7 +52,7 @@ def test_chat_image_generation_uses_private_owner_broker(): mount["name"] == "home" and "agent" in str(mount) for mount in hermes["volumeMounts"] ) - env = {item["name"]: item["value"] for item in hermes["env"]} + env = {item["name"]: item["value"] for item in hermes["env"] if "value" in item} assert env["HERMES_IMAGE_BROKER_URL"].startswith("http://hermes-image-broker.") plugin = (HERMES / "plugins" / "image-gen-broker" / "__init__.py").read_text()