Install any skill in seconds. Free to start, no credit card required.
Get Started Free →besty0728/unity-unitask-design
Source-anchored design rules for Cysharp UniTask 2.5.10 (Unity 2018.4+) — struct semantics, PlayerLoop timing, cancellation, composition, conversion, async enumerables, triggers, and pitfalls.
Passed 20 of 22 test cases with the skill, and 11 of 22 without it.
and 10 more in the full report
9 fixed11 passed either way2 still failing0 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 9 test cases the skill fixed. Same model, same prompt, with and without the skill.
I have an async fire-and-forget background audio preloader in a Unity script called from Start(). I don't want to await it or block the caller. Should I leave the returned task unawaited, or is there a specific extension method required to silence warnings and handle unobserved exceptions? Show the single-line call.
| Checked | Without skill | With skill |
|---|---|---|
| Calls Forget on the returned task | Passed | Passed |
| Explains that unawaited tasks can trigger unobserved exceptions in UniTaskScheduler | Missed | Passed |
The instructions your model reads when the skill loads.
Before calling any skill in this module: if you are about to call a skill with parameters guessed from its name or description, STOP — read this file (or fetch its schema via
GET /skills/recommend?includeSchema=true) first. If you already have the parameter definitions from recommend/schema, you may proceed straight to dryRun.
Advisory module. Every rule is distilled from Cysharp UniTask source at:
[email protected] (Unity 2018.4 baseline; actively used with 2022.3 / Unity 6)Each rule cites a concrete file/line so the reasoning is auditable and the AI does not improvise against stale memory.
Mode: Documentation only — no REST skills to gate; load freely under any operating mode (Approval / Auto / Bypass).
Load before writing or reviewing any of:
async UniTask / async UniTask<T> / async UniTaskVoid method signature.Forget(), .AttachExternalCancellation(token), .SuppressCancellationThrow() chainingUniTask.Yield, UniTask.NextFrame, UniTask.Delay, UniTask.WaitForEndOfFrame, UniTask.WaitForFixedUpdateUniTask.WaitUntil, UniTask.WaitWhile, UniTask.WaitUntilValueChanged, UniTask.WaitUntilCanceledUniTask.WhenAll, UniTask.WhenAny, UniTask.WhenEachUniTask.SwitchToMainThread, UniTask.SwitchToThreadPool, UniTask.RunAsyncOperation.ToUniTask(), UnityWebRequest.SendWebRequest().ToUniTask(), Coroutine.ToUniTask()this.GetCancellationTokenOnDestroy(), GetAsyncStartTrigger() and other AsyncTrigger* extensionsUniTaskCompletionSource / UniTaskCompletionSource<T> manual completion sourcesIUniTaskAsyncEnumerable<T> / UniTaskAsyncEnumerable / AsyncReactiveProperty<T> / Channel<T>Task.Run / SwitchToThreadPool are forbidden| # | Rule | Source anchor |
|---|---|---|
| 1 | UniTask is a readonly partial struct (value type). Once awaited, its IUniTaskSource is recycled; awaiting the same UniTask variable twice throws. Use .Preserve() to obtain a memoized copy that can be awaited multiple times. | UniTask.cs:34, UniTask.cs:103-113 |
| 2 | A UniTask returned by a method must be either awaited, .Forget()ed, or .AttachExternalCancellation(token)ed. Orphan UniTasks silently swallow exceptions into UniTaskScheduler.UnobservedTaskException. | UniTaskScheduler.cs:13, UniTaskVoid.cs:11-17 |
test cases passed, vs 11 / 22 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.