CtrlK
BlogDocsLog inGet started
Tessl Logo

portable-text-serialization

Render and serialize Portable Text to React, Svelte, Vue, Astro, HTML, Markdown, and plain text. Use when implementing Portable Text rendering in any frontend framework, building custom serializers for non-standard block types, converting Portable Text to HTML strings server-side, converting Portable Text to Markdown, extracting plain text from Portable Text, or troubleshooting rendering issues with marks, blocks, lists, or custom types.

68

Quality

86%

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

65%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 well-organized and mostly lean, with a genuinely useful Portable Text schema reference and a concrete component-mapping table. Its main weaknesses are dangling `rules/*.md` references (no bundle files ship with the skill) and the absence of an explicit workflow sequence or inline render example.

Suggestions

Ship the referenced `rules/react.md`, `rules/svelte.md`, `rules/vue.md`, `rules/astro.md`, `rules/html.md`, `rules/markdown.md`, and `rules/plain-text.md` files (or remove the references) so the framework navigation isn't broken.

Add a minimal inline executable render example (e.g. `@portabletext/react` with a `components` object mapping one custom type) so the core action is copy-paste ready without depending on the missing rule files.

Insert an explicit short workflow (pick framework → map `components` keys → expand GROQ references → set `onMissingComponent`) so the multi-framework process is sequenced rather than only implied.

DimensionReasoningScore

Conciseness

The body is dense and reference-oriented (block-schema tree, component-mapping table, GROQ snippet) with little padding, though the prose restating block fields slightly overlaps the tree diagram and could be trimmed.

4 / 5

Actionability

It gives concrete executable guidance — a runnable GROQ query, a table of `components` keys with their props, and `onMissingComponent` options — but the core rendering example is deferred to the per-framework rule files rather than shown inline.

4 / 5

Workflow Clarity

The reading order (structure → mapping pattern → framework rules → common patterns) implies a flow but there is no explicit sequenced workflow; checkpoints are implicit and the multi-framework process is not spelled out.

3 / 5

Progressive Disclosure

The design intends a clean one-level-deep split (overview inline, framework detail in `rules/*.md`), but those referenced rule files do not exist anywhere in the bundle, so the signaled navigation leads to dead ends.

3 / 5

Total

14

/

20

Passed

Description

100%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 is exemplary: it concisely states what the skill does across seven targets, gives a comprehensive 'Use when...' trigger clause with natural phrasing, and occupies a distinct niche. Voice is third person with no over-claims.

DimensionReasoningScore

Specificity

"Render and serialize Portable Text to React, Svelte, Vue, Astro, HTML, Markdown, and plain text" names seven concrete targets plus several specific actions (building custom serializers, converting to HTML/Markdown, extracting plain text, troubleshooting), giving comprehensive coverage.

5 / 5

Completeness

It explicitly answers both 'what' (render/serialize PT to seven targets) and 'when' ("Use when implementing Portable Text rendering... building custom serializers... converting... extracting... or troubleshooting") with concrete trigger phrases.

5 / 5

Trigger Term Quality

Covers the natural terms users would say — framework names (React, Svelte, Vue, Astro), output formats (HTML, Markdown, plain text), and domain nouns (Portable Text, serializers, marks, blocks, lists, custom types) including synonyms and variants.

5 / 5

Distinctiveness Conflict Risk

Portable Text is a specific named format with a clear niche; the framework-specific triggers and serialization focus make it unlikely to fire for unrelated skills, so conflict risk is minimal.

5 / 5

Total

20

/

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
sanity-io/agent-toolkit
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.