Complete overhaul of agent-health-check.py (v2) to fix 6 monitoring gaps:
Fix 1: Koby & Koonimo now SSHa ble
Both had host: None — completely skipped by health checks. Now SSH to .129 (koby) and .114 (koonimo).
Fix 2: Agent key name format
Was looking for LITELLM_API_KEY_{NAME} but vault keys are {NAME}_LITELLM_API_KEY. Fallback never matched — all agent keys silently used the master key.
Fix 3: CT liveness check (NEW)
Checks pct status <CT> on each agent's PVE node. Catches stopped containers (Mumuni was stopped for days without detection).
Fix 4: Config YAML integrity (NEW)
Runs yaml.safe_load() on each agent's config.yaml. Catches syntax errors (Mumuni had a broken YAML on line 234).
Fix 5: Wrapper/CLI integrity (NEW)
Verifies hermes wrapper exists, infisical path is correct, hermes-real is reachable. Catches wrong binary paths (baggy's wrapper had /usr/local/bin/infisical but binary is at /usr/bin/infisical).
Fix 6: Vault secret non-emptiness (NEW)
Checks each agent-specific vault key is non-empty and starts with sk-. Baggy's BAGGY_LITELLM_API_KEY was empty for days.
Contracts updated
litellm-self-heal.prose.md — fleet roster, v2 features
infrastructure-control.prose.md — check table now lists all 9 checks
## What changed
Complete overhaul of `agent-health-check.py` (v2) to fix 6 monitoring gaps:
### Fix 1: Koby & Koonimo now SSHa ble
Both had `host: None` — completely skipped by health checks. Now SSH to .129 (koby) and .114 (koonimo).
### Fix 2: Agent key name format
Was looking for `LITELLM_API_KEY_{NAME}` but vault keys are `{NAME}_LITELLM_API_KEY`. Fallback never matched — all agent keys silently used the master key.
### Fix 3: CT liveness check (NEW)
Checks `pct status <CT>` on each agent's PVE node. Catches stopped containers (Mumuni was stopped for days without detection).
### Fix 4: Config YAML integrity (NEW)
Runs `yaml.safe_load()` on each agent's config.yaml. Catches syntax errors (Mumuni had a broken YAML on line 234).
### Fix 5: Wrapper/CLI integrity (NEW)
Verifies hermes wrapper exists, infisical path is correct, hermes-real is reachable. Catches wrong binary paths (baggy's wrapper had /usr/local/bin/infisical but binary is at /usr/bin/infisical).
### Fix 6: Vault secret non-emptiness (NEW)
Checks each agent-specific vault key is non-empty and starts with `sk-`. Baggy's BAGGY_LITELLM_API_KEY was empty for days.
### Contracts updated
- `litellm-self-heal.prose.md` — fleet roster, v2 features
- `infrastructure-control.prose.md` — check table now lists all 9 checks
- `hermes-agent-baseline.prose.md` — script reference updated
Gaps fixed:
- Koby (.129) and Koonimo (.114) now have SSH hosts — no longer skipped
- Agent key lookup uses correct {NAME}_LITELLM_API_KEY format
- New CT liveness check via pct status on PVE nodes
- New config YAML integrity check via yaml.safe_load()
- New wrapper/CLI integrity check (hermes wrapper, infisical path, hermes-real)
- New vault secret non-emptiness check
- Ops escalation: failures produce ALERT lines for cron capture
Verification protocol run 2026-07-26:
- CT 118 (jdownloader): DHCP had moved it to .131 post-reboot. Now set to static .20.
- RTX 5070 (.110) llama-server: was stopped (disabled unit). Started and verified — gemma-4-12b responding through LiteLLM.
- All 6 PVE nodes confirmed at correct IPs.
- All 18 CTs confirmed at correct IPs on correct nodes.
- All public endpoints responding (meet, chat, git, litellm, vault, auth).
- Container counts verified: docker-vm 14 ctrs, CT 116 10 ctrs, VPS 5 ctrs.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
What changed
Complete overhaul of
agent-health-check.py(v2) to fix 6 monitoring gaps:Fix 1: Koby & Koonimo now SSHa ble
Both had
host: None— completely skipped by health checks. Now SSH to .129 (koby) and .114 (koonimo).Fix 2: Agent key name format
Was looking for
LITELLM_API_KEY_{NAME}but vault keys are{NAME}_LITELLM_API_KEY. Fallback never matched — all agent keys silently used the master key.Fix 3: CT liveness check (NEW)
Checks
pct status <CT>on each agent's PVE node. Catches stopped containers (Mumuni was stopped for days without detection).Fix 4: Config YAML integrity (NEW)
Runs
yaml.safe_load()on each agent's config.yaml. Catches syntax errors (Mumuni had a broken YAML on line 234).Fix 5: Wrapper/CLI integrity (NEW)
Verifies hermes wrapper exists, infisical path is correct, hermes-real is reachable. Catches wrong binary paths (baggy's wrapper had /usr/local/bin/infisical but binary is at /usr/bin/infisical).
Fix 6: Vault secret non-emptiness (NEW)
Checks each agent-specific vault key is non-empty and starts with
sk-. Baggy's BAGGY_LITELLM_API_KEY was empty for days.Contracts updated
litellm-self-heal.prose.md— fleet roster, v2 featuresinfrastructure-control.prose.md— check table now lists all 9 checkshermes-agent-baseline.prose.md— script reference updatedGaps fixed: - Koby (.129) and Koonimo (.114) now have SSH hosts — no longer skipped - Agent key lookup uses correct {NAME}_LITELLM_API_KEY format - New CT liveness check via pct status on PVE nodes - New config YAML integrity check via yaml.safe_load() - New wrapper/CLI integrity check (hermes wrapper, infisical path, hermes-real) - New vault secret non-emptiness check - Ops escalation: failures produce ALERT lines for cron capturee0f5e4f74eto47aa92bee3