{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:hermes-agent:schema:shared-metrics:v2",
  "title": "Hermes Shared Metrics Package v2",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "schema_version",
    "package_id",
    "install_id",
    "period_start",
    "period_end",
    "generated_at",
    "resource",
    "metrics"
  ],
  "properties": {
    "schema_version": {
      "const": "hermes.shared_metrics.v2"
    },
    "package_id": {
      "$ref": "#/$defs/uuid"
    },
    "install_id": {
      "description": "Random persistent identifier scoped to one HERMES_HOME; local-only in schema v2.",
      "$ref": "#/$defs/uuid"
    },
    "period_start": {
      "type": "string",
      "format": "date-time"
    },
    "period_end": {
      "type": "string",
      "format": "date-time"
    },
    "generated_at": {
      "type": "string",
      "format": "date-time"
    },
    "resource": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "architecture",
        "hermes_version",
        "install_method",
        "os_family"
      ],
      "properties": {
        "architecture": {
          "type": "string",
          "enum": ["arm", "arm64", "unknown", "x86", "x86_64"]
        },
        "hermes_version": {
          "type": "string",
          "minLength": 1,
          "maxLength": 64
        },
        "install_method": {
          "type": "string",
          "enum": ["docker", "git", "homebrew", "nixos", "pip", "unknown"]
        },
        "os_family": {
          "type": "string",
          "enum": ["linux", "macos", "unknown", "windows"]
        }
      }
    },
    "metrics": {
      "type": "array",
      "minItems": 1,
      "items": {
        "oneOf": [
          {
            "$ref": "#/$defs/client_active_counter"
          },
          {
            "$ref": "#/$defs/model_call_counter"
          },
          {
            "$ref": "#/$defs/model_route_counter"
          },
          {
            "$ref": "#/$defs/task_started_counter"
          },
          {
            "$ref": "#/$defs/task_finished_counter"
          },
          {
            "$ref": "#/$defs/tool_call_counter"
          },
          {
            "$ref": "#/$defs/tool_approval_counter"
          },
          {
            "$ref": "#/$defs/skill_lifecycle_counter"
          },
          {
            "$ref": "#/$defs/skill_load_counter"
          }
        ]
      }
    }
  },
  "$defs": {
    "client_active_counter": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "name",
        "type",
        "dimensions",
        "value"
      ],
      "properties": {
        "name": {
          "const": "hermes.client.active"
        },
        "type": {
          "const": "counter"
        },
        "dimensions": {
          "type": "object",
          "additionalProperties": false,
          "maxProperties": 0
        },
        "value": {
          "const": 1
        }
      }
    },
    "uuid": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
    },
    "model_call_counter": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "name",
        "type",
        "dimensions",
        "value"
      ],
      "properties": {
        "name": {
          "const": "hermes.model_call.count"
        },
        "type": {
          "const": "counter"
        },
        "dimensions": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "call_role",
            "locality",
            "model_family",
            "outcome",
            "provider_family"
          ],
          "properties": {
            "call_role": {
              "const": "primary"
            },
            "locality": {
              "enum": [
                "local",
                "remote",
                "unknown"
              ]
            },
            "model_family": {
              "enum": [
                "claude",
                "deepseek",
                "gemini",
                "gemma",
                "glm",
                "gpt",
                "grok",
                "kimi",
                "llama",
                "minimax",
                "mimo",
                "mistral",
                "nemotron",
                "nova",
                "o1",
                "o3",
                "o4",
                "qwen",
                "step",
                "trinity",
                "unknown"
              ]
            },
            "outcome": {
              "enum": [
                "cancelled",
                "failed",
                "success"
              ]
            },
            "provider_family": {
              "enum": [
                "aggregator",
                "custom",
                "direct",
                "local",
                "unknown"
              ]
            }
          }
        },
        "value": {
          "type": "integer",
          "minimum": 1
        }
      }
    },
    "model_route_counter": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "name",
        "type",
        "dimensions",
        "value"
      ],
      "properties": {
        "name": {
          "const": "hermes.model_route.count"
        },
        "type": {
          "const": "counter"
        },
        "dimensions": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "model",
            "provider"
          ],
          "properties": {
            "model": {
              "type": "string",
              "minLength": 1,
              "maxLength": 256,
              "pattern": "^[a-z0-9][a-z0-9._:/@+\\-]*$"
            },
            "provider": {
              "type": "string",
              "minLength": 1,
              "maxLength": 64,
              "pattern": "^[a-z0-9][a-z0-9._:/@+\\-]*$"
            }
          }
        },
        "value": {
          "type": "integer",
          "minimum": 1
        }
      }
    },
    "task_started_counter": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "name",
        "type",
        "dimensions",
        "value"
      ],
      "properties": {
        "name": {
          "const": "hermes.task_run.started"
        },
        "type": {
          "const": "counter"
        },
        "dimensions": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "entrypoint",
            "execution_surface"
          ],
          "properties": {
            "entrypoint": {
              "$ref": "#/$defs/task_entrypoint"
            },
            "execution_surface": {
              "$ref": "#/$defs/execution_surface"
            }
          }
        },
        "value": {
          "type": "integer",
          "minimum": 1
        }
      }
    },
    "task_finished_counter": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "name",
        "type",
        "dimensions",
        "value"
      ],
      "properties": {
        "name": {
          "const": "hermes.task_run.finished"
        },
        "type": {
          "const": "counter"
        },
        "dimensions": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "duration_bucket",
            "end_reason",
            "entrypoint",
            "execution_surface",
            "model_call_count_bucket",
            "outcome",
            "retry_count_bucket",
            "termination",
            "tool_call_count_bucket"
          ],
          "properties": {
            "duration_bucket": {
              "$ref": "#/$defs/duration_bucket"
            },
            "end_reason": {
              "enum": [
                "approval_denied",
                "completed",
                "failed",
                "guardrail_blocked",
                "iteration_limit",
                "system_aborted",
                "timed_out",
                "unknown",
                "user_cancelled"
              ]
            },
            "entrypoint": {
              "$ref": "#/$defs/task_entrypoint"
            },
            "execution_surface": {
              "$ref": "#/$defs/execution_surface"
            },
            "model_call_count_bucket": {
              "$ref": "#/$defs/count_bucket"
            },
            "outcome": {
              "enum": [
                "cancelled",
                "failed",
                "success",
                "timed_out",
                "unknown"
              ]
            },
            "retry_count_bucket": {
              "$ref": "#/$defs/count_bucket"
            },
            "termination": {
              "enum": [
                "none",
                "system_aborted",
                "timed_out",
                "unknown",
                "user_cancelled"
              ]
            },
            "tool_call_count_bucket": {
              "$ref": "#/$defs/count_bucket"
            }
          }
        },
        "value": {
          "type": "integer",
          "minimum": 1
        }
      }
    },
    "execution_surface": {
      "enum": [
        "api",
        "batch",
        "cli",
        "desktop",
        "gateway",
        "other",
        "python",
        "scheduled_task",
        "tui",
        "unknown"
      ]
    },
    "task_entrypoint": {
      "enum": [
        "api",
        "background",
        "batch",
        "delegated",
        "gateway_message",
        "interactive",
        "other",
        "python",
        "scheduled_task",
        "unknown"
      ]
    },
    "duration_bucket": {
      "enum": [
        "1s_to_5s",
        "2m_to_10m",
        "30s_to_2m",
        "5s_to_30s",
        "gte_10m",
        "lt_1s"
      ]
    },
    "count_bucket": {
      "enum": [
        "0",
        "1",
        "2",
        "3_to_5",
        "6_to_10",
        "gte_11"
      ]
    },
    "tool_latency_bucket": {
      "enum": [
        "100ms_to_250ms",
        "10s_to_30s",
        "1s_to_2s",
        "250ms_to_500ms",
        "2s_to_5s",
        "500ms_to_1s",
        "5s_to_10s",
        "gte_30s",
        "lt_100ms",
        "unknown"
      ]
    },
    "tool_retry_bucket": {
      "enum": [
        "0",
        "1",
        "2",
        "3_to_5",
        "6_to_10",
        "gte_11",
        "unknown"
      ]
    },
    "tool_call_counter": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "name",
        "type",
        "dimensions",
        "value"
      ],
      "properties": {
        "name": {
          "const": "hermes.tool_call.count"
        },
        "type": {
          "const": "counter"
        },
        "dimensions": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "approval_outcome",
            "latency_bucket",
            "outcome",
            "retry_count_bucket",
            "tool_category"
          ],
          "properties": {
            "approval_outcome": {
              "enum": [
                "approved",
                "denied",
                "not_required",
                "timed_out",
                "unknown"
              ]
            },
            "latency_bucket": {
              "$ref": "#/$defs/tool_latency_bucket"
            },
            "outcome": {
              "enum": [
                "blocked",
                "cancelled",
                "failed",
                "success",
                "timed_out",
                "unknown"
              ]
            },
            "retry_count_bucket": {
              "$ref": "#/$defs/tool_retry_bucket"
            },
            "tool_category": {
              "enum": [
                "browser",
                "code_execution",
                "communication",
                "computer_use",
                "delegation",
                "file",
                "home_automation",
                "mcp",
                "media",
                "memory",
                "other",
                "planning",
                "project",
                "scheduler",
                "skill",
                "terminal",
                "unknown",
                "web"
              ]
            }
          }
        },
        "value": {
          "type": "integer",
          "minimum": 1
        }
      }
    },
    "tool_approval_counter": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "name",
        "type",
        "dimensions",
        "value"
      ],
      "properties": {
        "name": {
          "const": "hermes.tool_approval.count"
        },
        "type": {
          "const": "counter"
        },
        "dimensions": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "attribution",
            "outcome"
          ],
          "properties": {
            "attribution": {
              "enum": [
                "tool_call",
                "unattributed"
              ]
            },
            "outcome": {
              "enum": [
                "approved",
                "denied",
                "timed_out",
                "unknown"
              ]
            }
          }
        },
        "value": {
          "type": "integer",
          "minimum": 1
        }
      }
    },
    "skill_lifecycle_counter": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "name",
        "type",
        "dimensions",
        "value"
      ],
      "properties": {
        "name": {
          "const": "hermes.skill.lifecycle.count"
        },
        "type": {
          "const": "counter"
        },
        "dimensions": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "action",
            "provenance"
          ],
          "properties": {
            "action": {
              "enum": [
                "archived",
                "created",
                "edited",
                "installed",
                "patched",
                "restored",
                "stale"
              ]
            },
            "provenance": {
              "$ref": "#/$defs/skill_provenance"
            }
          }
        },
        "value": {
          "type": "integer",
          "minimum": 1
        }
      }
    },
    "skill_load_counter": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "name",
        "type",
        "dimensions",
        "value"
      ],
      "properties": {
        "name": {
          "const": "hermes.skill.load.count"
        },
        "type": {
          "const": "counter"
        },
        "dimensions": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "post_patch_state",
            "provenance",
            "reuse_state",
            "use_count_bucket"
          ],
          "properties": {
            "post_patch_state": {
              "enum": [
                "no_new_patch",
                "not_applicable",
                "reused_after_patch"
              ]
            },
            "provenance": {
              "$ref": "#/$defs/skill_provenance"
            },
            "reuse_state": {
              "enum": [
                "first_use",
                "reused"
              ]
            },
            "use_count_bucket": {
              "$ref": "#/$defs/count_bucket"
            }
          }
        },
        "value": {
          "type": "integer",
          "minimum": 1
        }
      }
    },
    "skill_provenance": {
      "enum": [
        "agent_created",
        "external",
        "installed",
        "local",
        "unknown"
      ]
    }
  }
}
