Skip to content
Development
Skill

/qa-session

Interactive QA: user reports bugs conversationally, agent files GitHub issues. Triggers: QA session, report bug, file issue, conversational QA, bug intake.

From plugin
ai-toolkit
161111 skills44 agents
Install
$ npx -y skills add softspark/ai-toolkit --skill qa-session --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/qa-session

Context preview

The summary Claude sees to decide when to auto-load this skill.

Interactive QA: user reports bugs conversationally, agent files GitHub issues. Triggers: QA session, report bug, file issue, conversational QA, bug intake.

SKILL.md

qa-session.SKILL.md
name: qa-session
description: "Interactive QA: user reports bugs conversationally, agent files GitHub issues. Triggers: QA session, report bug, file issue, conversational QA, bug intake."
user-invocable: true
effort: high
argument-hint: "[area to QA or first bug report]"
allowed-tools: Read, Grep, Glob, Bash, Agent

QA Session

$ARGUMENTS

Interactive QA session. User describes problems, agent clarifies, explores codebase, and files GitHub issues.

Usage

/qa-session [area to QA or first bug report]

What This Command Does

1. **Listens** to user's bug report 2. **Clarifies** with 2-3 focused questions max 3. **Explores** codebase in background for context and domain language 4. **Assesses** scope — single issue or breakdown 5. **Files** GitHub issues via `gh issue create` 6. **Continues** until user says done

For Each Issue

1. Listen and Lightly Clarify

Let user describe the problem. Ask **at most 2-3 short questions** on:

  • Expected vs actual behavior
  • Steps to reproduce
  • Consistent or intermittent

Don't over-interview. If clear enough, move on.

2. Explore Codebase in Background

Kick off Agent (subagent_type=Explore) in background to:

  • Learn domain language (check UBIQUITOUS_LANGUAGE.md)
  • Understand what the feature should do
  • Identify behavior boundaries

This helps write better issues — but issues must NOT reference files/lines.

3. Assess Scope

| Decision | When | |----------|------| | **Single issue** | One behavior wrong in one place | | **Breakdown** | Multiple independent areas, separable concerns, distinct failure modes |

4. File GitHub Issues

Use `gh issue create`. Do NOT ask to review — file and share URLs.

**Single issue template:**

## What happened
[Actual behavior in plain language]

## What I expected
[Expected behavior]

## Steps to reproduce
1. [Concrete numbered steps]
2. [Use domain terms, not module names]

## Additional context
[Extra observations using domain language]

**Breakdown template** (for each sub-issue):

## Parent issue
#{parent-issue-number} or "Reported during QA session"

## What's wrong
[This specific behavior problem]

## What I expected
[Expected behavior for this slice]

## Steps to reproduce
1. [Steps specific to THIS issue]

## Blocked by
- #{issue-number} or "None — can start immediately"

5. Continue Session

After filing, share URLs and ask: "Next issue, or are we done?"

Rules

  • **MUST** use the project's domain language from `UBIQUITOUS_LANGUAGE.md` — framework jargon in issues excludes non-engineering stakeholders
  • **MUST** describe behaviors, not code — "sync service fails to apply patch" not "applyPatch() throws"
  • **MUST** include reproduction steps — if they are not clear, ask the user rather than guess
  • **NEVER** include file paths, line numbers, or function names in issue bodies — they go stale before triage
  • **NEVER** over-interview. Cap clarifying questions at 2-3 per bug; more than that is signal the bug needs a QA session with a product owner, not more questions.
  • **CRITICAL**: the developer who picks up the issue should understand it in 30 seconds. Wall-of-text reports get reopened for clarification.
  • **MANDATORY**: when breaking one report into multiple issues, file them in dependency order so blockers have real issue numbers to reference

Gotchas

  • Domain language in `UBIQUITOUS_LANGUAGE.md` may be out of date. If it was last updated months ago and new features have shipped, the glossary is an input hint, not a source of truth — confirm terms with the user when unsure.
  • "Intermittent" reports are often environmental (one user's browser, one region's data) rather than truly random. Always ask for "how often" and "when did it start" before labeling as race condition.
  • `gh issue create` opens `$EDITOR` without `--body`. In automation this hangs — always pass the body file or inline body.
  • Users often describe the **workaround** as if it were the bug ("I have to refresh the page"). Drill to the underlying behavior — "what fails before the refresh?" — otherwise the fix targets the symptom.
  • Independent sub-issues from one bug report can duplicate work if each gets a different developer. Mention the parent QA session in every sub-issue so reviewers notice the pattern.

When NOT to Use

  • For triaging a **single** known bug with a proposed fix — use `/triage-issue`
  • For creating issues from a PRD — use `/prd-to-issues`
  • For debugging a reproducible error — use `/debug`
  • For code review of a PR that addresses a bug — use `/review`
  • For architecture-level problems — use `/architecture-audit`, not bug reports
Read more
Ships withai-toolkit

Professional-grade AI coding toolkit with multi-platform support. Machine-enforced safety, 109 skills, 44 agents, expanded lifecycle hooks, persona presets, experimental opt-in plugin packs, and benchmark tooling — works with Claude Code, Claude Chat/Cowork,

Get the whole plugin