Skip to content
CLI Tools
Skill

/document

Document canvas for displaying and editing markdown content. Use when showing documents, emails, or when users need to select text for editing.

BOOST
From plugin
claude-canvas
1.5k4 skills1 command
Install
$ npx -y skills add dvdsgl/claude-canvas --skill document --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/document

Context preview

The summary Claude sees to decide when to auto-load this skill.

Document canvas for displaying and editing markdown content. Use when showing documents, emails, or when users need to select text for editing.

SKILL.md

document.SKILL.md
name: document
description: |
  Document canvas for displaying and editing markdown content.
  Use when showing documents, emails, or when users need to select text for editing.

Document Canvas

Display markdown documents with optional text selection and diff highlighting.

Example Prompts

Try asking Claude:

  • "Draft an email to the marketing team about the Q1 product launch"
  • "Help me edit this blog post — show it so I can highlight the parts to revise"
  • "Write a project proposal and let me review it"
  • "Show me the README so I can select sections to update"
  • "Compose a response to this customer complaint"

Scenarios

`display` (default)

Read-only document view with markdown rendering. User can scroll but cannot select text.

bun run src/cli.ts show document --scenario display --config '{
  "content": "# Hello World\n\nThis is **markdown** content.",
  "title": "My Document"
}'

`edit`

Interactive document view with text selection. User can click and drag to select text, which is sent via IPC in real-time.

  • Renders markdown with syntax highlighting (headers, bold, italic, code, links, lists, blockquotes)
  • Diff highlighting: green background for additions, red for deletions
  • Click and drag to select text
  • Selection automatically sent via IPC
bun run src/cli.ts spawn document --scenario edit --config '{
  "content": "# My Blog Post\n\nThis is the **introduction** to my post.\n\n## Section One\n\n- Point one\n- Point two",
  "title": "Blog Post Draft",
  "diffs": [
    {"startOffset": 50, "endOffset": 62, "type": "add"}
  ]
}'

`email-preview`

Specialized view for email content display.

bun run src/cli.ts show document --scenario email-preview --config '{
  "content": "Dear Team,\n\nPlease review the attached document.\n\nBest regards,\nAlice",
  "title": "RE: Project Update"
}'

Configuration

interface DocumentConfig {
  content: string;        // Markdown content
  title?: string;         // Document title (shown in header)
  diffs?: DocumentDiff[]; // Optional diff markers for highlighting
  readOnly?: boolean;     // Disable selection (default: false for edit)
}

interface DocumentDiff {
  startOffset: number;    // Character offset in content
  endOffset: number;
  type: "add" | "delete";
}

Markdown Rendering

Supported markdown features:

  • **Headers** (`# H1`, `## H2`, etc.)
  • **Bold** (`**text**`)
  • **Italic** (`*text*`)
  • **Code** (`` `inline` `` and fenced blocks)
  • **Links** (`[text](url)`)
  • **Lists** (`-` or `*` bullets)
  • **Blockquotes** (`>`)

Selection Result

interface DocumentSelection {
  selectedText: string;   // The selected text
  startOffset: number;    // Start character offset
  endOffset: number;      // End character offset
  startLine: number;      // Line number (1-based)
  endLine: number;
  startColumn: number;    // Column in start line
  endColumn: number;
}

Controls

  • **Mouse click and drag**: Select text (edit scenario)
  • `↑/↓` or scroll: Navigate document
  • `q` or `Esc`: Close/cancel

API Usage

import { editDocument, displayDocument } from "${CLAUDE_PLUGIN_ROOT}/src/api";

// Display read-only document
await displayDocument({
  content: "# My Document\n\nContent here.",
  title: "View Mode",
});

// Interactive editing with selection
const result = await editDocument({
  content: "# My Document\n\nSelect some **text** here.",
  title: "Edit Mode",
  diffs: [{ startOffset: 20, endOffset: 30, type: "add" }],
});

if (result.success && result.data) {
  console.log(`Selected: "${result.data.selectedText}"`);
  console.log(`Position: ${result.data.startOffset}-${result.data.endOffset}`);
}
Read more
Ships withclaude-canvas

A TUI toolkit that gives Claude Code its own display. Spawn interactive terminal interfaces for emails, calendars, flight bookings, and more. Note: This is a proof of concept and is unsupported.

Get the whole plugin
Stats
1,515
Stars
138
Forks
Quiet
Maintenance
TypeScript
Language
MIT
License
9mo ago
Last commit
9mo ago
Created
11d ago
Added

Repo: dvdsgl/claude-canvas

Other skills on claude-canvas.

canvas
Skill

canvas

**The primary skill for terminal TUI components.** Covers spawning, controlling, and interacting with terminal canvases. Use when…