brainiac-fizzy
Fizzy card management plugin for Brainiac.
Handles the full Fizzy integration: card assignment, comment routing, @mentions, cross-agent reviews, duplicate detection, deploy shortcuts, and deployment environment tracking.
Installation
brainiac install fizzy
brainiac restart
Or manually:
gem install brainiac-fizzy
Then add to ~/.brainiac/plugins.json:
{
"plugins": [
{ "name": "fizzy", "gem": "brainiac-fizzy" }
]
}
Configuration
Fizzy configuration lives in ~/.brainiac/fizzy.json (same as before):
{
"authorized_users": [
{ "id": "user-id-1", "name": "Andy", "human": true },
{ "id": "agent-id-1", "name": "Galen", "human": false }
],
"uat_agent": false,
"uat_agent_tag": "uat",
"boards": {
"development": {
"board_id": "your-board-id",
"webhook_secret": "secret-for-this-board",
"columns": {
"right_now": "column-id",
"needs_review": "column-id",
"uat": "column-id"
}
}
}
}
UAT agent (uat_agent)
When a PR is merged and its card moves to the UAT column, Brainiac can dispatch
an LLM agent to write manual testing steps as a card comment. This spends tokens
on every merge, so it's disabled by default. Set "uat_agent": true at the
top level of fizzy.json to opt back in globally. The card still moves to UAT
and gets the PR-merged comment either way — only the agent dispatch is gated.
Per-card opt-in: Even with uat_agent off globally, you can trigger the UAT
agent for a single card by adding the uat tag to it. When the card's PR merges,
Brainiac fetches the card's live tags and dispatches the UAT agent if the tag is
present. Customize the tag name with "uat_agent_tag": "your-tag", or set it to
false/null to disable per-card overrides entirely. This gives you three
states:
uat_agent: true— dispatch on every mergeuat_agent: false(default) +uattag on a card — dispatch for that card onlyuat_agent: false+ no tag — never dispatch (pure bookkeeping, zero tokens)
What This Plugin Handles
| Event | Action |
|---|---|
| Card assigned | Creates worktree, maps card to branch, dispatches assigned agent |
| Card published | Duplicate detection (trigram + semantic) |
| @mention in comment | Routes to mentioned agent (cross-agent reviews) |
| Follow-up comment | Runs card's assigned agent in existing worktree |
| Deploy shortcut | Clones branch to deployment environment (dev01, dev02) |
Webhook Setup
Set your Fizzy webhook URL to:
https://your-ngrok.ngrok-free.app/fizzy/development
Where development is the board key from fizzy.json. Set the secret to the board's webhook_secret.
Dependencies on Brainiac Core
This plugin runs inside the brainiac server process and uses core functions:
verify_signature!— webhook HMAC verificationrun_agent— agent CLI dispatchsession_active?,already_processed?— deduplicationidentify_project_by_tags— card-to-project mappingcreate_or_reuse_worktree— git worktree managementprefetch_card_context— card body/comments pre-fetchrender_prompt— prompt template compositionreload_projects!,reload_agent_registry!— config hot-reload
These are all provided by the brainiac gem (runtime dependency).
Migrating from Built-in Handler
If upgrading from brainiac's built-in Fizzy handler:
- Install the plugin:
brainiac install fizzy - Disable the built-in handler in
~/.brainiac/brainiac.json:{ "handlers": { "fizzy": false } } - Restart:
brainiac restart
The plugin uses the exact same config files and functions — it's a drop-in replacement.
Development
cd ~/Code/brainiac-fizzy
bundle install
rake test
License
MIT