CtrlK
BlogDocsLog inGet started
Tessl Logo

you-might-not-need-a-memo

Analyze and fix useMemo/React.memo anti-patterns in your code

55

Quality

62%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Passed

No findings from the security scan

Fix and improve this skill with Tessl

tessl review fix ./.agents/skills/you-might-not-need-a-memo/SKILL.md
SKILL.md
Quality
Evals
Security

Quality

Content

72%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

This is a well-structured, concise skill body: seven concretely stated anti-patterns with specific fixes, clear argument handling, and a clean section layout with a single well-signaled external reference. Its main weaknesses are the absence of any verification step after applying code fixes and the lack of before/after code examples that would make the fixes fully copy-paste actionable.

Suggestions

Add a validation step after applying fixes, e.g. "4. After applying fixes, confirm the component's rendered output is unchanged (run tests or re-render the affected screens)" — this would lift workflow clarity from 3.

Include one compact before/after code pair (e.g., state moved down or children-as-props) to make the fix patterns fully executable rather than descriptive.

Give a concrete detection method for step 2 (e.g. "grep for useMemo/memo\( in the scope") so the analysis step needs no improvisation.

DimensionReasoningScore

Conciseness

The body is lean and instructional with no padding — each anti-pattern gets 1–2 sentences of detection criteria ("If the dependency array changes on every render, useMemo does nothing"), and the arguments and steps sections are minimal. A few phrases explain React behavior Claude already knows ("React renders are fast", "React.memo's shallow comparison always fails"), which could be trimmed, fitting 'Efficient; minor instances of over-explanation that could be trimmed' rather than the fully lean level 5.

4 / 5

Actionability

The seven anti-patterns each state a concrete detection condition and a concrete fix directive ("move that state into a smaller child component", "extract the stateful part and pass the expensive subtree as children"), and the scope/fix argument handling with examples ("diff to main", "PR #123") is executable. It falls short of 'Fully executable' because there are no before/after code examples showing the transformations, and 'analyze the specified scope' gives no concrete detection method (e.g., grepping for useMemo/React.memo).

4 / 5

Workflow Clarity

The three steps (read reference → analyze scope → apply or propose fixes) form a clear, coherent sequence, but there are no validation checkpoints anywhere — after applying fixes there is no instruction to verify behavior is unchanged or tests still pass, and the skill defaults to modifying code (fix=true). This matches 'Steps listed but validation gaps; sequence present but checkpoints missing' rather than 4, where most checkpoints would be present.

3 / 5

Progressive Disclosure

The body is ~35 lines, well-organized into clearly signaled sections (Arguments, References, Anti-patterns, Steps), and its single reference (the overreacted.io link) is one level deep, prominently placed under a "Read before analyzing" heading and reiterated in step 1. Per the rubric's simple-skill guidance (under 50 lines, no bundle files needed), well-organized sections alone merit a 5; nothing is inlined that belongs in a separate file.

5 / 5

Total

16

/

20

Passed

Description

52%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

The description names a specific, distinctive niche (useMemo/React.memo anti-pattern detection and fixing) with two concrete actions, but it omits any 'when to use' trigger guidance, lacks common natural-language synonyms for the domain, and is written in second person ("in your code") which costs it specificity under the guidelines. It is serviceable but below the standard of the good examples, which pair a concrete 'what' with an explicit 'Use when...' clause.

Suggestions

Add an explicit trigger clause, e.g. ". Use when the user mentions memoization, unnecessary re-renders, or React performance issues, or when reviewing code that uses useMemo or React.memo." — this would raise completeness from 3 to 5.

Include natural synonyms users would actually say ("memoize", "memoization", "re-renders", "React performance") alongside the API names to improve trigger-term coverage.

Rewrite in third person to remove "in your code" (e.g. "Analyzes and fixes useMemo/React.memo anti-patterns in React code"), since second-person voice is explicitly penalized.

DimensionReasoningScore

Specificity

"Analyze and fix useMemo/React.memo anti-patterns" names the domain plus two concrete actions (analyze, fix), which matches the anchor 'Names domain and 1-2 concrete actions, but not comprehensive' (a 3), but the description uses second person ("in your code"), which the judging guidelines penalize by reducing the specificity score by 1. It is not a 1 because the actions and domain are concrete, and not a 4 because only two actions are listed and the second-person voice is explicitly penalized.

2 / 5

Completeness

It has a clear 'what' ("Analyze and fix useMemo/React.memo anti-patterns in your code") but no 'when' clause at all — no "Use when..." or equivalent trigger guidance, which the guidelines cap at 3. Not a 4 because 'when' is entirely missing rather than weakly implied; not a 2 because the 'what' is specific and complete.

3 / 5

Trigger Term Quality

The description contains the relevant technical keywords "useMemo", "React.memo", and "anti-patterns", but misses the natural phrases users would actually say such as "memoization", "unnecessary memo", "re-renders", or "performance". This fits 'Some relevant keywords but missing common variations or synonyms' and falls short of 'Good keyword coverage' because everyday phrasings a user might type are absent.

3 / 5

Distinctiveness Conflict Risk

"useMemo/React.memo anti-patterns" carves out a clear niche with distinct triggers — memoization-specific terms that few other skills would claim — so the risk of firing for the wrong skill is minimal. It clearly matches 'Clear niche with distinct triggers; minimal conflict risk' rather than the level below, which would require overlap with closely related skills.

5 / 5

Total

13

/

20

Passed

Validation

93%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 15 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

frontmatter_unknown_keys

Unknown frontmatter key(s) found; consider removing or moving to metadata

Warning

Total

15

/

16

Passed

Repository
simstudioai/sim
Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.