From qq
Runs quick best-practice checks on Unity C# code for anti-patterns, performance traps, and runtime safety issues after editing files.
npx claudepluginhub tykisgod/quick-questionThis skill uses the workspace's default tool permissions.
> **Script path fallback**: qq scripts are invoked as bare commands (e.g. `unity-test.sh`). If "command not found", use `${CLAUDE_PLUGIN_ROOT}/bin/<command>` instead.
Validates Unity C# scripts for best practices, performance patterns like component caching and StringBuilder use, and Unity conventions. Use when reviewing or checking code quality.
Applies Unity-specific C# standards for readable, testable gameplay code with safe engine integration. Use when starting/refactoring MonoBehaviours or needing code review consistency.
Verifies Unity code changes via refresh, compile polling, error/warning console checks, auto-correction loops, and optional EditMode/Runtime tests. Auto-triggers on .cs/.shader/asmdef edits.
Share bugs, ideas, or general feedback.
Script path fallback: qq scripts are invoked as bare commands (e.g.
unity-test.sh). If "command not found", use${CLAUDE_PLUGIN_ROOT}/bin/<command>instead.
Respond in the user's preferred language (detect from their recent messages, or fall back to the language setting in CLAUDE.md).
Quick best-practice check for Unity C# code. Run this right after editing code — it scans for anti-patterns, performance traps, and runtime safety issues against 18 rules.
Arguments: $ARGUMENTS
Intelligently determine what to check:
git diff --name-only HEAD -- '*.cs'Do NOT review the entire codebase by default. Focus on what just changed.
If qq-policy-check.sh is available, run it first against the selected scope:
qq-policy-check.sh --json <files...>
Treat those results as the first-pass findings. Do not ask the model to rediscover the same high-confidence issues from scratch. Use the model for:
FindObjectOfType / FindObjectsOfType
Assets/Editor/, inside #if UNITY_EDITOR blocks) may use theseMessage system calls with untyped object[] parameters
Accessing shared data in Awake/Start
Caching a read-only interface reference then mutating through it
SendMessage / BroadcastMessage / SendMessageUpwards
Unsolicited UI code changes
GetComponent in Update / FixedUpdate / LateUpdate
[SerializeField]Per-frame heap allocations
new List, new Dictionary, string + or $"" interpolation, .ToString(), LINQ queries (.Where, .Select, .ToList), lambda closuresCoroutines started without cleanup
gameObject.tag == string comparison
CompareTag() (allocation-free)Event subscription without unsubscription
+= event subscription must have a matching -= unsubscriptionMissing [RequireComponent] for GetComponent dependencies
GetComponent<T>() and the result is used without null check, the class should have [RequireComponent(typeof(T))]Circular dependency risk
using directives do not violate the project's established dependency directionMissing .asmdef references
Incorrect namespace conventions
Public fields instead of [SerializeField] private
[SerializeField] private for Inspector-assigned fieldsExcessive null checks
Missing documentation comments
Add your project's coding standards and anti-patterns here. Example:
Group output by severity:
## 🔴 Critical (High severity — must fix)
- [file:line] Issue description → suggested fix
## 🟠 Moderate (Medium severity — should fix)
- [file:line] Issue description → suggested fix
## 🟡 Suggestions (Notice — nice to fix)
- [file:line] Issue description → suggested fix
## ✅ Code Quality Highlights
- Brief list of things done well
qq-policy-check.sh --json if availableAfter the check completes, recommend the next step:
/qq:test to verify, or /qq:claude-code-review for a deeper review?"/qq:best-practice to confirm, or proceed to /qq:test?"/qq:test anyway, or fix first?"--auto mode: skip asking, take the strictest path:
→ auto-fix all issues → re-run self until clean → /qq:claude-code-review --auto