๐งต Kausality's backend is just a webhook. Here's why that's the...

The report has everything: parent/child refs, the diff (oldObject/newObject), request context (user, fieldManager, operation).
kausality.io/approvals: '[{"mode":"once",...}]'
kausality.io/freeze: '{"user":"...", "at":"..."}'
kausality.io/snooze: '{"expiry":"..."}'
Drift in, annotation out
- Human escalation (Slack bot โ button click โ write annotation)
- Agent handling (evaluate diff โ decide โ write annotation)
- Hybrid (agent triages, escalates ambiguous cases to humans)
Same contract. Different handlers
4/ Kausality also sends `phase: Resolved` when drift clears โ parent spec changed, approval added, or child deleted.
So your handler can close tickets, clear dashboards, notify agents that their action landed.
Define a webhook contract. Let handlers decide who's in the loop.
Callback design: github.com/kausality-io/kโฆ
Project: github.com/kausality-io/kโฆ