Content
78%Weight 40%Scale 1-5Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.
A well-structured, token-efficient guidance skill with concrete API references and a properly used one-level-deep reference file. The main gaps are the undefined 'complex features' criterion for choosing Signal Store over a signal service, a duplicated anti-pattern line in the 'Canonical response anchors' section, and missing executable examples for effect() and linkedSignal().
Suggestions
Replace the vague 'For complex features, use @ngrx/signals' with a concrete decision criterion, e.g., 'Use signalStore when state spans 3+ signals or multiple components dispatch updates; otherwise use a signal-based service.'
Remove the duplicated 'Canonical response anchors' section (or the duplicate bullet in section 4) — 'Never update signals inside effect()' and 'resets when source changes' already appear verbatim in the body.
Add a minimal executable example for effect() (e.g., persisting state to localStorage) since it is named as a trigger in the description but never shown, and complete the placeholder computed() in references/signal-store.md with real filter logic.
| Dimension | Reasoning | Score |
|---|---|---|
Conciseness | The body is lean bullet guidance with exact API names and no re-explanation of concepts Claude already knows, but "Never update signals inside effect()" appears verbatim in both section 4 and the 'Canonical response anchors' section, making that closing section redundant padding. This matches the 'efficient; minor instances of over-explanation that could be trimmed' anchor rather than the fully lean 5. | 4 / 5 |
Actionability | Concrete API-level instructions ("expose publicly via asReadonly()", "linkedSignal(() => source())", "withState, withComputed, withMethods, and withEntities()") plus working code in references/signal-store.md give mostly executable guidance. It stops short of 5 because there is no executable example of effect() or linkedSignal() usage, and the reference's withComputed block contains only a placeholder comment ("// filter logic derived from state") instead of real filter logic. | 4 / 5 |
Workflow Clarity | The numbered principles are clearly organized with explicit decision rules (e.g., "Use effect() only for side effects", "Never update signals inside effect()"), and no destructive/batch validation cap applies. It falls short of 5 because the key store-vs-service decision hinge "For complex features" is undefined, leaving the main routing decision implicit rather than giving a concrete criterion. | 4 / 5 |
Progressive Disclosure | The body is a concise overview (~40 lines) with a single one-level-deep reference (references/signal-store.md) that exists on disk and is clearly signaled with descriptive link text both inline ("See [signal store pattern](references/signal-store.md)") and in a dedicated References section. This matches the 5 anchor: clear overview, well-signaled, appropriately split, easy navigation. | 5 / 5 |
Total | 17 / 20 Passed |