Skill Tracer
Skills › Knowledge Work Plugins › business-pulse

business-pulse

skill · 181 lines · Apache-2.0 · small-business/skills/business-pulse/SKILL.md

The facts

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

The description the agent reads to decide when to use it.

From its settingsline 3

When it starts

The agent picks this skill when someone asks how the business is doing in general terms — a snapshot, a daily brief, a Friday recap, or anything like "what am I missing" or "catch me up on the business." It can also be entered as the first link of a start-of-week /monday-brief run rather than by something the person says.

Things a person might say (the model's guesses)

  • “How's the business doing this week?”
  • “Catch me up on the business.”
  • “Quick snapshot before my 10am call.”

A model's summary of when it is used.

A model's reading

Tools it may use, or may not

allowed-tools: Read, WebFetch

Tools it may use while it runs without asking you first.

From its settingsline 15

Starts other agents

1 line mentions starting other agents

Lines in the file that mention starting another agent. Found by matching words, so treat them as pointers.

Found by matching wordsline 24

Files it mentions

reference/data_sources.md, reference/thresholds.md, reference/output_template.md, reference/v2_sources.md (first 5 of 9 lines)

Files the text names, such as ones to read or write. Found by matching words, so treat them as pointers.

Found by matching wordsline 24 line 64 line 79 line 83 line 152

Stops for a person

2 lines stop to ask a person

Lines that stop and wait for a person before going on. Found by matching words, so treat them as pointers.

Found by matching wordsline 20 line 49

What it leads to

Other skills this one hands off to, calls, requires or offers instead, as a model read them.

A model's reading

What leads to it

Other skills that hand off to this one, call it, require it or offer it instead, as a model read them.

A model's reading

Licence

Apache-2.0, from LICENSE

The terms its author shares it under, which let it be shown here.

From the repositorylicence text
Other files in this skill (5) Close

The text

Open on GitHub

Most marks come from matching words in the file, so treat them as pointers.

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

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.

Raw lines 1 to 21
Involves a person ask the user :20
22## Step 1 — Pull data in parallel
24**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.
26Connectors to attempt simultaneously:
28- **QuickBooks** — cash balance, MTD revenue, outstanding receivables, overdue invoices
29- **Xero** — same ledger read for Xero shops: cash position, receivables, P&L trend
30- **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)
31- **PayPal / Square** — 7-day settlements, sales trend, failed/pending transactions
32- **Stripe** — settlements and sales trend, failed payments, and any new disputes — a fresh dispute goes straight to the watch list (if connected)
33- **Ramp** — company card spend for the week and the account balance, read-only (if connected)
34- **Gusto** — next payroll run date and amount, the week's biggest cash commitment (if connected)
35- **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)
36- **Expensify** — last week's card spend and any expenses missing receipts, read-only, so spending surprises surface before the month-end scramble (if connected)
37- **HubSpot** — pipeline by stage, deals moved/closed, deals gone cold, new leads
38- **Google Calendar** — key meetings, deadlines, events this week and next 7 days
39- **Gmail or Microsoft 365** — threads flagged urgent, customer complaints, time-sensitive requests
40- **Slack / Teams** — urgent internal signals, threads needing owner attention
41- **RingEx Chat** — the same internal-signal read for RingEx shops: urgent team-chat posts needing the owner (if connected)
42- **DocuSign** — envelopes sitting unsigned, flagged once they are more than a few days old — money waiting on a signature (if connected)
43- **Zoho Desk** — open tickets, escalations (if connected)
44- **Shopify** — orders, revenue, sales trend, and fulfillment issues, so a commerce business sees its actual day (if connected)
45- **Square** — fulfillment issues (if connected)
47If a connector errors or returns no data, record it internally and move on. Never block the pulse on a single bad integration.
49**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.
51**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.
53**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:
55- Cash in the bank right now, and roughly what it was a week ago
56- Anything overdue — invoices owed to them, bills they owe
57- Sales this week versus a normal week, even roughly
58- Anything already worrying them this week
60Build 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 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.

Raw lines 22 to 61
Starts an agent Dispatch :24
Reads a file reference/data_sources.md :24
Involves a person ask the user :49
Names a skill cash-flow-snapshot :60
Names a skill report-builder :60
62## Step 2 — Compute metrics
64Read `reference/thresholds.md` for red/yellow/green cutoffs. Compute:
66- **AR aging** — open QuickBooks invoices grouped by days since due date (0–30, 31–60, 61+)
67- **Pipeline coverage** — HubSpot weighted pipeline ÷ monthly revenue target
68- **Revenue trend** — this month's QBO revenue vs. prior month (or 7-day PayPal/Square vs. prior 7 days)
70Assign a 🟢/🟡/🔴 status to each section. If a source returned nothing, mark the metric "n/a" and note it in the appendix.

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.

Raw lines 62 to 71
Reads a file reference/thresholds.md :64
72## Step 3 — Flag risks proactively
74Scan 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.
76- Ledger invoices past due > 30 days — name customer, amount, days overdue
77- HubSpot deals with no activity in 7+ days, or close date in past but still open
78- Mail threads marked urgent or containing "escalation," "complaint," "cancel," "refund"
79- Failed or pending PayPal/Square/Stripe transactions above the threshold in `reference/thresholds.md` (200 in the business's currency)

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)
Raw lines 72 to 80
Reads a file reference/thresholds.md :79
81## Step 4 — Compose the output
83Use 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.
85Cross-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.
87Writing rules:
88- Numbers lead, words follow. Never write "revenue is healthy" — write "USD 43k this month, ▲ 8% MoM" and let the owner judge.
89- Every number carries a delta vs. the prior period where available. Absolute snapshots (cash balance) still show WoW delta.
90- Names and dollars, not adjectives. "USD 4,200 from Acme, 23 days overdue" beats "some concerning receivables."
91- No filler. If a section has nothing worth reporting, write "No material changes" and move on.

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.
Raw lines 81 to 92
93## Step 5 — Deliver the pulse page
95Alongside the chat pulse — never instead of it — deliver the full pulse per
96the owner's stored output preference — never default to a markdown file.
97Check the `## Business context` block's `Output preference` (shared style
98guide rule, `../../shared/artifact-style.md`):
100- **Visual artifact (the default):** render the pulse as an HTML page in the
101 house style. Cash balance, MTD revenue, and weighted pipeline are stat tiles
102 with their deltas as context lines; each section's 🟢/🟡/🔴 becomes a status
103 pill (good, warn, critical); the watch-list risks are a table with
104 tabular-nums amount columns; the #1 Priority gets its own panel at the top;
105 unavailable connectors go in one quiet appendix line.
106- **docx / md / notion / canva preference:** deliver the same content in that
107 form — a DOCX or markdown file, a Notion page created via the connector
108 (named destination, never overwriting), or a Canva Doc created via the Canva
109 connector (a new design each run, named with the date; tables become
110 lists); fall back to the visual artifact if Notion or Canva is not
111 connected — and say that is why.
112- **Best for skill:** use the visual artifact — a pulse is scanned, not filed.

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.
Raw lines 93 to 113
114## Step 6 — Export and share (once)
116After presenting the pulse, offer once:
117- "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)
118- "Should I post this to your Slack?" (only if Slack is connected and the user confirms — Slack write requires explicit approval)
120If they say yes, do it. If they say no or don't respond, move on — don't ask again.

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.

Raw lines 114 to 121
122## After the run
124Close with one line on what the pulse covered, then the single most relevant
125next step and at most two others nearby:
127- If cash or AR flagged red: "who owes me money" runs `invoice-chase`.
128- If growth questions dominate: "is my marketing working" runs `growth-pulse`.
129- To make this recurring: "Monday brief" runs `/monday-brief` every week.
131Max three offers. Never repeat an offer the owner declined this session.

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.

Raw lines 122 to 132
Names a skill invoice-chase :127
Names a skill growth-pulse :128
Names a skill monday-brief :129
133## Scope variants
135The owner may ask for a narrower cut:
137- **"Just cash" / "financial check"** → only Cash & Finance + AR-related risks
138- **"Pipeline only" / "deals check"** → only Pipeline section + stalled-deal risks
139- **"Watch list" / "anything urgent"** → only Watch List + all risks, no metric sections
140- **"Quick snapshot before a call"** → TL;DR + #1 Priority only, no full sections

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
Raw lines 133 to 141
142## What not to do
144- **Do not ask permission before pulling data.** If the skill was invoked, run it. Asking "should I check QuickBooks?" defeats the whole point.
145- **Do not invent or estimate numbers.** If a source returned nothing, say "n/a" explicitly. Never fill a gap with guesswork.
146- **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.
147- **Do not surface connector errors mid-pulse.** Log them to the appendix. The pulse leads with what was delivered.
148- **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`).

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).
Raw lines 142 to 149
150## More sources, and scheduled presets
152Read `reference/v2_sources.md` for the mapping:
154- **Shopify** — orders, revenue, and fulfillment status, so a commerce business sees its actual day in the pulse
155- **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
157The pulse still builds from whatever is connected and degrades gracefully — one connector gives a partial pulse, the full stack gives the full picture.

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.

Raw lines 150 to 158
Reads a file reference/v2_sources.md :152
159### Scheduled presets
161This skill is schedulable, and the preset decides the shape:
163| Preset | When | Shape |
164|---|---|---|
165| Monday | Start of week | Full pulse, forward-looking. What's coming and what needs attention |
166| Friday | End of week | Recap. What moved, what closed, what slipped |
168Scheduling is a property of this skill, not a reason for a separate command.
170Offer a cadence once, after a pulse the owner found useful. Don't ask twice.

Scheduled presets

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

PresetWhenShape
MondayStart of weekFull pulse, forward-looking. What's coming and what needs attention
FridayEnd of weekRecap. 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.

Raw lines 159 to 171
172## Reference files
174- `reference/data_sources.md` — exact connector tool → metric mapping with fallbacks
175- `reference/thresholds.md` — 🟢/🟡/🔴 cutoffs, tunable per owner
176- `reference/output_template.md` — exact markdown structure; do not deviate
177- `reference/gotchas.md` — known failure modes (QB states, Gmail auth, Slack write)

Reference files

Raw lines 172 to 178
Reads a file reference/data_sources.md :174
Reads a file reference/thresholds.md :175
Reads a file reference/gotchas.md :177
Boilerplate, lines 179 to 181. The same text appears in 38 other files here. Close
179## Using a tool that isn't listed
181The 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.

From anthropics/knowledge-work-plugins at 2574e29, 2026-10-27. Skills read by DeepSeek V4.1 Flash on 2026-11-04. Summary and techniques by Claude Opus 5.5 on 2026-11-06.