antv-x6-editor — скилл для Claude Code: редактор графов X6 v3
Помогает собрать редактор блок-схем, DAG или ER-диаграмм на @antv/x6 и разобраться с плагинами, портами и ошибками отрисовки.
npx skills add antvis/chart-visualization-skills --skill antv-x6-editor -a claude-codeЧто делает antv-x6-editor
Скилл включает режим, в котором агент знает, как устроен движок X6 v3 из AntV: сначала создаётся Graph, потом вызываются graph.addNode() и graph.addEdge(), а плагины подключаются через graph.use(). Внутри описаны правила, на которых чаще всего спотыкаются: в v3 нет graph.render(), контейнер задаётся строкой container: 'container', а каждый класс плагина нужно импортировать из @antv/x6.
Отдельно разобрано, что путают чаще всего. Из одиннадцати классов плагинов — Export, Selection, History, MiniMap, Stencil, Dnd и других — подключаются они через graph.use. А mousewheel, embedding, panning, connecting и grid к плагинам не относятся, это опции конструктора, и попытка импортировать несуществующий Embedding роняет код.
За справкой скилл ходит на HTTP-сервер https://sive.antv.antgroup.com, эндпоинт /api/v1/context/retrieve, по GET с параметрами query и library=x6. Поэтому нужен доступ в сеть и установленный curl. Скилл рассчитан на @antv/x6 v3: для статистических графиков G2, сетевых G6 и сводных таблиц S2 он не подходит, там другой API и другая модель описания.
Какие задачи решает
- собрать блок-схему с узлами и связями на @antv/x6
- подключить плагины Export, Selection или MiniMap без ошибок
- настроить порты узлов и соединения между ними
- починить отрисовку, когда содержимое уехало в левый верхний угол
- перевести редактор с X6 v2 на v3
Примеры запросов агенту
- Сделай на @antv/x6 редактор блок-схемы: панель с фигурами слева, холст справа, соединение портов мышью
- Добавь в граф мини-карту и экспорт в PNG через плагины X6
- Почему у меня ошибка при подключении Selection в X6 v3?
Как установить antv-x6-editor
1Через Skills CLI (Vercel)
npx skills add antvis/chart-visualization-skills --skill antv-x6-editor -a claude-code2Вручную: положить файлы
~/.claude/skills/antv-x6-editor/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/antv-x6-editor/
1Через Skills CLI (Vercel)
npx skills add antvis/chart-visualization-skills --skill antv-x6-editor -a codex2Вручную: положить файлы
.agents/skills/antv-x6-editor/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add antvis/chart-visualization-skills --skill antv-x6-editor -a cursor2Вручную: положить файлы
.cursor/skills/antv-x6-editor/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install antvis/chart-visualization-skills antv-x6-editor2Вручную: положить файлы
.github/skills/antv-x6-editor/SKILL.md1Через Skills CLI (Vercel)
npx skills add antvis/chart-visualization-skills --skill antv-x6-editor -a gemini-cli2Командой платформы
gemini skills install https://github.com/antvis/chart-visualization-skills --path skills/antv-x6-editorВручную: положить файлы
.devin/skills/antv-x6-editor/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add antvis/chart-visualization-skills --skill antv-x6-editor -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о antv-x6-editor
Как установить antv-x6-editor в Claude Code?
Выполните npx skills add antvis/chart-visualization-skills --skill antv-x6-editor -a claude-code. Файл скилла окажется в ~/.claude/skills/antv-x6-editor/SKILL.md.
Что делает antv-x6-editor?
Даёт агенту рабочее знание API X6 v3: создание Graph, добавление узлов и рёбер, регистрацию плагинов, работу с портами и HTML-фигурами. Заодно подсказывает, где искать документацию через сервис AntV.
Для каких библиотек AntV скилл не подходит?
Для G2, G6 и S2 — это статистические графики, сетевые графы и сводные таблицы, у них другой API. Скилл покрывает только X6 v3.
Исходный текст
SKILL.md · MIT
---
name: antv-x6-editor
description: "Use this skill whenever the user wants to create, customize, or troubleshoot X6 v3 graph editor diagrams. Triggers include: any mention of 'X6', 'antv x6', '@antv/x6', 'X6 editor', 'X6 图编辑', '流程图', 'DAG', 'ER图', '实体关系图', '血缘图', '组织架构图', 'UML类图', 'flowchart', 'DAG diagram', 'ER diagram', 'lineage graph', 'org chart', 'network topology', 'stencil', 'drag-and-drop editor', 'port connection', 'node port edge', 'graph editor', 'diagram editor', or requests about X6 node/edge styling, plugins (Selection, History, Clipboard, Keyboard, MiniMap, Scroller, Snapline, Stencil, Dnd, Transform, Export), interactions (panning, mousewheel, connecting, embedding), HTML shape nodes, custom shapes, serialization, or layout. Also use when debugging X6 rendering errors, v2→v3 migration, or editor interaction issues. Do NOT use for G2 statistical charts, G6 network graphs, or S2 pivot tables."
tools:
- curl
---
# X6 v3 Graph Editor
## Overview
X6 v3 is AntV's diagram editing engine for flowcharts, DAGs, ER diagrams, org charts, and other interactive node-edge editors. Unlike G2/G6, X6 uses an **imperative API** — you create a `Graph` instance, then call `graph.addNode()`, `graph.addEdge()`, and register plugins via `graph.use()`.
```javascript
import { Graph } from '@antv/x6';
const graph = new Graph({
container: 'container',
background: { color: '#F2F7FA' },
});
const source = graph.addNode({
shape: 'rect',
x: 40, y: 40, width: 100, height: 40,
label: 'Source',
attrs: { body: { stroke: '#8f8f8f', strokeWidth: 1, fill: '#fff', rx: 6, ry: 6 } },
});
const target = graph.addNode({
shape: 'rect',
x: 300, y: 200, width: 100, height: 40,
label: 'Target',
attrs: { body: { stroke: '#8f8f8f', strokeWidth: 1, fill: '#fff', rx: 6, ry: 6 } },
});
graph.addEdge({ source, target, attrs: { line: { stroke: '#8f8f8f', strokeWidth: 1 } } });
graph.centerContent();
```
### CDN Usage
```html
<script src="https://unpkg.com/@antv/x6@3/dist/x6.js"></script>
<script>
const graph = new X6.Graph({
container: 'container',
background: { color: '#F2F7FA' },
});
const source = graph.addNode({
shape: 'rect',
x: 40, y: 40, width: 100, height: 40,
label: 'Source',
attrs: { body: { stroke: '#8f8f8f', strokeWidth: 1, fill: '#fff', rx: 6, ry: 6 } },
});
const target = graph.addNode({
shape: 'rect',
x: 300, y: 200, width: 100, height: 40,
label: 'Target',
attrs: { body: { stroke: '#8f8f8f', strokeWidth: 1, fill: '#fff', rx: 6, ry: 6 } },
});
graph.addEdge({ source, target, attrs: { line: { stroke: '#8f8f8f', strokeWidth: 1 } } });
graph.centerContent();
</script>
```
## Content Retrieval Service
When using AntV X6 for data visualization, if you need to understand the concepts, usage, API, examples, and other aspects of X6 v3, you can use the provided context retrieval service. When using the skill, content is retrieved via an antv HTTP API server using GET requests.
- Host: `https://sive.antv.antgroup.com`
- Endpoint: `/api/v1/context/retrieve`
- Method: `GET`
- Parameters: `query`, `library`, `topK`, `content`, `maxTokens`
Retrieve skills by query (hybrid search = FTS + vector + RRF fusion). Constraints docs are indexed as regular skill documents and will appear in search results naturally.
| Parameter | Type | Required | Description |
|---|---|---|---|
| `query` | string | ✅ | Search keywords, e.g. `flowchart stencil port` |
| `library` | string | ✅ | Library name: `g2`, `g6`, `x6` |
| `topK` | number | | Number of results to return (default: 5) |
| `content` | boolean | | Return full reference doc markdown (default: true) |
| `maxTokens` | number | | Max tokens per result (default: unlimited) |
```bash
curl "https://sive.antv.antgroup.com/api/v1/context/retrieve?query=flowchart+stencil+port&library=x6"
```
## Critical Rules
### MUST: `graph.render()` does NOT exist in X6 v3
```javascript
// ❌ WRONG — graph.render() is G6 API, not X6
const graph = new Graph({ container: 'container' });
graph.render();
// ✅ CORRECT — X6 auto-renders on addNode/addEdge/fromJSON
const graph = new Graph({ container: 'container', background: { color: '#F2F7FA' } });
graph.addNode({ shape: 'rect', x: 40, y: 40, width: 100, height: 40 });
```
### MUST: Use string literal `container: 'container'` — no variable declaration
```javascript
// ❌ WRONG — declaring container variable is forbidden
const container = document.getElementById('container');
const graph = new Graph({ container });
// ✅ CORRECT — string literal, runtime auto-resolves
const graph = new Graph({ container: 'container', background: { color: '#F2F7FA' } });
```
### MUST: Register plugins before using their methods
```javascript
// ❌ WRONG — calling plugin method without registration
graph.toPNG(); // Error: method not found
graph.select(); // Error: method not found
// ✅ CORRECT — register first, then call
import { Graph, Export, Selection } from '@antv/x6';
const graph = new Graph({ container: 'container', background: { color: '#F2F7FA' } });
graph.use(new Export());
graph.use(new Selection({ enabled: true, rubberband: true }));
// Now graph.toPNG() and graph.select() are available
```
### MUST: Only 11 plugin classes exist — NOT constructor options
| ✅ Plugin class (import + `graph.use`) | ❌ NOT a plugin (constructor option) |
|---|---|
| `Clipboard`, `Dnd`, `Export`, `History`, `Keyboard`, `MiniMap`, `Scroller`, `Selection`, `Snapline`, `Stencil`, `Transform` | `mousewheel`, `embedding`, `panning`, `connecting`, `translating`, `interacting`, `background`, `grid` |
```javascript
// ❌ WRONG — importing constructor option as "plugin"
import { Graph, Embedding } from '@antv/x6'; // Embedding doesn't exist!
graph.use(new Embedding()); // Error: not a constructor
// ✅ CORRECT — embedding is a Graph constructor option
import { Graph, Selection } from '@antv/x6';
const graph = new Graph({
container: 'container',
embedding: { enabled: true, findParent: 'bbox' },
mousewheel: { enabled: true, zoomAtMousePosition: true, modifiers: ['ctrl'] },
});
graph.use(new Selection({ enabled: true, rubberband: true }));
```
### MUST: All used classes MUST appear in import statement
```javascript
// ❌ WRONG — Selection used but not imported
import { Graph } from '@antv/x6';
graph.use(new Selection({...})); // falls back to window.Selection → Illegal constructor
// ✅ CORRECT — every used class imported
import { Graph, Selection, Keyboard, History } from '@antv/x6';
graph.use(new Selection({ enabled: true, rubberband: true }));
graph.use(new Keyboard({ enabled: true }));
graph.use(new History({ enabled: true }));
```
### MUST: Always call `graph.centerContent()` after adding nodes/edges
```javascript
// ❌ WRONG — no centerContent, content drifts to top-left
graph.addNode({ ... });
graph.addEdge({ ... });
// ✅ CORRECT — content centered after all additions
graph.addNode({ ... });
graph.addEdge({ ... });
graph.centerContent();
// OR: graph.zoomToFit({ padding: 20, maxScale: 1 }) — but NOT both
```
### MUST: Always set background color, default node/edge style
```javascript
// ❌ WRONG — no background, no default styles
const graph = new Graph({ container: 'container' });
// ✅ CORRECT — mandatory background + default styles
const graph = new Graph({ container: 'container', background: { color: '#F2F7FA' } });
graph.addNode({
shape: 'rect', x: 40, y: 40, width: 100, height: 40,
label: 'Node',
attrs: { body: { stroke: '#8f8f8f', strokeWidth: 1, fill: '#fff', rx: 6, ry: 6 } },
});
graph.addEdge({
source: 'node-1', target: 'node-2',
attrs: { line: { stroke: '#8f8f8f', strokeWidth: 1 } },
});
```
### MUST: `mousewheel`, `panning`, `Selection.rubberband` — use modifiers to avoid conflicts
```javascript
// ❌ WRONG — panning and mousewheel both grab scroll events
const graph = new Graph({
panning: { enabled: true },
mousewheel: { enabled: true },
});
graph.use(new Selection({ enabled: true, rubberband: true }));
// ✅ CORRECT — modifiers separate the interactions
const graph = new Graph({
panning: { enabled: true, eventTypes: ['leftMouseDown'], modifiers: 'shift' },
mousewheel: { enabled: true, zoomAtMousePosition: true, modifiers: ['ctrl'] },
});
graph.use(new Selection({ enabled: true, rubberband: true }));
```
### MUST: Output pure JavaScript — NO TypeScript syntax
```javascript
// ❌ WRONG — TypeScript syntax
private width: number = 100;
const node: Node = graph.addNode({...}) as Node;
// ✅ CORRECT — pure JavaScript only
const node = graph.addNode({ shape: 'rect', x: 40, y: 40 });
```
### MUST: `Shape.HTML.register` for HTML nodes — NOT `class extends Node`
```javascript
// ❌ WRONG — class-based HTML node (2.x pattern)
class MyNode extends Node { ... }
// ✅ CORRECT — Shape.HTML.register (3.x pattern)
import { Graph, Shape } from '@antv/x6';
Shape.HTML.register({
shape: 'my-html',
effect: ['data'],
html(node) {
const div = document.createElement('div');
div.innerHTML = node.getData().content || '';
return div;
},
});
```
## Quick Reference
| User Intent | Retrieve Query |
|---|---|
| Graph init, container, background | `GET /api/v1/context/retrieve?query=graph+init+container+background&library=x6` |
| Flowchart / approval flow | `GET /api/v1/context/retrieve?query=flowchart+approval&library=x6` |
| DAG / data pipeline | `GET /api/v1/context/retrieve?query=DAG+pipeline+port&library=x6` |
| ER diagram / entity relationship | `GET /api/v1/context/retrieve?query=ER+diagram+entity+relationship&library=x6` |
| Lineage / data lineage graph | `GET /api/v1/context/retrieve?query=lineage+data+lineage&library=x6` |
| Org chart / hierarchy | `GET /api/v1/context/retrieve?query=org+chart+hierarchy&library=x6` |
| UML class diagram | `GET /api/v1/context/retrieve?query=UML+class+diagram&library=x6` |
| Node config / custom node | `GET /api/v1/context/retrieve?query=node+custom+shape+rect+circle&library=x6` |
| Edge config / router / connector | `GET /api/v1/context/retrieve?query=edge+router+connector+orth+smooth&library=x6` |
| Ports / connection桩 | `GET /api/v1/context/retrieve?query=ports+connection+layout&library=x6` |
| HTML shape node | `GET /api/v1/context/retrieve?query=html+shape+register&library=x6` |
| Stencil / drag-and-drop panel | `GET /api/v1/context/retrieve?query=stencil+drag+drop+panel&library=x6` |
| Plugin: Selection, History, Clipboard | `GET /api/v1/context/retrieve?query=Selection+History+Clipboard+plugin&library=x6` |
| Plugin: MiniMap, Scroller, Snapline | `GET /api/v1/context/retrieve?query=MiniMap+Scroller+Snapline+plugin&library=x6` |
| Plugin: Keyboard, Export, Transform | `GET /api/v1/context/retrieve?query=Keyboard+Export+Transform+plugin&library=x6` |
| Panning / mousewheel / embedding | `GET /api/v1/context/retrieve?query=panning+mousewheel+embedding&library=x6` |
| Tools (button-remove, etc.) | `GET /api/v1/context/retrieve?query=tools+button-remove+hover&library=x6` |
| Events (click,mouseenter,moved) | `GET /api/v1/context/retrieve?query=events+node+click+mouse&library=x6` |
| Serialization (toJSON, fromJSON) | `GET /api/v1/context/retrieve?query=serialization+toJSON+fromJSON&library=x6` |
| Animation / gradient | `GET /api/v1/context/retrieve?query=animation+gradient+defs+marker&library=x6` |
| Group / nesting / embedding | `GET /api/v1/context/retrieve?query=group+nesting+embedding+parent+child&library=x6` |
## Dependencies
- `@antv/x6` — X6 v3 diagram editing engine (exports `Graph` + 11 plugin classes)
© antvis · MIT · antvis/chart-visualization-skills