CtrlK
BlogDocsLog inGet started
Tessl Logo

ai-core

Entry point for TanStack AI skills. Routes to chat-experience, tool-calling, media-generation, structured-outputs, adapter-configuration, ag-ui-protocol, middleware, locks, custom-backend-integration, and debug-logging, plus the skills shipped by companion packages (@tanstack/ai-persistence, @tanstack/ai-code-mode). Use chat() not streamText(), openaiText() not createOpenAI(), toServerSentEventsResponse() not manual SSE, middleware hooks not onEnd callbacks.

57

Quality

72%

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 ./packages/ai/skills/ai-core/SKILL.md
SKILL.md
Quality
Evals
Security

Quality

Content

67%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 router skill: concrete API rules, exact paths, install commands, and clear one-level-deep navigation to sub-skills. The main costs are duplicated routing structures that partially conflict (reload handling) and inlined persistence detail that duplicates what the referenced package skill should carry.

Suggestions

Collapse the Sub-Skills table and Quick Decision Tree into a single routing structure — the duplication both wastes tokens and creates conflicting guidance (browser reload routes to client-persistence in one and @tanstack/ai-persistence in the other).

Trim the @tanstack/ai-persistence subsection to boundary facts only (what ships there vs. in @tanstack/ai/locks vs. ai-core/client-persistence) and let the package's own skill carry the store-contract and recipe detail.

Add a minimal copy-paste chat() example under Critical Rules so the most common case (setting up a chatbot) is fully executable before routing to a sub-skill.

DimensionReasoningScore

Conciseness

Mostly efficient — tables, terse rules, no explaining of concepts Claude already knows — but the Sub-Skills table and Quick Decision Tree duplicate the same need-to-skill routing, and the @tanstack/ai-persistence subsection inlines capability detail (store contract names, middleware names, backend recipes) that its own shipped skill covers, as the body itself instructs ('do not guess the API from this file'). This matches anchor 3: could be tightened; not anchor 2 since there is no padding or basic-concept explanation.

3 / 5

Actionability

Concrete, executable guidance throughout: exact API patterns ('useChat({ tools: clientTools(myTool.client(...)) })'), install commands ('pnpm add @tanstack/ai-persistence'), exact entry-point paths, and specific do/don't rules. It is not 5 because no runnable code example for the common case (e.g., a minimal chat() snippet) is included — minor gaps rather than full copy-paste coverage.

4 / 5

Workflow Clarity

The routing workflow (identify need → read sub-skill → apply Critical Rules) is clear via both the table and decision tree, with an explicit 'Debugging mistakes? → Check Common Mistakes' fallback. It is not 5 because the two routing structures disagree in places — 'Survive a browser reload' routes to ai-core/client-persistence in the table but the decision tree sends reloads/durable state to @tanstack/ai-persistence skills — creating ambiguity at exactly the decision point a user would hit.

4 / 5

Progressive Disclosure

The body is a clear overview with well-signaled, one-level-deep references to sub-skill SKILL.md paths and package entry points, with no nested-reference chains. It is not 5 because the persistence subsection inlines detail (store contracts, middleware, adapter recipes) that clearly belongs in the referenced ai-persistence skill, and not 3 because that inline content serves genuine package-boundary disambiguation and the overall split is otherwise appropriate.

4 / 5

Total

15

/

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.

A specific, well-scoped router description that names concrete sub-skills, companion packages, and API corrections. Its main weakness is the absence of any explicit 'when to use' trigger clause, which caps completeness, and modest synonym coverage for natural user phrasings.

Suggestions

Add an explicit trigger clause, e.g. 'Use when working with TanStack AI (@tanstack/ai) — building chat UIs, tool calling, streaming, or configuring provider adapters' — this would lift completeness from 3.

Include common user phrasings/synonyms such as 'streaming chat', 'AI SDK setup', or 'provider adapters' to broaden natural trigger coverage.

Mention the @tanstack/ai-skills companion package alongside persistence and code-mode so routing coverage is complete.

DimensionReasoningScore

Specificity

The description names the domain ('Entry point for TanStack AI skills') and lists many concrete routing targets (chat-experience, tool-calling, media-generation, structured-outputs, etc.) plus specific API corrections ('Use chat() not streamText(), openaiText() not createOpenAI()'). It sits between anchor 4 and 5: specific items are numerous, but they are routing destinations and package names rather than comprehensive concrete actions the skill itself performs, with minor gaps (e.g., the ai-skills companion is omitted).

4 / 5

Completeness

The 'what' is clear (entry point that routes to named sub-skills and companion packages, with key API rules), but there is no 'Use when...' clause or equivalent explicit trigger guidance, so per the rubric completeness is capped at 3. It is not a 4 because 'when' is entirely absent rather than merely imprecise.

3 / 5

Trigger Term Quality

Natural domain keywords users would say are present — 'chat', 'tool calling', 'media generation', 'structured outputs', 'middleware', 'debug logging', 'TanStack AI' — giving good coverage as in anchor 4. Not anchor 5 because it lacks synonyms and variations users might phrase differently (e.g., 'streaming', 'provider setup', 'chat UI').

4 / 5

Distinctiveness Conflict Risk

'Entry point for TanStack AI skills' carves out a clear, library-specific niche with API names unlikely to collide with unrelated skills. It is not 5 because as an umbrella router it intentionally overlaps with its own sub-skills (e.g., a generic 'tool calling' request could match both this and ai-core/tool-calling).

4 / 5

Total

15

/

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
TanStack/ai
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.