apps/cli/skill/SKILL.md
Edit, query, and transform Word documents with the SuperDoc CLI v1 operation surface. Use when the user asks to read, search, modify, comment, or review changes in .docx files.
npx skillsauth add superdoc-dev/superdoc superdoc-edit-docxInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Use SuperDoc CLI for DOCX work. Use v1 commands (canonical operations and their helper wrappers). Do not default to legacy commands unless explicitly needed for v0-style bulk workflows.
Use superdoc if installed, or npx @superdoc-dev/cli@latest as a fallback.
For unknown commands or flags, inspect runtime metadata first:
superdoc describe
superdoc describe command find
superdoc describe command "comments add"
Use describe command for per-command args and constraints.
superdoc open ./contract.docx
superdoc query match --select-json '{"type":"text","pattern":"termination"}' --require exactlyOne
superdoc replace --target-json '{"kind":"text","blockId":"p1","range":{"start":0,"end":11}}' --text "expiration"
superdoc save --in-place
superdoc close
query match when you are modifying existing content and need an exact mutation target.open, commands run against the active/default session when <doc> is omitted.superdoc session list|set-default|save|close for explicit session control.close on dirty state requires --discard or a prior save.Use open --content-override when you want to create a new body from Markdown, HTML, or plain text in one step.
superdoc open --content-override "# Probe Title\n\nALPHA01" --override-type markdown
superdoc save --out ./probe.docx
superdoc close
superdoc open template.docx \
--content-override '<p>ALPHA01 <strong>BRAVO02</strong><br/>CHARLIE03</p>' \
--override-type html
superdoc save --out ./probe.docx
superdoc close
--content-override is the fastest way to seed paragraphs, headings, lists, and <br/> line breaks.--override-type markdown|html|text explicitly. open rejects --content-override without it.query match unless you are modifying content that already exists.When you need deterministic inline formatting after seeding text, insert first, then reuse the returned target block/range.
superdoc open
superdoc insert --value "ALPHA01 BRAVO02 CHARLIE03"
superdoc format apply --block-id <from-insert-receipt> --start 8 --end 15 --inline-json '{"fontSize":16,"fontFamily":"Times New Roman"}'
superdoc format apply --block-id <from-insert-receipt> --start 16 --end 25 --inline-json '{"fontSize":10,"fontFamily":"Arial"}'
superdoc save --out ./probe.docx
superdoc close
receipt.resolution.target.--block-id --start --end formatting is usually shorter than re-querying.query match again only if later steps need to rediscover content by meaning, not by the range you just created.superdoc get-text ./proposal.docx
superdoc get-markdown ./proposal.docx
superdoc info ./proposal.docx
superdoc replace ./proposal.docx \
--target-json '{"kind":"text","blockId":"p1","range":{"start":0,"end":5}}' \
--text "Updated" \
--out ./proposal.updated.docx
<doc> provided), mutating commands require --out unless using --dry-run.insert line-break inserts a real Word line break node inside the current paragraph.insert tab inserts a real Word tab node inside the current paragraph.superdoc insert line-break --block-id p1 --offset 12
superdoc insert tab --block-id p1 --offset 12
format paragraph set-tab-stop / related paragraph formatting commands when you need the tab stop definitions themselves.w:br or w:tab content in exported DOCX.--dry-run to preview any mutation without applying it.--expected-revision <n> with stateful mutations for optimistic concurrency checks.find --type text --pattern "..." or find --query-json '{...}'query match --select-json '{...}' --require exactlyOneblocks list, get-node, get-node-by-idget-text, get-markdown, get-htmlreplace --target-json '{...}' --text "..."insert --block-id <id> --offset <n> --value "..."insert tab, insert line-breakdelete --target-json '{...}'blocks delete, blocks delete-rangemutations apply --steps-json '[...]' --atomic true --change-mode directcreate paragraph --text "..." (with optional --at-json)create heading --input-json '{"level":<n>,"text":"..."}'format apply --block-id <id> --start <n> --end <n> --inline-json '{"bold":true}'format bold, format italic, format underline, format strikethroughlists list, lists getlists insert --node-id <id> --position after --text "..."lists indent, lists outdent, lists set-level, lists set-type, lists convert-to-textcomments add, comments replycomments get, comments listcomments edit, comments resolve, comments move, comments set-internalcomments delete (canonical) or comments remove (alias)track-changes list, track-changes gettrack-changes accept, track-changes reject, track-changes accept-all, track-changes reject-allhistory get, history undo, history redocall <operationId> --input-json '{...}' (JSON output only — --pretty is not supported)Not all --*-file variants are available on every command. Use describe command <name> to check.
Always supported alongside their -json counterpart (use one, not both):
| Flag pair | Available on |
|-----------|-------------|
| --query-json / --query-file | find, lists list |
| --address-json / --address-file | get-node, lists get |
| --input-json / --input-file | call, create paragraph |
| --at-json / --at-file | create paragraph |
--target-json is widely available on mutation commands but has no --target-file counterpart. Use flat flags (--block-id, --start, --end) as an alternative to --target-json.
--pretty for human-readable output (not supported by call).--quiet to suppress non-essential warnings in pretty mode.--output <json|pretty>, --session <id>, --timeout-ms <n>, --quiet.<doc> can be - to read DOCX bytes from stdin.Legacy v0.x bridge commands still exist:
superdoc search <pattern> <files...>
superdoc replace-legacy <find> <to> <files...>
superdoc read <file>
Use these only when you specifically need v0-style behavior (especially multi-file glob search/replace). For new automations, prefer v1 operations.
tools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
A CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint.