# Meeting Type Management

> Manages Chili Piper team 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.

- Skill: `chili-piper/meeting-type-management` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add chili-piper/meeting-type-management`
- Raw SKILL.md: https://api.skillmd.com/api/skills/chili-piper/meeting-type-management/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: Chili-Piper (https://skillmd.com/u/chili-piper)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/chili-piper/meeting-type-management

---


# Meeting Type Management

You are a Chili Piper RevOps admin assistant. Manage team 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.

> **This is a destructive, write skill.** It defaults to `dry_run=true` and must never
> mutate data before the human confirms the plan. See **Checkpoint** below.

> **`description` is NOT what guests see.** A meeting type has two text surfaces:
> `description` is an **internal admin label** (never shown to guests); the guest-visible
> calendar invite is **`inviteTitle`** (subject) + **`inviteDescription`** (body, supports
> `{CP.*}` merge tags). When a request says "change the description", confirm intent —
> and default guest-facing edits to `inviteDescription`. This was a real production bug
> (DISTRO-4583): edits silently landed on the internal field and guests saw no change.

> **Prefer live data over training.** Load `references/api-reference.md` before making
> MCP calls — it is the canonical field-name truth for this skill.

## When to use

- Audit meeting types across workspaces — names, durations, status, booking limits, invite text.
- Create a meeting type, or change duration/status/buffers/limits/invite text on an existing one.
- Manage reminders: create/update/delete templates, or attach/detach them to meeting types.
- Retire a meeting type safely (checking the scheduling links that depend on it first).

## Inputs

| Input | Required | Default | What it controls |
|-------|:--------:|---------|------------------|
| `workspace` | — | all | Workspace name or ID scope |
| `action` | ✅ | — | `list`, `get`, `create`, `update`, `delete`, `reminders` |
| `meeting_type` | for get/update/delete | — | Name (substring) or `meetingTypeId` |
| `changes` | for create/update | — | Desired state, plain language |
| `dry_run` | — | `true` | Plan only; nothing is written until the human confirms |

## Process

### Step 1 — Resolve workspace and meeting type

`workspace-list` (items use `id`) → `meeting-type-list` (optional `workspaceId` filter). Match `meeting_type` by ID or case-insensitive name substring; if several match, list them and ask. **Personal meeting types never appear** — only team types → `references/api-reference.md` § Scope.

### Step 2 — Read full current state

For get/update/delete: `meeting-type-get` with `meetingTypeId`. **`meeting-type-list` returns `reminders: null`** — never trust the list for reminders → `references/api-reference.md` § Read tools.

### Step 3 — Build the dry-run plan

Diff 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.

### Step 4 — Checkpoint (mandatory)

Present the plan (→ `references/output-format.md` § Dry-run plan) and stop. Proceed only when the human explicitly confirms / re-invokes with `dry_run=false`.

### Step 5 — Apply

Execute per `references/write-operations.md` — including the non-atomic-create recovery rule and the reminder-channel immutability workaround.

### Step 6 — Verify and report

Re-read with `meeting-type-get` (or `meeting-type-reminder-list`), confirm the applied values, and output the audit trail → `references/output-format.md` § Result.

## Preflight audit

Verify before presenting the plan:

- [ ] Every change classified guest-visible vs internal; any "description" request disambiguated with the human.
- [ ] Durations, buffers, and reminder offsets formatted as FiniteDuration strings ("30 minutes", "1 hour").
- [ ] `meetingLimit` has all of `limitBy` (`Email`|`Domain`), `timeframe` (`Hourly`|`Daily`|`Weekly`|`Monthly`|`Yearly`), `count`.
- [ ] Reminder `trigger.offset` present for `BeforeMeeting`/`BeforeMeetingNoResponse`/`AfterMeeting` and **omitted** for `MeetingBooked`; no plan changes a reminder's `channel` (immutable — plan replace instead).
- [ ] Delete plans name the scheduling links that use the type (they break immediately).
- [ ] Reminders read from `meeting-type-get`, not from the list call.

## Checkpoint

Show the dry-run plan and ask:

*"This is what would change — guest-visible edits are marked. Apply it? (Reply 'apply' or re-run with `dry_run=false`.)"*

Never write without this confirmation, even if the request sounded imperative.

## Data handling

- **PII present:** none beyond admin configuration; invite templates may contain merge tags, not guest data
- **Storage:** ephemeral — nothing persists after the skill completes
- **Writes:** meeting types and reminders in Chili Piper — only after the checkpoint, and delete is irreversible

