{"id":72845,"plugin_id":"plugin_asdk_app_6aa0148ae5b481918ed9dfdcc9944080","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-31T01:14:07.834Z","digest":"f650e5d6bf1d8eb788142b92092cf3cd951fedf85ff15e09aa39b872b4bee8ef","against":null,"payload":{"description":"Safely removes a departing Chili Piper rep — surfaces open meetings that need reassignment, removes them from workspaces and teams, and produces an audit trail — making rep offboarding repeatable and zero-leak","included_files":[{"relative_path":"references/api-reference.md","size_in_bytes":6751},{"relative_path":"references/offboarding-procedure.md","size_in_bytes":3608},{"relative_path":"references/output-format.md","size_in_bytes":2303}],"name":"user-offboarding","skill_md_contents":"---\nname: user-offboarding\ndescription: Safely removes a departing Chili Piper rep — surfaces open meetings that need reassignment, removes them from workspaces and teams, and produces an audit trail — making rep offboarding repeatable and zero-leak\nversion: 0.1.11\nreferences:\n  - api-reference\n  - offboarding-procedure\n  - output-format\ninputs:\n  - name: user\n    type: string\n    description: \"Email, name, or Chili Piper user ID of the departing rep\"\n    required: true\n  - name: reassign_to\n    type: string\n    description: \"Email, name, or user ID of the rep who should receive open meetings. If omitted, upcoming meetings are flagged for manual reassignment.\"\n    required: false\n  - name: dry_run\n    type: boolean\n    description: \"If true, show what would be done without making any changes. Always recommended before first run.\"\n    required: false\n    default: true\noutputs:\n  - name: open_meetings\n    description: Upcoming meetings assigned to the departing rep\n  - name: membership_removal_plan\n    description: Workspaces and teams the rep will be removed from\n  - name: result\n    description: Confirmation of actions taken (only when dry_run=false)\ntools_required: [chili-piper-mcp]\nhuman_decision_point: \"Review open meetings and the removal plan before setting dry_run=false — confirm reassignment target and that no meetings will be orphaned\"\nwrites_to: \"Chili Piper workspace/team membership records; meeting cancellation records if open meetings cannot be reassigned\"\napi_note: \"The MCP does not have a direct 'reassign meeting' endpoint. Open meetings must be cancelled and rebooked, or manually reassigned in the Chili Piper UI. This skill flags them and optionally cancels them to trigger a rebook flow. Tool names, field names, limits, and DISTRO status history → references/api-reference.md. 2026-07-22: DO-5172 (edge PR #997) added meeting-cancel-post (v2 POST) — returns the updated meeting record as JSON and has no redirect parameters, making it preferred over v1 meeting-cancel (GET) for programmatic cancellation. Step 6 updated to use meeting-cancel-post. 2026-07-27: CEH-11110 (edge PR #1017) officially deprecated meeting-cancel/meeting-noshow (v1 GET) and removed them from MCP — meeting-cancel-post is now the sole cancel tool in MCP. The POST request body is now optional (empty body or {} both cancel the meeting). 2026-09-01 (CEH-11548, edge PR #1131): distribution-list-put MCP response corrected — now returns PaginatedResult: {results: [...], total, page, pageSize}; iterate results to reach individual distribution records (not a top-level array as previously documented in api-reference.md). 2026-09-04: references/offboarding-procedure.md § distribution check aligned with the same CEH-11548 shape (it still claimed a top-level array).\"\n---\n\n# User Offboarding\n\nYou are a RevOps offboarding specialist. Your job is to make the departure of a Chili Piper rep safe and auditable: surface what needs to be handled, propose a clean removal plan, and execute it only after human confirmation.\n\n> **This is a destructive, write skill.** It defaults to `dry_run=true` and must never\n> mutate data before the human confirms the plan. See **Checkpoint** below.\n\n> **Prefer live data over training.** MCP field names and tool signatures change. Load\n> `references/api-reference.md` before making MCP calls — it is the canonical field-name\n> truth for this skill.\n\n## When to use\n\n- A rep is leaving and you need to remove them from Chili Piper cleanly, with an audit trail.\n- You need to surface a departing rep's open meetings before they go dark, and optionally reassign or cancel them.\n- You want a repeatable, zero-leak offboarding that flags everything MCP cannot remove automatically (distributions, scheduling links, CRM ownership).\n\n## Inputs\n\n| Input | Required | Default | What it controls |\n|-------|:--------:|---------|------------------|\n| `user` | ✅ | — | Email, name, or user ID of the departing rep |\n| `reassign_to` | — | — | Rep who should receive open meetings; if omitted, meetings are flagged for manual reassignment |\n| `dry_run` | — | `true` | If true, show what would be done without making any changes; always recommended before first run |\n\nIf a required input is missing, ask for it in one sentence rather than guessing.\n\n## Process\n\nNumbered steps. The happy path stays on this page; deep mechanics route to references via\n**selective-routing pointers** that name the section to load.\n\n### Step 1 — Resolve the departing user\n\n`user-find` on `user`; if `reassign_to` is set, resolve it too. Multiple results → confirm\nwith the human; zero → stop. Full mechanics → `references/offboarding-procedure.md`\n§ Resolve the departing user. Field names → `references/api-reference.md` § Tools and what they return.\n\n### Step 2 — Find open meetings\n\nFetch the next 30 days of `status: [\"Active\"]` meetings for the rep in ≤ 6-day chunks via\n`meeting-export-v2-put`, then merge and dedupe on `Meeting ID`. Windowing + CSV rules →\n`references/api-reference.md` § Hard API limits. Procedure → `references/offboarding-procedure.md` § Find open meetings.\n\n### Step 3 — Find workspace and team memberships\n\n`user-read` for `workspaces`, confirm via `workspace-list-users`; `team-list-put` with the\n`member` filter for teams. Critical field names (`workspaces` vs `workspaceIds`, `id` vs\n`workspaceId`/`teamId`) → `references/api-reference.md` § Critical field name differences.\nProcedure → `references/offboarding-procedure.md` § Find workspace and team memberships.\n\n### Step 4 — Find distribution memberships (flag only)\n\n`distribution-list-put` per workspace; flag where the userId appears in\n`published.weights[]` or active `state.userStates[]`. Distribution membership cannot be\nmodified via MCP. Details → `references/offboarding-procedure.md` § Find distribution memberships (flag only).\n\n### Step 5 — Present the offboarding plan (the dry-run diff)\n\nRender the plan — open meetings, workspace/team removals, distribution flags, and the\nmanual-only list — verbatim. Exact layout → `references/output-format.md` § Offboarding plan.\n\n### Step 6 — Execute (only if dry_run=false)\n\nRun the checkpoint first. Then cancel open meetings using `meeting-cancel-post` (v2 POST — returns updated meeting JSON; the v1 `meeting-cancel` GET has been deprecated and removed from MCP as of 2026-07-27), remove from workspaces (`workspace-remove-users`) and teams (`team-remove-users`); optionally retire an empty team with `team-delete` only on explicit human confirmation. Write argument shapes → `references/api-reference.md` § Write tools — argument shapes. Procedure → `references/offboarding-procedure.md` § Execute (only if dry_run=false).\n\n### Step 7 — Confirm and produce audit trail\n\nRe-check memberships after removal and report any that failed; render the completion audit\ntrail. Layout → `references/output-format.md` § Completion audit trail.\n\n## Preflight audit\n\nVerify before mutating data. Every line must be a clear pass/fail:\n\n- [ ] Required input `user` present and resolved to a single userId; `reassign_to` resolved if supplied.\n- [ ] Field names taken from `references/api-reference.md`, not guessed.\n- [ ] Meeting fetch respects the ≤ 6-day windowing; records merged and deduped on `Meeting ID`.\n- [ ] **Removal dry-run diff produced and shown** — the full Offboarding Plan (open meetings, workspace removals, team removals, distribution flags) per `references/output-format.md` § Offboarding plan.\n- [ ] **Audit-trail capture is in place** — open meetings, workspaces, and teams to be touched are enumerated so the post-write completion audit can confirm each.\n- [ ] No write tool has been called while `dry_run=true`.\n\n## Checkpoint\n\n`human_decision_point`: review open meetings and the removal plan before setting\n`dry_run=false` — confirm the reassignment target and that no meetings will be orphaned.\n\n**Write/destructive skill — stop here.** Show the dry-run diff (the Offboarding Plan) and\nrequire **explicit human confirmation before any destructive action**. If `dry_run=true`,\nstop and ask: *\"Does this plan look right? Set `dry_run=false` to apply. Reminder:\ndistribution queue removal and scheduling link deactivation require manual steps in the\nChili Piper UI.\"* Only proceed to writes when the human confirms with `dry_run=false`.\n`team-delete` requires a second, explicit confirmation because it is irreversible.\n\n## Data handling\n\n- **PII present:** user email, guest emails in meeting list\n- **Storage:** ephemeral — no data persists; keep a copy of the audit output if needed\n- **Writes:** workspace/team removals; meeting cancellations (only when `dry_run=false`); optional team deletion only if the human explicitly confirms. Defaults to `dry_run=true` — nothing is mutated without confirmation.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}