II.
Mux JSON
Structured · livemux:hooks-mux
hooks-mux json
Inspect the normalized record payload exactly as the atlas UI reads it.
{
"id": "mux:hooks-mux",
"_kind": "Mux",
"_file": "extensions/muxes/canonical-muxes.yaml",
"_cluster": "extensions",
"attributes": {
"displayName": "hooks-mux",
"protocolType": "hook",
"nativeSide": [
"claude — PreToolUse, PostToolUse, UserPromptSubmit, Notification, Stop, SubagentStop, SessionStart, SessionEnd, PreCompact, ShellEnv",
"codex — OnToolCall, OnStop",
"gemini — pre_prompt, post_response",
"copilot — preTool, postTool",
"cursor — inherits Claude Code hook schema",
"opencode — on_step, SessionIdle, ShellEnv",
"pi, omp, openclaw, hermes — onEvent (generic)"
],
"canonicalSide": "Canonical 14-hook surface set (PreToolUse, PostToolUse, UserPromptSubmit, etc.)",
"position": "Between Agent-Runtime hook events and subscribed plugins / extension-interface impls",
"bridgingConcerns": [
"name mapping (per-agent → canonical)",
"payload schema normalization (UnifiedHookEvent: version, adapter, phase, rawEventName, supportLevel, execution, payload, env, raw)",
"support level (supported / degraded / unsupported) per (agent, hook)",
"hook family (shell-hook / in-process / observer) — determines delivery mechanism",
"merge policy across multiple subscribers (DECISION_PRECEDENCE deny < ask < allow < continue < noop)"
],
"catalogInputNodeKinds": [
"HookSurface",
"HookMapping",
"AgentVersion"
],
"trustChainParticipation": "planned",
"description": "Bridges per-product native hook names to the canonical hook taxonomy\n+ applies per-axis merge policies (persistEnv key-wise, decision\nmost-restrictive-wins, systemMessage concat, toolMutation single-writer).\nEmits MergeDiagnostics: handlerCount, handlerOrder, conflicts,\ndegradedFields, handlerTimings, unsupportedOutputFields,\nnativeRenderingLosses, mergedAt.\n"
},
"outgoingEdges": [
{
"from": "mux:hooks-mux",
"to": "layer:5-agent-runtime",
"kind": "bridges_protocol_type",
"attributes": {}
},
{
"from": "mux:hooks-mux",
"to": "agentVersion:claude:ge-0-0-0",
"kind": "bridges_for",
"attributes": {}
},
{
"from": "mux:hooks-mux",
"to": "agentVersion:codex:ge-0-119-0",
"kind": "bridges_for",
"attributes": {}
},
{
"from": "mux:hooks-mux",
"to": "agentVersion:cursor:ge-0-0-0",
"kind": "bridges_for",
"attributes": {}
},
{
"from": "mux:hooks-mux",
"to": "agentVersion:gemini:ge-0-0-0",
"kind": "bridges_for",
"attributes": {}
},
{
"from": "mux:hooks-mux",
"to": "agentVersion:opencode:ge-0-0-0",
"kind": "bridges_for",
"attributes": {}
},
{
"from": "mux:hooks-mux",
"to": "agentVersion:copilot:ge-0-0-0",
"kind": "bridges_for",
"attributes": {}
},
{
"from": "mux:hooks-mux",
"to": "agentVersion:pi:ge-0-0-0",
"kind": "bridges_for",
"attributes": {}
},
{
"from": "mux:hooks-mux",
"to": "agentVersion:omp:ge-0-0-0",
"kind": "bridges_for",
"attributes": {}
},
{
"from": "mux:hooks-mux",
"to": "agentVersion:openclaw:ge-0-0-0",
"kind": "bridges_for",
"attributes": {}
},
{
"from": "mux:hooks-mux",
"to": "agent-version:hermes@current",
"kind": "bridges_for",
"attributes": {}
}
],
"incomingEdges": []
}