К основному содержанию
скилл CX Codex

portable-text-conversion — скилл для Claude Code: HTML и Markdown

Переводит HTML и Markdown в блоки Portable Text для Sanity. Нужен при переносе контента из старой CMS и сборке пайплайнов импорта.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add sanity-io/agent-toolkit --skill portable-text-conversion -a claude-code
Открыть на GitHub

Что делает portable-text-conversion

Скилл описывает три пути конвертации. Для Markdown — функция markdownToPortableText из пакета @portabletext/markdown, её автор советует как основной вариант. Для HTML — htmlToBlocks из @portabletext/block-tools. Третий путь — собирать блоки вручную, когда источник не разметка, а API или база данных.

Внутри лежит спецификация Portable Text: массив блоков, у каждого _type, _key, children со спанами и markDefs для аннотаций. Списки задаются через listItem и level на обычных блоках. Правила разложены по файлам rules/markdown-to-pt.md, rules/html-to-pt.md и rules/manual-construction.md — агент читает тот, что совпадает с форматом источника.

Есть подвох с именами пакетов. @sanity/block-tools — устаревшее имя, для новых проектов берут @portabletext/block-tools, API там тот же. Если в проекте уже стоит старый пакет, это повод проверить, не тянется ли он дальше по зависимостям.

Какие задачи решает

  • перенести статьи из старой CMS в Sanity
  • залить Markdown-файлы в виде документов Portable Text
  • написать пайплайн, который принимает HTML из внешнего источника
  • собрать блоки вручную из данных API или базы
  • разобраться, как устроены _key, markDefs и списки в Portable Text

Примеры запросов агенту

  • Сконвертируй этот Markdown в блоки Portable Text через markdownToPortableText
  • Разбери HTML-страницу в PT-блоки с htmlToBlocks и покажи результат
  • Собери массив блоков Portable Text вручную из этих данных

Как установить portable-text-conversion

1Через Skills CLI (Vercel)

npx skills add sanity-io/agent-toolkit --skill portable-text-conversion -a claude-code

2Вручную: положить файлы

~/.claude/skills/portable-text-conversion/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/portable-text-conversion/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о portable-text-conversion

Как установить portable-text-conversion в Claude?

Выполните npx skills add sanity-io/agent-toolkit --skill portable-text-conversion -a claude-code. Скилл окажется в ~/.claude/skills/portable-text-conversion/SKILL.md.

Что делает portable-text-conversion?

Помогает агенту переводить HTML и Markdown в блоки Portable Text для Sanity: подсказывает нужные функции, структуру блоков и правила разметки.

Чем @portabletext/block-tools отличается от @sanity/block-tools?

Это один и тот же API, но @sanity/block-tools — старое имя пакета. Для новых проектов берут @portabletext/block-tools.

Исходный текст

SKILL.md · MIT
---
name: portable-text-conversion
description: Convert HTML and Markdown content into Portable Text blocks for Sanity. Use when migrating content from legacy CMSs, importing HTML or Markdown into Sanity, building content pipelines that ingest external content, converting rich text between formats, or programmatically creating Portable Text documents. Covers @portabletext/markdown (markdownToPortableText), @portabletext/block-tools (htmlToBlocks), custom deserializers, and the Portable Text specification for manual block construction.
license: MIT
metadata:
  author: sanity
  version: "1.0.0"
---

# Portable Text Conversion

Convert external content (HTML, Markdown) into Portable Text for Sanity. Three main approaches:

1. **`markdownToPortableText`** — Convert Markdown directly using `@portabletext/markdown` (recommended for Markdown)
2. **`htmlToBlocks`** — Parse HTML into PT blocks using `@portabletext/block-tools` (for HTML migration)
3. **Manual construction** — Build PT blocks directly from any source (APIs, databases, etc.)

## Portable Text Specification

Understand the target format before converting. PT is an array of blocks:

```json
[
  {
    "_type": "block",
    "_key": "abc123",
    "style": "normal",
    "children": [
      {"_type": "span", "_key": "def456", "text": "Hello ", "marks": []},
      {"_type": "span", "_key": "ghi789", "text": "world", "marks": ["strong"]}
    ],
    "markDefs": []
  },
  {
    "_type": "block",
    "_key": "jkl012",
    "style": "h2",
    "children": [
      {"_type": "span", "_key": "mno345", "text": "A heading", "marks": []}
    ],
    "markDefs": []
  },
  {
    "_type": "image",
    "_key": "pqr678",
    "asset": {"_type": "reference", "_ref": "image-abc-200x200-png"}
  }
]
```

**Key rules:**
- Every block and span needs `_key` (unique within the array)
- `_type: "block"` is for text blocks; custom types use their own `_type`
- `markDefs` holds annotation data; `marks` on spans reference `markDefs[*]._key` or are decorator strings
- Lists use `listItem` ("bullet" | "number") and `level` (1, 2, 3...) on regular blocks

## Conversion Rules

Read the rule file matching your source format:

- **Markdown → Portable Text**: `rules/markdown-to-pt.md` — `@portabletext/markdown` with `markdownToPortableText` (recommended)
- **HTML → Portable Text**: `rules/html-to-pt.md` — `@portabletext/block-tools` with `htmlToBlocks`
- **Manual PT Construction**: `rules/manual-construction.md` — build blocks programmatically from any source

> **Note:** `@sanity/block-tools` is the legacy package name. Always use `@portabletext/block-tools` for new projects. The API is the same.

© sanity · MIT · sanity-io/agent-toolkit

Похожие скиллы

Все скиллы по теме «Данные и базы» →
sanity Mindrally Скилл для работы с Sanity CMS: помогает описывать схемы документов, писать GROQ-запросы и связывать контент с TypeScript. CX Codex +1 725установок building-emdash-site emdash-cms Скилл для сборки клиентской части проекта EmDash CMS на Astro: схема, сиды, запросы к контенту, меню и деплой. CX Codex +1 756установок md2wechat geekjourneyx Преобразует Markdown в HTML публикаций WeChat и создаёт обложки, инфографику, картиночные посты. Пригодится тем, кто ведёт официальный аккаунт WeChat или публикует на Zhihu, CSDN, Toutiao. CX Codex +1 2 500установок blog-rewrite AgriciDaniel Аудирует и переписывает статьи в MDX, Markdown или HTML под требования Google и поискового ИИ. Помогает заменить сомнительные данные ссылками на исследования. CX Codex +1 2 500установок aa-conversion-funnel-analysis Adobe Скилл разбирает многошаговую воронку в Adobe Analytics: где посетители отваливаются и на каком шаге потери самые большие. CX Codex +1 336установок canghe-markdown-to-html freestylefly Конвертирует Markdown в оформленный HTML с инлайновыми стилями для WeChat. Поддерживает диаграммы PlantUML, подсветку кода и формулы. CX Codex +1 532установок

Из того же набора9

sanity-best-practices Набор правил разработки на Sanity для ИИ-агента: схемы, GROQ, TypeGen, визуальный редактор, миграции и подключение к фронтенд-фреймворкам. Нужен, когда агент правит код проекта на Sanity. CX Codex +1 31 800установок sanity-migration Проектирует и выполняет перенос контента из других CMS в Sanity. Помогает настроить выгрузку, конвертацию в Portable Text, перенос медиафайлов и редиректы. CX Codex +1 22 200установок seo-aeo-best-practices Скилл с правилами SEO и AEO: метаданные, Open Graph, sitemap, robots.txt, hreflang, JSON-LD и EEAT. Пригодится, когда верстаешь страницы и хочешь, чтобы их подхватили поисковики и ИИ-ответы. CX Codex +1 7 300установок content-modeling-best-practices Помогает проектировать типы контента в headless CMS: что вынести в ссылки, что встроить, как не дублировать данные. CX Codex +1 4 800установок content-experimentation-best-practices Скилл помогает спланировать контентный A/B-тест, выбрать метрики и разобрать результаты. Пригодится при работе с вариантами в CMS или фронтенде. CX Codex +1 3 800установок portable-text-serialization Скилл подсказывает агенту, как рендерить и сериализовать Portable Text в React, Svelte, Vue, Astro, HTML, Markdown и чистый текст. CX Codex +1 2 900установок sanity-studio-upgrade Скилл читает ваш репозиторий и выдаёт список ломающих изменений, которые касаются именно вашего проекта. Полезен, когда Studio отстал на несколько мажоров. CX Codex +1 524установок Sanity Даёт агенту доступ к контенту, датасетам, релизам и схемам вашего Sanity-проекта. Пригодится, когда правки в CMS идут через чат, а не через Studio. CX Codex +1 ★ 194звёзд репо

Спонсоры проекта

Компании, которые помогают держать аналитику открытой