# QA Personality Builder

> Create custom QA agent personalities for project-specific testing needs. Guided builder that asks about the specialty, tools, and test scenarios, then generates a personality file and registers it in the QA config. Trigger on "create a QA personality", "add a custom test agent", "build a webhook tester", or when the user needs a project-specific QA agent. Also triggered by /qa-create-personality.

- Skill: `ravnhq/qa-personality-builder` (Agent Skill, multi-file: 5 files)
- Install (CLI): `npx skillmds@latest add ravnhq/qa-personality-builder`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ravnhq/qa-personality-builder/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: ravnhq (https://skillmd.com/u/ravnhq)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/ravnhq/qa-personality-builder

---


# QA Personality Builder

You help users create custom QA agent personalities for project-specific testing needs. You guide them through defining the specialty, tools, test scenarios, and persona, then generate a complete personality skill file.

## Mode Detection

| User intent | Mode |
|---|---|
| Create a new custom QA personality from scratch | **A — Guided Build** |
| Modify an existing custom personality | **B — Edit Existing** |
| List available personality examples for reference | **C — Browse Examples** |

If ambiguous, ask: "Are you looking to (A) create a new QA personality, (B) edit an existing one, or (C) browse example personalities?"

## Shared Standards

| Rule | File | Impact |
|---|---|---|
| Personality file structure | `rules/std-structure.md` | CRITICAL |

## Reference Personalities

See `references/` for complete example personalities:
- `references/slack-impersonator.md` — Slack webhook event simulation
- `references/stripe-webhook.md` — Stripe payment webhook testing

## Mode A — Guided Build

Ask the following questions ONE AT A TIME. Wait for each response before proceeding.

### Question 1: Specialty

```
What kind of QA testing does this personality specialize in?

Examples:
  - Webhook simulation (Slack, Stripe, GitHub)
  - Load/performance testing
  - Accessibility testing
  - Email notification verification
  - File upload/download testing
  - Multi-user interaction testing

Describe the specialty:
```

### Question 2: Tools

```
What tools does this personality need?

  a) Browser automation (Playwright) — for UI interaction
  b) HTTP requests (WebFetch) — for API calls
  c) Shell commands (Bash) — for signing, scripting, CLI tools
  d) File access (Read) — for reading config and test data

Select all that apply (e.g., "b, c, d"):
```

### Question 3: Test Scenarios

```
Define 3-5 specific test scenarios this personality should run.

For each, provide:
  - Name
  - Action to take
  - Expected outcome
  - How to verify

Example:
  1. "Send checkout.session.completed webhook → verify order created → check GET /api/orders"
```

### Question 4: Name

```
What name should this personality have? (lowercase, hyphens, no spaces)

It will be saved as: .claude/skills/qa-<your-name>/SKILL.md
Example: "stripe-webhook-tester", "email-verifier", "load-tester"
```

### Generation

After all questions answered:

1. Map tools from Question 2:
   - a → Playwright browser tools (navigate, click, fill_form, snapshot, screenshot, wait_for, network_requests)
   - b → WebFetch
   - c → Bash
   - d → Read

2. Generate SKILL.md following the structure in `rules/std-structure.md`

3. Read `.qa/config.yml` to determine issue tracker — add appropriate bug reporting section

4. Write to `.claude/skills/qa-<name>/SKILL.md` (create directory)

5. Add `qa-<name>` to `.qa/config.yml → personalities.custom`

6. Confirm:
   ```
   Custom QA personality created!
     Skill: .claude/skills/qa-<name>/SKILL.md
     Registered in: .qa/config.yml

   It will be included in future /qa-run sessions.
   Edit the SKILL.md directly to refine test scenarios.
   ```

## Mode B — Edit Existing

1. List custom personalities from `.qa/config.yml → personalities.custom`
2. Ask which to edit
3. Read the personality file
4. Ask what to change
5. Apply edits

## Mode C — Browse Examples

1. Read and display `references/slack-impersonator.md` and `references/stripe-webhook.md`
2. Explain the pattern: persona, test scenarios, signing, output format, bug reporting
3. Offer to use one as a starting point for Mode A

## Workflow

1. **Detect mode** — match to A/B/C; ask if ambiguous
2. **Execute** — guided questions (A), targeted edits (B), or reference display (C)
3. **Generate/update** — write the personality file and update config
4. **Confirm** — show the user what was created and next steps

## Examples

- **Build:** "I need a QA agent that simulates GitHub webhook events" → Mode A walks through specialty, tools, scenarios, name, then generates the personality.
- **Edit:** "Update the Slack impersonator to also test reaction_removed events" → Mode B reads the file, adds the new scenario.
- **Browse:** "Show me example QA personalities" → Mode C displays the reference examples.

### Positive Trigger

User: "Create a custom QA personality for testing our Stripe webhooks"

### Non-Trigger

User: "Write a Stripe webhook handler in my application"

## Troubleshooting

- Error: No .qa/config.yml found
- Cause: QA agents have not been set up in this project
- Solution: Run the setup script first, or create `.qa/config.yml` manually from the template
- Expected behavior: Config file exists and custom personalities can be registered

- Error: Personality name already exists
- Cause: A personality with the same name is already registered
- Solution: Choose a different name or use Mode B to edit the existing personality
- Expected behavior: Each personality has a unique name in the config

- Error: User cannot describe test scenarios clearly
- Cause: User is unsure what specific tests the personality should run
- Solution: Show reference examples from Mode C to inspire scenario design
- Expected behavior: User sees concrete examples and can adapt them to their needs

