diff --git a/contract-registry.yaml b/contract-registry.yaml index 750ec9f..9f7af92 100644 --- a/contract-registry.yaml +++ b/contract-registry.yaml @@ -1,1697 +1,1767 @@ -# Contract Registry — OpenProse Enforcement Index -# -# Maps every prose contract to its enforcement category, trigger mechanism, -# dependencies, postconditions, and escalation rules. -# -# Contracts are indexed by: -# 1. Enforcement category (compliance, monitoring, remediation, ...) -# 2. Domain (hermes-agent, zulip, infrastructure, gpu, proxmox, litellm, ...) -# 3. Owner (who runs it: abiba, mumuni, kwame, or none) -# 4. Trigger type (scheduled, event_driven, passive, on_demand) -# -# Use the top-level `index` map for quick lookups by any dimension: -# - index.by_category: contract name → category -# - index.by_domain: domain → [contract names] -# - index.by_owner: owner → [contract names] -# - index.by_trigger: trigger type → [contract names] -# - index.by_sensitivity: sensitivity → [contract names] -# -# Schema reference: ~/.hermes/contract-registry.md -# -# Last updated: 2026-07-13 - -registry_version: "0.1.0" -last_updated: "2026-07-13T00:00:00Z" +registry_version: 0.1.0 +last_updated: '2026-07-13T00:00:00Z' updated_by: mumuni - categories: - - compliance - - monitoring - - remediation - - build_deploy - - maintenance - - reference - +- compliance +- monitoring +- remediation +- build_deploy +- maintenance +- reference domains: - - hermes-agent - - zulip - - infrastructure - - gpu - - proxmox - - litellm - - memory - - relay - - shared-patterns - +- hermes-agent +- zulip +- infrastructure +- gpu +- proxmox +- litellm +- memory +- relay +- shared-patterns owners: - - abiba - - mumuni - - kwame - +- abiba +- mumuni +- kwame trigger_types: - - scheduled - - event_driven - - passive - - on_demand - - none - +- scheduled +- event_driven +- passive +- on_demand +- none sensitivity_levels: - - critical - - high - - normal - - retired - -sensitivity_levels: - - critical - - high - - normal - - retired - -# ─── Multi-Dimensional Index ────────────────────────────────── -# Quick lookups by any dimension. Generated from the contracts list. - +- critical +- high +- normal +- retired index: - - # Contract name → category mapping by_category: compliance: - - hermes-key-enforcement - - hermes-config-template - - hermes-agent-baseline + - hermes-key-enforcement + - hermes-config-template + - hermes-agent-baseline monitoring: - - proxmox-monitor - - gpu-monitor - - infrastructure-monitoring - - zulip-health - - litellm-health + - proxmox-monitor + - gpu-monitor + - infrastructure-monitoring + - zulip-health + - litellm-health remediation: - - litellm-self-heal - - pm2-self-heal - - disk-gc-threat-response - - hermes-zulip-restore + - litellm-self-heal + - pm2-self-heal + - disk-gc-threat-response + - hermes-zulip-restore build_deploy: - - hermes-zulip-plugin - - build-zulip-plugin - - stirling-pdf-agent-access + - hermes-zulip-plugin + - build-zulip-plugin + - stirling-pdf-agent-access maintenance: - - memory-audit-maintenance - - gpu-fleet - - infrastructure-update + - memory-audit-maintenance + - gpu-fleet + - infrastructure-update reference: - - infrastructure-control - - ra-h-os-custodianship-contract - - mumuni-delegation - - zulip-approval-fix - - zulip-oidc-redirect-fix - - hello-world - - zulip-adapter-lessons - - pi-approval-architecture + - infrastructure-control + - ra-h-os-custodianship-contract + - mumuni-delegation + - zulip-approval-fix + - zulip-oidc-redirect-fix + - hello-world + - zulip-adapter-lessons + - pi-approval-architecture retired: - - zulip-mention-reliability - - zulip-self-heal - - # Domain → contract names (natural grouping by subsystem) + - zulip-mention-reliability + - zulip-self-heal by_domain: hermes-agent: - - hermes-key-enforcement - - hermes-config-template - - hermes-agent-baseline - - mumuni-delegation + - hermes-key-enforcement + - hermes-config-template + - hermes-agent-baseline + - mumuni-delegation zulip: - - zulip-health - - hermes-zulip-restore - - hermes-zulip-plugin - - build-zulip-plugin - - zulip-approval-fix - - zulip-oidc-redirect-fix - - zulip-adapter-lessons - - zulip-mention-reliability - - zulip-self-heal + - zulip-health + - hermes-zulip-restore + - hermes-zulip-plugin + - build-zulip-plugin + - zulip-approval-fix + - zulip-oidc-redirect-fix + - zulip-adapter-lessons + - zulip-mention-reliability + - zulip-self-heal infrastructure: - - infrastructure-control - - infrastructure-monitoring - - infrastructure-update - - pm2-self-heal - - disk-gc-threat-response + - infrastructure-control + - infrastructure-monitoring + - infrastructure-update + - pm2-self-heal + - disk-gc-threat-response gpu: - - gpu-monitor - - gpu-fleet + - gpu-monitor + - gpu-fleet proxmox: - - proxmox-monitor + - proxmox-monitor litellm: - - litellm-health - - litellm-self-heal + - litellm-health + - litellm-self-heal memory: - - memory-audit-maintenance + - memory-audit-maintenance shared-patterns: - - ra-h-os-custodianship-contract - - pi-approval-architecture - - stirling-pdf-agent-access - - hello-world + - ra-h-os-custodianship-contract + - pi-approval-architecture + - stirling-pdf-agent-access + - hello-world retired: - - zulip-mention-reliability - - zulip-self-heal - - zulip-adapter-lessons - - pi-approval-architecture - - # Owner → contract names (who runs it) + - zulip-mention-reliability + - zulip-self-heal + - zulip-adapter-lessons + - pi-approval-architecture by_owner: abiba: - - hermes-key-enforcement - - hermes-config-template - - hermes-agent-baseline - - proxmox-monitor - - gpu-monitor - - infrastructure-monitoring - - zulip-health - - litellm-health - - litellm-self-heal - - pm2-self-heal - - disk-gc-threat-response - - hermes-zulip-restore - - hermes-zulip-plugin - - build-zulip-plugin - - stirling-pdf-agent-access - - gpu-fleet - - infrastructure-update - - infrastructure-control - - zulip-adapter-lessons - - pi-approval-architecture - - zulip-approval-fix - - zulip-oidc-redirect-fix - - zulip-mention-reliability - - zulip-self-heal + - hermes-key-enforcement + - hermes-config-template + - hermes-agent-baseline + - proxmox-monitor + - gpu-monitor + - infrastructure-monitoring + - zulip-health + - litellm-health + - litellm-self-heal + - pm2-self-heal + - disk-gc-threat-response + - hermes-zulip-restore + - hermes-zulip-plugin + - build-zulip-plugin + - stirling-pdf-agent-access + - gpu-fleet + - infrastructure-update + - infrastructure-control + - zulip-adapter-lessons + - pi-approval-architecture + - zulip-approval-fix + - zulip-oidc-redirect-fix + - zulip-mention-reliability + - zulip-self-heal mumuni: - - memory-audit-maintenance - - ra-h-os-custodianship-contract - - mumuni-delegation + - memory-audit-maintenance + - ra-h-os-custodianship-contract + - mumuni-delegation kwame: - - hello-world - - # Trigger type → contract names + - hello-world by_trigger: scheduled: - - hermes-key-enforcement - - hermes-config-template - - hermes-agent-baseline - - proxmox-monitor - - gpu-monitor - - infrastructure-monitoring - - zulip-health - - litellm-health - - memory-audit-maintenance - - infrastructure-update + - hermes-key-enforcement + - hermes-config-template + - hermes-agent-baseline + - proxmox-monitor + - gpu-monitor + - infrastructure-monitoring + - zulip-health + - litellm-health + - memory-audit-maintenance + - infrastructure-update event_driven: - - litellm-self-heal - - pm2-self-heal - - disk-gc-threat-response - - hermes-zulip-restore - - gpu-fleet - - zulip-oidc-redirect-fix + - litellm-self-heal + - pm2-self-heal + - disk-gc-threat-response + - hermes-zulip-restore + - gpu-fleet + - zulip-oidc-redirect-fix passive: - - infrastructure-control - - ra-h-os-custodianship-contract - - mumuni-delegation - - zulip-adapter-lessons - - pi-approval-architecture - - zulip-approval-fix + - infrastructure-control + - ra-h-os-custodianship-contract + - mumuni-delegation + - zulip-adapter-lessons + - pi-approval-architecture + - zulip-approval-fix on_demand: - - hermes-zulip-plugin - - build-zulip-plugin - - stirling-pdf-agent-access - - hello-world + - hermes-zulip-plugin + - build-zulip-plugin + - stirling-pdf-agent-access + - hello-world none: - - zulip-mention-reliability - - zulip-self-heal - - # Sensitivity → contract names + - zulip-mention-reliability + - zulip-self-heal by_sensitivity: critical: - - hermes-key-enforcement - - proxmox-monitor - - gpu-monitor - - litellm-health - - litellm-self-heal - - disk-gc-threat-response - - gpu-fleet - - infrastructure-control + - hermes-key-enforcement + - proxmox-monitor + - gpu-monitor + - litellm-health + - litellm-self-heal + - disk-gc-threat-response + - gpu-fleet + - infrastructure-control high: - - hermes-config-template - - infrastructure-monitoring - - zulip-health - - pm2-self-heal - - hermes-zulip-restore - - hermes-zulip-plugin - - build-zulip-plugin - - infrastructure-update - - ra-h-os-custodianship-contract - - mumuni-delegation + - hermes-config-template + - infrastructure-monitoring + - zulip-health + - pm2-self-heal + - hermes-zulip-restore + - hermes-zulip-plugin + - build-zulip-plugin + - infrastructure-update + - ra-h-os-custodianship-contract + - mumuni-delegation normal: - - hermes-agent-baseline - - stirling-pdf-agent-access - - memory-audit-maintenance - - zulip-approval-fix - - zulip-oidc-redirect-fix - - hello-world + - hermes-agent-baseline + - stirling-pdf-agent-access + - memory-audit-maintenance + - zulip-approval-fix + - zulip-oidc-redirect-fix + - hello-world retired: - - zulip-adapter-lessons - - pi-approval-architecture - - zulip-mention-reliability - - zulip-self-heal - + - zulip-adapter-lessons + - pi-approval-architecture + - zulip-mention-reliability + - zulip-self-heal contracts: - - # ─── COMPLIANCE ─────────────────────────────────────────────── - - - name: hermes-key-enforcement - file: hermes-key-enforcement.prose.md - kind: enforcement - category: compliance - sensitivity: critical - status: active - owner: abiba - version: 1.0.0 - trigger: - type: scheduled - cadence: "0 6 * * *" - description: "Daily compliance scan at 6am ET" - cron_job_id: null - execution: - agent: abiba - timeout: 300 - requires: [] - protocol: - - "Load contract from prose-contracts/main" - - "Verify prerequisites: config.yaml readable, harness/litellm sections present" - - "Execute enforcement: grep config for plaintext keys" - - "On failure: stop, don't hallucinate forward" - - "Log actions to ~/.hermes/runs/hermes-key-enforcement/" - verification: - postconditions: - - check: "no plaintext API keys in config" - verify: "grep -rc 'api_key: sk-' /root/.hermes/config.yaml" - expect: "0 matches" - - check: "api_key_env used for harness/litellm providers" - verify: "grep -c 'api_key_env.*LITELLM_API_KEY' /root/.hermes/config.yaml" - expect: "count > 0" - artifact: "before/after verification report" - verify_commands: - - "grep -rc 'api_key: sk-' /root/.hermes/config.yaml" - - "grep -c 'api_key_env.*LITELLM_API_KEY' /root/.hermes/config.yaml" - receipt: - format: json - storage: "~/.hermes/runs/hermes-key-enforcement/" - graph_node: true - schema: - contract: string - run_id: string - timestamp: ISO 8601 - agent: string - status: pass|fail|escalated - actions_taken: array - postconditions: array - drift_alerts: array - evidence_path: string - escalation: - info: - action: "log_to_receipt" - notify: [] - warning: - action: "relay_alert" - notify: ["abiba"] - critical: - action: "relay_alert + pause" - notify: ["abiba", "mumuni"] - fatal: - action: "relay_alert + pause + human_required" - notify: ["abiba", "mumuni", "kwame"] - circuit_breaker: - max_retries: 3 - window: 3600 - trip_action: escalate_to_fatal - depends_on: [] - last_run: null - last_status: null - drift_alerts: [] - - - name: hermes-config-template - file: hermes-config-template.prose.md - kind: template - category: compliance - sensitivity: high - status: active - owner: abiba - version: 2.1.0 - trigger: - type: scheduled - cadence: "0 4 * * 1" - description: "Weekly config drift check Monday at 4am ET" - cron_job_id: null - execution: - agent: abiba - timeout: 300 - requires: [] - verification: - postconditions: - - check: "all agent configs match template version" - verify: "diff <(grep template_version config.yaml) <(grep template_version /root/prose-contracts/hermes-config-template.prose.md)" - expect: "no diff" - artifact: "config drift report" - receipt: - format: json - storage: "~/.hermes/runs/hermes-config-template/" - graph_node: true - escalation: - info: - action: "log_to_receipt" - notify: [] - warning: - action: "relay_alert" - notify: ["abiba"] - critical: - action: "relay_alert" - notify: ["abiba", "mumuni"] - fatal: - action: "relay_alert + human_required" - notify: ["abiba", "mumuni", "kwame"] - circuit_breaker: - max_retries: 3 - window: 3600 - trip_action: escalate_to_fatal - depends_on: [] - last_run: null - last_status: null - drift_alerts: [] - - - name: hermes-agent-baseline - file: hermes-agent-baseline.prose.md - kind: template - category: compliance - sensitivity: normal - status: active - owner: abiba - version: 1.0.0 - trigger: - type: scheduled - cadence: "0 5 * * 1" - description: "Weekly baseline verification Monday at 5am ET" - cron_job_id: null - execution: - agent: abiba - timeout: 300 - requires: [] - verification: - postconditions: [] - artifact: "baseline drift report" - receipt: - format: json - storage: "~/.hermes/runs/hermes-agent-baseline/" - graph_node: true - escalation: - info: - action: "log_to_receipt" - notify: [] - warning: - action: "relay_alert" - notify: ["abiba"] - critical: - action: "relay_alert" - notify: ["abiba", "mumuni"] - fatal: - action: "relay_alert + human_required" - notify: ["abiba", "mumuni", "kwame"] - circuit_breaker: - max_retries: 3 - window: 3600 - trip_action: escalate_to_fatal - depends_on: [] - last_run: null - last_status: null - drift_alerts: [] - - # ─── MONITORING ────────────────────────────────────────────── - - - name: proxmox-monitor - file: proxmox-monitor.prose.md - kind: responsibility - category: monitoring - sensitivity: critical - status: active - owner: abiba - version: 1.0.0 - trigger: - type: scheduled - cadence: "*/15 * * * *" - description: "Every 15 minutes" - cron_job_id: null - execution: - agent: abiba - timeout: 120 - requires: [] - protocol: - - "Load contract from prose-contracts/main" - - "Verify connectivity to all Proxmox nodes" - - "Execute monitoring checks per contract" - - "Log intermediate state" - - "On failure: stop, don't hallucinate" - verification: - postconditions: - - check: "all Proxmox nodes reachable" - verify: "curl -sf http:///status | jq '.status'" - expect: "healthy" - - check: "no VMs in crashed state" - verify: "pvesh get /nodes -output-format=json | jq '.[] | select(.status==\"Crashed\")'" - expect: "empty" - - check: "backups running on schedule" - verify: "pbs-info --check" - expect: "last_backup < 24h ago" - artifact: "cluster health snapshot" - verify_commands: - - "curl -sf http:///status | jq '.status'" - - "pvesh get /nodes -output-format=json" - receipt: - format: json - storage: "~/.hermes/runs/proxmox-monitor/" - graph_node: true - escalation: - info: - action: "log_to_receipt" - notify: [] - warning: - action: "relay_alert" - notify: ["abiba", "mumuni"] - critical: - action: "relay_alert + trigger_remediation" - notify: ["abiba", "mumuni"] - triggers: ["disk-gc-threat-response"] - fatal: - action: "relay_alert + pause + human_required" - notify: ["abiba", "mumuni", "kwame"] - circuit_breaker: - max_retries: 3 - window: 3600 - trip_action: escalate_to_fatal - depends_on: [] - last_run: null - last_status: null - drift_alerts: [] - - - name: gpu-monitor - file: gpu-monitor.prose.md - kind: responsibility - category: monitoring - sensitivity: critical - status: active - owner: abiba - version: 1.0.0 - trigger: - type: scheduled - cadence: "*/15 * * * *" - description: "Every 15 minutes — polls all GPU subsystems" - cron_job_id: null - execution: - agent: abiba - timeout: 120 - requires: [] - verification: - postconditions: - - check: "GPU metrics accessible" - verify: "curl -sf http://localhost:9100/gpu-data" - expect: "200 OK, populated data" - - check: "dashboard serving" - verify: "curl -sf http://localhost:9100/gpu-fleet.html" - expect: "200 OK, HTML returned" - - check: "health endpoint responsive" - verify: "curl -sf http://localhost:9100/health" - expect: "200 OK" - artifact: "GPU fleet snapshot" - receipt: - format: json - storage: "~/.hermes/runs/gpu-monitor/" - graph_node: true - escalation: - info: - action: "log_to_receipt" - notify: [] - warning: - action: "relay_alert" - notify: ["abiba", "mumuni"] - critical: - action: "relay_alert + trigger_remediation" - notify: ["abiba", "mumuni"] - triggers: ["gpu-fleet"] - fatal: - action: "relay_alert + pause + human_required" - notify: ["abiba", "mumuni", "kwame"] - circuit_breaker: - max_retries: 3 - window: 3600 - trip_action: escalate_to_fatal - depends_on: [] - last_run: null - last_status: null - drift_alerts: [] - - - name: infrastructure-monitoring - file: infrastructure-monitoring.prose.md - kind: function - category: monitoring - sensitivity: high - status: active - owner: abiba - version: 1.0.0 - trigger: - type: scheduled - cadence: "*/30 * * * *" - description: "Every 30 minutes" - cron_job_id: null - execution: - agent: abiba - timeout: 180 - requires: [] - verification: - postconditions: - - check: "all services reachable" - verify: "curl -sf http://" - expect: "200 OK for all" - artifact: "infrastructure health report" - receipt: - format: json - storage: "~/.hermes/runs/infrastructure-monitoring/" - graph_node: true - escalation: - info: - action: "log_to_receipt" - notify: [] - warning: - action: "relay_alert" - notify: ["abiba", "mumuni"] - critical: - action: "relay_alert + trigger_remediation" - notify: ["abiba", "mumuni"] - triggers: ["litellm-health"] - fatal: - action: "relay_alert + pause + human_required" - notify: ["abiba", "mumuni", "kwame"] - circuit_breaker: - max_retries: 3 - window: 3600 - trip_action: escalate_to_fatal - depends_on: [] - last_run: null - last_status: null - drift_alerts: [] - - - name: zulip-health - file: zulip-health.prose.md - kind: responsibility - category: monitoring - sensitivity: high - status: active - owner: abiba - version: 3.0.0 - trigger: - type: scheduled - cadence: "*/15 * * * *" - description: "Every 15 minutes — monitors all Zulip-connected agents" - cron_job_id: null - execution: - agent: abiba - timeout: 120 - requires: - - "Zulip API key for abiba-bot@chat.sysloggh.net" - - "SSH access to all Hermes agents" - verification: - postconditions: - - check: "bot registration active" - verify: "curl -sf https://chat.sysloggh.net/api/v1/me | jq '.user_id'" - expect: "bot_id present" - - check: "DM delivery working" - verify: "send test DM to each agent" - expect: "message delivered within 5s" - artifact: "Zulip mesh health report" - receipt: - format: json - storage: "~/.hermes/runs/zulip-health/" - graph_node: true - escalation: - info: - action: "log_to_receipt" - notify: [] - warning: - action: "relay_alert" - notify: ["abiba", "mumuni"] - critical: - action: "relay_alert + trigger_remediation" - notify: ["abiba", "mumuni"] - triggers: ["hermes-zulip-restore"] - fatal: - action: "relay_alert + pause + human_required" - notify: ["abiba", "mumuni", "kwame"] - circuit_breaker: - max_retries: 3 - window: 3600 - trip_action: escalate_to_fatal - depends_on: [] - last_run: null - last_status: null - drift_alerts: [] - - - name: litellm-health - file: litellm-health.prose.md - kind: function - category: monitoring - sensitivity: critical - status: active - owner: abiba - version: 1.0.0 - trigger: - type: scheduled - cadence: "*/10 * * * *" - description: "Every 10 minutes — LiteLLM proxy health" - cron_job_id: null - execution: - agent: abiba - timeout: 60 - requires: [] - verification: - postconditions: - - check: "LiteLLM proxy reachable" - verify: "curl -sf http://192.168.68.116/litellm/v1/models" - expect: "200 OK, models returned" - - check: "router deprecated, nginx routes work" - verify: "curl -sf https://litellm.sysloggh.net/v1/models" - expect: "200 OK (via nginx)" - artifact: "LiteLLM health snapshot" - receipt: - format: json - storage: "~/.hermes/runs/litellm-health/" - graph_node: true - escalation: - info: - action: "log_to_receipt" - notify: [] - warning: - action: "relay_alert" - notify: ["abiba", "mumuni"] - critical: - action: "relay_alert + trigger_remediation" - notify: ["abiba", "mumuni"] - triggers: ["litellm-self-heal"] - fatal: - action: "relay_alert + pause + human_required" - notify: ["abiba", "mumuni", "kwame"] - circuit_breaker: - max_retries: 3 - window: 3600 - trip_action: escalate_to_fatal - depends_on: [] - last_run: null - last_status: null - drift_alerts: [] - - # ─── REMEDIATION ──────────────────────────────────────────── - - - name: litellm-self-heal - file: litellm-self-heal.prose.md - kind: responsibility - category: remediation - sensitivity: critical - status: active - owner: abiba - version: 1.0.0 - trigger: - type: event_driven - description: "Triggered by relay message from litellm-health or infrastructure-monitoring" - relay_message_type: "remediation:litellm-self-heal" - cron_job_id: null - execution: - agent: abiba - timeout: 600 - requires: - - "Relay message with failure details from monitoring contract" - verification: - postconditions: - - check: "LiteLLM proxy responding" - verify: "curl -sf http://192.168.68.116/litellm/v1/models" - expect: "200 OK" - artifact: "self-heal run report" - receipt: - format: json - storage: "~/.hermes/runs/litellm-self-heal/" - graph_node: true - escalation: - info: - action: "log_to_receipt" - notify: [] - warning: - action: "relay_alert" - notify: ["abiba", "mumuni"] - critical: - action: "relay_alert + pause" - notify: ["abiba", "mumuni"] - fatal: - action: "relay_alert + pause + human_required" - notify: ["abiba", "mumuni", "kwame"] - circuit_breaker: - max_retries: 3 - window: 3600 - trip_action: escalate_to_fatal - depends_on: [] - last_run: null - last_status: null - drift_alerts: [] - - - name: pm2-self-heal - file: pm2-self-heal.prose.md - kind: responsibility - category: remediation - sensitivity: high - status: active - owner: abiba - version: 1.0.0 - trigger: - type: event_driven - description: "Triggered by relay message when PM2 process crashes" - relay_message_type: "remediation:pm2-self-heal" - cron_job_id: null - execution: - agent: abiba - timeout: 300 - requires: - - "Relay message with process name and failure details" - verification: - postconditions: - - check: "PM2 process running" - verify: "pm2 list | grep " - expect: "online" - artifact: "self-heal run report" - receipt: - format: json - storage: "~/.hermes/runs/pm2-self-heal/" - graph_node: true - escalation: - info: - action: "log_to_receipt" - notify: [] - warning: - action: "relay_alert" - notify: ["abiba"] - critical: - action: "relay_alert" - notify: ["abiba", "mumuni"] - fatal: - action: "relay_alert + human_required" - notify: ["abiba", "mumuni", "kwame"] - circuit_breaker: - max_retries: 3 - window: 3600 - trip_action: escalate_to_fatal - depends_on: [] - last_run: null - last_status: null - drift_alerts: [] - - - name: disk-gc-threat-response - file: disk-gc-threat-response.prose.md - kind: responsibility - category: remediation - sensitivity: critical - status: active - owner: abiba - version: 1.0.0 - trigger: - type: event_driven - description: "Triggered by relay message from proxmox-monitor when disk >80%" - relay_message_type: "remediation:disk-gc-threat-response" - cron_job_id: null - execution: - agent: abiba - timeout: 900 - requires: - - "Relay message with target CT/host and current disk usage" - protocol: - - "Load contract from prose-contracts/main" - - "Verify target node reachable" - - "Run garbage collection per contract SOP" - - "Verify disk usage reduced" - verification: - postconditions: - - check: "disk usage below 80%" - verify: "df -h " - expect: "<80%" - - check: "no critical services stopped" - verify: "ps aux | grep " - expect: "all running" - artifact: "GC run report with reclaimed space" - receipt: - format: json - storage: "~/.hermes/runs/disk-gc-threat-response/" - graph_node: true - escalation: - info: - action: "log_to_receipt" - notify: [] - warning: - action: "relay_alert" - notify: ["abiba", "mumuni"] - critical: - action: "relay_alert + pause" - notify: ["abiba", "mumuni"] - fatal: - action: "relay_alert + pause + human_required" - notify: ["abiba", "mumuni", "kwame"] - circuit_breaker: - max_retries: 3 - window: 3600 - trip_action: escalate_to_fatal - depends_on: [] - last_run: null - last_status: null - drift_alerts: [] - - - name: hermes-zulip-restore - file: hermes-zulip-restore.prose.md - kind: function - category: remediation - sensitivity: high - status: active - owner: abiba - version: 1.0.0 - trigger: - type: event_driven - description: "Triggered by relay message from zulip-health when bot registration fails" - relay_message_type: "remediation:hermes-zulip-restore" - cron_job_id: null - execution: - agent: abiba - timeout: 600 - requires: - - "Relay message with failure details" - verification: - postconditions: - - check: "Zulip bot registration active" - verify: "curl -sf https://chat.sysloggh.net/api/v1/me | jq '.user_id'" - expect: "bot_id present" - - check: "DM delivery working" - verify: "send test DM" - expect: "message delivered" - artifact: "restore run report" - receipt: - format: json - storage: "~/.hermes/runs/hermes-zulip-restore/" - graph_node: true - escalation: - info: - action: "log_to_receipt" - notify: [] - warning: - action: "relay_alert" - notify: ["abiba", "mumuni"] - critical: - action: "relay_alert + pause" - notify: ["abiba", "mumuni"] - fatal: - action: "relay_alert + pause + human_required" - notify: ["abiba", "mumuni", "kwame"] - circuit_breaker: - max_retries: 3 - window: 3600 - trip_action: escalate_to_fatal - depends_on: [] - last_run: null - last_status: null - drift_alerts: [] - - # ─── BUILD/DEPLOY ─────────────────────────────────────────── - - - name: hermes-zulip-plugin - file: hermes-zulip-plugin.prose.md - kind: function - category: build_deploy - sensitivity: high - status: active - owner: abiba - version: 1.0.0 - trigger: - type: on_demand - description: "Manual or change request to update Zulip plugin" - cron_job_id: null - execution: - agent: abiba - timeout: 1800 - requires: [] - verification: - postconditions: - - check: "3 adapter files present" - verify: "ls -la /usr/local/lib/hermes-agent/plugins/platforms/zulip/" - expect: "3 files" - - check: "gateway connected" - verify: "ps aux | grep hermes" - expect: "zulip connected" - artifact: "deploy verification report" - receipt: - format: json - storage: "~/.hermes/runs/hermes-zulip-plugin/" - graph_node: true - escalation: - info: - action: "log_to_receipt" - notify: [] - warning: - action: "relay_alert" - notify: ["abiba"] - critical: - action: "relay_alert" - notify: ["abiba", "mumuni"] - fatal: - action: "relay_alert + human_required" - notify: ["abiba", "mumuni", "kwame"] - circuit_breaker: - max_retries: 1 - window: 7200 - trip_action: escalate_to_fatal - depends_on: [] - last_run: null - last_status: null - drift_alerts: [] - - - name: build-zulip-plugin - file: build-zulip-plugin.prose.md - kind: responsibility - category: build_deploy - sensitivity: high - status: active - owner: abiba - version: 1.0.0 - trigger: - type: on_demand - description: "Generate or improve Zulip plugin via iterative refinement" - cron_job_id: null - execution: - agent: abiba - timeout: 3600 - requires: [] - verification: - postconditions: - - check: "plugin builds without errors" - verify: "npm install && npm run build" - expect: "0 errors" - - check: "connectivity tests pass" - verify: "run plugin selftest" - expect: "all checks green" - artifact: "plugin version artifact" - receipt: - format: json - storage: "~/.hermes/runs/build-zulip-plugin/" - graph_node: true - escalation: - info: - action: "log_to_receipt" - notify: [] - warning: - action: "relay_alert" - notify: ["abiba"] - critical: - action: "relay_alert" - notify: ["abiba", "mumuni"] - fatal: - action: "relay_alert + human_required" - notify: ["abiba", "mumuni", "kwame"] - circuit_breaker: - max_retries: 1 - window: 7200 - trip_action: escalate_to_fatal - depends_on: [] - last_run: null - last_status: null - drift_alerts: [] - - - name: stirling-pdf-agent-access - file: stirling-pdf-agent-access.prose.md - kind: function - category: build_deploy - sensitivity: normal - status: active - owner: abiba - version: 1.0.0 - trigger: - type: on_demand - description: "Grant agent access to Stirling PDF" - cron_job_id: null - execution: - agent: abiba - timeout: 300 - requires: [] - verification: - postconditions: - - check: "agent can access Stirling PDF" - verify: "curl -sf https://stirling.sysloggh.net" - expect: "200 OK" - artifact: "access verification report" - receipt: - format: json - storage: "~/.hermes/runs/stirling-pdf-agent-access/" - graph_node: true - escalation: - info: - action: "log_to_receipt" - notify: [] - warning: - action: "relay_alert" - notify: ["abiba"] - critical: - action: "relay_alert" - notify: ["abiba", "mumuni"] - fatal: - action: "relay_alert + human_required" - notify: ["abiba", "mumuni", "kwame"] - circuit_breaker: - max_retries: 1 - window: 7200 - trip_action: escalate_to_fatal - depends_on: [] - last_run: null - last_status: null - drift_alerts: [] - - # ─── MAINTENANCE ──────────────────────────────────────────── - - - name: memory-audit-maintenance - file: memory-audit-maintenance.prose.md - kind: responsibility - category: maintenance - sensitivity: normal - status: active - owner: mumuni - version: 1.0.0 - trigger: - type: scheduled - cadence: "0 3 * * *" - description: "Daily at 3am ET" - cron_job_id: null - execution: - agent: mumuni - timeout: 600 - requires: [] - protocol: - - "Load contract from prose-contracts/main" - - "Verify prerequisites: memory files accessible" - - "Execute memory audit per contract SOP" - - "Log actions to ~/.hermes/runs/memory-audit-maintenance/" - verification: - postconditions: - - check: "memory files below 80% capacity" - verify: "wc -l ~/.hermes/memories/*.md" - expect: "total lines < threshold" - - check: "no stale entries" - verify: "grep -r 'STALE' ~/.hermes/memories/" - expect: "0 matches" - artifact: "memory audit report" - receipt: - format: json - storage: "~/.hermes/runs/memory-audit-maintenance/" - graph_node: true - escalation: - info: - action: "log_to_receipt" - notify: [] - warning: - action: "relay_alert" - notify: ["mumuni"] - critical: - action: "relay_alert" - notify: ["mumuni", "abiba"] - fatal: - action: "relay_alert + human_required" - notify: ["mumuni", "abiba", "kwame"] - circuit_breaker: - max_retries: 3 - window: 3600 - trip_action: escalate_to_fatal - depends_on: [] - last_run: null - last_status: null - drift_alerts: [] - - - name: gpu-fleet - file: gpu-fleet.prose.md - kind: responsibility - category: maintenance - sensitivity: critical - status: active - owner: abiba - version: 1.0.0 - trigger: - type: event_driven - description: "Triggered on model add/remove, GPU health degradation, agent key rotation" - cron_job_id: null - execution: - agent: abiba - timeout: 1800 - requires: [] - verification: - postconditions: - - check: "all GPUs reported to LiteLLM" - verify: "curl -sf http://192.168.68.116/litellm/v1/models | jq '.data | length'" - expect: "count matches expected" - - check: "router deprecated" - verify: "check nginx routes" - expect: "no /v1/ prefix routes" - artifact: "GPU fleet status report" - receipt: - format: json - storage: "~/.hermes/runs/gpu-fleet/" - graph_node: true - escalation: - info: - action: "log_to_receipt" - notify: [] - warning: - action: "relay_alert" - notify: ["abiba", "mumuni"] - critical: - action: "relay_alert" - notify: ["abiba", "mumuni"] - fatal: - action: "relay_alert + human_required" - notify: ["abiba", "mumuni", "kwame"] - circuit_breaker: - max_retries: 3 - window: 3600 - trip_action: escalate_to_fatal - depends_on: [] - last_run: null - last_status: null - drift_alerts: [] - - - name: infrastructure-update - file: infrastructure-update.prose.md - kind: responsibility - category: maintenance - sensitivity: high - status: active - owner: abiba - version: 1.0.0 - trigger: - type: scheduled - cadence: "0 2 * * 0" - description: "Weekly system updates Sunday at 2am ET" - cron_job_id: null - execution: - agent: abiba - timeout: 3600 - requires: [] - verification: - postconditions: - - check: "all services running after update" - verify: "systemctl list-units --state=running" - expect: "all critical services" - artifact: "update report with changelog" - receipt: - format: json - storage: "~/.hermes/runs/infrastructure-update/" - graph_node: true - escalation: - info: - action: "log_to_receipt" - notify: [] - warning: - action: "relay_alert" - notify: ["abiba"] - critical: - action: "relay_alert" - notify: ["abiba", "mumuni"] - fatal: - action: "relay_alert + human_required" - notify: ["abiba", "mumuni", "kwame"] - circuit_breaker: - max_retries: 1 - window: 7200 - trip_action: escalate_to_fatal - depends_on: [] - last_run: null - last_status: null - drift_alerts: [] - - # ─── REFERENCE / PATTERN ──────────────────────────────────── - - - name: infrastructure-control - file: infrastructure-control.prose.md - kind: pattern - category: reference - sensitivity: critical - status: active - owner: abiba - version: 1.0.0 - trigger: - type: passive - description: "Loaded on-demand by executing agents as source of truth" - cron_job_id: null - execution: - agent: none - timeout: 0 - requires: [] - verification: - postconditions: [] - artifact: none - receipt: - format: none - storage: none - graph_node: false - escalation: - info: - action: "none" - notify: [] - warning: - action: "none" - notify: [] - critical: - action: "none" - notify: [] - fatal: - action: "none" - notify: [] - circuit_breaker: - max_retries: 0 - window: 0 - trip_action: none - depends_on: [] - last_run: null - last_status: null - drift_alerts: [] - - - name: ra-h-os-custodianship-contract - file: ra-h-os-custodianship-contract.prose.md - kind: pattern - category: reference - sensitivity: high - status: active - owner: mumuni - version: 1.0.0 - trigger: - type: passive - description: "Loaded on-demand by agents needing RA-H OS guidance" - cron_job_id: null - execution: - agent: none - timeout: 0 - requires: [] - verification: - postconditions: [] - artifact: none - receipt: - format: none - storage: none - graph_node: false - escalation: - info: - action: "none" - notify: [] - warning: - action: "none" - notify: [] - critical: - action: "none" - notify: [] - fatal: - action: "none" - notify: [] - circuit_breaker: - max_retries: 0 - window: 0 - trip_action: none - depends_on: [] - last_run: null - last_status: null - drift_alerts: [] - - - name: mumuni-delegation - file: mumuni-delegation-prose-contract.prose.md - kind: pattern - category: reference - sensitivity: high - status: active - owner: mumuni - version: 1.0.0 - trigger: - type: passive - description: "Loaded by Mumuni when delegating tasks" - cron_job_id: null - execution: - agent: none - timeout: 0 - requires: [] - verification: - postconditions: [] - artifact: none - receipt: - format: none - storage: none - graph_node: false - escalation: - info: - action: "none" - notify: [] - warning: - action: "none" - notify: [] - critical: - action: "none" - notify: [] - fatal: - action: "none" - notify: [] - circuit_breaker: - max_retries: 0 - window: 0 - trip_action: none - depends_on: [] - last_run: null - last_status: null - drift_alerts: [] - - - name: zulip-adapter-lessons - file: zulip-adapter-lessons.prose.md - kind: pattern - category: reference - sensitivity: retired - status: historical - owner: abiba - version: 1.0.0 - trigger: - type: passive - description: "Historical reference — pi Zulip extension retired 2026-07-04" - cron_job_id: null - execution: - agent: none - timeout: 0 - requires: [] - verification: - postconditions: [] - artifact: none - receipt: - format: none - storage: none - graph_node: false - escalation: - info: - action: "none" - notify: [] - warning: - action: "none" - notify: [] - critical: - action: "none" - notify: [] - fatal: - action: "none" - notify: [] - circuit_breaker: - max_retries: 0 - window: 0 - trip_action: none - depends_on: [] - last_run: null - last_status: null - drift_alerts: [] - - - name: pi-approval-architecture - file: pi-approval-architecture.prose.md - kind: architecture - category: reference - sensitivity: retired - status: historical - owner: abiba - version: 1.0.0 - trigger: - type: passive - description: "Historical reference — pi Zulip extension retired" - cron_job_id: null - execution: - agent: none - timeout: 0 - requires: [] - verification: - postconditions: [] - artifact: none - receipt: - format: none - storage: none - graph_node: false - escalation: - info: - action: "none" - notify: [] - warning: - action: "none" - notify: [] - critical: - action: "none" - notify: [] - fatal: - action: "none" - notify: [] - circuit_breaker: - max_retries: 0 - window: 0 - trip_action: none - depends_on: [] - last_run: null - last_status: null - drift_alerts: [] - - - name: zulip-approval-fix - file: zulip-approval-fix.prose.md - kind: responsibility - category: reference - sensitivity: normal - status: active - owner: abiba - version: 2.0.0 - trigger: - type: passive - description: "Loaded on-demand when /approve or /deny commands fail" - cron_job_id: null - execution: - agent: none - timeout: 0 - requires: [] - verification: - postconditions: [] - artifact: none - receipt: - format: none - storage: none - graph_node: false - escalation: - info: - action: "none" - notify: [] - warning: - action: "none" - notify: [] - critical: - action: "none" - notify: [] - fatal: - action: "none" - notify: [] - circuit_breaker: - max_retries: 0 - window: 0 - trip_action: none - depends_on: [] - last_run: null - last_status: null - drift_alerts: [] - - - name: zulip-oidc-redirect-fix - file: zulip-oidc-redirect-fix.prose.md - kind: responsibility - category: reference - sensitivity: normal - status: active - owner: abiba - version: 1.0.0 - trigger: - type: event_driven - description: "Triggered when Zulip OIDC login returns redirect URI error" - cron_job_id: null - execution: - agent: abiba - timeout: 300 - requires: [] - verification: - postconditions: - - check: "OIDC redirect uses public domain" - verify: "grep redirect_uri /opt/zulip/zulip_env.py" - expect: "chat.sysloggh.net" - artifact: "fix verification report" - receipt: - format: json - storage: "~/.hermes/runs/zulip-oidc-redirect-fix/" - graph_node: true - escalation: - info: - action: "log_to_receipt" - notify: [] - warning: - action: "relay_alert" - notify: ["abiba"] - critical: - action: "relay_alert" - notify: ["abiba", "mumuni"] - fatal: - action: "relay_alert + human_required" - notify: ["abiba", "mumuni", "kwame"] - circuit_breaker: - max_retries: 1 - window: 7200 - trip_action: escalate_to_fatal - depends_on: [] - last_run: null - last_status: null - drift_alerts: [] - - # ─── RETIRED ──────────────────────────────────────────────── - - - name: zulip-mention-reliability - file: zulip-mention-reliability.prose.md - kind: responsibility - category: retired - sensitivity: retired - status: retired - owner: abiba - version: 1.0.0 - trigger: - type: none - description: "Retired 2026-07-04 — pi Zulip extension decommissioned" - cron_job_id: null - execution: - agent: none - timeout: 0 - requires: [] - verification: - postconditions: [] - artifact: none - receipt: - format: none - storage: none - graph_node: false - escalation: - info: - action: "none" - notify: [] - warning: - action: "none" - notify: [] - critical: - action: "none" - notify: [] - fatal: - action: "none" - notify: [] - circuit_breaker: - max_retries: 0 - window: 0 - trip_action: none - depends_on: [] - last_run: null - last_status: null - drift_alerts: [] - - - name: zulip-self-heal - file: zulip-self-heal.prose.md - kind: responsibility - category: retired - sensitivity: retired - status: retired - owner: abiba - version: 1.0.0 - trigger: - type: none - description: "Retired 2026-07-04 — pi Zulip extension decommissioned" - cron_job_id: null - execution: - agent: none - timeout: 0 - requires: [] - verification: - postconditions: [] - artifact: none - receipt: - format: none - storage: none - graph_node: false - escalation: - info: - action: "none" - notify: [] - warning: - action: "none" - notify: [] - critical: - action: "none" - notify: [] - fatal: - action: "none" - notify: [] - circuit_breaker: - max_retries: 0 - window: 0 - trip_action: none - depends_on: [] - last_run: null - last_status: null - drift_alerts: [] - - # ─── HELPER / TEST ────────────────────────────────────────── - - - name: hello-world - file: hello-world.prose.md - kind: function - category: reference - sensitivity: normal - status: active - owner: kwame - version: 1.0.0 - trigger: - type: on_demand - description: "Test contract for OpenProse on pi" - cron_job_id: null - execution: - agent: kwame - timeout: 60 - requires: [] - verification: - postconditions: - - check: "greeting returned" - verify: "contract output contains 'Hello'" - expect: "pass" - artifact: "greeting output" - receipt: - format: json - storage: "~/.hermes/runs/hello-world/" - graph_node: true - escalation: - info: - action: "log_to_receipt" - notify: [] - warning: - action: "relay_alert" - notify: [] - critical: - action: "relay_alert" - notify: ["mumuni"] - fatal: - action: "relay_alert + human_required" - notify: ["mumuni", "kwame"] - circuit_breaker: - max_retries: 3 - window: 3600 - trip_action: escalate_to_fatal - depends_on: [] - last_run: null - last_status: null - drift_alerts: [] +- name: hermes-key-enforcement + file: hermes-key-enforcement.prose.md + kind: enforcement + category: compliance + sensitivity: critical + status: active + owner: abiba + version: 1.0.0 + trigger: + type: scheduled + cadence: 0 6 * * * + description: Daily compliance scan at 6am ET + cron_job_id: null + execution: + agent: abiba + timeout: 300 + requires: [] + protocol: + - Load contract from prose-contracts/main + - 'Verify prerequisites: config.yaml readable, harness/litellm sections present' + - 'Execute enforcement: grep config for plaintext keys' + - 'On failure: stop, don''t hallucinate forward' + - Log actions to ~/.hermes/runs/hermes-key-enforcement/ + verification: + postconditions: + - check: no plaintext API keys in config + verify: 'grep -rc ''api_key: sk-'' /root/.hermes/config.yaml' + expect: 0 matches + - check: api_key_env used for harness/litellm providers + verify: grep -c 'api_key_env.*LITELLM_API_KEY' /root/.hermes/config.yaml + expect: count > 0 + artifact: before/after verification report + verify_commands: + - 'grep -rc ''api_key: sk-'' /root/.hermes/config.yaml' + - grep -c 'api_key_env.*LITELLM_API_KEY' /root/.hermes/config.yaml + receipt: + format: json + storage: ~/.hermes/runs/hermes-key-enforcement/ + graph_node: true + schema: + contract: string + run_id: string + timestamp: ISO 8601 + agent: string + status: pass|fail|escalated + actions_taken: array + postconditions: array + drift_alerts: array + evidence_path: string + escalation: + info: + action: log_to_receipt + notify: [] + warning: + action: relay_alert + notify: + - abiba + critical: + action: relay_alert + pause + notify: + - abiba + - mumuni + fatal: + action: relay_alert + pause + human_required + notify: + - abiba + - mumuni + - kwame + circuit_breaker: + max_retries: 3 + window: 3600 + trip_action: escalate_to_fatal + depends_on: [] + last_run: null + last_status: null + drift_alerts: [] +- name: hermes-config-template + file: hermes-config-template.prose.md + kind: template + category: compliance + sensitivity: high + status: active + owner: abiba + version: 2.1.0 + trigger: + type: scheduled + cadence: 0 4 * * 1 + description: Weekly config drift check Monday at 4am ET + cron_job_id: null + execution: + agent: abiba + timeout: 300 + requires: [] + verification: + postconditions: + - check: agent config template_version matches template file + verify: 'grep -q ''template_version'' /root/.hermes/config.yaml && diff <(grep + ''template_version'' /root/.hermes/config.yaml | cut -d: -f2 | xargs) <(grep + ''template_version'' /root/prose-contracts/hermes-config-template.prose.md + | cut -d: -f2 | xargs) && echo match || echo mismatch' + expect: match + - check: config file is valid YAML + verify: python3 -c 'import yaml; yaml.safe_load(open("/root/.hermes/config.yaml"))' + && echo valid || echo invalid + expect: valid + artifact: config drift report + receipt: + format: json + storage: ~/.hermes/runs/hermes-config-template/ + graph_node: true + escalation: + info: + action: log_to_receipt + notify: [] + warning: + action: relay_alert + notify: + - abiba + critical: + action: relay_alert + notify: + - abiba + - mumuni + fatal: + action: relay_alert + human_required + notify: + - abiba + - mumuni + - kwame + circuit_breaker: + max_retries: 3 + window: 3600 + trip_action: escalate_to_fatal + depends_on: [] + last_run: null + last_status: null + drift_alerts: [] +- name: hermes-agent-baseline + file: hermes-agent-baseline.prose.md + kind: template + category: compliance + sensitivity: normal + status: active + owner: abiba + version: 1.0.0 + trigger: + type: scheduled + cadence: 0 5 * * 1 + description: Weekly baseline verification Monday at 5am ET + cron_job_id: null + execution: + agent: abiba + timeout: 300 + requires: [] + verification: + postconditions: + - check: Hermes agent process running + verify: pgrep -f 'hermes' > /dev/null && echo running || echo stopped + expect: running + - check: agent config file exists and valid YAML + verify: test -f /root/.hermes/config.yaml && python3 -c 'import yaml; yaml.safe_load(open("/root/.hermes/config.yaml"))' + && echo valid || echo invalid + expect: valid + - check: no uncommitted changes in hermes directory + verify: cd /root/.hermes && git status --porcelain | wc -l + expect: '0' + artifact: baseline drift report + receipt: + format: json + storage: ~/.hermes/runs/hermes-agent-baseline/ + graph_node: true + escalation: + info: + action: log_to_receipt + notify: [] + warning: + action: relay_alert + notify: + - abiba + critical: + action: relay_alert + notify: + - abiba + - mumuni + fatal: + action: relay_alert + human_required + notify: + - abiba + - mumuni + - kwame + circuit_breaker: + max_retries: 3 + window: 3600 + trip_action: escalate_to_fatal + depends_on: [] + last_run: null + last_status: null + drift_alerts: [] +- name: proxmox-monitor + file: proxmox-monitor.prose.md + kind: responsibility + category: monitoring + sensitivity: critical + status: active + owner: abiba + version: 1.0.0 + trigger: + type: scheduled + cadence: '*/15 * * * *' + description: Every 15 minutes + cron_job_id: null + execution: + agent: abiba + timeout: 120 + requires: [] + protocol: + - Load contract from prose-contracts/main + - Verify connectivity to all Proxmox nodes + - Execute monitoring checks per contract + - Log intermediate state + - 'On failure: stop, don''t hallucinate' + verification: + postconditions: + - check: all Proxmox nodes reachable + verify: curl -sf http://192.168.68.10:8006/api2/json/status | jq '.status' + expect: healthy + - check: no VMs in crashed state + verify: pvesh get /nodes -output-format=json | jq '.[] | select(.status=="Crashed")' + expect: empty + - check: backups running on schedule + verify: pbs-info --check + expect: last_backup < 24h ago + artifact: cluster health snapshot + verify_commands: + - curl -sf http:///status | jq '.status' + - pvesh get /nodes -output-format=json + receipt: + format: json + storage: ~/.hermes/runs/proxmox-monitor/ + graph_node: true + escalation: + info: + action: log_to_receipt + notify: [] + warning: + action: relay_alert + notify: + - abiba + - mumuni + critical: + action: relay_alert + trigger_remediation + notify: + - abiba + - mumuni + triggers: + - disk-gc-threat-response + fatal: + action: relay_alert + pause + human_required + notify: + - abiba + - mumuni + - kwame + circuit_breaker: + max_retries: 3 + window: 3600 + trip_action: escalate_to_fatal + depends_on: [] + last_run: null + last_status: null + drift_alerts: [] +- name: gpu-monitor + file: gpu-monitor.prose.md + kind: responsibility + category: monitoring + sensitivity: critical + status: active + owner: abiba + version: 1.0.0 + trigger: + type: scheduled + cadence: '*/15 * * * *' + description: "Every 15 minutes \u2014 polls all GPU subsystems" + cron_job_id: null + execution: + agent: abiba + timeout: 120 + requires: [] + verification: + postconditions: + - check: GPU metrics accessible + verify: curl -sf http://localhost:9100/gpu-data + expect: 200 OK, populated data + - check: dashboard serving + verify: curl -sf http://localhost:9100/gpu-fleet.html + expect: 200 OK, HTML returned + - check: health endpoint responsive + verify: curl -sf http://localhost:9100/health + expect: 200 OK + artifact: GPU fleet snapshot + receipt: + format: json + storage: ~/.hermes/runs/gpu-monitor/ + graph_node: true + escalation: + info: + action: log_to_receipt + notify: [] + warning: + action: relay_alert + notify: + - abiba + - mumuni + critical: + action: relay_alert + trigger_remediation + notify: + - abiba + - mumuni + triggers: + - gpu-fleet + fatal: + action: relay_alert + pause + human_required + notify: + - abiba + - mumuni + - kwame + circuit_breaker: + max_retries: 3 + window: 3600 + trip_action: escalate_to_fatal + depends_on: [] + last_run: null + last_status: null + drift_alerts: [] +- name: infrastructure-monitoring + file: infrastructure-monitoring.prose.md + kind: function + category: monitoring + sensitivity: high + status: active + owner: abiba + version: 1.0.0 + trigger: + type: scheduled + cadence: '*/30 * * * *' + description: Every 30 minutes + cron_job_id: null + execution: + agent: abiba + timeout: 180 + requires: [] + verification: + postconditions: + - check: Proxmox API reachable + verify: curl -sf http://192.168.68.10:8006/api2/json + expect: 200 OK + - check: Zulip API reachable + verify: curl -sf https://chat.sysloggh.net/api/v1/me + expect: 200 OK + - check: LiteLLM proxy reachable + verify: curl -sf http://192.168.68.116/litellm/v1/models + expect: 200 OK + - check: Gitea API reachable + verify: curl -sf https://git.sysloggh.net/api/v1/version + expect: 200 OK + - check: SearXNG reachable + verify: curl -sf http://192.168.68.17:8080 + expect: 200 OK + artifact: infrastructure health report + receipt: + format: json + storage: ~/.hermes/runs/infrastructure-monitoring/ + graph_node: true + escalation: + info: + action: log_to_receipt + notify: [] + warning: + action: relay_alert + notify: + - abiba + - mumuni + critical: + action: relay_alert + trigger_remediation + notify: + - abiba + - mumuni + triggers: + - litellm-health + fatal: + action: relay_alert + pause + human_required + notify: + - abiba + - mumuni + - kwame + circuit_breaker: + max_retries: 3 + window: 3600 + trip_action: escalate_to_fatal + depends_on: [] + last_run: null + last_status: null + drift_alerts: [] +- name: zulip-health + file: zulip-health.prose.md + kind: responsibility + category: monitoring + sensitivity: high + status: active + owner: abiba + version: 3.0.0 + trigger: + type: scheduled + cadence: '*/15 * * * *' + description: "Every 15 minutes \u2014 monitors all Zulip-connected agents" + cron_job_id: null + execution: + agent: abiba + timeout: 120 + requires: + - Zulip API key for abiba-bot@chat.sysloggh.net + - SSH access to all Hermes agents + verification: + postconditions: + - check: bot registration active + verify: curl -sf https://chat.sysloggh.net/api/v1/me | jq '.user_id' + expect: bot_id present + - check: DM delivery working + verify: curl -sf https://chat.sysloggh.net/api/v1/users/me/is-online + expect: 'online: true' + artifact: Zulip mesh health report + receipt: + format: json + storage: ~/.hermes/runs/zulip-health/ + graph_node: true + escalation: + info: + action: log_to_receipt + notify: [] + warning: + action: relay_alert + notify: + - abiba + - mumuni + critical: + action: relay_alert + trigger_remediation + notify: + - abiba + - mumuni + triggers: + - hermes-zulip-restore + fatal: + action: relay_alert + pause + human_required + notify: + - abiba + - mumuni + - kwame + circuit_breaker: + max_retries: 3 + window: 3600 + trip_action: escalate_to_fatal + depends_on: [] + last_run: null + last_status: null + drift_alerts: [] +- name: litellm-health + file: litellm-health.prose.md + kind: function + category: monitoring + sensitivity: critical + status: active + owner: abiba + version: 1.0.0 + trigger: + type: scheduled + cadence: '*/10 * * * *' + description: "Every 10 minutes \u2014 LiteLLM proxy health" + cron_job_id: null + execution: + agent: abiba + timeout: 60 + requires: [] + verification: + postconditions: + - check: LiteLLM proxy reachable + verify: curl -sf http://192.168.68.116/litellm/v1/models + expect: 200 OK, models returned + - check: router deprecated, nginx routes work + verify: curl -sf https://litellm.sysloggh.net/v1/models + expect: 200 OK (via nginx) + artifact: LiteLLM health snapshot + receipt: + format: json + storage: ~/.hermes/runs/litellm-health/ + graph_node: true + escalation: + info: + action: log_to_receipt + notify: [] + warning: + action: relay_alert + notify: + - abiba + - mumuni + critical: + action: relay_alert + trigger_remediation + notify: + - abiba + - mumuni + triggers: + - litellm-self-heal + fatal: + action: relay_alert + pause + human_required + notify: + - abiba + - mumuni + - kwame + circuit_breaker: + max_retries: 3 + window: 3600 + trip_action: escalate_to_fatal + depends_on: [] + last_run: null + last_status: null + drift_alerts: [] +- name: litellm-self-heal + file: litellm-self-heal.prose.md + kind: responsibility + category: remediation + sensitivity: critical + status: active + owner: abiba + version: 1.0.0 + trigger: + type: event_driven + description: Triggered by relay message from litellm-health or infrastructure-monitoring + relay_message_type: remediation:litellm-self-heal + cron_job_id: null + execution: + agent: abiba + timeout: 600 + requires: + - Relay message with failure details from monitoring contract + verification: + postconditions: + - check: LiteLLM proxy responding + verify: curl -sf http://192.168.68.116/litellm/v1/models + expect: 200 OK + artifact: self-heal run report + receipt: + format: json + storage: ~/.hermes/runs/litellm-self-heal/ + graph_node: true + escalation: + info: + action: log_to_receipt + notify: [] + warning: + action: relay_alert + notify: + - abiba + - mumuni + critical: + action: relay_alert + pause + notify: + - abiba + - mumuni + fatal: + action: relay_alert + pause + human_required + notify: + - abiba + - mumuni + - kwame + circuit_breaker: + max_retries: 3 + window: 3600 + trip_action: escalate_to_fatal + depends_on: [] + last_run: null + last_status: null + drift_alerts: [] +- name: pm2-self-heal + file: pm2-self-heal.prose.md + kind: responsibility + category: remediation + sensitivity: high + status: active + owner: abiba + version: 1.0.0 + trigger: + type: event_driven + description: Triggered by relay message when PM2 process crashes + relay_message_type: remediation:pm2-self-heal + cron_job_id: null + execution: + agent: abiba + timeout: 300 + requires: + - Relay message with process name and failure details + verification: + postconditions: + - check: PM2 process running + verify: pm2 list | grep + expect: online + artifact: self-heal run report + receipt: + format: json + storage: ~/.hermes/runs/pm2-self-heal/ + graph_node: true + escalation: + info: + action: log_to_receipt + notify: [] + warning: + action: relay_alert + notify: + - abiba + critical: + action: relay_alert + notify: + - abiba + - mumuni + fatal: + action: relay_alert + human_required + notify: + - abiba + - mumuni + - kwame + circuit_breaker: + max_retries: 3 + window: 3600 + trip_action: escalate_to_fatal + depends_on: [] + last_run: null + last_status: null + drift_alerts: [] +- name: disk-gc-threat-response + file: disk-gc-threat-response.prose.md + kind: responsibility + category: remediation + sensitivity: critical + status: active + owner: abiba + version: 1.0.0 + trigger: + type: event_driven + description: Triggered by relay message from proxmox-monitor when disk >80% + relay_message_type: remediation:disk-gc-threat-response + cron_job_id: null + execution: + agent: abiba + timeout: 900 + requires: + - Relay message with target CT/host and current disk usage + protocol: + - Load contract from prose-contracts/main + - Verify target node reachable + - Run garbage collection per contract SOP + - Verify disk usage reduced + verification: + postconditions: + - check: disk usage below 80% + verify: df -h + expect: <80% + - check: no critical services stopped + verify: ps aux | grep + expect: all running + artifact: GC run report with reclaimed space + receipt: + format: json + storage: ~/.hermes/runs/disk-gc-threat-response/ + graph_node: true + escalation: + info: + action: log_to_receipt + notify: [] + warning: + action: relay_alert + notify: + - abiba + - mumuni + critical: + action: relay_alert + pause + notify: + - abiba + - mumuni + fatal: + action: relay_alert + pause + human_required + notify: + - abiba + - mumuni + - kwame + circuit_breaker: + max_retries: 3 + window: 3600 + trip_action: escalate_to_fatal + depends_on: [] + last_run: null + last_status: null + drift_alerts: [] +- name: hermes-zulip-restore + file: hermes-zulip-restore.prose.md + kind: function + category: remediation + sensitivity: high + status: active + owner: abiba + version: 1.0.0 + trigger: + type: event_driven + description: Triggered by relay message from zulip-health when bot registration + fails + relay_message_type: remediation:hermes-zulip-restore + cron_job_id: null + execution: + agent: abiba + timeout: 600 + requires: + - Relay message with failure details + verification: + postconditions: + - check: Zulip bot registration active + verify: curl -sf https://chat.sysloggh.net/api/v1/me | jq '.user_id' + expect: bot_id present + - check: DM delivery working + verify: send test DM + expect: message delivered + artifact: restore run report + receipt: + format: json + storage: ~/.hermes/runs/hermes-zulip-restore/ + graph_node: true + escalation: + info: + action: log_to_receipt + notify: [] + warning: + action: relay_alert + notify: + - abiba + - mumuni + critical: + action: relay_alert + pause + notify: + - abiba + - mumuni + fatal: + action: relay_alert + pause + human_required + notify: + - abiba + - mumuni + - kwame + circuit_breaker: + max_retries: 3 + window: 3600 + trip_action: escalate_to_fatal + depends_on: [] + last_run: null + last_status: null + drift_alerts: [] +- name: hermes-zulip-plugin + file: hermes-zulip-plugin.prose.md + kind: function + category: build_deploy + sensitivity: high + status: active + owner: abiba + version: 1.0.0 + trigger: + type: on_demand + description: Manual or change request to update Zulip plugin + cron_job_id: null + execution: + agent: abiba + timeout: 1800 + requires: [] + verification: + postconditions: + - check: 3 adapter files present + verify: ls -la /usr/local/lib/hermes-agent/plugins/platforms/zulip/ + expect: 3 files + - check: gateway connected + verify: ps aux | grep hermes + expect: zulip connected + artifact: deploy verification report + receipt: + format: json + storage: ~/.hermes/runs/hermes-zulip-plugin/ + graph_node: true + escalation: + info: + action: log_to_receipt + notify: [] + warning: + action: relay_alert + notify: + - abiba + critical: + action: relay_alert + notify: + - abiba + - mumuni + fatal: + action: relay_alert + human_required + notify: + - abiba + - mumuni + - kwame + circuit_breaker: + max_retries: 1 + window: 7200 + trip_action: escalate_to_fatal + depends_on: [] + last_run: null + last_status: null + drift_alerts: [] +- name: build-zulip-plugin + file: build-zulip-plugin.prose.md + kind: responsibility + category: build_deploy + sensitivity: high + status: active + owner: abiba + version: 1.0.0 + trigger: + type: on_demand + description: Generate or improve Zulip plugin via iterative refinement + cron_job_id: null + execution: + agent: abiba + timeout: 3600 + requires: [] + verification: + postconditions: + - check: plugin builds without errors + verify: npm install && npm run build + expect: 0 errors + - check: connectivity tests pass + verify: run plugin selftest + expect: all checks green + artifact: plugin version artifact + receipt: + format: json + storage: ~/.hermes/runs/build-zulip-plugin/ + graph_node: true + escalation: + info: + action: log_to_receipt + notify: [] + warning: + action: relay_alert + notify: + - abiba + critical: + action: relay_alert + notify: + - abiba + - mumuni + fatal: + action: relay_alert + human_required + notify: + - abiba + - mumuni + - kwame + circuit_breaker: + max_retries: 1 + window: 7200 + trip_action: escalate_to_fatal + depends_on: [] + last_run: null + last_status: null + drift_alerts: [] +- name: stirling-pdf-agent-access + file: stirling-pdf-agent-access.prose.md + kind: function + category: build_deploy + sensitivity: normal + status: active + owner: abiba + version: 1.0.0 + trigger: + type: on_demand + description: Grant agent access to Stirling PDF + cron_job_id: null + execution: + agent: abiba + timeout: 300 + requires: [] + verification: + postconditions: + - check: agent can access Stirling PDF + verify: curl -sf https://stirling.sysloggh.net + expect: 200 OK + artifact: access verification report + receipt: + format: json + storage: ~/.hermes/runs/stirling-pdf-agent-access/ + graph_node: true + escalation: + info: + action: log_to_receipt + notify: [] + warning: + action: relay_alert + notify: + - abiba + critical: + action: relay_alert + notify: + - abiba + - mumuni + fatal: + action: relay_alert + human_required + notify: + - abiba + - mumuni + - kwame + circuit_breaker: + max_retries: 1 + window: 7200 + trip_action: escalate_to_fatal + depends_on: [] + last_run: null + last_status: null + drift_alerts: [] +- name: memory-audit-maintenance + file: memory-audit-maintenance.prose.md + kind: responsibility + category: maintenance + sensitivity: normal + status: active + owner: mumuni + version: 1.0.0 + trigger: + type: scheduled + cadence: 0 3 * * * + description: Daily at 3am ET + cron_job_id: null + execution: + agent: mumuni + timeout: 600 + requires: [] + protocol: + - Load contract from prose-contracts/main + - 'Verify prerequisites: memory files accessible' + - Execute memory audit per contract SOP + - Log actions to ~/.hermes/runs/memory-audit-maintenance/ + verification: + postconditions: + - check: memory files below 80% capacity + verify: wc -l ~/.hermes/memories/*.md + expect: total lines < threshold + - check: no stale entries + verify: grep -r 'STALE' ~/.hermes/memories/ + expect: 0 matches + artifact: memory audit report + receipt: + format: json + storage: ~/.hermes/runs/memory-audit-maintenance/ + graph_node: true + escalation: + info: + action: log_to_receipt + notify: [] + warning: + action: relay_alert + notify: + - mumuni + critical: + action: relay_alert + notify: + - mumuni + - abiba + fatal: + action: relay_alert + human_required + notify: + - mumuni + - abiba + - kwame + circuit_breaker: + max_retries: 3 + window: 3600 + trip_action: escalate_to_fatal + depends_on: [] + last_run: null + last_status: null + drift_alerts: [] +- name: gpu-fleet + file: gpu-fleet.prose.md + kind: responsibility + category: maintenance + sensitivity: critical + status: active + owner: abiba + version: 1.0.0 + trigger: + type: event_driven + description: Triggered on model add/remove, GPU health degradation, agent key + rotation + cron_job_id: null + execution: + agent: abiba + timeout: 1800 + requires: [] + verification: + postconditions: + - check: all GPUs reported to LiteLLM + verify: curl -sf http://192.168.68.116/litellm/v1/models | jq '.data | length' + expect: count matches expected + - check: router deprecated + verify: check nginx routes + expect: no /v1/ prefix routes + artifact: GPU fleet status report + receipt: + format: json + storage: ~/.hermes/runs/gpu-fleet/ + graph_node: true + escalation: + info: + action: log_to_receipt + notify: [] + warning: + action: relay_alert + notify: + - abiba + - mumuni + critical: + action: relay_alert + notify: + - abiba + - mumuni + fatal: + action: relay_alert + human_required + notify: + - abiba + - mumuni + - kwame + circuit_breaker: + max_retries: 3 + window: 3600 + trip_action: escalate_to_fatal + depends_on: [] + last_run: null + last_status: null + drift_alerts: [] +- name: infrastructure-update + file: infrastructure-update.prose.md + kind: responsibility + category: maintenance + sensitivity: high + status: active + owner: abiba + version: 1.0.0 + trigger: + type: scheduled + cadence: 0 2 * * 0 + description: Weekly system updates Sunday at 2am ET + cron_job_id: null + execution: + agent: abiba + timeout: 3600 + requires: [] + verification: + postconditions: + - check: all services running after update + verify: systemctl list-units --state=running + expect: all critical services + artifact: update report with changelog + receipt: + format: json + storage: ~/.hermes/runs/infrastructure-update/ + graph_node: true + escalation: + info: + action: log_to_receipt + notify: [] + warning: + action: relay_alert + notify: + - abiba + critical: + action: relay_alert + notify: + - abiba + - mumuni + fatal: + action: relay_alert + human_required + notify: + - abiba + - mumuni + - kwame + circuit_breaker: + max_retries: 1 + window: 7200 + trip_action: escalate_to_fatal + depends_on: [] + last_run: null + last_status: null + drift_alerts: [] +- name: infrastructure-control + file: infrastructure-control.prose.md + kind: pattern + category: reference + sensitivity: critical + status: active + owner: abiba + version: 1.0.0 + trigger: + type: passive + description: Loaded on-demand by executing agents as source of truth + cron_job_id: null + execution: + agent: none + timeout: 0 + requires: [] + verification: + postconditions: [] + artifact: none + receipt: + format: none + storage: none + graph_node: false + escalation: + info: + action: none + notify: [] + warning: + action: none + notify: [] + critical: + action: none + notify: [] + fatal: + action: none + notify: [] + circuit_breaker: + max_retries: 0 + window: 0 + trip_action: none + depends_on: [] + last_run: null + last_status: null + drift_alerts: [] +- name: ra-h-os-custodianship-contract + file: ra-h-os-custodianship-contract.prose.md + kind: pattern + category: reference + sensitivity: high + status: active + owner: mumuni + version: 1.0.0 + trigger: + type: passive + description: Loaded on-demand by agents needing RA-H OS guidance + cron_job_id: null + execution: + agent: none + timeout: 0 + requires: [] + verification: + postconditions: [] + artifact: none + receipt: + format: none + storage: none + graph_node: false + escalation: + info: + action: none + notify: [] + warning: + action: none + notify: [] + critical: + action: none + notify: [] + fatal: + action: none + notify: [] + circuit_breaker: + max_retries: 0 + window: 0 + trip_action: none + depends_on: [] + last_run: null + last_status: null + drift_alerts: [] +- name: mumuni-delegation + file: mumuni-delegation-prose-contract.prose.md + kind: pattern + category: reference + sensitivity: high + status: active + owner: mumuni + version: 1.0.0 + trigger: + type: passive + description: Loaded by Mumuni when delegating tasks + cron_job_id: null + execution: + agent: none + timeout: 0 + requires: [] + verification: + postconditions: [] + artifact: none + receipt: + format: none + storage: none + graph_node: false + escalation: + info: + action: none + notify: [] + warning: + action: none + notify: [] + critical: + action: none + notify: [] + fatal: + action: none + notify: [] + circuit_breaker: + max_retries: 0 + window: 0 + trip_action: none + depends_on: [] + last_run: null + last_status: null + drift_alerts: [] +- name: zulip-adapter-lessons + file: zulip-adapter-lessons.prose.md + kind: pattern + category: reference + sensitivity: retired + status: historical + owner: abiba + version: 1.0.0 + trigger: + type: passive + description: "Historical reference \u2014 pi Zulip extension retired 2026-07-04" + cron_job_id: null + execution: + agent: none + timeout: 0 + requires: [] + verification: + postconditions: [] + artifact: none + receipt: + format: none + storage: none + graph_node: false + escalation: + info: + action: none + notify: [] + warning: + action: none + notify: [] + critical: + action: none + notify: [] + fatal: + action: none + notify: [] + circuit_breaker: + max_retries: 0 + window: 0 + trip_action: none + depends_on: [] + last_run: null + last_status: null + drift_alerts: [] +- name: pi-approval-architecture + file: pi-approval-architecture.prose.md + kind: architecture + category: reference + sensitivity: retired + status: historical + owner: abiba + version: 1.0.0 + trigger: + type: passive + description: "Historical reference \u2014 pi Zulip extension retired" + cron_job_id: null + execution: + agent: none + timeout: 0 + requires: [] + verification: + postconditions: [] + artifact: none + receipt: + format: none + storage: none + graph_node: false + escalation: + info: + action: none + notify: [] + warning: + action: none + notify: [] + critical: + action: none + notify: [] + fatal: + action: none + notify: [] + circuit_breaker: + max_retries: 0 + window: 0 + trip_action: none + depends_on: [] + last_run: null + last_status: null + drift_alerts: [] +- name: zulip-approval-fix + file: zulip-approval-fix.prose.md + kind: responsibility + category: reference + sensitivity: normal + status: active + owner: abiba + version: 2.0.0 + trigger: + type: passive + description: Loaded on-demand when /approve or /deny commands fail + cron_job_id: null + execution: + agent: none + timeout: 0 + requires: [] + verification: + postconditions: [] + artifact: none + receipt: + format: none + storage: none + graph_node: false + escalation: + info: + action: none + notify: [] + warning: + action: none + notify: [] + critical: + action: none + notify: [] + fatal: + action: none + notify: [] + circuit_breaker: + max_retries: 0 + window: 0 + trip_action: none + depends_on: [] + last_run: null + last_status: null + drift_alerts: [] +- name: zulip-oidc-redirect-fix + file: zulip-oidc-redirect-fix.prose.md + kind: responsibility + category: reference + sensitivity: normal + status: active + owner: abiba + version: 1.0.0 + trigger: + type: event_driven + description: Triggered when Zulip OIDC login returns redirect URI error + cron_job_id: null + execution: + agent: abiba + timeout: 300 + requires: [] + verification: + postconditions: + - check: OIDC redirect uses public domain + verify: grep redirect_uri /opt/zulip/zulip_env.py + expect: chat.sysloggh.net + artifact: fix verification report + receipt: + format: json + storage: ~/.hermes/runs/zulip-oidc-redirect-fix/ + graph_node: true + escalation: + info: + action: log_to_receipt + notify: [] + warning: + action: relay_alert + notify: + - abiba + critical: + action: relay_alert + notify: + - abiba + - mumuni + fatal: + action: relay_alert + human_required + notify: + - abiba + - mumuni + - kwame + circuit_breaker: + max_retries: 1 + window: 7200 + trip_action: escalate_to_fatal + depends_on: [] + last_run: null + last_status: null + drift_alerts: [] +- name: zulip-mention-reliability + file: zulip-mention-reliability.prose.md + kind: responsibility + category: retired + sensitivity: retired + status: retired + owner: abiba + version: 1.0.0 + trigger: + type: none + description: "Retired 2026-07-04 \u2014 pi Zulip extension decommissioned" + cron_job_id: null + execution: + agent: none + timeout: 0 + requires: [] + verification: + postconditions: [] + artifact: none + receipt: + format: none + storage: none + graph_node: false + escalation: + info: + action: none + notify: [] + warning: + action: none + notify: [] + critical: + action: none + notify: [] + fatal: + action: none + notify: [] + circuit_breaker: + max_retries: 0 + window: 0 + trip_action: none + depends_on: [] + last_run: null + last_status: null + drift_alerts: [] +- name: zulip-self-heal + file: zulip-self-heal.prose.md + kind: responsibility + category: retired + sensitivity: retired + status: retired + owner: abiba + version: 1.0.0 + trigger: + type: none + description: "Retired 2026-07-04 \u2014 pi Zulip extension decommissioned" + cron_job_id: null + execution: + agent: none + timeout: 0 + requires: [] + verification: + postconditions: [] + artifact: none + receipt: + format: none + storage: none + graph_node: false + escalation: + info: + action: none + notify: [] + warning: + action: none + notify: [] + critical: + action: none + notify: [] + fatal: + action: none + notify: [] + circuit_breaker: + max_retries: 0 + window: 0 + trip_action: none + depends_on: [] + last_run: null + last_status: null + drift_alerts: [] +- name: hello-world + file: hello-world.prose.md + kind: function + category: reference + sensitivity: normal + status: active + owner: kwame + version: 1.0.0 + trigger: + type: on_demand + description: Test contract for OpenProse on pi + cron_job_id: null + execution: + agent: kwame + timeout: 60 + requires: [] + verification: + postconditions: + - check: greeting returned + verify: contract output contains 'Hello' + expect: pass + artifact: greeting output + receipt: + format: json + storage: ~/.hermes/runs/hello-world/ + graph_node: true + escalation: + info: + action: log_to_receipt + notify: [] + warning: + action: relay_alert + notify: [] + critical: + action: relay_alert + notify: + - mumuni + fatal: + action: relay_alert + human_required + notify: + - mumuni + - kwame + circuit_breaker: + max_retries: 3 + window: 3600 + trip_action: escalate_to_fatal + depends_on: [] + last_run: null + last_status: null + drift_alerts: []