report-pack
依排程交付自訂報表包,附上 business-pulse 脈絡快照
中文翻譯
--- name: report-pack description: 依固定頻率交付老闆自訂的週期性報表包:執行 report-builder 裡已儲存的報表定義,再包上一份 business-pulse 快照讓數字有脈絡,最後交付一份聊天摘要加活頁簿。定義一次,之後就按排程交付,不用再被要求。只要有一個已連接的資料來源就能跑,也可以完全靠上傳的 CSV 或 XLSX。當老闆要他的報表包、每週或每月的數字、「send me the usual report」、「run my report pack」、「set this up to come every Monday」或「I want these numbers on a schedule」時使用。 allowed-tools: Read, WebFetch --- # Report Pack 把兩個 skill 串起來,讓老闆的週期性數字自己送到,而且附上足夠的脈絡可以據以行動:`report-builder` 負責報表包本身,`business-pulse` 負責周圍的全貌。 老闆腦中早就有想要的報表。他們沒有的,是週一不用自己追就會出現的報表。這裡的任務就是這個。 ## Step 1 — 報表包(report-builder) 呼叫 `report-builder`。它負責 spec、資料拉取、計算和活頁簿,這裡不要重做任何一項。 - **輸入:** 老闆對報表包的描述,或是已儲存報表包的名稱。 - **輸出:** 一份聊天摘要、一份 XLSX 活頁簿,以及一份已儲存的定義。 `report-builder` 會先檢查已儲存的定義。如果報表包已經存在,就直接重跑,不用再訪談老闆。如果不存在,它會建立 spec 並確認一次。 **關卡:spec 確認。** 全新的報表包在執行前要讓老闆確認一次。已經有儲存定義的報表包不用。要人重新描述上個月就定義過的報表,是讓這個指令顯得壞掉最快的方法。 ## Step 2 — 脈絡快照(business-pulse) 報表包跑完後,針對同一個期間呼叫 `business-pulse`。 - **輸入:** 報表包涵蓋的期間。 - **輸出:** 現金、銷售趨勢、pipeline、觀察清單,以及一件需要注意的事。 pulse 是脈絡,不是第二份報表。它回答報表包每次都會引出的問題:數字動了,但生意還好嗎? **這裡沒有關卡。** 兩個步驟都是唯讀。沒有東西被寄出、發布或寫進帳本,所以兩步之間沒有東西需要老闆核准。 ## Step 3 — 合成一份交付 一則訊息,照這個順序:報表包摘要,接著用兩三行寫 pulse,最後是活頁簿。 Okonkwo Mechanical 的 Ray Okonkwo 收到他的週一報表包:依施工班組的營收對比去年、應收帳款帳齡、人事成本佔營收百分比。下面接著:現金 USD 61,400、兩張發票逾期超過 60 天、一台廂型車還在維修。他花九十秒讀完兩部分,就知道週一要做什麼。 絕對不要送出兩份分開的成品。報表包和 pulse 分開到達,就是要讀兩樣東西;合在一起才是一份簡報。 把這份簡報渲染成一個 HTML artifact,使用 house artifact 風格(`../../shared/artifact-style.md`)。這是加在聊天摘要和活頁簿之外的,絕對不能取代它們。報表包的主要指標是 stat tile,比較基準放在說明行;分組的報表列是用等寬數字的表格;pulse 脈絡放在下方自己的 panel,觀察清單項目帶狀態 pill(warn 或 critical);掛掉的來源集中放在一行低調的頁尾。 ## Step 4 — 設定頻率,只設一次 **只在老闆覺得有用的那次執行之後,提議一次排程。** 不要提早,對一份還沒人看過的報表包提議頻率,只是在推銷訂閱。 直接問:「Want this every Monday morning?」對方說好,就把頻率連同報表定義存進 `report-builder`,用一行確認:「Saved. This runs every Monday morning.」 之後就照做。每次排程執行都重複 Step 1 到 3,不問問題、不重新確認、也不再提議頻率。一份會問老闆任何事的排程報表,就已經不算排程了。 對方說不要,或沒回應,就放掉,之後絕對不要再問。 只有互動式執行才做(排程執行絕對不做):用一行收尾,說明交付了什麼,然後給一個最相關的下一步,附近最多再加兩個: - 如果報表包引出了現金問題:「cash forecast」執行 `cash-flow-snapshot`。 - 如果 pulse 標出逾期的應收帳款:「who owes me money」執行 `invoice-chase`。 - 想改報表包追蹤的內容:「build me a report」執行 `report-builder`。 最多三個建議。這個 session 裡老闆拒絕過的建議不要再提。 ## Step 5 — 資料不完整時也不要停 排程執行不管每個 connector 健不健康都會發生。如果某個來源掛了,`report-builder` 會把那個指標標為「n/a」並點名來源;報表包照樣送出。 **絕對不要因為資料不完整就跳過排程交付。** 有一個缺口並附上說明的報表包是有用的。週一沒聲音,會被讀成 plugin 壞掉了,然後老闆就不再期待它。 如果老闆完全沒有 connector,CSV 路徑就是報表包。問一次要匯出檔,用檔案跑同一份報表,並維持頻率。 ## 不要做的事 - **不要重新訪談老闆一份已儲存的報表包。** 每次執行都先檢查已儲存的定義。 - **不要在這裡重做報表邏輯。** `report-builder` 負責 spec、計算和活頁簿。 - **不要重算 pulse 的數字。** `business-pulse` 負責那些數字,這樣才只有一套數字。 - **不要提議兩次頻率。** 有用的那次執行後提一次,之後再也不提。 - **不要在排程執行時問任何事。** 排程的意思就是不用老闆參與、它自己會送到。 - **不要因為 connector 失敗就跳過一次執行。** 照樣送出,並點出缺口。 - **不要把報表包和 pulse 分成兩則訊息交付。** 一份簡報,一次讀完。 ## 使用沒列在清單上的工具 這個 skill 裡提到的 connector 是測試過的路徑,不是一道牆。如果老闆想讓這個流程用一個沒連接或沒列出的工具,就提供 `build-connector`:它會先查 connector 目錄,找不到再透過 Zapier 連接,絕對不會對著原始 API 手刻。連線建立之後,這個工具就像其他可選的 connector 一樣加入這個 skill,並受相同的核准關卡約束。
英文原文
--- name: report-pack description: Delivers the owner's custom recurring report pack on a set cadence — runs the saved report definition from report-builder, wraps it in a business-pulse snapshot so the numbers have context, and hands over one chat summary plus the workbook. Defined once, then delivered on schedule without being asked again. Runs on any single connected data source, or entirely from an uploaded CSV or XLSX. Use it when the owner asks for their report pack, their weekly or monthly numbers, "send me the usual report," "run my report pack," "set this up to come every Monday," or "I want these numbers on a schedule." allowed-tools: Read, WebFetch --- # Report Pack Chain two skills so the owner's recurring numbers arrive on their own, with enough context to act on: `report-builder` for the pack itself, `business-pulse` for the surrounding picture. Owners already have the report they want in their head. What they do not have is it showing up on Monday without them chasing it. That is the whole job here. ## Step 1 — The report pack (report-builder) Invoke `report-builder`. It owns the spec, the data pull, the math, and the workbook — do not rebuild any of that here. - **Goes in:** the owner's description of the pack, or the name of a saved one. - **Comes out:** a chat summary, an XLSX workbook, and a saved definition. `report-builder` checks its saved definitions first. If the pack already exists, it reruns without re-interviewing the owner. If it does not, it builds the spec and confirms it once. **Gate — spec confirmation.** A brand-new pack gets one confirmation from the owner before it runs. A pack that already has a saved definition does not. Re-asking someone to describe a report they defined last month is the fastest way to make this command feel broken. ## Step 2 — The context snapshot (business-pulse) After the pack runs, invoke `business-pulse` for the same period. - **Goes in:** the period the pack covered. - **Comes out:** cash, sales trend, pipeline, watch list, and the one thing needing attention. The pulse is context, not a second report. It answers the question the pack always raises: the numbers moved, but is the business fine? **No gate here.** Both steps are read-only. Nothing is sent, posted, or written to a ledger, so there is nothing for the owner to approve between them. ## Step 3 — Deliver as one thing One message, in this order: the pack summary, then the pulse in two or three lines, then the workbook. Ray Okonkwo at Okonkwo Mechanical gets his Monday pack — revenue by crew versus last year, AR aging, labor as a percent of revenue — and under it: cash at USD 61,400, two invoices past 60 days, one van still down. He reads both in ninety seconds and knows what Monday is. Never send two separate deliverables. A pack and a pulse arriving apart is two things to read; together it is one briefing. Render that briefing as one HTML artifact using the house artifact style (`../../shared/artifact-style.md`) — additive to the chat summary and workbook, never a replacement. The pack's headline metrics are stat tiles with their comparisons as context lines; the grouped report rows are a table with tabular-nums; the pulse context sits in its own panel below, its watch-list items carrying status pills (warn or critical); down sources named in one quiet footer line. ## Step 4 — Set the cadence, once **Offer the schedule one time, after a run the owner found useful.** Not before — a cadence offered on a pack nobody has seen yet is a subscription pitch. Ask it plainly: "Want this every Monday morning?" On a yes, save the cadence with the report definition in `report-builder` and confirm in one line: "Saved. This runs every Monday morning." Then honor it. Every scheduled run repeats Steps 1 through 3 with no questions, no re-confirmation, and no cadence offer. A scheduled report that asks the owner anything has stopped being scheduled. On a no, or on silence, drop it and never ask again. On an interactive run only — never a scheduled one — close with one line on what was delivered, then the single most relevant next step and at most two others nearby: - If the pack raised a cash question: "cash forecast" runs `cash-flow-snapshot`. - If the pulse flagged overdue AR: "who owes me money" runs `invoice-chase`. - To change what the pack tracks: "build me a report" runs `report-builder`. Max three offers. Never repeat an offer the owner declined this session. ## Step 5 — Handle a thin run without stopping it A scheduled run happens whether or not every connector is healthy. If a source is down, `report-builder` marks that metric "n/a" and names the source; the pack still ships. **Never skip a scheduled delivery because data was incomplete.** A pack with one gap and a note is useful. A silent Monday reads as the plugin being broken, and the owner stops expecting it. If the owner has no connectors at all, the CSV path is the pack. Ask once for the export, run the identical report from the file, and keep the cadence. ## What not to do - **Do not re-interview the owner about a saved pack.** Check the saved definition first, every run. - **Do not rebuild the report logic here.** `report-builder` owns the spec, the math, and the workbook. - **Do not recompute the pulse numbers.** `business-pulse` owns them, so there is one set of figures. - **Do not offer the cadence twice.** Once, after a useful run, then never again. - **Do not ask anything on a scheduled run.** Scheduled means it arrives without the owner in the loop. - **Do not skip a run because a connector failed.** Ship it with the gap named. - **Do not deliver the pack and the pulse as two messages.** One briefing, one read. ## 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.