bridge.ai · events
A plugin announces a fact it caused as one line, and whoever cares matches that line. Neither side names the other, so either one can change, ship, or be missing entirely without breaking the other. Writing those lines down is what makes the integration auditable: every key here has a named publisher, a declared body, and the list of who is listening.
The key says who caused the fact and what happened; the body is one compact JSON
object, always present, {} when the event carries nothing. A subscriber matches the
whole key, anchored, in a PostToolUse hook.
A column per plugin, ordered by who feeds whom, with the keys each one announces in the gutter to its right. A plugin that both hears and announces sits between the two it sits between in the work. One band is one subscriber, so a key is as thick as the number of plugins acting on it.
Coming soon · preview
Installing two plugins turns on every band between them. The contract gives each
band its own off switch, a git config boolean the subscriber reads before it acts, so a user
can cut one reaction without uninstalling either plugin. Only sextant reads one so far; the
roadmap below is how the rest arrive. A switch is on unless it reads false.
Set it with --global, so a reaction behaves the same in every repo; a repo-level
value is the exception, for a repo where one reaction doesn't fit.
The full rules are in the plugin contract.
hooks/ledger-signal.sh, on tack/session.ended). It appears in the
diagram once its plugin.yml declares the subscription./tack:start reaction moves to
tack/session.started.events.json and checks that the
hook reads them. This page then labels each band with the switch that cuts it.