Watch
0
0
Fork
You've already forked hyperhive
0

harness metrics for tool calls, bash commands, reminders and first-turn context, on the agents board

The per-agent /stats page read these from its sqlite; the swarm board had
none of them. hive-agent now counts the tools a turn called, the commands
bash tasks ran (from the bash daemon's own table, newer rows only),
reminders scheduled and delivered, and records the first turn of a fresh
session; the turns tab shows them, with fresh sessions per agent. Claude's
own export has no tool-call counter, so the docs no longer say it does.
This commit is contained in:
iris 2026-11-03 16:05:30 +01:00
commit 23c2527199

View file

@ -3318,6 +3318,386 @@
}
}
}
},
"panel-78": {
"kind": "Panel",
"spec": {
"id": 78,
"title": "Tool calls",
"description": "The ten tools agents called most in the selected range.",
"links": [],
"data": {
"kind": "QueryGroup",
"spec": {
"queries": [
{
"kind": "PanelQuery",
"spec": {
"query": {
"kind": "DataQuery",
"group": "prometheus",
"version": "v0",
"datasource": {
"name": "@datasourceUid@"
},
"spec": {
"expr": "sort_desc(topk(10, sum by (tool) (increase({__name__=\"hyperhive.agent.tool.calls\", hive=~\"$hive\", agent=~\"$agent\"}[$__range]))))",
"instant": true,
"legendFormat": "{{tool}}"
}
},
"refId": "A",
"hidden": false
}
}
],
"transformations": [],
"queryOptions": {}
}
},
"vizConfig": {
"kind": "VizConfig",
"group": "bargauge",
"version": "",
"spec": {
"options": {
"displayMode": "basic",
"orientation": "horizontal",
"reduceOptions": {
"calcs": ["lastNotNull"],
"fields": "",
"values": false
},
"showUnfilled": true,
"valueMode": "text"
},
"fieldConfig": {
"defaults": {
"unit": "short",
"decimals": 0,
"thresholds": {
"mode": "absolute",
"steps": [
{
"value": null,
"color": "blue"
}
]
},
"color": {
"mode": "fixed",
"fixedColor": "blue"
}
},
"overrides": []
}
}
}
}
},
"panel-79": {
"kind": "Panel",
"spec": {
"id": 79,
"title": "Bash commands",
"description": "The ten commands bash tasks ran most in the selected range, by command name.",
"links": [],
"data": {
"kind": "QueryGroup",
"spec": {
"queries": [
{
"kind": "PanelQuery",
"spec": {
"query": {
"kind": "DataQuery",
"group": "prometheus",
"version": "v0",
"datasource": {
"name": "@datasourceUid@"
},
"spec": {
"expr": "sort_desc(topk(10, sum by (command) (increase({__name__=\"hyperhive.agent.bash.commands\", hive=~\"$hive\", agent=~\"$agent\"}[$__range]))))",
"instant": true,
"legendFormat": "{{command}}"
}
},
"refId": "A",
"hidden": false
}
}
],
"transformations": [],
"queryOptions": {}
}
},
"vizConfig": {
"kind": "VizConfig",
"group": "bargauge",
"version": "",
"spec": {
"options": {
"displayMode": "basic",
"orientation": "horizontal",
"reduceOptions": {
"calcs": ["lastNotNull"],
"fields": "",
"values": false
},
"showUnfilled": true,
"valueMode": "text"
},
"fieldConfig": {
"defaults": {
"unit": "short",
"decimals": 0,
"thresholds": {
"mode": "absolute",
"steps": [
{
"value": null,
"color": "blue"
}
]
},
"color": {
"mode": "fixed",
"fixedColor": "blue"
}
},
"overrides": []
}
}
}
}
},
"panel-80": {
"kind": "Panel",
"spec": {
"id": 80,
"title": "Reminders per hour",
"description": "Reminders agents scheduled and the harness delivered, per hour.",
"links": [],
"data": {
"kind": "QueryGroup",
"spec": {
"queries": [
{
"kind": "PanelQuery",
"spec": {
"query": {
"kind": "DataQuery",
"group": "prometheus",
"version": "v0",
"datasource": {
"name": "@datasourceUid@"
},
"spec": {
"expr": "sum by (event) (rate({__name__=\"hyperhive.agent.reminders\", hive=~\"$hive\", agent=~\"$agent\"}[$__rate_interval])) * 3600",
"legendFormat": "{{event}}"
}
},
"refId": "A",
"hidden": false
}
}
],
"transformations": [],
"queryOptions": {
"interval": "10m"
}
}
},
"vizConfig": {
"kind": "VizConfig",
"group": "timeseries",
"version": "",
"spec": {
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "multi",
"sort": "desc"
}
},
"fieldConfig": {
"defaults": {
"unit": "short",
"decimals": 1,
"color": {
"mode": "palette-classic"
},
"custom": {
"axisSoftMin": 0,
"drawStyle": "line",
"fillOpacity": 0,
"lineWidth": 1,
"showPoints": "never",
"spanNulls": false
}
},
"overrides": []
}
}
}
}
},
"panel-81": {
"kind": "Panel",
"spec": {
"id": 81,
"title": "First-turn context",
"description": "Input tokens of the first turn of the latest fresh session, by agent.",
"links": [],
"data": {
"kind": "QueryGroup",
"spec": {
"queries": [
{
"kind": "PanelQuery",
"spec": {
"query": {
"kind": "DataQuery",
"group": "prometheus",
"version": "v0",
"datasource": {
"name": "@datasourceUid@"
},
"spec": {
"expr": "max by (agent) ({__name__=\"hyperhive.agent.first_turn.context\", hive=~\"$hive\", agent=~\"$agent\"})",
"legendFormat": "{{agent}}"
}
},
"refId": "A",
"hidden": false
}
}
],
"transformations": [],
"queryOptions": {
"interval": "10m"
}
}
},
"vizConfig": {
"kind": "VizConfig",
"group": "timeseries",
"version": "",
"spec": {
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "multi",
"sort": "desc"
}
},
"fieldConfig": {
"defaults": {
"unit": "short",
"decimals": 0,
"color": {
"mode": "palette-classic"
},
"custom": {
"axisSoftMin": 0,
"drawStyle": "line",
"fillOpacity": 0,
"lineWidth": 1,
"showPoints": "never",
"spanNulls": false
}
},
"overrides": []
}
}
}
}
},
"panel-82": {
"kind": "Panel",
"spec": {
"id": 82,
"title": "Fresh sessions",
"description": "Fresh claude sessions started in the selected range, by agent.",
"links": [],
"data": {
"kind": "QueryGroup",
"spec": {
"queries": [
{
"kind": "PanelQuery",
"spec": {
"query": {
"kind": "DataQuery",
"group": "prometheus",
"version": "v0",
"datasource": {
"name": "@datasourceUid@"
},
"spec": {
"expr": "sort_desc(sum by (agent) (increase({__name__=\"hyperhive.agent.session.count\", hive=~\"$hive\", agent=~\"$agent\"}[$__range])))",
"instant": true,
"legendFormat": "{{agent}}"
}
},
"refId": "A",
"hidden": false
}
}
],
"transformations": [],
"queryOptions": {}
}
},
"vizConfig": {
"kind": "VizConfig",
"group": "bargauge",
"version": "",
"spec": {
"options": {
"displayMode": "basic",
"orientation": "horizontal",
"reduceOptions": {
"calcs": ["lastNotNull"],
"fields": "",
"values": false
},
"showUnfilled": true,
"valueMode": "text"
},
"fieldConfig": {
"defaults": {
"unit": "short",
"decimals": 0,
"thresholds": {
"mode": "absolute",
"steps": [
{
"value": null,
"color": "blue"
}
]
},
"color": {
"mode": "fixed",
"fixedColor": "blue"
}
},
"overrides": []
}
}
}
}
}
},
"layout": {
@ -3552,6 +3932,71 @@
"name": "panel-77"
}
}
},
{
"kind": "GridLayoutItem",
"spec": {
"x": 0,
"y": 28,
"width": 12,
"height": 8,
"element": {
"kind": "ElementReference",
"name": "panel-78"
}
}
},
{
"kind": "GridLayoutItem",
"spec": {
"x": 12,
"y": 28,
"width": 12,
"height": 8,
"element": {
"kind": "ElementReference",
"name": "panel-79"
}
}
},
{
"kind": "GridLayoutItem",
"spec": {
"x": 0,
"y": 36,
"width": 8,
"height": 8,
"element": {
"kind": "ElementReference",
"name": "panel-80"
}
}
},
{
"kind": "GridLayoutItem",
"spec": {
"x": 8,
"y": 36,
"width": 8,
"height": 8,
"element": {
"kind": "ElementReference",
"name": "panel-81"
}
}
},
{
"kind": "GridLayoutItem",
"spec": {
"x": 16,
"y": 36,
"width": 8,
"height": 8,
"element": {
"kind": "ElementReference",
"name": "panel-82"
}
}
}
]
}