- pi-bot: uses ctx.sendUserMessage (persistent session, followUp mode) - openclaw: POSTs to /hooks/agent endpoint (request/response model) - Detection: checks if ctx.sendUserMessage exists on session_start - openclaw env vars: OPENCLAW_HOOKS_URL, OPENCLAW_HOOKS_PATH, OPENCLAW_HOOKS_TOKEN - Same extension, tools, poller, and @mention routing work in both runtimes