ai-coding-agents
Comprehensive guide for using Codex CLI (OpenAI) and Claude Code CLI (Anthropic) - AI-powered…
Tiptap editor API patterns for vmark WYSIWYG development. Use when working with editor commands, node traversal, selection handling, or format operations.
$ npx -y skills add xiaolai/vmark --skill tiptap-editor --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/tiptap-editorContext preview
The summary Claude sees to decide when to auto-load this skill.
Tiptap editor API patterns for vmark WYSIWYG development. Use when working with editor commands, node traversal, selection handling, or format operations.
name: tiptap-editor description: Tiptap editor API patterns for vmark WYSIWYG development. Use when working with editor commands, node traversal, selection handling, or format operations.
This skill documents proper Tiptap API usage patterns for vmark development. It helps distinguish when to use Tiptap's high-level API vs direct ProseMirror access.
**Always prefer Tiptap API for:**
**Tiptap patterns to use:**
// Direct commands
editor.commands.toggleBold()
editor.commands.setHeading({ level: 2 })
editor.commands.setContent(doc, { emitUpdate: false })
// Chained commands (for multiple operations)
editor.chain().focus().setHeading({ level: 2 }).run()
editor.chain().focus().toggleMark("underline").run()
// State queries
editor.isActive("blockquote")
editor.isActive("heading", { level: 2 })
editor.getAttributes("link")**Use ProseMirror directly for:**
`src/hooks/mcpBridge/cursorHandlers.ts` uses `doc.textContent` which flattens the document and loses block boundaries. The correct approach is to use `$pos` helpers:
// WRONG - loses block structure const text = doc.textContent; // RIGHT - respects block boundaries const $pos = doc.resolve(from); const currentNode = $pos.parent; const blockStart = $pos.before($pos.depth); const blockEnd = $pos.after($pos.depth);
`sourceLine` attributes are only set on initial parse. After WYSIWYG edits that add/remove blocks, line numbers no longer match the source. This is a known limitation.
`src/plugins/markdownArtifacts/HtmlNodeView.ts` writes cursor info to wrong store.
1. Identify operation type (format, block, selection, traversal) 2. Check if Tiptap has a built-in command for it 3. Use `editor.commands.xxx()` for single operations 4. Use `editor.chain().focus().xxx().run()` when focus is needed or chaining 5. For node traversal, use `doc.resolve(pos)` to get `$pos` helpers 6. For state queries, use `editor.isActive()` or `editor.getAttributes()`
The Plain-Text Workspace Where Humans and AI Collaborate Free. Local-first. Format-aware. VMark is the plain-text workspace where humans and AI collaborate.
Repo: xiaolai/vmark
Comprehensive guide for using Codex CLI (OpenAI) and Claude Code CLI (Anthropic) - AI-powered…
Test-driven CSS design system modifications. Run checks before/after CSS changes to verify…
Build or update MCP server/client integrations for VMark. Use when configuring MCP servers,…
Discover, register, and verify MCP servers. Use when a user asks to…
Audit an implementation against a plan (dev-docs/plans/*). Use when a user asks to check for…
Verify a completed implementation against a plan by running gates and checking acceptance…