CtrlK
BlogDocsLog inGet started
Tessl Logo

ai-persistence

Durability and state persistence for TanStack AI chats with @tanstack/ai-persistence. Routes to server chat persistence (withPersistence), client persistence (localStorage/IndexedDB), the store contracts, and adapter recipes. Distinguishes delivery durability (resumable streams) from conversation state. Use when conversations must survive reloads, multi-device, approvals, or server restarts — NOT for stream reconnect alone.

69

Quality

87%

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

SKILL.md
Quality
Evals
Security

Quality

Content

82%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 high-quality router skill: information-dense, executable end-to-end code, explicit contracts and critical rules, and clean delegation to sub-skill recipes. The few deductions come from repeated statements of the blob-key convention, the absence of a testkit feedback loop, and sub-skill references that cannot be verified against the bundle.

Suggestions

State the default blob key 'artifacts/<runId>/<artifactId>' once (in 'Where bytes land') and reference it from the chat-vs-generation paragraph to remove the repetition.

Expand the conformance-testkit rule into a short validate-then-fix loop (run runPersistenceConformance, fix failing store methods, re-run) so adapter authors get an explicit checkpoint.

Consider trimming the security rationale sentences (e.g. why () => true is banned, why 404 not 403) to their operative rules to tighten the densest paragraphs.

DimensionReasoningScore

Conciseness

The body is dense with library-specific contract detail Claude cannot know (overwrite vs append semantics, blob-key rules, SSRF guards) and wastes no tokens on generic explanations, but the default blob key 'artifacts/<runId>/<artifactId>' and the delivery-durability vs state distinction are each stated twice. Efficient with minor repetitions that could be trimmed — score 4, not 5.

4 / 5

Actionability

Both the server route and the client useChat snippets are complete, copy-paste-ready TypeScript with real imports, and are backed by exact store-method semantics and numbered critical rules. Specific examples cover the common server-authoritative case, matching the fully-executable score-5 anchor.

5 / 5

Workflow Clarity

'Recommended production stack' gives a clear numbered 1-4 sequence, the authoritative-history table defines per-turn behavior, and 'Run the conformance testkit against any adapter you write' is an explicit validation checkpoint. However, there is no validate-then-fix feedback loop around the testkit, leaving minor validation gaps at score 4 rather than 5.

4 / 5

Progressive Disclosure

The two routing tables ('Need to... Read...' and 'The app runs... Read...') cleanly delegate detail to one-level-deep, well-signaled sub-skills — structure that matches the top anchor. But the referenced sub-skill files (ai-persistence/server/SKILL.md, build-drizzle-adapter/SKILL.md, etc.) are not present in this bundle, so the navigation targets cannot be verified, which leaves a minor organization gap.

4 / 5

Total

17

/

20

Passed

Description

88%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: explicit what-and-when with concrete trigger phrases, a useful negative boundary, third-person voice, and specific API names. The only weaknesses are a few missing natural user phrasings and minor overlap with the sibling client-persistence skill.

Suggestions

Add natural user-side phrasings like 'chat history' or 'save/persist conversations' to the trigger clause, since those are the words users would most naturally say.

Sharpen the client-persistence mention (e.g. 'client persistence is covered by ai-core/client-persistence') to further reduce overlap with that sibling skill's trigger surface.

DimensionReasoningScore

Specificity

The description lists multiple concrete, named capabilities — 'Routes to server chat persistence (withPersistence), client persistence (localStorage/IndexedDB), the store contracts, and adapter recipes' — with package and API names, and stays in third person ('Routes', 'Distinguishes'). It clearly fits the 'multiple specific concrete actions; comprehensive coverage' anchor rather than the score-4 anchor, which expects minor coverage gaps.

5 / 5

Completeness

Both what ('Durability and state persistence for TanStack AI chats... store contracts, and adapter recipes') and when ('Use when conversations must survive reloads, multi-device, approvals, or server restarts') are explicit, with concrete trigger phrases plus a negative boundary ('NOT for stream reconnect alone'). This clearly matches the score-5 anchor.

5 / 5

Trigger Term Quality

Natural phrases like 'conversations must survive reloads, multi-device, approvals, or server restarts' are present, but common user phrasings such as 'chat history', 'save conversation', or 'persist chat' are missing, and terms like 'delivery durability' lean technical. Good coverage without being comprehensive, matching the score-4 anchor.

4 / 5

Distinctiveness Conflict Risk

The TanStack AI persistence niche and the negative trigger ('NOT for stream reconnect alone') make it mostly distinct, but the description also routes to 'client persistence (localStorage/IndexedDB)', which overlaps the separate ai-core/client-persistence skill it later defers to. Minor overlap with a closely related skill matches score 4 rather than the minimal-conflict score-5 anchor.

4 / 5

Total

18

/

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.