hermes(chat): teach the assistant cluster_read and voice acknowledgements

The chat prompt still forbade all cluster access, so Hermes told users
it had no visibility even though cluster_read is live - it now knows it
has a read-only cluster tool (no Secrets/Vault) and should use it rather
than deny. Adds tool/research-conditioned acknowledgement guidance: when
a turn needs a lookup, plan or calculation, open with one short 'on it,
~ETA' line then deliver the full answer; simple questions get no
preamble. In spoken mode that first line is read aloud. Fixes two
pre-existing exact-match test pins the HUX/cluster rollout had grown
(plugins.enabled list; a fieldRef env comprehension).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvMSXH8VH2tMWXanb8SJdf
This commit is contained in:
jenkins 2026-08-24 15:20:42 -03:00
parent 834fec17c5
commit 13a058a5c8
2 changed files with 21 additions and 4 deletions

View File

@ -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

View File

@ -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()