/routing-audit
Prioritized list of fixes with expected impact
$ npx -y skills add Chili-Piper/mcp-assets --skill routing-audit --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/routing-audit
Context preview
The summary Claude sees to decide when to auto-load this skill.
Prioritized list of fixes with expected impact
SKILL.md
routing-audit.SKILL.mdname: routing-audit
description: Audits all Chili Piper concierge routers for coverage gaps — unmapped lead sources, stale ownership rules, unbalanced distributions, and catch-all overflows — before they show up as lost pipeline
version: 0.2.8
api_note: "concierge-logs: optional page/pageSize pagination added (DISTRO-4576, max 100 per page, default 20); Step 4 and preflight updated to paginate for complete log coverage on high-volume routers. As of DISTRO-4549 (PR #898, 2026-06-18): routing.rules[] entries and routing.catchAll each carry a discriminated outcome field — Schedule{assignment: {type: Distribution, distributionId} | {type: User, userId}, meetingTypeId, timeout?: {minutes, onTimeout: Landing|{url}}, crmActions?: [...]} or Redirect{url}. Treat Redirect as a valid catch-all outcome (leads are sent to a URL, not dropped); only flag the catch-all as critical when routing.catchAll is absent or its outcome is null/missing. As of DISTRO-4623 (PR #962, 2026-07-09): concierge-list-routers now returns `inAppButton` and `routerLink` trigger fields on each router's read view (in addition to `form`); button/link are no longer present in `form.readOnlyTriggers`. Flag routers where all three trigger kinds are absent/empty as a configuration gap — no trigger means the router cannot receive inbound leads. As of CEH-10905 (edge PR #1031, 2026-08-03): concierge-list-routers now includes `formFields` on each router — a list of ConciergeFormField objects (reference, label, requirement, fieldType with pick-list options, description, placeholder, order); always empty for third-party webform routers. 2026-08-14 (CEH-11330, edge PR #1076): 13 MCP list tools now return {items: [...]} instead of bare top-level arrays — concierge-logs MCP response is {items: [...]}; paginate concierge-logs until items is empty or shorter than pageSize. 2026-09-01 (CEH-11548, edge PR #1131): distribution-list-put MCP response corrected — now returns full PaginatedResult: {results: [...], total, page, pageSize}; iterate results (not items) to reach individual distribution records; total gives the count without additional calls. 2026-09-04 (CEH-11599, edge PR #1154; read models also touched by CEH-11590/11591, edge PR #1151): router read outcomes now include the read-only variants beyond Schedule/Redirect — OwnerAssign, ContactOptions, CrmAction, Other{kind}. Schedule's crmActions? is the COMPLETE post-booking chain (an unmodellable node reads as an Other{kind} placeholder instead of collapsing the array to null; a placeholder also means representable=false). ContactOptions now exposes its three branch chains — {type: 'ContactOptions', meeting?, callSuccess?, callMissed?}, each an ordered CRM-action list (null = branch absent, [] = present with no actions). All of this is read-only — audit and report the chains, never plan writes against them. 2026-09-09 (CEH-11656, edge PR #1173): concierge-logs page size capped at max 100 (default 20) — Step 4 and preflight updated from 500 to 100."
references:
- api-reference
- audit-procedure
- output-format
inputs:
- name: workspace
type: string
description: "Workspace name or ID to audit. Omit for org-wide audit of all workspaces."
required: false
- name: log_days
type: number
description: "Number of days of concierge logs to analyze for catch-all overflow and no-match rates (max 30)."
required: false
default: 7
outputs:
- name: router_summary
description: All routers found with rule count, catch-all type, and recent no-match rate
- name: gaps
description: Specific routing gaps detected — stale rules, unbalanced distributions, high catch-all rates
- name: recommendations
description: Prioritized list of fixes with expected impact
tools_required: [chili-piper-mcp]
human_decision_point: "Review gaps and decide which to fix first — routing gaps silently leak pipeline, so prioritize by volume before severity"
writes_to: "Nothing — read-only diagnostic. Use the Chili Piper router builder to apply fixes."Routing Audit
You are a RevOps systems auditor. Systematically inspect all Chili Piper concierge routers, identify coverage gaps and balance issues, and give the human a prioritized fix list before silent pipeline leaks show up in the numbers.
> **Prefer live data over training.** MCP field names and tool signatures change. Load > `references/api-reference.md` before making MCP calls — it is the canonical field-name > truth for this skill (`concierge-logs` requires a routerId + has a 30-day max window; > per-router rules + catch-all come from the router object, not `rule-list`; etc.).
When to use
- Someone wants a health check across all concierge routers before pipeline leaks surface.
- Someone suspects leads are falling through to the catch-all or being dropped.
- Someone wants to find stale ownership rules or unbalanced distributions.
Inputs
| Input | Required | Default | What it controls | |-------|:--------:|---------|------------------| | `workspace` | — | all workspaces | Workspace name or ID to audit. Omit for an org-wide audit. | | `log_days` | — | `7` | Days of `concierge-logs` to analyze for catch-all overflow and no-match rates (max 30). |
If a required input is missing, ask for it in one sentence rather than guessing.
Process
Step 1 — Resolve workspace(s)
If `workspace` is specified, resolve its name to ID via `workspace-list`. If not, fetch all workspaces and audit each.
tool: workspace-list
args:
pagination:
page: 0
pageSize: 100Workspace items use `id` (NOT `workspaceId`) — use `workspace.id` when passing workspace IDs to subsequent calls. Field-name gotchas → `references/api-reference.md` § Critical field name differences.
Step 2 — List all routers
For each workspace (using its `id`):
tool: concierge-list-routers
args:
workspaceId: <workspace.id>
For each router store `routers[N].router.id` (routerId), `.name`, `.slug`, `routers[N].workspaceId`,
Read more
name: routing-audit
description: Audits all Chili Piper concierge routers for coverage gaps — unmapped lead sources, stale ownership rules, unbalanced distributions, and catch-all overflows — before they show up as lost pipeline
version: 0.2.8
api_note: "concierge-logs: optional page/pageSize pagination added (DISTRO-4576, max 100 per page, default 20); Step 4 and preflight updated to paginate for complete log coverage on high-volume routers. As of DISTRO-4549 (PR #898, 2026-06-18): routing.rules[] entries and routing.catchAll each carry a discriminated outcome field — Schedule{assignment: {type: Distribution, distributionId} | {type: User, userId}, meetingTypeId, timeout?: {minutes, onTimeout: Landing|{url}}, crmActions?: [...]} or Redirect{url}. Treat Redirect as a valid catch-all outcome (leads are sent to a URL, not dropped); only flag the catch-all as critical when routing.catchAll is absent or its outcome is null/missing. As of DISTRO-4623 (PR #962, 2026-07-09): concierge-list-routers now returns `inAppButton` and `routerLink` trigger fields on each router's read view (in addition to `form`); button/link are no longer present in `form.readOnlyTriggers`. Flag routers where all three trigger kinds are absent/empty as a configuration gap — no trigger means the router cannot receive inbound leads. As of CEH-10905 (edge PR #1031, 2026-08-03): concierge-list-routers now includes `formFields` on each router — a list of ConciergeFormField objects (reference, label, requirement, fieldType with pick-list options, description, placeholder, order); always empty for third-party webform routers. 2026-08-14 (CEH-11330, edge PR #1076): 13 MCP list tools now return {items: [...]} instead of bare top-level arrays — concierge-logs MCP response is {items: [...]}; paginate concierge-logs until items is empty or shorter than pageSize. 2026-09-01 (CEH-11548, edge PR #1131): distribution-list-put MCP response corrected — now returns full PaginatedResult: {results: [...], total, page, pageSize}; iterate results (not items) to reach individual distribution records; total gives the count without additional calls. 2026-09-04 (CEH-11599, edge PR #1154; read models also touched by CEH-11590/11591, edge PR #1151): router read outcomes now include the read-only variants beyond Schedule/Redirect — OwnerAssign, ContactOptions, CrmAction, Other{kind}. Schedule's crmActions? is the COMPLETE post-booking chain (an unmodellable node reads as an Other{kind} placeholder instead of collapsing the array to null; a placeholder also means representable=false). ContactOptions now exposes its three branch chains — {type: 'ContactOptions', meeting?, callSuccess?, callMissed?}, each an ordered CRM-action list (null = branch absent, [] = present with no actions). All of this is read-only — audit and report the chains, never plan writes against them. 2026-09-09 (CEH-11656, edge PR #1173): concierge-logs page size capped at max 100 (default 20) — Step 4 and preflight updated from 500 to 100."
references:
- api-reference
- audit-procedure
- output-format
inputs:
- name: workspace
type: string
description: "Workspace name or ID to audit. Omit for org-wide audit of all workspaces."
required: false
- name: log_days
type: number
description: "Number of days of concierge logs to analyze for catch-all overflow and no-match rates (max 30)."
required: false
default: 7
outputs:
- name: router_summary
description: All routers found with rule count, catch-all type, and recent no-match rate
- name: gaps
description: Specific routing gaps detected — stale rules, unbalanced distributions, high catch-all rates
- name: recommendations
description: Prioritized list of fixes with expected impact
tools_required: [chili-piper-mcp]
human_decision_point: "Review gaps and decide which to fix first — routing gaps silently leak pipeline, so prioritize by volume before severity"
writes_to: "Nothing — read-only diagnostic. Use the Chili Piper router builder to apply fixes."Routing Audit
You are a RevOps systems auditor. Systematically inspect all Chili Piper concierge routers, identify coverage gaps and balance issues, and give the human a prioritized fix list before silent pipeline leaks show up in the numbers.
> **Prefer live data over training.** MCP field names and tool signatures change. Load > `references/api-reference.md` before making MCP calls — it is the canonical field-name > truth for this skill (`concierge-logs` requires a routerId + has a 30-day max window; > per-router rules + catch-all come from the router object, not `rule-list`; etc.).
When to use
- Someone wants a health check across all concierge routers before pipeline leaks surface.
- Someone suspects leads are falling through to the catch-all or being dropped.
- Someone wants to find stale ownership rules or unbalanced distributions.
Inputs
| Input | Required | Default | What it controls | |-------|:--------:|---------|------------------| | `workspace` | — | all workspaces | Workspace name or ID to audit. Omit for an org-wide audit. | | `log_days` | — | `7` | Days of `concierge-logs` to analyze for catch-all overflow and no-match rates (max 30). |
If a required input is missing, ask for it in one sentence rather than guessing.
Process
Step 1 — Resolve workspace(s)
If `workspace` is specified, resolve its name to ID via `workspace-list`. If not, fetch all workspaces and audit each.
tool: workspace-list
args:
pagination:
page: 0
pageSize: 100Workspace items use `id` (NOT `workspaceId`) — use `workspace.id` when passing workspace IDs to subsequent calls. Field-name gotchas → `references/api-reference.md` § Critical field name differences.
Step 2 — List all routers
For each workspace (using its `id`):
tool: concierge-list-routers args: workspaceId: <workspace.id>
For each router store `routers[N].router.id` (routerId), `.name`, `.slug`, `routers[N].workspaceId`,
Official, first-party Skills and ChatGPT GPTs for the Chili Piper MCP server. Maintained by Chili Piper.
Other skills on chili-piper-skills.
chat-conversation-insp…
Patterns behind Abandoned conversations — who spoke last, drop-off depth, time-of-day clusters — with a recommendation
concierge-router-build…
UI-only actions the API can't do (data fields, Chili-managed form mapping, most CRM actions) and the go-live checklist
concierge-router-confi…
Which tool calls were made, on which IDs, with before/after values

