{"id":91200,"plugin_id":"plugin_asdk_app_6af0ad8c21a88191ba6c3c8d07a164d0","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-11-11T13:33:44.510Z","digest":"9bbb28f436ec293904df4a2bff2055937789c8ca3d267e02b6e3be9648c6b231","against":null,"payload":{"description":"Build a CRM workspace from scratch for users with NO existing CRM boards. User describes their business in plain language and the skill proposes a board structure with groups, columns, and starter items, then creates the board(s) in monday on confirmation. Use ONLY when someone explicitly says 'build me a CRM from scratch', 'create CRM boards for me', 'I need a new sales pipeline board', 'set up my first monday CRM', or 'I have no CRM boards yet'. Do NOT use for: 'help me with my CRM' (use morning-briefing or board-diagnosis instead), 'set up monday CRM' without explicit new-build intent (use setup for triage), 'what can this plugin do' (use setup).","included_files":[{"relative_path":"agents/openai.yaml","size_in_bytes":187},{"relative_path":"assets/icon.png","size_in_bytes":22022},{"relative_path":"examples/01-b2b-sales-setup.md","size_in_bytes":1760}],"name":"workspace-builder","skill_md_contents":"---\nname: workspace-builder\ndescription: \"Build a CRM workspace from scratch for users with NO existing CRM boards. User describes their business in plain language and the skill proposes a board structure with groups, columns, and starter items, then creates the board(s) in monday on confirmation. Use ONLY when someone explicitly says 'build me a CRM from scratch', 'create CRM boards for me', 'I need a new sales pipeline board', 'set up my first monday CRM', or 'I have no CRM boards yet'. Do NOT use for: 'help me with my CRM' (use morning-briefing or board-diagnosis instead), 'set up monday CRM' without explicit new-build intent (use setup for triage), 'what can this plugin do' (use setup).\"\n---\n\n# Workspace Builder\n\n> **Platform notes (ChatGPT and Codex).** Before any write, show the concrete action or batch and obtain explicit approval. Use only tools exposed in this session; if a named tool is missing, say so and stop that step. Use visible plain-text `monday-crm-skill-id: <skill>` markers; monday Docs can strip HTML comments. Read back newly created artifacts to verify their marker. Before creating, search within the relevant workspace and read candidate content; match title, skill marker, board or item, and date or period. Treat surviving legacy `<!-- monday-crm-skill-id: … -->` and `<!-- claude-skill-id: … -->` markers as matches. If a candidate has the right title and generated-by footer but lacks a marker, or matching is ambiguous or incomplete, do not create or update automatically: show the candidate and ask the user. If search or read-back is unavailable, stop the write. For meeting recaps also include and verify a visible `meeting-id: <id>` marker; if either marker is missing, do not infer a match or create a duplicate automatically.\n\nTurns a business description into a proposed CRM board structure, then creates the approved boards, groups and columns.\n\nFlow: **Trigger → Discover → Propose → Confirm → Build (α) → Seed (β, opt-in) → Handoff**.\n\n## Input\n- Optional: business description from the user's request.\n- Optional: user pre-declared mode (Default / Silent / Proactive).\n\n## Output\n- **α (default):** One board (or set of boards) created in the user's chosen workspace. Boards carry the user's chosen names (no plugin prefix). Groups + columns scaffolded per the proposed structure. A `CRM Setup — <Mon DD>` doc summarizes what was created and what's next, with `Generated by monday CRM plugin · <ISO timestamp>` + `monday-crm-skill-id: workspace-builder` in the body.\n- **β (Seed mode, opt-in):** 5–10 example items per board so the user can see the shape with data, not just empty columns. Each example item carries `Source = AI assistant` on a status column (auto-create the column with user confirm if missing) — no `[Example]` prefix on names.\n- **Proactive extension:** Out of scope for v0.1 (automation creation requires `create_automation_rule`, not yet shipped). The setup doc includes a deep-link to the in-product Automation Recipes UI for that step.\n\n## Knowledge\n- Industry → board-shape map (§ Step 3).\n- Column-type repertoire (§ Step 4).\n- Shared artifact conventions (§ Shared patterns).\n\n## Tools (MCP)\n- `get_user_context` — resolve user + existing workspaces.\n- `list_workspaces` / `workspace_info` — find a target workspace.\n- `search` — confirm we aren't duplicating an existing CRM board.\n- `create_workspace` — only if the user explicitly wants a new workspace.\n- `create_board` — the core write.\n- `create_group` — pipeline stages as groups (or as status labels — see Step 4).\n- `create_column` — typed columns per the proposed schema.\n- `create_item` — β seed items.\n- `create_doc` — publish the setup summary doc.\n- `update_column` — adjust column settings (status labels, number units) after creation. `create_column` also accepts `columnSettings`; check `get_column_type_info` for the schema first.\n- `propose-crm-setup` / `build-crm-setup` — monday's own CRM board templates. If the server exposes them, you may offer them as an alternative to a custom structure. Always show the proposal and get approval first.\n\n## Cross-skill handoffs\n- **From none (entry point):** First-run user, in-product CTA route, or explicit ask.\n- **To morning-briefing:** Once the board has at least 5 items with a stage column populated, suggest the `morning-briefing` skill to start the daily-ops loop.\n- **To board-diagnosis:** After 30 days of use, suggest the `board-diagnosis` skill for a fill-rate audit.\n\n\n## Draft first, then offer publication\n\nUse available read-only tools to prepare the complete requested deliverable before asking to publish. Present it as a readable, editable artifact in the host when available; otherwise show the full draft in chat. A native monday dashboard or board cannot be created outside monday: present a concrete preview or blueprint, not a claim that it exists. State meaningful missing data or assumptions. Then ask once whether to publish the displayed draft to the specified monday destination; allow edits or decline. On decline, retain the draft and stop without monday writes. On approval, publish only the shown content and concrete actions the user approved. Separately describe and obtain approval for record edits, notifications, contacts, automations, or other actions not included in that publication. Do not ask to choose a mode before producing the draft; use read-only default behavior. Ask only for information essential to prepare a useful, accurate draft, and state reasonable defaults. This draft-first rule takes precedence over earlier or later mode and publish-first instructions.\n\n---\n\n\n## Offer a useful next step\n\nAt the end of a completed response, offer one specific, relevant next thing ChatGPT can do based on what is actually available: offer to refine the board structure or suggest an appropriate workflow. Ask whether the user wants that help; do not begin it before they respond. Do not repeat an existing unanswered question or make the offer when the task cannot continue because of a connection or permission failure. Do not promise capabilities, events, or results that have not been verified. Approval to explore or draft is not approval to publish, send, or change CRM data.\n\n## Step 0: Connector check\n\n**Goal:** Fail fast if the monday MCP connection is missing.\n\n1. Try `get_user_context`.\n2. If missing/auth error/no workspace:\n   - Print exactly: *\"I don't see the monday connector active on this session. Install it from https://monday.com/mcp, then run this skill again.\"*\n   - Stop.\n3. If connector works, cache `user.id`, `user.name`, default workspace.\n\n> **PAUSE**: do not write any `create_*` call before Step 5, and never before Step 0 passes.\n\n---\n\n## Step 1: Detect mode\n\nPrepare the board blueprint first. Do not ask for a mode. List seed items and any workspace creation in the publication plan if requested.\n\nHard safety rail regardless of mode: **no deletes (boards, columns, items), no amount-column writes, no cross-workspace moves, no overwriting an existing same-named board, no modifying columns on boards the user didn't ask us to touch, no board creates outside the user-confirmed workspace**.\n\n---\n\n## Step 2: Discover — let the user describe their business\n\n**Goal:** Get enough signal to propose a board shape without forcing the user into a taxonomy. The whole skill exists to bypass the \"where do I start\" paralysis — surfacing internal labels like \"B2B sales\" or \"Outbound\" defeats that.\n\n1. If the user's request included a business description, parse it directly. Skip the prompt entirely.\n2. Else ask one open short question with numbered options:\n   *\"Tell me about your business — industry, what you sell, who you sell to, roughly how many deals/leads you track. One or two sentences.\"*\n3. Only if the user's description is genuinely under-specified for a column-set decision (e.g., they mention deal size but not the currency, or volume isn't parseable), ask **one** clarifying follow-up. Examples:\n   - Currency / deal-size unit if values are mentioned.\n   - Approximate pipeline volume (<50 / 50–500 / 500+) if it'll change between a single-board vs. two-board funnel.\n\n**Hard cap: 2 questions.** Anything beyond that defeats the skill.\n\n---\n\n## Step 3: Map description → internal archetype → board shape (Synthesize)\n\n**Goal:** Translate the free-text description into a concrete board proposal. Internal mapping uses an archetype taxonomy as scaffolding — the user never sees the archetype label.\n\n### Internal archetype map (not user-visible)\n\n| Signals in description | Internal archetype | Default board shape |\n|---|---|---|\n| Long sales cycle, account/stakeholder language (\"contracts\", \"buyers\", \"procurement\"), deal sizes >$1K | B2B sales | Single `Deals` board, pipeline as groups, rich columns |\n| High volume / short cycle / consumer-facing (\"orders\", \"customers\", \"products\", e-commerce, retail) | B2C transactional | `Orders` + `Customers` (two boards), pipeline as status column |\n| Project / hourly / engagement language (\"clients\", \"retainers\", \"billable\", \"projects\") | Services | `Engagements` + `Clients`, pipeline as groups, effort/hours columns |\n| Outbound / lead-gen / top-of-funnel (\"SDR\", \"cold outreach\", \"leads\", \"ICP\") | Outbound | `Leads` + `Deals` (two-board funnel), status on Leads, groups on Deals |\n| Mixed / unclear / industry-specific (recruiting, real estate, law firm, etc.) | **Custom** | Compose from primitives (see below) — don't force a fit |\n\n### Custom mode\n\nWhen the description doesn't fit cleanly, compose the board structure from primitives rather than forcing an archetype:\n\n- **Primary entity board** (e.g., `Candidates` for recruiting, `Listings` for real estate, `Matters` for a law firm) — name reflects the user's own language.\n- **Pipeline mechanism** (groups vs. status column) — pick groups for low-volume / high-touch, status column for high-volume.\n- **Secondary board** if the description names two distinct entities (e.g., `Candidates` + `Roles`, `Listings` + `Buyers`).\n- **Columns** chosen from the standard set (Owner, Stage, Value, Probability, Date, Source, Notes) plus 1–3 industry-specific columns inferred from the description.\n\n### Output to user\n\nPresent a complete, named board structure as a markdown table. Use **the user's own terminology** wherever possible (if they said \"matters\", call the board \"Matters\" not \"Cases\"). Skip any internal archetype label.\n\nFor each proposed board:\n- Board name (no plugin prefix).\n- Group list with concrete labels.\n- Column list with types (e.g., `Stage (status)`, `Owner (people)`, `Value (numbers, $)`, `Last touch (date)`).\n- One line of rationale grounded in the user's description (not the archetype): *\"You mentioned tracking listings and buyers separately, so I split them across two boards.\"*\n\nShow the complete blueprint. Resolve the workspace in Step 4, then ask once in Step 5 whether to create it. This approves only the described boards, groups and columns; list and obtain approval for any seed items or summary doc separately.\n\nHard rule: **no writes** until the user confirms.\n\n---\n\n## Step 4: Resolve target workspace\n\n**Goal:** Land in the right workspace without cluttering Main.\n\n1. From `get_user_context`, list workspaces the user can write to.\n2. If the user has exactly one writable workspace → use it (skip ask).\n3. If multiple → a short question to the user with numbered options with workspace names + option \"create a new one\".\n4. If a new workspace is requested, include its name and visibility in the proposed publication plan; create it only after approval of that concrete plan.\n5. **Idempotency:** before any `create_board`, `search` for existing boards in this workspace whose names match the proposed names (case-insensitive). If found:\n   - Surface to user: *\"You already have a board named `<name>`. (a) Skip this board, (b) Create alongside as `<name> 2`, (c) Cancel and pick a different workspace?\"*\n   - Never overwrite, never write into the existing board, never delete it.\n\n---\n\n## Step 5: Build α — create boards (Publish)\n\n**Goal:** Execute the confirmed structure with idempotency, in a deterministic order.\n\nFor each proposed board:\n\n1. `create_board({ boardName: \"<name>\", workspaceId, boardKind: \"public\" | \"private\" })` — default `public` unless user said otherwise. Cache returned `boardId`.\n2. **Groups:** describe the proposed groups in `create_board`'s `creationPrompt` (e.g. *\"Groups: New, Qualified, Proposal, Negotiation, Won, Lost\"*) so the board is created with them. Then call `get_board_info` and `create_group` only for any that are missing. There's no named tool to rename or delete groups. If a default \"Group Title\" group is left over, don't delete it; tell the user they can remove or rename it in monday.\n3. For each proposed column, use the exposed `create_column` schema: numeric `boardId`, `columnType`, `columnTitle`, and optional `columnSettings` as a JSON string. First call `get_column_type_info` with `fetchMode: \"schema\"` for configured column types; construct the required configuration, including its `settings` wrapper where prescribed, and serialize it. Do not pass `title`, `defaults`, `labels` or an object in place of `columnSettings`. After creation, read the board back. If a proposed Won label does not have `is_done: true`, say so; do not claim it is configured as done. Offer the user the choice to correct it if an exposed tool supports that setting, or to configure it manually.\n4. **Order matters for the user's mental model:** create columns left-to-right in the order proposed (Stage first, then Owner, then Value, then dates, then long_text last). monday assigns column position by creation order.\n5. After each `create_*`, mirror to chat: *\"Created column `Owner` (people) on `Deals`.\"*. In every mode, confirm the concrete actions or batch before executing it; skip seed items if the user chose to skip them.\n\n### Confirm-before-write (Default mode)\n\nAfter displaying the complete blueprint and resolving its destination, ask once: *\"Create this CRM structure in <workspace> in monday?\"* Allow edits or decline. Only proceed on approval.\n\nThis skill doesn't delete anything, so no per-call confirmation is needed for creates inside a confirmed plan. Spamming the user with N confirms defeats the skill.\n\n---\n\n## Step 6: Seed β (opt-in)\n\n**Goal:** Show the shape with data — empty boards are intimidating.\n\nOnly runs if mode = Proactive (option a) OR user explicitly opted in at Step 5 confirm.\n\nFor each created board, `create_item` for 5 example items distributed across the proposed groups/stages, with realistic but obviously-fake values:\n- Names like `Acme Corp — Q3 expansion`, `Beta Industries — pilot deal` (clearly fictional but no prefix pollution).\n- Stage spread: 1 New, 2 mid-funnel, 1 Won, 1 Lost (or shape-appropriate).\n- Owner = the running user (so every example shows up in the user's \"my items\" filters).\n- Populate only fields inside the approved seed plan. Leave deal-value/amount fields blank: the no-amount-write rail also applies to new items. Do not invent last-touch dates; populate them only from a user-confirmed fictional interaction.\n- **`Source = AI assistant` on a status column.** The board was just created in Step 5 with this column included by default — Step 6 just sets the value. If for any reason the column wasn't created, prompt once: *\"Add a `Source` column so we can flag the example items? (yes / skip — keeps the items unflagged)\"*.\n\nCap at 5 items per board, hard. The `Source = AI assistant` flag supports a clean cleanup loop later — user filters by source, deletes the examples manually once they have real data.\n\n---\n\n## Step 7: Publish setup doc (Publish)\n\n**Goal:** Leave a navigable summary so the user knows what was created and where to go next.\n\nOnly when the user approved the setup-summary doc as part of the concrete plan: `create_doc` in the user's workspace, title `CRM Setup — <Mon DD>, <YYYY>`. Body:\n\n```markdown\n# CRM Setup — <Mon DD>\n\nmonday-crm-skill-id: workspace-builder\n\n## What was created\n\n### Board: <Name>\n- Workspace: <workspace>\n- URL: <board url>\n- Groups: <list>\n- Columns: <list with types>\n\n(Repeat per board.)\n\n## Example items\n<count> example items added per board, flagged `Source = AI assistant` on a status column. Filter by that source value to find and remove the examples once you've added real data.\n\n## What's next\n\n1. **Add your real deals.** Replace the examples or add fresh items.\n2. **Try the morning briefing.** Once you have 5+ deals with stages set, run the `morning-briefing` skill.\n3. **Set up automations.** Open the Automation Center on each board to wire status changes, due-date reminders, and lead routing — these aren't part of this skill yet (coming in v0.2).\n4. **Audit hygiene later.** After 30 days, run the `board-diagnosis` skill for a fill-rate audit.\n\n---\nGenerated by monday CRM plugin · <ISO timestamp> · run the `workspace-builder` skill again only if you want to scaffold an additional CRM (won't touch this one).\n```\n\n**Idempotency:** before creating, search same-day docs by title + the `monday-crm-skill-id: workspace-builder` marker. If found, append-only update (never overwrite earlier content; this protects against repeat runs blowing away an earlier session's record).\n\n---\n\n## Step 8: Handoff to morning-briefing\n\nIf at least one board was created and the user is in Default/Proactive mode, print:\n*\"Want to try the morning briefing now? Once you add a few real deals it'll prioritize your day. Run the `morning-briefing` skill whenever you're ready.\"*\n\nSilent mode skips this prompt.\n\n---\n\n## Step 9: Close the loop\n\n- Print a one-line summary: `Created <N> board(s), <M> columns, <K> seed items. Doc: <url>.`\n- If any write failed mid-run: list the failures and offer to retry only those — never re-run the whole skill on retry (would duplicate boards if Step 4 idempotency was bypassed).\n\n---\n\n## Shared patterns\n\n- **No prefix on titles.** Boards take the user's chosen names. Setup doc uses plain title + `monday-crm-skill-id: workspace-builder` marker + `Generated by monday CRM plugin` footer in body for findability + idempotency.\n- **`Source = AI assistant` on every seed item** via a status column. No `[Example]` prefix.\n- **Idempotency before every create** — board-name collision check, doc same-day collision check (by skill-id marker).\n- **Safety rail.** No deletion of CRM records, no amount-column writes, no cross-workspace creates, no writes outside the user-confirmed plan.\n- **Confirm in batches, not per-call** — the whole skill exists to reduce friction; per-call confirms defeat it.\n- **Type-based column choices**, not English-name-based — works on non-English monday installs.\n- **Use the user's terminology** in board / group / column names, not the internal archetype names.\n\n---\n\n## Error handling reference\n\n| Failure | Behavior |\n|---|---|\n| Connector not installed | Step 0 stops; print install link. |\n| No writable workspace | Step 4 stops; print: *\"You don't have write access to any workspace. Ask a workspace admin, then re-run.\"* |\n| Board name collision | Step 4 idempotency prompt; never overwrite. |\n| `create_board` fails (perms) | Stop and surface error verbatim — don't continue creating columns into a non-existent board. |\n| `create_column` fails on a column | Skip that column, log to chat, continue with the rest, list skipped in Step 9 summary. |\n| `create_group` fails | Skip; the board still works with default groups; flag in summary. |\n| 429 rate limit | Backoff 3x (1s, 2s, 4s); on third fail, halt and print: *\"monday is rate-limiting; retry in 60s.\"* |\n| User halts mid-build | Keep writes up to halt point; Step 7 setup doc reflects partial state. |\n| Setup doc create fails | Print the doc body in chat with banner *\"Couldn't publish the setup doc — copy the summary below.\"* |\n\n---\n\n## Completion criteria\n\n- [ ] Step 0 (connector check) ran and passed.\n- [ ] At least one board was created (or user explicitly cancelled at Step 3/4).\n- [ ] No internal archetype label leaked into user-visible output (board/group/column names use the user's terminology).\n- [ ] Every seed item carries `Source = AI assistant` on a status column (or the user explicitly skipped the source-column step).\n- [ ] The setup doc was created (with `monday-crm-skill-id: workspace-builder` + `Generated by monday CRM plugin` footer) or printed to chat on failure.\n- [ ] Safety rail held: no deletion of CRM records, no amount-column writes, no cross-workspace creates, no writes outside the confirmed plan.\n- [ ] The chat summary lists any per-column failures.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}