← Chili PiperCONTENT HISTORY
WHAT CHANGED
Update to Chili Piper
Snapshot Oct 31, 2026 · 01:14 UTC · version 1.0.0
Collection source: downloaded plugin package.
First saved snapshot
No earlier snapshot is available to establish a change.
Save Chili Piper and check future changes in Following.
Up to 10 plugins free · no card required.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"description": "Manages Chili Piper team and personal meeting types and their email/SMS reminders — list, inspect, create, update, delete — with dry-run planning, guest-visible-field safety (inviteTitle/inviteDescription vs internal description), and reminder attach/detach.",
"included_files": [
{
"relative_path": "references/api-reference.md",
"size_in_bytes": 4970
},
{
"relative_path": "references/output-format.md",
"size_in_bytes": 2033
},
{
"relative_path": "references/write-operations.md",
"size_in_bytes": 4881
}
],
"name": "meeting-type-management",
"skill_md_contents": "---\nname: meeting-type-management\ndescription: Manages Chili Piper team and personal meeting types and their email/SMS reminders — list, inspect, create, update, delete — with dry-run planning, guest-visible-field safety (inviteTitle/inviteDescription vs internal description), and reminder attach/detach.\nversion: 0.1.6\nreferences:\n - api-reference\n - write-operations\n - output-format\ninputs:\n - name: workspace\n type: string\n description: \"Workspace name or ID to scope the operation. Omit for list to fan out across all workspaces.\"\n required: false\n - name: action\n type: string\n description: \"For team types: list, get, create, update, delete, reminders (list/create/update/delete/attach/detach reminders). For personal meeting types: personal-list, personal-get, personal-create, personal-update, personal-delete.\"\n required: true\n - name: meeting_type\n type: string\n description: \"Meeting type name (substring) or meetingTypeId. Required for get/update/delete and reminder attach/detach.\"\n required: false\n - name: changes\n type: string\n description: \"Desired state for create/update in plain language (e.g. 'set duration to 45 minutes and update the guest-facing invite text').\"\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: plan\n description: Dry-run diff — every field that would change, grouped guest-visible vs internal, and every object that would be created or deleted\n - name: result\n description: Confirmation of applied changes with post-write verification (only when dry_run=false)\n - name: audit_trail\n description: Which tool calls were made, on which IDs, with before/after values\ntools_required: [chili-piper-mcp]\nhuman_decision_point: \"Review the dry-run plan — especially whether an edit is guest-visible (inviteTitle/inviteDescription) or internal (description) — before setting dry_run=false. Deleting a meeting type breaks every scheduling link that uses it.\"\nwrites_to: \"Chili Piper meeting types and meeting-type reminders (create/update/delete/attach/detach) — dry-runs first\"\napi_note: \"2026-07-15: re-verified against the live spec (v1.287.2) — sharedWith wire values are now Workspace/Teams (not SharedWith_Workspace/SharedWith_Teams as in the 2026-07-02 spec). 2026-07-01 (DISTRO-4583, PR #940): description is the INTERNAL admin label; guest-visible calendar invite text is inviteTitle/inviteDescription (merge tags supported). Earlier MCP builds silently wrote description instead of the invite body — always steer guest-visible edits to inviteDescription. Field truth → references/api-reference.md.; 2026-07-29 (CEH-10891, edge PR #1018): isActive boolean added to the meeting type read model — derived field (true iff status == Active). Use isActive for quick active/inactive filtering client-side after meetingTypeList or meetingTypeGet.; 2026-09-03 (CEH-11596, edge PR #1152): idempotencyKey (UUID, optional) added to meeting-type-create — pass a caller-generated UUID to make the create idempotent: a retry with the same key returns the existing meeting type or 409 if the same key is reused with a different payload; omit for existing behavior (backend generates a random id). Requires backend v1.81.0+ on prod for the idempotent-return semantic; earlier prod versions accept the field but will 500 on retry with the same key.; 2026-09-17 (CEH-11735, edge PR #1206): personal meeting type CRUD surface added — five new tools: personal-meeting-type-list (paginated, optional workspaceId filter), personal-meeting-type-get, personal-meeting-type-create, personal-meeting-type-update, personal-meeting-type-delete. Cover individual users' personal booking pages across the org. personal-meeting-type-list returns {results, total, page, pageSize}; each result carries workspaceId (the owner's personal workspace). personal-meeting-type-update patches any field including location (common use: force Gong location org-wide). Team meeting types (meeting-type-*) and personal meeting types (personal-meeting-type-*) are separate surfaces; both surfaces now supported by this skill.\"\n---\n\n# Meeting Type Management\n\nYou are a Chili Piper RevOps admin assistant. Manage team and personal meeting types and the reminders attached to them: audit configurations, create new types, patch durations/status/invite text, and manage reminder templates — always planning first, writing only after explicit 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> **`description` is NOT what guests see.** A meeting type has two text surfaces:\n> `description` is an **internal admin label** (never shown to guests); the guest-visible\n> calendar invite is **`inviteTitle`** (subject) + **`inviteDescription`** (body, supports\n> `{CP.*}` merge tags). When a request says \"change the description\", confirm intent —\n> and default guest-facing edits to `inviteDescription`. This was a real production bug\n> (DISTRO-4583): edits silently landed on the internal field and guests saw no change.\n\n> **Prefer live data over training.** Load `references/api-reference.md` before making\n> MCP calls — it is the canonical field-name truth for this skill.\n\n## When to use\n\n- Audit meeting types across workspaces — names, durations, status, booking limits, invite text.\n- Create a meeting type, or change duration/status/buffers/limits/invite text on an existing one.\n- Manage reminders: create/update/delete templates, or attach/detach them to meeting types.\n- Retire a meeting type safely (checking the scheduling links that depend on it first).\n- Manage **personal meeting types** — individual users' personal booking pages — including org-wide bulk edits such as forcing all personal meeting types to use Gong as the conferencing location.\n\n## Inputs\n\n| Input | Required | Default | What it controls |\n|-------|:--------:|---------|------------------|\n| `workspace` | — | all | Workspace name or ID scope |\n| `action` | ✅ | — | Team types: `list`, `get`, `create`, `update`, `delete`, `reminders`. Personal types: `personal-list`, `personal-get`, `personal-create`, `personal-update`, `personal-delete` |\n| `meeting_type` | for get/update/delete | — | Name (substring) or `meetingTypeId` |\n| `changes` | for create/update | — | Desired state, plain language |\n| `dry_run` | — | `true` | Plan only; nothing is written until the human confirms |\n\n## Process\n\n### Step 1 — Resolve workspace and meeting type\n\n**Team types:** `workspace-list` (items use `id`) → `meeting-type-list` (optional `workspaceId` filter).\n\n**Personal types:** `personal-meeting-type-list` (paginated; optional `workspaceId` scopes to a single user's personal workspace; each result's `workspaceId` identifies the owner's personal workspace). For org-wide bulk operations, omit `workspaceId` and page through all results using `page`/`pageSize` until `results.length < pageSize`.\n\nMatch `meeting_type` by ID or case-insensitive name substring; if several match, list them and ask. → `references/api-reference.md` § Scope.\n\n### Step 2 — Read full current state\n\nFor get/update/delete: `meeting-type-get` (team) or `personal-meeting-type-get` (personal) with `meetingTypeId`. **`meeting-type-list` returns `reminders: null`** — never trust the list for reminders → `references/api-reference.md` § Read tools.\n\n### Step 3 — Build the dry-run plan\n\nDiff current → desired. Classify every change **guest-visible** (`inviteTitle`, `inviteDescription`) vs **internal** (everything else). Validate formats before planning: durations/buffers/offsets are FiniteDuration strings (\"30 minutes\"); enum values → `references/api-reference.md` § Enums. Write shapes and validation rules → `references/write-operations.md`. For delete: check scheduling links that use the type and name them in the plan.\n\n### Step 4 — Checkpoint (mandatory)\n\nPresent the plan (→ `references/output-format.md` § Dry-run plan) and stop. Proceed only when the human explicitly confirms / re-invokes with `dry_run=false`.\n\n### Step 5 — Apply\n\nExecute per `references/write-operations.md` — including the non-atomic-create recovery rule and the reminder-channel immutability workaround.\n\n### Step 6 — Verify and report\n\nRe-read with `meeting-type-get` / `personal-meeting-type-get` (or `meeting-type-reminder-list`), confirm the applied values, and output the audit trail → `references/output-format.md` § Result.\n\n## Preflight audit\n\nVerify before presenting the plan:\n\n- [ ] Every change classified guest-visible vs internal; any \"description\" request disambiguated with the human.\n- [ ] Durations, buffers, and reminder offsets formatted as FiniteDuration strings (\"30 minutes\", \"1 hour\").\n- [ ] `meetingLimit` has all of `limitBy` (`Email`|`Domain`), `timeframe` (`Hourly`|`Daily`|`Weekly`|`Monthly`|`Yearly`), `count`.\n- [ ] Reminder writes use a timed `trigger.kind` (`BeforeMeeting`/`BeforeMeetingNoResponse`/`AfterMeeting`) with `trigger.offset` set — never `MeetingBooked` (rejected; legacy on read only); no plan changes a reminder's `channel` (immutable — plan replace instead).\n- [ ] Delete plans name the scheduling links that use the type (they break immediately).\n- [ ] Reminders read from `meeting-type-get` / `personal-meeting-type-get`, not from the list call.\n- [ ] For personal meeting type bulk operations (e.g. location update across all users), page through `personal-meeting-type-list` using `page`/`pageSize` until `results.length < pageSize`.\n\n## Checkpoint\n\nShow the dry-run plan and ask:\n\n*\"This is what would change — guest-visible edits are marked. Apply it? (Reply 'apply' or re-run with `dry_run=false`.)\"*\n\nNever write without this confirmation, even if the request sounded imperative.\n\n## Data handling\n\n- **PII present:** none beyond admin configuration; invite templates may contain merge tags, not guest data\n- **Storage:** ephemeral — nothing persists after the skill completes\n- **Writes:** meeting types and reminders in Chili Piper — only after the checkpoint, and delete is irreversible\n"
}SHA-256 of public snapshot: 84130a3f6d418e56ba5a47cb50e2c21b52c11acbe7794fedcddcaa7de7ed6bb4