Claude Code Plugin Reference
Installation
| Command | Description |
|---|---|
/plugin marketplace add Qualflare/qualflare-claude-code | Register the plugin from the Qualflare marketplace |
/plugin install qualflare@qualflare | Install the plugin into the current session |
/plugin update qualflare | Upgrade to the latest version |
Plugin name: qualflare · Version: 0.18.0
Slash Commands
| Command | Argument | Description |
|---|---|---|
/qf-init | — | First-time project setup: detect frameworks, write .qualflare/test-state.md, configure authentication and the optional Stop hook, update CLAUDE.md. |
/qf-cover | [--all] [path or glob] | Generate tests for source files changed in the current session. Reads .qualflare/test-state.md for framework context. Proposes test cases and writes them after approval. Pass --all to cover a whole file or directory instead of only session changes. |
/qf-run | [framework-slug or results-file] | Run the project's test suite and upload results to Qualflare via qf collect. Reads .qualflare/test-state.md for the framework list. |
/qf-fix | [framework-slug or package/path] | Analyze failing tests from the last /qf-run and patch source code until they pass. Reads result files from .qualflare/results/. |
/qf-doctor | — | Health check: verifies CLI installation, authentication, config validity, .qualflare/test-state.md freshness, file-count drift, and framework tooling. Reports ✅/⚠️/❌ per check. |
/qf-update | [framework-slug or package/path] | Refresh file counts in .qualflare/test-state.md by re-globbing each framework row. Faster than a full re-init. |
/qf-state | — | Show detected frameworks, file counts, hook setting, and which CLI identifiers are configured locally. |
/qf-hook | on|off | Toggle the end-of-session coverage nudge on or off. No argument prints the current status. |
The Stop Hook
The Stop hook fires at the end of a Claude Code session. When enabled, it prints a one-line nudge if source files were changed without any corresponding test edits:
🔍 Qualflare: 3 source file(s) changed without test updates. Run /qf-cover to add coverage.Trigger conditions (all must be true)
- At least one source file was edited (
.js,.ts,.go,.py,.rb,.php,.rs,.java,.kt, and their JSX and module variants (.jsx,.tsx,.mjs,.cjs,.mts,.cts)). - No test files were edited in the same session.
- At least one of those edits was substantive — a single-line change of 40 characters or fewer counts as trivial and is ignored.
What the hook ignores
| Excluded category | Examples |
|---|---|
| Test files | *.test.ts, *.spec.js, *_test.go, test_*.py, *_spec.rb, files under __tests__/, e2e/, cypress/, playwright/ |
| Config files | *.config.ts, *.config.json, vite.config.*, .*rc.json, tsconfig*.json |
| Type-only files | *.d.ts, *.d.mts, types.ts, *.types.ts |
| Build artifacts | node_modules/, vendor/, .git/, dist/, build/, .next/, __pycache__/, .cache/ |
Toggling
/qf-hook on — enable the nudge
/qf-hook off — disable the nudge
/qf-hook — print current statusState Files
/qf-init creates a .qualflare/ directory in the project root:
.qualflare/
├── test-state.md — framework + file-count context (commit this)
├── config.json — hook preference (commit this)
└── results/ — raw test-runner output uploaded by qf collect (gitignore this)Add .qualflare/results/ to your .gitignore. The other two files should be committed — they give every session the context it needs without re-running setup.
test-state.md structure
Generated by /qf-init, updated by /qf-update. Contains:
- Project — name, languages, generation timestamp, plugin version
- Packages — path and CLI identifier for each package (one row per package;
(root)for single-package projects) - Frameworks in use — slug, language, file count, and top-level paths per (package, framework) pair
- Frameworks suggested — frameworks detected as possible but not yet installed
- Conventions — test naming pattern and coverage threshold
- Notes — free-text notes from setup
config.json fields
| Field | Type | Description |
|---|---|---|
version | number | Schema version (currently 1) |
stopHookEnabled | boolean | Whether the end-of-session coverage nudge is active |
Authentication
The plugin uses the same identifier-based auth as the Qualflare CLI. After /qf-init prints your identifiers, register each one:
qf login <identifier> <token>In a monorepo, each package gets its own identifier — run qf login once per package. Tokens are stored in ~/.config/qualflare/config.toml. Get tokens at https://app.qualflare.com/project/<identifier>/settings/access-tokens.
Run qf projects to list currently registered identifiers. For the full CLI authentication reference, see Configuration.
Supported Frameworks
The 23 frameworks the plugin can collect results for via qf collect:
| Category | Frameworks |
|---|---|
| Generic (JUnit-compatible) | junit |
| Unit Testing | python (pytest), golang, jest (also Vitest), mocha, rspec, phpunit, testng |
| BDD | cucumber, karate |
| UI / E2E / Mobile | playwright, cypress, selenium, testcafe, maestro, xctest, espresso |
| API Testing | newman, k6 |
| Security Testing | zap, trivy, snyk, sonarqube |
Vitest results upload via the jest slug. Multi-framework monorepos are supported — /qf-init detects each workspace and tracks them separately.
See Also
- Using Qualflare in Claude Code — installation and daily workflow guide
- AI Features Reference — all AI capabilities in Qualflare
- Collect Command —
qf collectflag reference - Configuration — CLI authentication and environment variables