Content
75%Weight 40%Scale 1-5Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.
A well-structured, domain-rich body that teaches Google Chat's genuinely non-standard API details with concrete, mostly executable examples and clear asset navigation. The main defects are the non-existent `sendCard` function referenced in two sections, minor redundancy in the widget examples, and the absence of an explicit validation step in the workflow.
Suggestions
Fix the broken function references: replace `sendCard(...)` in the Threading and Common Patterns sections with the actual `sendWebhook(webhookUrl, card, options)` export (or add a sendCard convenience wrapper to webhook-sender.ts), and drop the `const response =` capture since the sender returns void.
Tighten the widget reference: merge the redundant decoratedText variants ("With wrap text" duplicates wrapText already shown in "Clickable") and consider moving the 20-row Known Icons table to a references/ file so SKILL.md stays an overview.
Add an explicit validation checkpoint to the workflow, e.g., Step 3a: send a simple test text message to confirm the webhook URL works before composing cards, echoing the 400-error guidance in Error Prevention.
| Dimension | Reasoning | Score |
|---|---|---|
Conciseness | The body is dense with genuinely non-obvious domain knowledge (Google Chat's non-Markdown formatting `*bold*`/`<url|text>`, cardsV2 wrapper requirements, messageReplyOption threading) presented almost entirely as compact tables and code, with no padding about concepts Claude already knows. Not 5: some trim opportunities remain — the decoratedText section has six variants where "With wrap text" duplicates the wrapText usage already shown in "Clickable", and the 20-row icon table plus ~200-line widget reference make the file heavier than needed. | 4 / 5 |
Actionability | Mostly executable guidance: concrete sendText call, complete cardsV2 message object, widget object literals, and full Common Patterns using buildCard. Not 5: the Threading and Common Patterns sections call `sendCard(...)`, which does not exist — webhook-sender.ts exports only `sendWebhook` and `sendText`, and card-builder.ts exports only `buildCard`/`buildText` — so those examples fail as written; also `const response = await sendCard(...)` captures a value the void-returning sender never provides. Not 3: the gaps are isolated and the correct function is available in the referenced assets. | 4 / 5 |
Workflow Clarity | Clear three-step sequence (get webhook URL → choose message type via decision table → send using assets) with an Error Prevention table covering recovery ("Webhook returns 400 | Check JSON structure", "Thread replies not threading | Append &messageReplyOption=...") and a sender that surfaces error bodies. Not 5: the workflow itself lacks an explicit validation checkpoint (e.g., send a test message to verify the webhook URL before composing cards); not 3: error-cause→fix guidance is explicitly present even though it sits outside the step sequence. | 4 / 5 |
Progressive Disclosure | Scored against the actual bundle: all three assets (types.ts, card-builder.ts, webhook-sender.ts) exist, are referenced one level deep, and are clearly signaled both in Step 3 and in a dedicated Asset Files table. Not 5: the ~200-line inline widget reference and 20-row icon table are candidates for a separate references/ file, leaving SKILL.md as an overview; not 3: structure, section headers, and navigation are good and every referenced path resolves. | 4 / 5 |
Total | 16 / 20 Passed |