The cursor runtime from #363 is the only one without a live session behind it. Its adapter and tests are built from Cursor's hooks docs (https://cursor.com/docs/hooks); the other runtimes in #363 were each checked against a real CLI session, and that caught real mapping bugs in several of them.
To verify with a live Cursor (IDE or cursor-agent) session
hook init cursor output (.cursor/hooks.json, version: 1, * matchers) loads without errors.
- Payload field names:
conversation_id, tool_use_id, tool_output (JSON string?), subagent_id/subagent_type, afterAgentResponse.text.
- Permission semantics: the adapter answers
{"permission": "allow"} on preToolUse and subagentStart, because the docs say non-schema output blocks. Confirm this does not skip Cursor's own approval prompt. If it does, find a response that leaves the decision to Cursor.
- Grok runs
.cursor/hooks.json hooks too; confirm real Cursor payloads never carry hookEventName, which the cursor registration now treats as foreign.
Method used for the other runtimes: a logging wrapper around hook run, a disposable Memgraph, and a scratch project; then assert the resulting graph.
The
cursorruntime from #363 is the only one without a live session behind it. Its adapter and tests are built from Cursor's hooks docs (https://cursor.com/docs/hooks); the other runtimes in #363 were each checked against a real CLI session, and that caught real mapping bugs in several of them.To verify with a live Cursor (IDE or
cursor-agent) sessionhook init cursoroutput (.cursor/hooks.json,version: 1,*matchers) loads without errors.conversation_id,tool_use_id,tool_output(JSON string?),subagent_id/subagent_type,afterAgentResponse.text.{"permission": "allow"}onpreToolUseandsubagentStart, because the docs say non-schema output blocks. Confirm this does not skip Cursor's own approval prompt. If it does, find a response that leaves the decision to Cursor..cursor/hooks.jsonhooks too; confirm real Cursor payloads never carryhookEventName, which the cursor registration now treats as foreign.Method used for the other runtimes: a logging wrapper around
hook run, a disposable Memgraph, and a scratch project; then assert the resulting graph.