CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

data-client-endpoint-setup

Set up @data-client/endpoint for custom async operations. Wraps existing async functions with Endpoint for use with Data Client hooks. Use after data-client-setup detects non-REST/GraphQL async patterns.

Quality

78%

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/data-client-endpoint-setup/SKILL.md
SKILL.md
Quality
Evals
Security

Quality

Content

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

A well-structured, code-first guide whose copy-paste-ready examples map directly onto the 'When to Use' list, with exemplary progressive disclosure verified against the real bundle files and anchors. It sits just below top marks on conciseness and actionability due to repeated wrapper boilerplate across the four SDK patterns and one missing import, and on workflow clarity for lacking an explicit validation step.

Suggestions

In Common Patterns, show the Endpoint wrapper once and vary only the fetch functions across Firebase/Supabase/IndexedDB/WebSocket to cut the repeated boilerplate.

Add the missing import for openDB (from the 'idb' package) in the IndexedDB example so it is fully copy-paste runnable.

Fold the 'Function Name Mangling' section into a single line near the options table, since the guidance is already given as an inline comment, and add a brief verification step (e.g., type-check or render useSuspense(getUser, id) to confirm normalization).

DimensionReasoningScore

Conciseness

The body is code-first with no explanation of concepts Claude already knows, but there is trimmable redundancy: the Endpoint wrapper boilerplate ('export const getUser = new Endpoint(fetchUser, { schema: User, name: ... })') repeats verbatim across the Firebase, Supabase, IndexedDB, and base examples, and the 'Function Name Mangling' section restates the name guidance already given as an inline comment ('Unique name (important if function names get mangled in production)'). Efficient with minor instances that could be trimmed — matches anchor 4, not 3, since nothing explains known concepts.

4 / 5

Actionability

Nearly all code is copy-paste-ready TypeScript with complete imports (base, Firebase, Supabase, WebSocket, mutations, extend), and the Detection section gives concrete scan targets ('Functions returning Promise<T>', 'SDK client methods'). Falls just short of anchor 5 due to minor gaps: the IndexedDB example calls openDB() without importing it (no 'idb' package import), and UserFilters is used undefined — 'mostly executable guidance; concrete code with minor gaps'.

4 / 5

Workflow Clarity

The sequence is clear and well-checkpointed at the skill-chain level: install → detect async functions → an explicit prerequisite ('Entity classes that must already exist. Apply the skill "data-client-schema" ... before writing endpoints') → wrap → use with hooks, plus 'Next Steps' pointing to data-client-react/vue. Not 5 because there is no explicit validation step for the wrapped endpoints (e.g., type-check or render the hook to confirm the schema normalizes); not 3 because the prerequisite and sequencing checkpoints are explicit, not implicit.

4 / 5

Progressive Disclosure

Verified against the actual bundle: references/Endpoint.md and references/Endpoint.vue.md both exist, the deep-linked anchor (references/Endpoint.md#members-not-args) is real in both files, and the Vue convention note ('read <name>.vue.md instead of <name>.md when it exists') matches the bundle layout. The body keeps only patterns inline and delegates the full API to one clearly signaled, one-level-deep reference — matches anchor 5 with no organization gaps.

5 / 5

Total

17

/

20

Passed

Description

66%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 clearly answers both what and when, with an explicit sequencing trigger and excellent distinctiveness within the data-client skill family. Its main weaknesses are limited action coverage and trigger terms that lean on technical jargon rather than the natural SDK names (Firebase, Supabase, WebSocket) users would actually say.

Suggestions

Add natural trigger keywords users would say, such as 'Firebase, Supabase, WebSocket, IndexedDB, or other third-party SDK clients', to the 'when' clause.

Broaden the 'what' with one or two more concrete actions, e.g. 'configure caching, polling, and side-effect mutations' alongside wrapping, to lift specificity.

Keep the existing 'Use after data-client-setup...' clause but pair it with a user-context trigger so it fires on user language, not only on skill chaining.

DimensionReasoningScore

Specificity

Names the domain ('@data-client/endpoint', 'Data Client hooks') and two concrete actions ('Set up @data-client/endpoint', 'Wraps existing async functions with Endpoint'), but stops there — no mention of mutations/side effects, cache configuration, or the SDK patterns the skill actually covers. Not the level above (4 requires 'several specific actions'), and clearly above level 2 since the actions are concrete rather than generic.

3 / 5

Completeness

Both parts are explicit: the 'what' ('Wraps existing async functions with Endpoint for use with Data Client hooks') and a 'when' clause ('Use after data-client-setup detects non-REST/GraphQL async patterns'). Not capped at 3 since an explicit trigger clause exists, but not 5 because the trigger is a skill-chain condition rather than concrete user-language trigger phrases (e.g., 'use when the user mentions Firebase, Supabase, or WebSockets').

4 / 5

Trigger Term Quality

Relevant domain keywords are present ('custom async operations', 'existing async functions', 'non-REST/GraphQL async patterns', 'Data Client hooks'), but the natural phrases a user would actually say — Firebase, Supabase, WebSocket, IndexedDB, third-party SDK — are absent. Fits the 'some relevant keywords but missing common variations or synonyms' anchor; not 4 because the missing terms are exactly the ones users would lead with.

3 / 5

Distinctiveness Conflict Risk

Clear niche with minimal conflict risk: it names the exact package, defines a distinct action (wrapping existing async functions), and explicitly boundaries itself against REST/GraphQL via the data-client-setup chaining condition. Cannot be 4 since there is no meaningful overlap with neighboring skills — the scope is precisely fenced.

5 / 5

Total

15

/

20

Passed

Validation

100%

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

Validation — 16 / 16 Passed

Validation for skill structure

No warnings or errors.

Repository

reactive/data-client

Path

.agents/skills/data-client-endpoint-setup/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.