mondaycom/monday-claude-cowork-plugin/docs-collaborator
- community
Checking that the SKILL.md file is still in the repository.
Creates, reads, edits, and comments on monday.com docs - the rich-content surface inside monday for meeting notes, RFCs, runbooks, weekly updates, postmortems, and any work-adjacent writing. Goes beyond markdown shuffling by embedding live board column values inline (so the doc reflects real-time status), tagging users / docs / boards via mentions, scaffolding common doc shapes, and routing each edit through the correct update_doc operation. Use when user asks to "create a doc", "make a monday doc", "draft meeting notes", "write an RFC", "scaffold a runbook", "summarize a meeting in a doc", "add a section to my doc", "edit my doc", "update the doc", "comment on a doc", "tag someone in a doc", "embed a status in a doc", "show live board data in a doc", "rename a doc", or "show me my docs".
Install
npx vskill@latest install mondaycom/monday-claude-cowork-plugin/docs-collaboratorSKILL.md
The same SKILL.md was published earlier as mondaycom/skills/docs-collaborator.
Docs Collaborator
Create, read, edit, and comment on monday.com docs. The skill is a capability surface, not a template engine. Every doc is a stream of typed blocks (headings, paragraphs, lists, tables, code, dividers, notice boxes, layouts, embedded boards / widgets / docs / images / videos / GIFs). The named shapes listed below are starting points - compose and extend freely. The differentiators (live column-value embeds, inline mentions, notice boxes, layouts) apply to any shape, named or invented.
The platform-native value over a raw markdown editor lives in three things most builders miss: inline mentions of users / docs / boards, live column-value embeds that reflect the current state of a board item, and a closed-loop edit pattern that prevents corrupting the doc's block graph.
Core constraint - read this first
Never edit a block you have not read. monday's update_doc API is block-ID-based, and block IDs are only knowable through read_docs with include_blocks: true. Skipping the read leads to operations referencing IDs that do not exist (silent failure) or - worse - reusing an ID from another doc. The closed-loop pattern is non-negotiable:
read_docswithinclude_blocks: trueto get block IDs, types, and positions.- Identify the target block(s) by type and position or by content.
update_docwith the operation that matches the target block's type (see the routing rule below).
Block operation routing - the non-obvious part
Each block type has a different set of allowed mutations. Picking the wrong operation is the #1 cause of "the call succeeded but the doc looks wrong" bugs.
| Target block type | Use this operation | Why | |
|---|---|---|---|
| text (any subtype: NORMAL_TEXT, LARGE_TITLE, MEDIUM_TITLE, SMALL_TITLE, QUOTE) | update_block for content edits; replace_block to change the subtype (e.g. promote a paragraph to H2) | Subtype is set on creation; update_block cannot change it | |
| code | update_block | Content and language editable in place | |
| list_item (BULLETED_LIST, NUMBERED_LIST, CHECK_LIST) | update_block for content edits; replace_block to switch between bulleted / numbered / check | List variant is set on creation | |
| divider | replace_block only | No mutable properties | |
| table | replace_block only | Row / column count and column widths immutable; table cell content not addressable via API after creation - see "Tables" below | |
| image | replace_block to swap source | URL / asset_id immutable after creation | |
| video | replace_block to swap source | raw_url immutable after creation | |
| notice_box | replace_block to change theme | theme immutable; content lives in child blocks (see "Notice boxes" below) | |
| layout | replace_block only | Cell content cannot be populated via API at all - see "Layouts" below | |
| BOARD embed, WIDGET embed, DOC embed, GIPHY | delete_block only | No public API to create or modify these block types |
Rendering quirk - list_item + mention via `update_block`. When adding an inline mention to a list_item that previously contained only text, update_block may save the mention blot correctly (data confirms) but Cowork can fail to render the pill (text-prefix-before-mention case). Workaround: use replace_block with a fresh list_item containing the same delta. Same pattern in a normal_text block renders correctly; the quirk appears specific to list_item updates.
Full per-block-type detail with worked examples lives in references/block-operations-matrix.md. Read it before authoring any non-trivial structural edit.
Workflow: Create a doc
Step 1: Decide the location
monday docs live in one of two places:
- Workspace (most common). Requires
workspace_id. Optionaldoc_kind:public(default),private(only the creator),share(specific people). Optionalfolder_idto nest under a folder. - Item-attached. The doc lives in a doc-type column on a specific board item. Requires
item_id. Optionalcolumn_idif the user picked a specific doc column; otherwise the tool auto-creates one.
Cell-limit preflight for item-attached docs. Doc-type cells hold one doc per cell - hard API limit. Before calling create_doc location=item, preflight the target column via get_board_items_page with columnIds: [<doc_col_id>] to check whether the cell is already populated. If populated, do NOT attempt the create - it will fail with CellLimitExceededException. Fall back to creating a workspace-level doc and adding a bi-directional DOC mention cross-link between the new doc and the existing attached doc. Never auto-detach the existing doc.
If the user does not name a workspace, fall back to the user's primary workspace via get_user_context. Ask once if it's still ambiguous; do not guess across multiple workspaces.
Step 2: Plan-tier guard before creating a 4th doc
Free and Basic plans cap at 3 docs per account. Before calling create_doc on a Free / Basic account, check whether this would be the 4th doc. There is no direct doc-count tool, so the practical guard is: if the user has hit this limit before or asks "can I create more than 3 docs?", warn them - upgrade to Standard+ removes the cap. Treat plan-tier as an open question rather than blocking the create call; the platform itself will reject if the cap is hit.
Step 3: Compose the body - shapes are examples, not boundaries
create_doc takes a markdown parameter that is parsed into blocks on import. This is the most efficient way to scaffold a doc in one call. Reach for one of these common shapes as a starting point when the user names a use case, then extend freely:
- Meeting notes: title, date, attendees (with
@mentions), agenda bullets, decisions, action items table, follow-ups. - Weekly update: highlights, key metrics, risks, next-week plan.
- RFC: problem, proposed solution, alternatives considered, open questions, decision log.
- Runbook: trigger, prerequisites, numbered procedure, rollback steps, escalation path.
- Postmortem: incident summary, timeline, root cause, what went well, what did not, action items.
When the user invents a shape ("partner enablement page", "AI readiness snapshot", "Q3 onboarding context"), compose with judgment - sections, tables, notice boxes, embeds - rather than forcing a named template. The differentiators apply to any shape.
Default mode: passive scaffold. Reserve visible slots for embeds and mentions in the markdown body using machine-readable markers. Skill (and downstream agents) can later detect and fill these slots when the user names the underlying items / users.
| Slot type | Marker format | Example | |
|---|---|---|---|
| Live column-value embed | _[embed: <column> of <item-ref>]_ | _[embed: status of <top-priority item>]_ | |
| User mention | _[mention: <user-ref>]_ | _[mention: <owner>]_ | |
| Doc / board mention | _[mention-doc: <doc-name>]_ / _[mention-board: <board-name>]_ | _[mention-board: Project Tracker]_ |
Italic styling on slot markers gives visual signal that the content is dynamic. The bracket-keyword format is grep-able for downstream automation.
Active mode: escalate when intent signals are present. Switch from passive scaffold to wiring real embeds / mentions / cross-links when the user's prompt signals intent through name-based references. Never on item IDs - users speak in names.
Triggers that escalate to active mode:
- Item names ("the Q3 plan", "the launch milestone", "the blocker we discussed")
- Board names ("from the project tracker", "in the bug board")
- Owner names ("Daniel's tasks", "my items", "the design team's")
- Positional refs ("the top 3 priorities", "the most recent stuck items")
- Imperative wiring ("embed live status from", "show current status of", "pull from <board>", "wire up the embeds", "tag me as owner")
Resolution chain (name -> ID, never ask the user for IDs):
- Item name ->
get_board_items_pagewithsearchTermscoped to the named board - Board name ->
searchwithsearchType: BOARD - Owner name ->
list_users_and_teamswithname:(scoped per cross-skill rule) - Ambiguous match -> ask once with the top 3 candidates; do not silently pick
Active mode communication contract. When the skill picks items / users in active mode, always state the choice and the reasoning: "Picked items X, Y, Z because <reason>. Override by naming different items."
Markdown notes that matter:
- Markdown headings (
#,##,###) map to LARGE_TITLE / MEDIUM_TITLE / SMALL_TITLE blocks. - Markdown tables work and the cells will be populated with the values you put in. This is the only way to get pre-filled table content. Cell-level API population after creation is not supported.
- Markdown images and links work. For asset-based images (uploaded files in monday), use
update_docwithcreate_blockandblock_type: "image"plusasset_idafter creation - markdown cannot reference assets. - Markdown does not have notice_box, layout, embed, divider-with-spacing, mention, or live column-value syntax. Add those via
update_docafter the doc is created.
Step 4: Call create_doc
For item-attached (after preflight):
Capture the returned doc_id, object_id, and doc_url. The user wants the URL to share or open; the doc_id is the primary key for every subsequent edit.
Step 5: Layer in the rich-content extras
Mentions, live column-value embeds, notice boxes, layouts, and asset images all need a follow-up update_doc call. In active mode, wire them now using the resolved IDs from Step 3. In passive mode, leave the slot markers in place - the user fills slots later by naming items. See "Common edit patterns" below.
Step 6: Confirm and suggest next steps
Plain-language confirmation: name, workspace, doc URL. State the mode used (passive scaffold or active). Then 2-3 follow-ups appropriate to the shape:
- "Want me to tag the attendees with @mentions?"
- "Want me to embed live status from the project board?"
- "Should I add a notice box at the top with the meeting outcome?"
- "Want me to share the doc URL in a Slack channel?"
Workflow: Read a doc
Step 1: Resolve the doc identifier
Three ways the user might point at a doc:
- doc_id (e.g.,
41302579) - the API's primary key, returned bycreate_docandread_docs. - object_id (e.g.,
18411484379) - the numeric segment of the doc URL:https://monday.monday.com/docs/{object_id}. - doc name or fuzzy reference ("the Q3 retro doc") - resolve via
read_docswithtype: "workspace_ids"to list docs in a workspace, then match by name.
read_docs is forgiving: if you call it with type: "ids" and the value is actually an object_id, it auto-retries as object_ids. Lean on this rather than guessing.
Step 2: Decide what to read
Two modes:
- content (default) - returns the doc's blocks and / or markdown projection.
include_blocks: trueis mandatory if any edit will follow. Do not omit it.include_comments: trueto fetch all comments and replies. Usecomments_limitto cap (default 50).- version_history - returns the doc's edit history (restoring points). Pass the
object_id, not theid. Setversion_history_limitfor "last N changes" requests; setinclude_diff: trueto see what changed (slower).
Step 3: Render with resolved mentions and embeds, not placeholders
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassedPattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/docs-collaborator/SKILL.md
Popularity
- Repository stars
- 1
- 7-day trend score
- 8
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/mondaycom/monday-claude-cowork-plugin/docs-collaborator)