CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

native-data-fetching

Use when implementing or debugging ANY network request, API call, or data fetching. Covers fetch API, React Query, SWR, error handling, caching, offline support, and Expo Router data loaders (`useLoaderData`).

61

Quality

77%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Low

Low-risk findings worth noting

Fix and improve this skill with Tessl

tessl review fix ./plugins/expo/skills/native-data-fetching/SKILL.md
SKILL.md
Quality
Evals
Security

Quality

Content

63%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.

The body is a highly actionable Expo networking cookbook with executable code for every major scenario, clear decision routing, and a well-integrated single reference file. It is held back by significant boilerplate that re-teaches standard fetch/React Query patterns Claude already knows and by inlining advanced material (auth, env vars, offline) that the progressive-disclosure structure should split into reference files.

Suggestions

Cut or drastically compress the sections that re-teach standard knowledge — basic fetch usage, React Query provider setup and useQuery/useMutation basics, and exponential-backoff retry — keeping only Expo-specific deltas like the expo/fetch preference, SecureStore, and loader routing.

Move the Authentication, Environment Variables, and Offline Support sections into separate files under references/ (e.g., references/auth.md, references/env-vars.md), keeping a short summary and pointer in SKILL.md alongside the existing expo-router-loaders.md entry.

Make the code examples fully self-contained by defining `isTokenExpired()` and `refreshToken()` (or noting them as user-provided stubs), and remove the comment-only "With React Query (automatic)" block and the redundant Example Invocations section.

DimensionReasoningScore

Conciseness

The body re-teaches patterns Claude already knows — basic fetch with `response.ok` checks, standard React Query provider setup and mutations, and exponential-backoff retry — and includes padded sections like the comment-only "With React Query (automatic)" block and an "Example Invocations" section that largely duplicates the Decision Tree. Genuine Expo-specific material (EXPO_PUBLIC_ semantics, SecureStore, loader routing) does earn its place, so this is anchor 3 (mostly efficient, some unnecessary explanation) rather than 2.

3 / 5

Actionability

Nearly all guidance is executable, copy-paste-ready code: the authFetch wrapper, the typed ApiError class with retry, the apiClient with env config, and the NetInfo/onlineManager sync. Minor gaps keep it from anchor 5 — `isTokenExpired()` and `refreshToken()` are called in the token-refresh example but never defined.

4 / 5

Workflow Clarity

The Decision Tree provides a coherent routing sequence across all seven topic areas, and Common Mistakes offers explicit wrong/right contrasts that function as checkpoints. It is not anchor 5 because guidance like "Parse response, throw typed errors" ends without any verification or feedback step, though the topic carries no destructive or batch operations that would cap the score.

4 / 5

Progressive Disclosure

The single bundle reference (references/expo-router-loaders.md) exists on disk, is clearly signaled in a dedicated References section, and is correctly one level deep with in-context pointers from the Decision Tree. However, ~500 lines of auth, environment-variable, offline, and React Query cookbook content that plausibly belongs in separate reference files are inlined monolithically in SKILL.md, matching anchor 3 (content that should be separate is inline) rather than 4.

3 / 5

Total

14

/

20

Passed

Description

83%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.

A strong description with explicit and well-matched "what" and "when" clauses, good natural trigger terms, and a distinctive Expo-flavored niche. Its main weaknesses are tool-name enumeration in place of concrete actions and a slightly over-broad "ANY" claim that raises minor conflict risk with general networking skills.

DimensionReasoningScore

Specificity

"Covers fetch API, React Query, SWR, error handling, caching, offline support, and Expo Router data loaders" names several concrete capability areas, though "implementing or debugging" is generic and several items are tools rather than actions. This matches anchor 4 (several specific actions, minor gaps) rather than 5, which requires a comprehensive enumeration of concrete actions.

4 / 5

Completeness

It explicitly answers "when" with concrete trigger phrases ("Use when implementing or debugging ANY network request, API call, or data fetching") and explicitly answers "what" ("Covers fetch API, React Query, SWR, error handling, caching, offline support, and Expo Router data loaders"). Both halves are explicit, matching anchor 5 rather than 4 where the "when" would be less specific.

5 / 5

Trigger Term Quality

"network request", "API call", "data fetching", "caching", and "offline support" are natural phrases users would say, and tool names (React Query, SWR, fetch) aid routing. Common synonyms like "HTTP", "REST", or "endpoints" are missing, placing it at anchor 4 rather than 5.

4 / 5

Distinctiveness Conflict Risk

Expo Router data loaders and `useLoaderData` anchor a clear Expo/React Native niche, but "ANY network request" is broad and could overlap with a generic web API or fetch skill. This is anchor 4 (mostly distinct, minor overlap risk) rather than 5 (minimal conflict risk).

4 / 5

Total

17

/

20

Passed

Validation

87%

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

Validation — 14 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

skill_md_line_count

SKILL.md is long (508 lines); consider splitting into references/ and linking

Warning

frontmatter_unknown_keys

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

Warning

Total

14

/

16

Passed

Repository

openai/plugins

Path

plugins/expo/skills/native-data-fetching/SKILL.md

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.