From bugflow
Interactive setup wizard for the Bugflow plugin. Generates project-local configuration files.
How this skill is triggered — by the user, by Claude, or both
Slash command
/bugflow:bug-setupThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Sets up the Bugflow plugin for the current project by generating `environment.json` and `playwright.json` configuration files.
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 manuallynpx claudepluginhub konstantilieris/bugfow_pluginRuns an automated bug-fix pipeline on a single ticket or batch, with checkpoint resume, step dispatch, and dry-run support.
Automates Bugbug operations via Composio's Bugbug toolkit through Rube MCP. Discovers tools, manages connections, and executes workflows.
Generates and executes E2E tests from specs or Gherkin scenarios, then auto-fixes bugs found in application code. Use after implementation to verify end-to-end behavior.