Reviews Qt6 QML code with deterministic linting (47+ rules), six parallel agents (bindings, layout, loaders, delegates, states, performance), and optional qmllint. Reports only high-confidence issues (>80/100).
npx claudepluginhub theqtcompanyrnd/agent-skills --plugin qt-development-skillsThis skill uses the workspace's default tool permissions.
A structured, read-only code review skill for Qt6 QML code that
Reviews Qt6 C++ code via deterministic linting (60+ rules) and six parallel agents analyzing model contracts, ownership, threading, API correctness, error handling, performance. Reports high-confidence issues with mitigations.
Reviews code for quality issues: architecture conformance, anti-patterns, performance, maintainability. Read-only analysis, never modifies code.
Analyzes code changes for quality issues via cleanup reports on technical debt and multi-perspective reviews from maintainer, architect, security, and performance viewpoints. Use before merges or PRs.
Share bugs, ideas, or general feedback.
A structured, read-only code review skill for Qt6 QML code that combines deterministic linting with parallel agent-driven deep analysis across six focused domains.
Detect the user's intended scope from their language:
Triggered by language like: "this commit", "these changes", "the diff", "what I changed", "my changes", "staged changes", "outstanding changes", "before I commit"
Action: Run git diff (unstaged) and git diff --cached
(staged) to obtain the changeset. If the user says "this commit",
use git diff HEAD~1..HEAD. Review only the changed lines plus
sufficient surrounding context (±50 lines) for understanding.
Only report issues found in the changed lines -- do not report
issues in unchanged surrounding context.
Triggered by language like: "review the codebase", "audit the project", "check the repository", "review src/", or when a specific file/directory path is given without commit language.
Action: Glob for *.qml files in the specified scope. Review
all matched files.
The review proceeds in three phases. Never skip a phase.
Run the unified Python linter against the target files. Requires Python 3.6+ (no external dependencies). If Python is not available, warn the user and skip to Phase 1b.
python3 references/lint-scripts/qt_qml_lint.py <files...>
# If python3 is not found, fall back to:
python references/lint-scripts/qt_qml_lint.py <files...>
This single-pass scanner encodes all mechanically-checkable rules from the QML review checklist. It reads each file once and evaluates all rules per line, plus block-level structural checks. Output is deterministic and repeatable. The linter is authoritative -- do not second-guess its output.
Collect all output before proceeding.
Rule categories (47+ checks):
Attempt to run qmllint if available on the system. Detection
order:
$QT_HOST_PATH/bin/qmllintwhich qmllint / where qmllintIf found, run with JSON output:
qmllint --json - -I <import-paths> <files...>
Parse the JSON output and merge with Python linter findings. Deduplicate by file+line+issue. qmllint is authoritative for type- level checks (unresolved types, incompatible assignments, alias cycles). The Python linter is authoritative for style, ordering, and performance patterns that qmllint does not cover.
Launch six focused review agents in parallel. Name each agent descriptively when launching (e.g. "Agent 1: Bindings & Properties") to provide progress visibility. Each agent has a tight scope and a specific checklist. Agents are READ-ONLY -- they must never edit or write files.
Tool-agnostic agent contract: Each agent described below is a self-contained review mission. In Claude Code, launch them as general-purpose subagents. In other tools, implement each as whatever subprocess, prompt chain, or analysis pass the tool supports. The key requirement is that each agent:
See Agent missions below for the six agents.
Merge lint script output, qmllint output (if available), and all agent findings. Deduplicate (same file+line+issue = one finding). Apply confidence scoring. Format the final report using the output format below.
Launch all six agents in parallel. Pass each agent:
Each agent should read all files in scope, then focus on its assigned categories.
Scope: Binding correctness, property types, alias chains, qualified lookup, binding loops.
Check for:
someProperty instead of
root.someProperty) -- complements qmllint unqualified warning
with semantic contextQt.binding() closures capturing loop variables by reference
(use let not var)pragma ComponentBehavior: Bound missing on files with delegates
that access outer-scope idsreadonly on properties that are bound but never
imperatively assignedReferences: references/qt-qml-review-checklist.md
sections 3 (Bindings & Properties)
Scope: Anchoring correctness, layout sizing, visual tree structure.
Check for:
visible: false (resolve the target id,
check its visible property)implicitWidth/implicitHeight bindings
that could create feedback loopsLayout.fillWidth/Layout.fillHeight on items that
should stretchReferences: references/qt-qml-review-checklist.md
section 4 (Layout & Anchoring)
Scope: Loader patterns, dynamic object creation, Connections lifecycle, C++ integration.
Check for:
Component.createObject() return values not tracked or destroyed
(memory leak)source and sourceComponent at runtime
(unsupported)Image.status error
handlingConnections with dynamically-changing target not handling
null target staterootContext()->setContextProperty()) in C++
integration codeReferences: references/qt-qml-review-checklist.md
sections 5 (Loader), 8 (Images), 13 (C++ Integration)
Scope: Model-view patterns, delegate lifecycle, reuse safety, required properties.
Check for:
required property int index when index is used in a
delegate that declares other required propertiesmodel.roleName for roles not defined in the
model's roleNames()currentIndex usage without guards for known Qt bugs
(QTBUG-48633, QTBUG-93293)DelegateChooser patterns that could fail on non-QAbstractItemModel
(choice made once at creation, not re-evaluated)onPooled: visible = false pattern)References: references/qt-qml-review-checklist.md
section 6 (ListView & Delegates)
Scope: State machine correctness, migration patterns, component structure.
Check for:
PropertyChanges.restoreEntryValues surprises (properties
reverting on state exit when developer expects them to persist)Binding.restoreMode mismatch from Qt 5 migration (default
changed from RestoreNone to RestoreBindingOrValue)Connections handler syntax (onFoo:) vs
modern function onFoo() in migrated codeQtGraphicalEffects imports that should be migrated to
MultiEffect (Qt 6.5+)StateGroup for
reusabilityfrom/to on transitions that could fire unexpectedly
when new states are addedReferences: references/qt-qml-review-checklist.md
sections 7 (States), 14 (Migration)
Scope: Performance anti-patterns, rendering cost, JavaScript quality, style consistency.
Check for:
readonly property)QRegularExpression or complex computation inside loopsText.PlainText when rich text is not needed (default
textFormat incurs parsing overhead)font.preferShaping: false opportunity (when text shaping
features are unused)id assignments on objects never referencedQtObject { id: privates }width/height instead of
implicitWidth/implicitHeight (prevents consumer resizing)parent used without null-check in delegates or Loader items
(can be null during creation/destruction)pragma ComponentBehavior: Bound on files with delegates
that access outer-scope idsReferences: references/qt-qml-review-checklist.md
sections 9 (Performance), 10 (Style), 11 (Signals),
12 (JavaScript), 13 (C++ Integration)
| Confidence | Meaning | Action |
|---|---|---|
| 90-100 | Certain: direct rule violation with full trace | Report as finding |
| 80-89 | High: rule violation confirmed but edge case possible | Report as finding |
| 60-79 | Medium: likely issue but cannot fully verify | Report as investigation target |
| <60 | Low: suspicion only | Suppress entirely |
Investigation targets are findings the agent believes are real but cannot fully verify. These are presented in a separate section for human verification. Maximum 10 investigation targets per report, prioritized by confidence within the 60-79 band.
Present the final report as follows. Use exactly this structure.
## QML Code Review Report
**Scope**: [diff: `git diff HEAD~1..HEAD` | files: <paths>]
**Files reviewed**: N
**Issues found**: N (M from lint, K from deep analysis)
**qmllint**: [ran / not available]
---
### Lint findings
For each lint finding:
#### [L-NNN] <Short title>
- **File**: `path/to/file.qml:42`
- **Rule**: <rule ID from checklist>
- **Finding**: <what the script detected>
- **Mitigation**: <what to do, in prose -- no code patches>
---
### Deep analysis findings
For each agent finding:
#### [D-NNN] <Short title>
- **File**: `path/to/file.qml:42`
- **Category**: <agent name: Bindings & Properties | Layout &
Anchoring | Component Loading & Lifecycle | ListView &
Delegates | States & Structure | Performance & Quality>
- **Confidence**: NN/100
- **Finding**: <description of the issue>
- **Trace**: <how the issue was confirmed -- which symbols were
followed, what was checked>
- **Mitigation**: <what to do, in prose -- no code patches>
---
### Investigation targets (human verification needed)
Findings the agent identified but could not fully verify.
Maximum 10, sorted by confidence. These require human judgment.
For each investigation target:
#### [I-NNN] <Short title>
- **File**: `path/to/file.qml:42`
- **Category**: <agent name>
- **Confidence**: NN/100
- **Finding**: <what the agent suspects>
- **Unverified because**: <what the agent could not confirm>
- **How to verify**: <specific action for the reviewer>
---
### Summary
| Category | Lint | Deep | Investigate | Total |
|----------|------|------|-------------|-------|
| ... | N | N | N | N |
| **Total**| **M**| **K**| **I** | **N** |
Findings below confidence 60 are suppressed entirely.
The following reference files contain detailed checklists:
references/qt-qml-review-checklist.md -- Complete QML review
rules (lint + agent rules, always loaded)references/lint-scripts/qt_qml_lint.py -- Single-pass Python
linter (runs all 47+ checks in <1s)Copyright (C) 2026 The Qt Company.