II.
HookSurface JSON
Structured · livehook-surface:session-idle
SessionIdle (canonical) json
Inspect the normalized record payload exactly as the atlas UI reads it.
{
"id": "hook-surface:session-idle",
"_kind": "HookSurface",
"_file": "channels-hooks/hook-surfaces/canonical/missing-canonical-hooks.yaml",
"_cluster": "channels-hooks",
"attributes": {
"eventName": "SessionIdle (canonical)",
"displayName": "SessionIdle (canonical)",
"kind": "canonical",
"direction": "observer",
"blocking": false,
"family": "observer",
"payloadSchema": {
"type": "object",
"required": [
"session_id",
"idle_since_ms"
],
"properties": {
"session_id": {
"type": "string"
},
"idle_since_ms": {
"type": "integer",
"description": "Milliseconds since the last user input or tool result."
},
"last_event_kind": {
"type": "string",
"description": "Kind of the last event before idle (e.g. text-deltas-complete, tool-result, user-prompt)."
}
}
},
"description": "Fires when a session has been quiet for a configured threshold. Used\nby orchestrators to dispatch keepalives, by reliability impls to\ndetect stalled loops, and by IDE integrations to dim idle agent\navatars. Native equivalents: opencode `SessionIdle`, claude-code\n`Notification` with `idle` qualifier.\n"
},
"outgoingEdges": [],
"incomingEdges": [
{
"from": "agent-runtime-impl:claude-code.runtime@1.x",
"to": "hook-surface:session-idle",
"kind": "exposes",
"attributes": {}
},
{
"from": "hook-mapping:session-idle-gemini",
"to": "hook-surface:session-idle",
"kind": "maps_hook",
"attributes": {}
}
]
}