shop-status-digest
Once-a-day plain-text digest of the shop's open quotes, rush queue, stale RFQs to chase, shipments ready for CoC, and CoCs sent today. Reads the QuoteLog (rfq-triage's output) and ShipLog (coc-generator's input) Sheets, computes counts, lists action items, and sends a single digest to the owner via whatever channel they've configured (email / SMS / Slack / Discord / Telegram / Teams / LINE). Zero AI per run.
Use case
Owners of small shops don't sit at the office Sheet all day. They want a single morning snapshot of what their automation has accomplished and what needs their attention. This workflow is that snapshot.
Wakes up once a day, looks at what rfq-triage and coc-generator have done since yesterday, and surfaces the few things only a human can decide on — which stale quotes to chase, which rush workflows are still queued, what's ready to ship. The numbers are exact (deterministic counting, not AI estimation). The format is plain text — readable in SMS, in a Slack DM, on email, on a glance from a phone.
Setup
- Credentials (Credentials view):
-
google-workspace— same one the other workflows use - Runtime environment (Runtime Environments view):
-
bash— InTouch auto-creates this on Linux/macOS install from/bin/bash. Must includebash,python3, and thegogCLI on PATH. - Windows: InTouch auto-createspowershellandcommand promptinstead. To run this workflow on Windows: install Git Bash or WSL and add abashruntime env in InTouch pointing at it (e.g.C:\Program Files\Git\bin\bash.exe), OR changeruntimeEnvName: "bash"to"powershell"inworkflow.yamland rewrite thescriptblock in PowerShell. - Contact + User (Subscribers view):
- Create a contact for yourself on your preferred channel (email, SMS via Twilio/Telnyx/Plivo, Slack DM, Discord DM, Telegram, Teams, or LINE).
- Whichever user name that contact is linked to is what goes in
<<OWNER_PUBLISHER>>below. - Sheets — typically the same ones the other workflows maintain:
-
QuoteLogSheet (rfq-triage writes here): 11 cols A:K, status in K, urgency in J, received_at in B -ShipLogSheet (coc-generator reads/writes here): 14 cols A:N, status in M, ship_date in L - If you only run one of the two workflows, leave the other Sheet ID set anyway — the script tolerates missing/empty data and counts what it can. - Edit
workflow.yaml— replace the three placeholders: -<<QUOTE_LOG_SHEET_ID>>— QuoteLog spreadsheet ID -<<SHIP_LOG_SHEET_ID>>— ShipLog spreadsheet ID -<<OWNER_PUBLISHER>>— user name linked to your contact (e.g.owner,intouch, or whatever you've set up) - Schedule the workflow once daily —
7:00 AMis the convention.
Pipeline
- compose —
runtimeenv(bash + gog + python3). ReadsQuoteLog!A2:KandShipLog!A2:N, classifies each row by status / date / urgency, computes the 6 counts, and prints the formatted digest to stdout. - send —
message. Picks up{{compose.stdout}}as the body, sends to your owner user with subject"Shop status digest".
Sample output
SHOP STATUS — Tuesday, May 12, 2026
QUOTES
Open quotes: 12
New today: 3
Rush in queue: 2
Stale (>7 days): 4
SHIPMENTS
Ready for CoC: 1
CoCs sent today: 5
STALE QUOTES (chase these):
- RFQ-20260502-091014 Brooks Aerospace 10 days
- RFQ-20260503-141133 Cascade Hydraulics 9 days
- RFQ-20260504-073022 Forge Metalworks 8 days
- RFQ-20260505-101245 Sigma Precision 7 days
1 shipment(s) waiting on CoC — flip the ShipLog status to
'ready-for-coc' and the coc-generator workflow will deliver within 5 min.
Customization
- Stale threshold — change
week_ago = today - datetime.timedelta(days=7)incompose - Status vocabulary —
TERMINAL = {"won","lost","withdrawn","expired","cancelled"}defines which quote statuses count as "closed". Add your own. - Top-N stale display —
sorted(stale, ...)[:8]shows the 8 oldest; raise or lower for your preference - Additional counts — read more Sheets (raw-stock inventory, open POs, etc.) in
composeand add lines to the output. The pattern is the same:gog sheets get→ JSON → Python → append toL. - Multi-channel delivery — pass multiple user names (comma-separated) to
userNameson thesendtask. The owner gets a copy on each. - Subject line with date — replace
"Shop status digest"with something like"Shop status — {{compose.stdout}}"'s first line — but most users prefer a stable subject so email threads collapse cleanly.
Companion workflows
rfq-triage— writes the QuoteLog this workflow readscoc-generator— maintains the ShipLog this workflow reads
Run all three together for the full small-shop automation triad: intake → produce → ship → digest.
Verified
gog sheets get --json --results-only syntax and the message task plumbing both verified against the bundled gog v0.19.0 (2026-06-01); re-verify output shape on first run. No new dependencies beyond what rfq-triage and coc-generator already require.
Source
See workflow.yaml.