From qq
Runs quick best-practice checks on Unity C# code for anti-patterns, performance traps, and runtime safety issues after editing files.
How this skill is triggered — by the user, by Claude, or both
Slash command
/qq:best-practiceThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
> **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.
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
npx claudepluginhub tykisgod/quick-questionValidates 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 project coding guidelines before any code change. Reads project-specific rules, modern Unity patterns, event function docs, and API references.
Apply Unity-specific C# standards that preserve readability, testability, and safe engine integration.