From bugflow
Interactive setup wizard for the Bugflow plugin. Generates project-local configuration files.
npx claudepluginhub konstantilieris/bugfow_pluginThis skill uses the workspace's default tool permissions.
Sets up the Bugflow plugin for the current project by generating `environment.json` and `playwright.json` configuration files.
Automates Bugbug tasks via Rube MCP and Composio toolkit. Discovers tools dynamically with RUBE_SEARCH_TOOLS, manages connections, and executes workflows like bulk operations.
Generates test plans, manual test cases, automated Playwright tests, regression suites, and bug reports using markdown templates for QA automation.
Share bugs, ideas, or general feedback.
Sets up the Bugflow plugin for the current project by generating environment.json and playwright.json configuration files.
$ARGUMENTS contains --reconfigureCheck if .claude/bugflow/config/environment.json already exists in the project root.
$ARGUMENTS does NOT contain --reconfigure: Inform the user that configuration already exists and ask if they want to reconfigure. If no, exit.$ARGUMENTS contains --reconfigure: Proceed with reconfiguration, showing current values as defaults.Ask the user using AskUserQuestion:
Question 1: "What is your Bugzilla server URL?"
https://bugzilla.example.com, http://bugzilla.internalStore as bugzillaUrl.
Ask the user using AskUserQuestion:
Question 1: "What is your application's production URL?"
https://app.example.com/myapp/Question 2: "What is your application's development URL?"
http://localhost:3000/ or http://localhost:8080/myapp/Store as appProductionUrl and appDevUrl.
Ask the user using AskUserQuestion:
Question 1: "What username and password should be used to log into your application for testing?"
.claude/bugflow/config/ and auto-added to .gitignoreQuestion 2: "What are your Bugzilla login credentials (email and password)?"
Store as appUsername, appPassword, bugzillaEmail, bugzillaPassword.
Ask the user using AskUserQuestion:
Question: "What CSS selectors identify your application's login form fields?"
#username, #password, button[type='submit']Store as loginUsernameSelector, loginPasswordSelector, loginSubmitSelector.
Ask the user using AskUserQuestion:
Question: "Would you like to enable Slack notifications?"
If yes, ask for the Slack channel ID.
Store as slackChannelId and slackChannelName (or null if skipped).
Ask the user using AskUserQuestion:
Question: "Where should workflow state and dossier files be stored?"
.bugflow/ and docs/bugflow/)" (Recommended)Store as stateDir and dossierDir.
Create directory: mkdir -p .claude/bugflow/config
Generate .claude/bugflow/config/environment.json:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Environment Configuration",
"description": "Generated by /bugflow:bug-setup. Do NOT commit this file.",
"version": "1.0.0",
"_usage": {
"note": "Commands and agents read from this file for environment-specific values",
"path": ".claude/bugflow/config/environment.json"
},
"slack": {
"channelId": "<slackChannelId or 'DISABLED'>",
"channelName": "<slackChannelName or 'N/A'>",
"description": "Channel for workflow notifications"
},
"bugzilla": {
"baseUrl": "<bugzillaUrl>",
"showBugUrl": "<bugzillaUrl>/show_bug.cgi",
"description": "Bugzilla server URLs"
},
"app": {
"productionUrl": "<appProductionUrl>",
"developmentUrl": "<appDevUrl>",
"description": "Application URLs for verification tests"
},
"git": {
"branchPrefix": "bug/",
"branchPattern": "bug/<bugId>-<slug>",
"description": "Git branch naming conventions"
},
"workflow": {
"lockExpiryHours": 4,
"maxPlanRevisions": 3,
"maxVerifyRetries": 2,
"description": "Workflow behavior configuration"
},
"paths": {
"stateDir": "<stateDir>",
"dossierDir": "<dossierDir>",
"logsDir": "<stateDir>/_logs",
"patternsDir": "<stateDir>/_shared/patterns",
"description": "Standard paths for workflow artifacts"
}
}
.claude/bugflow/config/playwright.json:{
"baseUrl": "<appProductionUrl base (protocol + host)>",
"appPath": "<appProductionUrl path component>",
"credentials": {
"username": "<appUsername>",
"password": "<appPassword>"
},
"options": {
"ignoreHTTPSErrors": <true if appProductionUrl uses https with self-signed cert, false otherwise>
},
"sessionManagement": {
"reuseContext": true,
"maxRetries": 3,
"loginTimeout": 5000,
"actionTimeout": 2000,
"maxSessionsPerUser": 5
},
"instrumentation": {
"prefix": "[BUGFIX-",
"suffix": "]",
"blockStart": "// INSTRUMENTATION BLOCK - Bug",
"blockEnd": "// END INSTRUMENTATION BLOCK"
},
"selectors": {
"loginForm": {
"username": "<loginUsernameSelector>",
"password": "<loginPasswordSelector>",
"submitButton": "<loginSubmitSelector>"
},
"app": {}
},
"verification": {
"maxIterations": 3,
"retryDelay": 1000,
"cleanupRequired": true
},
"bugzilla": {
"baseUrl": "<bugzillaUrl>",
"credentials": {
"email": "<bugzillaEmail>",
"password": "<bugzillaPassword>"
},
"selectors": {
"loginEmail": "input[name='Bugzilla_login']",
"loginPassword": "input[name='Bugzilla_password']",
"loginButton": "input[type='submit'][value='Log in']",
"commentTextarea": "#comment",
"saveButton": "#commit",
"statusDropdown": "select[name='bug_status']"
}
}
}
Check if .gitignore exists in the project root.
.claude/bugflow/config/ is already listed. If not, append:
# Bugflow plugin config (contains credentials)
.claude/bugflow/config/environment.json
.claude/bugflow/config/playwright.json
.gitignore does not exist, create it with the above content.mkdir -p <stateDir>
mkdir -p <stateDir>/_logs
mkdir -p <stateDir>/_shared/patterns
mkdir -p <dossierDir>
Display a summary to the user:
Bugflow Configuration Complete!
Bugzilla: <bugzillaUrl>
App (prod): <appProductionUrl>
App (dev): <appDevUrl>
Slack: <slackChannelId or "Disabled">
State dir: <stateDir>
Dossier dir: <dossierDir>
Config files:
.claude/bugflow/config/environment.json
.claude/bugflow/config/playwright.json
Added to .gitignore (credential protection).
You can now run:
/bugflow:bug-start <bug-id> Start a bug workflow
/bugflow:bug-setup --reconfigure Change these settings
.gitignore update fails, warn the user to add the entries manually