Skill 寫法圖鑑

business-pulse

Anthropic | 商業與營運 | 原文 | Apache-2.0

串接帳務、銷售、CRM 和信箱,產出老闆一頁式經營快照

中文翻譯

---
name: business-pulse
description: >
  為中小企業老闆產出一頁式的跨部門經營快照:現金狀況(帳務系統:MYOB、NetSuite、QuickBooks、Xero 或 Zoho Books)、
  銷售趨勢(PayPal/Square/Stripe)、pipeline 變動(HubSpot)、本週的承諾事項(Calendar)、
  緊急觀察清單(Gmail 或 M365、Slack),以及今天最需要關注的那一件事。
  主動嘗試所有可用的 connector,並依照實際連上的範圍優雅地縮減:只連一個 connector 就給部分的 pulse,
  整套都連就給完整全貌。當使用者問生意做得怎麼樣、想要快照、每日簡報、週五回顧,
  或說「我是不是漏掉什麼」「幫我跟上生意的狀況」之類的話時觸發。
  一週開始的簡報會導向 /monday-brief,它把這個 skill 當作第一個環節來執行。
allowed-tools: Read, WebFetch
---

# Business Pulse

一個 prompt,一頁。從每個已連線的工具拉即時資料,綜合成一份一眼就能掃完的簡報,並點出今天最重要、該動手的那一件事。直接做事,不要請使用者幫忙找資料。

## Step 1 — 平行拉資料

**所有 connector 呼叫在同一批平行送出**,確切的工具對指標對照請看 `reference/data_sources.md`。不要一個一個依序拉,延遲會讓一個 30 秒的 skill 變成痛苦的等待。

要同時嘗試的 connector:

- **QuickBooks** — 現金餘額、本月至今營收、未收應收帳款、逾期發票
- **Xero** — 用 Xero 的店家讀同樣的帳務:現金狀況、應收帳款、損益趨勢
- **Zoho Books** — 用 Zoho 的店家讀同樣的帳務:銀行餘額、已開票營收、逾期發票(沒有損益 endpoint,所以營收那一行是已開票營收,並且要這樣註明)
- **PayPal / Square** — 7 天的撥款、銷售趨勢、失敗或待處理的交易
- **Stripe** — 撥款與銷售趨勢、失敗的付款,以及任何新的爭議款,新的爭議直接進觀察清單(如果有連線)
- **Ramp** — 本週公司卡消費與帳戶餘額,唯讀(如果有連線)
- **Gusto** — 下次發薪日與金額,本週最大的現金承諾(如果有連線)
- **TikTok Ads** — 上週廣告花費、成效與每次成效成本,讓付費支出能和它宣稱帶動的銷售並排顯示(如果有連線)
- **Expensify** — 上週的刷卡消費與任何缺收據的費用,唯讀,讓花費上的意外在月底大亂之前浮現(如果有連線)
- **HubSpot** — 各階段的 pipeline、移動或成交的 deal、變冷的 deal、新 lead
- **Google Calendar** — 本週與未來 7 天的重要會議、期限、活動
- **Gmail 或 Microsoft 365** — 標為緊急的對話串、客訴、有時效的請求
- **Slack / Teams** — 緊急的內部訊號、需要老闆關注的對話串
- **RingEx Chat** — 用 RingEx 的店家讀同樣的內部訊號:需要老闆處理的緊急團隊聊天貼文(如果有連線)
- **DocuSign** — 擱著沒簽的 envelope,超過幾天就標出來,因為那是在等簽名的錢(如果有連線)
- **Zoho Desk** — 未結案的工單、升級案件(如果有連線)
- **Shopify** — 訂單、營收、銷售趨勢和出貨問題,讓電商業者看到自己真正的一天(如果有連線)
- **Square** — 出貨問題(如果有連線)

如果某個 connector 出錯或沒回傳資料,內部記錄一下就往下走。絕對不要因為單一整合壞掉就卡住 pulse。

**QuickBooks 備案**:如果 QBO 回傳非預期的狀態(帳號沒連上、同步待處理、空回應),把 Cash 區塊標成「n/a — QuickBooks unavailable」然後繼續。不要重試,也不要請使用者重新連線。

**Gmail 備案**:Gmail 的驗證時好時壞。如果呼叫出錯,默默跳過 Watch List 區塊,並在附錄註明「Gmail unavailable」,不要在 pulse 中途把錯誤秀出來。

**完全沒有任何東西連線,是支援的路徑,不是失敗。** 如果所有 connector 都不能用,不要停下來,也不要叫老闆去連。只問一次,用一則簡短的訊息,要幾個撐起 pulse 的數字:

- 銀行現在有多少現金,以及大約一週前是多少
- 任何逾期的東西:別人欠他們的發票、他們欠別人的帳單
- 這週的銷售對比一般的一週,粗估也行
- 這週有沒有任何已經讓他們擔心的事

用這些答案建出同樣的一頁式 pulse,把來源那行標成「owner-supplied, not pulled」,沒有數字的區塊就跳過。如果他們不想打數字,就指向靠檔案匯出運作的同類 skill:`cash-flow-snapshot` 和 `report-builder` 都吃 CSV,並明說這樣只能給部分的圖像,不是完整的。

## Step 2 — 計算指標

讀 `reference/thresholds.md` 取得紅黃綠的切分點。計算:

- **AR aging** — 未結清的 QuickBooks 發票,依距到期日的天數分組(0–30、31–60、61+)
- **Pipeline coverage** — HubSpot 加權 pipeline ÷ 月營收目標
- **營收趨勢** — 本月 QBO 營收對上個月(或最近 7 天的 PayPal/Square 對前 7 天)

為每個區塊指定 🟢/🟡/🔴 狀態。如果某個來源沒回傳東西,把該指標標成「n/a」並在附錄註明。

## Step 3 — 主動標出風險

掃描可行動的項目。每一筆風險都必須指名一筆具體的記錄和下一步,「有些逾期發票」沒用;「Acme Corp 的 USD 3,400,逾期 47 天,自 3 月 12 日起沒有回應」才能行動。

- 帳務系統裡逾期超過 30 天的發票,要指名客戶、金額、逾期天數
- HubSpot 裡 7 天以上沒有活動,或預計成交日已過但仍是開啟狀態的 deal
- 標為緊急,或含有「escalation」「complaint」「cancel」「refund」的郵件對話串
- 失敗或待處理、且超過 `reference/thresholds.md` 門檻(以該公司的幣別計為 200)的 PayPal/Square/Stripe 交易

## Step 4 — 組合輸出

使用 `reference/output_template.md` 裡的確切模板。只放有真實資料的區塊,沒連上的 connector 就省略對應標題。深度依情境調整:隨口一句「我們現在怎麼樣」就給比較完整的報告;「通話前快速看一下」就給精簡的。

跨 connector 的綜合,是這個 skill 真正值錢的地方。如果某則 Slack 訊息跟卡住的 HubSpot deal 有關,就在 #1 Priority 區塊把這個關聯點出來。有綜合,pulse 才會比一個一個工具去看更有用。

寫作規則:
- 數字在前,文字在後。絕對不要寫「營收健康」,要寫「這個月 USD 43k,▲ 8% MoM」,讓老闆自己判斷。
- 每個數字都要附上跟上一期的差異(有的話)。像現金餘額這種絕對值快照,也要顯示 WoW 差異。
- 用名字和金額,不要用形容詞。「Acme 的 USD 4,200,逾期 23 天」勝過「一些令人擔心的應收帳款」。
- 不要灌水。如果某個區塊沒有值得報告的,就寫「No material changes」然後往下走。

## Step 5 — 交付 pulse 頁面

在聊天裡的 pulse 之外(絕對不是取代它),依老闆存下來的輸出偏好交付完整的 pulse,
絕對不要預設用 markdown 檔。
檢查 `## Business context` 區塊的 `Output preference`(共用的風格指南規則,
`../../shared/artifact-style.md`):

- **視覺化 artifact(預設):** 用 house style 把 pulse 渲染成 HTML 頁面。
  現金餘額、本月至今營收和加權 pipeline 做成數字卡,差異放在輔助說明行;
  每個區塊的 🟢/🟡/🔴 變成狀態標籤(good、warn、critical);
  觀察清單的風險做成表格,金額欄用 tabular-nums;
  #1 Priority 在最上面獨佔一個面板;
  不能用的 connector 放進附錄裡低調的一行。
- **docx / md / notion / canva 偏好:** 用該形式交付同樣的內容,
  可以是 DOCX 或 markdown 檔、透過 connector 建立的 Notion 頁面(要有指名的位置,絕對不覆蓋)、
  或透過 Canva connector 建立的 Canva Doc(每次執行都建新的設計,以日期命名;表格改成清單);
  如果 Notion 或 Canva 沒連線,就退回視覺化 artifact,並說明是因為這個原因。
- **Best for skill:** 用視覺化 artifact,因為 pulse 是用來掃的,不是用來歸檔的。

## Step 6 — 匯出與分享(只問一次)

呈現 pulse 之後,提議一次:
- 「要我把這個存成檔案嗎?」(有 Files connector 就用,意思是在他們的雲端硬碟存一份,不是在 artifact 旁邊再多一個 HTML 下載)
- 「要我貼到你的 Slack 嗎?」(只有 Slack 已連線且使用者確認時才做,Slack 寫入需要明確核准)

如果他們說好,就做。如果他們說不要或沒回應,就繼續往下,不要再問。

## 執行之後

收尾用一行說明這次 pulse 涵蓋了什麼,然後給一個最相關的下一步,以及最多兩個相近的:

- 如果現金或 AR 標紅:「誰欠我錢」會執行 `invoice-chase`。
- 如果成長問題居多:「我的行銷有用嗎」會執行 `growth-pulse`。
- 要做成定期的:「Monday brief」會每週執行 `/monday-brief`。

最多三個提議。這個 session 裡老闆拒絕過的提議絕對不要重複。

## 範圍變體

老闆可能要求比較窄的切法:

- **「Just cash」/「financial check」** → 只要 Cash & Finance 加上跟 AR 相關的風險
- **「Pipeline only」/「deals check」** → 只要 Pipeline 區塊加上卡住的 deal 風險
- **「Watch list」/「anything urgent」** → 只要 Watch List 加上所有風險,不放指標區塊
- **「Quick snapshot before a call」** → 只要 TL;DR 加 #1 Priority,不放完整區塊

## 不要做的事

- **拉資料之前不要問許可。** skill 既然被叫了,就直接跑。問「要不要我查 QuickBooks?」整個重點就沒了。
- **不要捏造或估算數字。** 如果某個來源沒回傳東西,就明確說「n/a」。絕對不要用猜的補上缺口。
- **不要省略差異。** 沒有比較的數字是錯失的洞察。如果沒有上一期的基準,就寫「(no prior baseline)」,不要把那個欄位省掉。
- **不要在 pulse 中途秀 connector 的錯誤。** 記到附錄。pulse 要以實際交付的內容為主。
- **不要相信 QuickBooks 的 summary 物件。** 費用、毛利和 AP aging 的分段,要從資料列或明細呼叫取得(`../../shared/quickbooks-report-traps.md`)。

## 更多來源與排程預設

對照關係請讀 `reference/v2_sources.md`:

- **Shopify** — 訂單、營收和出貨狀態,讓電商業者在 pulse 裡看到自己真正的一天
- **任何帳務系統** — MYOB、NetSuite、QuickBooks、Xero 或 Zoho Books 都能餵 Cash & Finance 區塊;它們是平等的(`../../shared/connector-neutrality.md`)。連了兩個時,由老闆指定哪一個是總額的記錄來源

pulse 仍然用有連上的東西來建,並優雅地降級:只有一個 connector 就給部分的 pulse,整套都連就給完整全貌。

### 排程預設

這個 skill 可以排程,由預設決定形式:

| 預設 | 時機 | 形式 |
|---|---|---|
| Monday | 一週開始 | 完整 pulse,向前看。接下來有什麼、什麼需要關注 |
| Friday | 一週結束 | 回顧。什麼有進展、什麼成交、什麼延誤 |

排程是這個 skill 的屬性,不需要另外開一個指令。

在老闆覺得有用的 pulse 之後,提議一次頻率。不要問兩次。

## 參考檔案

- `reference/data_sources.md` — connector 工具對指標的確切對照,附備案
- `reference/thresholds.md` — 🟢/🟡/🔴 的切分點,可依老闆調整
- `reference/output_template.md` — 確切的 markdown 結構,不要偏離
- `reference/gotchas.md` — 已知的失敗模式(QB 狀態、Gmail 驗證、Slack 寫入)

## 使用沒列出的工具

這個 skill 裡提到的 connector 是測試過的路徑,不是一道牆。如果老闆想讓這個流程用某個沒連線或沒列出的工具,就提議 `build-connector`,它會先查 connector 目錄,沒有的話再透過 Zapier 連接,絕對不手工對著原始 API 硬幹。連線建好之後,這個工具就像其他任何可選的 connector 一樣加入這個 skill,受同樣的核准關卡約束。

英文原文

---
name: business-pulse
description: >
  Produces a one-page cross-functional business snapshot for SMB owners —
  cash position (the ledger: MYOB, NetSuite, QuickBooks, Xero, or Zoho Books), sales trend
  (PayPal/Square/Stripe), pipeline movement (HubSpot), this week's commitments
  (Calendar), urgent watch-list items (Gmail or M365, Slack), and the single most
  important thing needing attention today.
  Proactively tries every available connector and gracefully scopes to
  whatever is connected — one connector gives a partial pulse; the full stack
  gives the full picture. Trigger when the user asks how the business is
  doing, wants a snapshot, a daily brief, a Friday recap, or says anything
  like "what am I missing" or "catch me up on the business." A start-of-week
  briefing routes to /monday-brief, which runs this skill as its first link.
allowed-tools: Read, WebFetch
---

# Business Pulse

One prompt, one page. Pull live data from every connected tool, synthesize it into a single scannable brief, and surface the single most important thing to act on today. Do the work — don't ask the user to help find the data.

## Step 1 — Pull data in parallel

**Dispatch all connector calls in a single parallel batch** — see `reference/data_sources.md` for the exact tool-to-metric mapping. Do not pull serially; latency turns a 30-second skill into a painful wait.

Connectors to attempt simultaneously:

- **QuickBooks** — cash balance, MTD revenue, outstanding receivables, overdue invoices
- **Xero** — same ledger read for Xero shops: cash position, receivables, P&L trend
- **Zoho Books** — same ledger read for Zoho shops: bank balances, invoiced revenue, overdue invoices (no P&L endpoint, so the revenue line is invoiced revenue and says so)
- **PayPal / Square** — 7-day settlements, sales trend, failed/pending transactions
- **Stripe** — settlements and sales trend, failed payments, and any new disputes — a fresh dispute goes straight to the watch list (if connected)
- **Ramp** — company card spend for the week and the account balance, read-only (if connected)
- **Gusto** — next payroll run date and amount, the week's biggest cash commitment (if connected)
- **TikTok Ads** — last week's ad spend, results, and cost per result, so paid spend shows up next to the sales it claims to drive (if connected)
- **Expensify** — last week's card spend and any expenses missing receipts, read-only, so spending surprises surface before the month-end scramble (if connected)
- **HubSpot** — pipeline by stage, deals moved/closed, deals gone cold, new leads
- **Google Calendar** — key meetings, deadlines, events this week and next 7 days
- **Gmail or Microsoft 365** — threads flagged urgent, customer complaints, time-sensitive requests
- **Slack / Teams** — urgent internal signals, threads needing owner attention
- **RingEx Chat** — the same internal-signal read for RingEx shops: urgent team-chat posts needing the owner (if connected)
- **DocuSign** — envelopes sitting unsigned, flagged once they are more than a few days old — money waiting on a signature (if connected)
- **Zoho Desk** — open tickets, escalations (if connected)
- **Shopify** — orders, revenue, sales trend, and fulfillment issues, so a commerce business sees its actual day (if connected)
- **Square** — fulfillment issues (if connected)

If a connector errors or returns no data, record it internally and move on. Never block the pulse on a single bad integration.

**QuickBooks fallback**: if QBO returns an unexpected state (account not connected, sync pending, empty response), mark the Cash section "n/a — QuickBooks unavailable" and proceed. Do not retry or ask the user to reconnect.

**Gmail fallback**: Gmail auth is intermittently flaky. If the call errors, skip the Watch List section silently and note "Gmail unavailable" in the appendix — do not surface an error mid-pulse.

**Nothing connected at all is a supported path, not a failure.** If every connector is unavailable, don't stop and don't tell the owner to go connect things. Ask once, in one short message, for the handful of numbers that carry the pulse:

- Cash in the bank right now, and roughly what it was a week ago
- Anything overdue — invoices owed to them, bills they owe
- Sales this week versus a normal week, even roughly
- Anything already worrying them this week

Build the same one-page pulse from those answers, label the source line "owner-supplied, not pulled," and skip any section they had no number for. If they'd rather not type numbers, point them at the siblings that run off a file export instead — `cash-flow-snapshot` and `report-builder` both take a CSV — and say plainly that gives a partial picture, not the full one.

## Step 2 — Compute metrics

Read `reference/thresholds.md` for red/yellow/green cutoffs. Compute:

- **AR aging** — open QuickBooks invoices grouped by days since due date (0–30, 31–60, 61+)
- **Pipeline coverage** — HubSpot weighted pipeline ÷ monthly revenue target
- **Revenue trend** — this month's QBO revenue vs. prior month (or 7-day PayPal/Square vs. prior 7 days)

Assign a 🟢/🟡/🔴 status to each section. If a source returned nothing, mark the metric "n/a" and note it in the appendix.

## Step 3 — Flag risks proactively

Scan for actionable items. Every risk entry must name a specific record and a next step — "some overdue invoices" is useless; "USD 3,400 from Acme Corp, 47 days overdue, no response since Mar 12" is actionable.

- Ledger invoices past due > 30 days — name customer, amount, days overdue
- HubSpot deals with no activity in 7+ days, or close date in past but still open
- Mail threads marked urgent or containing "escalation," "complaint," "cancel," "refund"
- Failed or pending PayPal/Square/Stripe transactions above the threshold in `reference/thresholds.md` (200 in the business's currency)

## Step 4 — Compose the output

Use the exact template in `reference/output_template.md`. Include only sections where real data exists — omit headers for connectors that weren't available. Adapt depth to context: a casual "how are we doing" gets a fuller report; "quick snapshot before a call" gets a tighter one.

Cross-connector synthesis is where this skill earns its keep. If a Slack message connects to a stalled HubSpot deal, surface that link in the #1 Priority section. Synthesis is what makes the pulse more useful than checking each tool separately.

Writing rules:
- Numbers lead, words follow. Never write "revenue is healthy" — write "USD 43k this month, ▲ 8% MoM" and let the owner judge.
- Every number carries a delta vs. the prior period where available. Absolute snapshots (cash balance) still show WoW delta.
- Names and dollars, not adjectives. "USD 4,200 from Acme, 23 days overdue" beats "some concerning receivables."
- No filler. If a section has nothing worth reporting, write "No material changes" and move on.

## Step 5 — Deliver the pulse page

Alongside the chat pulse — never instead of it — deliver the full pulse per
the owner's stored output preference — never default to a markdown file.
Check the `## Business context` block's `Output preference` (shared style
guide rule, `../../shared/artifact-style.md`):

- **Visual artifact (the default):** render the pulse as an HTML page in the
  house style. Cash balance, MTD revenue, and weighted pipeline are stat tiles
  with their deltas as context lines; each section's 🟢/🟡/🔴 becomes a status
  pill (good, warn, critical); the watch-list risks are a table with
  tabular-nums amount columns; the #1 Priority gets its own panel at the top;
  unavailable connectors go in one quiet appendix line.
- **docx / md / notion / canva preference:** deliver the same content in that
  form — a DOCX or markdown file, a Notion page created via the connector
  (named destination, never overwriting), or a Canva Doc created via the Canva
  connector (a new design each run, named with the date; tables become
  lists); fall back to the visual artifact if Notion or Canva is not
  connected — and say that is why.
- **Best for skill:** use the visual artifact — a pulse is scanned, not filed.

## Step 6 — Export and share (once)

After presenting the pulse, offer once:
- "Want me to save this as a file?" (use Files connector if available — this means a copy in their drive, not a second HTML download beside the artifact)
- "Should I post this to your Slack?" (only if Slack is connected and the user confirms — Slack write requires explicit approval)

If they say yes, do it. If they say no or don't respond, move on — don't ask again.

## After the run

Close with one line on what the pulse covered, then the single most relevant
next step and at most two others nearby:

- If cash or AR flagged red: "who owes me money" runs `invoice-chase`.
- If growth questions dominate: "is my marketing working" runs `growth-pulse`.
- To make this recurring: "Monday brief" runs `/monday-brief` every week.

Max three offers. Never repeat an offer the owner declined this session.

## Scope variants

The owner may ask for a narrower cut:

- **"Just cash" / "financial check"** → only Cash & Finance + AR-related risks
- **"Pipeline only" / "deals check"** → only Pipeline section + stalled-deal risks
- **"Watch list" / "anything urgent"** → only Watch List + all risks, no metric sections
- **"Quick snapshot before a call"** → TL;DR + #1 Priority only, no full sections

## What not to do

- **Do not ask permission before pulling data.** If the skill was invoked, run it. Asking "should I check QuickBooks?" defeats the whole point.
- **Do not invent or estimate numbers.** If a source returned nothing, say "n/a" explicitly. Never fill a gap with guesswork.
- **Do not skip the delta.** A number without a comparison is a missed insight. If there's no prior-period baseline, say "(no prior baseline)" rather than omitting the field.
- **Do not surface connector errors mid-pulse.** Log them to the appendix. The pulse leads with what was delivered.
- **Do not trust a QuickBooks summary object.** Expenses, margin, and AP aging buckets come from the rows or the detail call (`../../shared/quickbooks-report-traps.md`).

## More sources, and scheduled presets

Read `reference/v2_sources.md` for the mapping:

- **Shopify** — orders, revenue, and fulfillment status, so a commerce business sees its actual day in the pulse
- **Any ledger** — MYOB, NetSuite, QuickBooks, Xero, or Zoho Books feed the Cash & Finance section; they are peers (`../../shared/connector-neutrality.md`). With two connected, the owner names one as the source of record for totals

The pulse still builds from whatever is connected and degrades gracefully — one connector gives a partial pulse, the full stack gives the full picture.

### Scheduled presets

This skill is schedulable, and the preset decides the shape:

| Preset | When | Shape |
|---|---|---|
| Monday | Start of week | Full pulse, forward-looking. What's coming and what needs attention |
| Friday | End of week | Recap. What moved, what closed, what slipped |

Scheduling is a property of this skill, not a reason for a separate command.

Offer a cadence once, after a pulse the owner found useful. Don't ask twice.

## Reference files

- `reference/data_sources.md` — exact connector tool → metric mapping with fallbacks
- `reference/thresholds.md` — 🟢/🟡/🔴 cutoffs, tunable per owner
- `reference/output_template.md` — exact markdown structure; do not deviate
- `reference/gotchas.md` — known failure modes (QB states, Gmail auth, Slack write)

## Using a tool that isn't listed

The connectors named in this skill are the tested paths, not a wall. If the owner wants this flow to use a tool that isn't connected or listed, offer `build-connector` — it checks the connector directory first and connects through Zapier otherwise, never hand-building against a raw API. Once the connection exists, the tool joins this skill like any other optional connector, under the same approval gates.