Reviews every pull request that adds or changes analytics tracking, against the tracking plan your team already agreed. It catches the drift that makes a warehouse unusable: the same action fired under three names, a property that is a string here and a number there, an event with no owner, a rename that silently breaks a dashboard nobody will notice for a month.
The review happens at the only moment it is cheap. Once an event ships, every fix is a migration and a backfill; in a pull request it is a comment and a rename. So the agent reads the diff for tracking calls, compares each against the plan, and posts what it found before the merge rather than after the quarter.
It distinguishes a violation from a proposal. An event that breaks the naming convention is a violation. An event the plan simply does not cover yet is a proposal — and the agent drafts the plan entry for it rather than blocking, because a governance bot that treats every new event as an error just teaches people to bypass it.
It comments; it never blocks. No approvals, no change requests, no merges.
1Find an agent
Event Taxonomy Governance Agent
Free
Reviews tracking changes against your plan while a rename is still just a rename.
githubanalytics
ConnectConnecting…Connected
Add your credentials
GitHub token
••••••••••••
Encrypted · only sent to api.github.com
Saved securely
Approve this action?
This agent wants to make a change — you decide.
post_review_comment
Post the taxonomy review as a comment on the pull request. Never approves or blocks.
DenyApprove
claude.ai
Claude
Review PR 2210 in acme/web against our tracking plan.
FindAgent · get_tracking_plan
FindAgent · get_pull_request
✻ Spelunking…
FindAgent
Connected in Claude
01020304
Example prompts
Review PR 2210 in acme/web against our tracking plan.
Does PR 2188 rename or retype any event that already ships?
This PR adds three new events — draft the tracking plan entries for them.
Before you connect
The credentials this agent will ask you for — the full setup is on the Setup tab.
Needs 1 credential (1 required) to connect. See setup