codegen — скилл для Claude Code: генерация кода из UI-спеков
Утилиты для генерации кода из json-render UI-деревьев. Помогает строить кастомные экспортеры кода для Next.js, Remix и других фреймворков, обходить спеки и сериализовать пропсы.
npx skills add vercel-labs/json-render --skill codegen -a claude-codeЧто делает codegen
codegen — это набор функций для работы с UI-спецификациями на уровне кода. Внутри есть три типа операций: обход спеков в глубину (traverseSpec), сбор метаданных (какие компоненты используются, какие состояния и экшены), и сериализация значений для JSX.
Траверсал позволяет пройти по всему дереву UI и собрать информацию: collectUsedComponents вытащит все типы компонентов, collectStatePaths найдёт пути к состояниям (например, «analytics/revenue»), collectActions выберет имена действий. Сериализация превращает значения в строки кода: serializePropValue обработает строки, объекты со ссылками на состояние и вернёт готовый результат для вставки в JSX.
Устанавливается через npm install @json-render/codegen и подключается как скилл в IDE. Работает с json-render/core спеками; требует Node.js и npm.
Какие задачи решает
- Собрать метаданные из UI-спеки: компоненты, состояния, экшены
- Сериализовать значения в JSX-атрибуты с правильным escaping
- Обойти всё дерево UI и обработать каждый элемент
- Построить кастомный генератор кода для своего фреймворка
- Преобразовать дизайн-спеку в рабочий Next.js проект
Примеры запросов агенту
- Собери все компоненты, используемые в спеке, и выведи их список
- Найди все пути состояний в UI и экспортируй как переменные
- Сгенерируй Next.js страницу из json-render спеки с правильными пропсами
Как установить codegen
1Через Skills CLI (Vercel)
npx skills add vercel-labs/json-render --skill codegen -a claude-code2Вручную: положить файлы
~/.claude/skills/codegen/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/codegen/
1Через Skills CLI (Vercel)
npx skills add vercel-labs/json-render --skill codegen -a codex2Вручную: положить файлы
.agents/skills/codegen/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add vercel-labs/json-render --skill codegen -a cursor2Вручную: положить файлы
.cursor/skills/codegen/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install vercel-labs/json-render codegen2Вручную: положить файлы
.github/skills/codegen/SKILL.md1Через Skills CLI (Vercel)
npx skills add vercel-labs/json-render --skill codegen -a gemini-cli2Командой платформы
gemini skills install https://github.com/vercel-labs/json-render --path skills/codegenВручную: положить файлы
.devin/skills/codegen/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add vercel-labs/json-render --skill codegen -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
Из того же набора5
Весь набор →Похожие
Вопросы о codegen
Как установить codegen в Claude Code?
Выполни npx skills add vercel-labs/json-render --skill codegen -a claude-code. После установки скилл будет доступен в ~/.claude/skills/codegen/SKILL.md.
Что делает codegen?
Предоставляет утилиты для анализа и генерации кода из UI-спеков json-render. Можно обходить спеки, собирать метаданные (компоненты, состояния, действия) и сериализовать значения для JSX.
Какие зависимости нужны для работы?
Требуется @json-render/core для типов Spec. Основной пакет — @json-render/codegen устанавливается через npm.
Исходный текст
SKILL.md · Apache-2.0
---
name: codegen
description: Code generation utilities for json-render. Use when generating code from UI specs, building custom code exporters, traversing specs, or serializing props for @json-render/codegen.
---
# @json-render/codegen
Framework-agnostic utilities for generating code from json-render UI trees. Use these to build custom code exporters for Next.js, Remix, or other frameworks.
## Installation
```bash
npm install @json-render/codegen
```
## Tree Traversal
```typescript
import {
traverseSpec,
collectUsedComponents,
collectStatePaths,
collectActions,
} from "@json-render/codegen";
// Walk the spec depth-first
traverseSpec(spec, (element, key, depth, parent) => {
console.log(`${" ".repeat(depth * 2)}${key}: ${element.type}`);
});
// Get all component types used
const components = collectUsedComponents(spec);
// Set { "Card", "Metric", "Button" }
// Get all state paths referenced
const statePaths = collectStatePaths(spec);
// Set { "analytics/revenue", "user/name" }
// Get all action names
const actions = collectActions(spec);
// Set { "submit_form", "refresh_data" }
```
## Serialization
```typescript
import {
serializePropValue,
serializeProps,
escapeString,
type SerializeOptions,
} from "@json-render/codegen";
// Serialize a single value
serializePropValue("hello");
// { value: '"hello"', needsBraces: false }
serializePropValue({ $state: "/user/name" });
// { value: '{ $state: "/user/name" }', needsBraces: true }
// Serialize props for JSX
serializeProps({ title: "Dashboard", columns: 3, disabled: true });
// 'title="Dashboard" columns={3} disabled'
// Escape strings for code
escapeString('hello "world"');
// 'hello \"world\"'
```
### SerializeOptions
```typescript
interface SerializeOptions {
quotes?: "single" | "double";
indent?: number;
}
```
## Types
```typescript
import type { GeneratedFile, CodeGenerator } from "@json-render/codegen";
const myGenerator: CodeGenerator = {
generate(spec) {
return [
{ path: "package.json", content: "..." },
{ path: "app/page.tsx", content: "..." },
];
},
};
```
## Building a Custom Generator
```typescript
import {
collectUsedComponents,
collectStatePaths,
traverseSpec,
serializeProps,
type GeneratedFile,
} from "@json-render/codegen";
import type { Spec } from "@json-render/core";
export function generateNextJSProject(spec: Spec): GeneratedFile[] {
const files: GeneratedFile[] = [];
const components = collectUsedComponents(spec);
// Generate package.json, component files, main page...
return files;
}
```
© vercel-labs · Apache-2.0 · vercel-labs/json-render