@wonsukchoi/crondex 0.22.0 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -15
- package/catalog.json +4839 -118
- package/jobs/automotive/ase-certification-expiry-check.yaml +36 -0
- package/jobs/automotive/csi-score-monitor.yaml +33 -0
- package/jobs/automotive/customer-pay-warranty-pay-mix-tracker.yaml +47 -0
- package/jobs/automotive/fi-product-attachment-rate-tracker.yaml +39 -0
- package/jobs/automotive/loaner-fleet-availability-check.yaml +40 -0
- package/jobs/automotive/manufacturer-recall-notice-check.yaml +39 -0
- package/jobs/automotive/parts-reorder-point-check.yaml +36 -0
- package/jobs/automotive/repair-cycle-time-trend-monitor.yaml +42 -0
- package/jobs/automotive/service-appointment-no-show-tracker.yaml +38 -0
- package/jobs/automotive/service-bay-utilization-check.yaml +38 -0
- package/jobs/automotive/shop-supply-reorder-check.yaml +31 -0
- package/jobs/automotive/trade-in-appraisal-variance-check.yaml +39 -0
- package/jobs/automotive/used-vehicle-inventory-aging-check.yaml +35 -0
- package/jobs/construction/critical-path-material-lead-time-review.yaml +43 -0
- package/jobs/construction/daily-jobsite-log-compliance-check.yaml +34 -0
- package/jobs/construction/equipment-utilization-cost-check.yaml +35 -0
- package/jobs/construction/heavy-equipment-inspection-compliance-check.yaml +34 -0
- package/jobs/construction/jobsite-safety-incident-near-miss-tracker.yaml +35 -0
- package/jobs/construction/lien-waiver-collection-tracker.yaml +27 -0
- package/jobs/construction/permit-application-approval-backlog-check.yaml +33 -0
- package/jobs/construction/project-budget-variance-check.yaml +34 -0
- package/jobs/construction/punch-list-completion-tracker.yaml +36 -0
- package/jobs/construction/retainage-holdback-release-tracker.yaml +33 -0
- package/jobs/construction/rfi-response-time-tracker.yaml +33 -0
- package/jobs/construction/subcontractor-pay-application-approval-tracker.yaml +35 -0
- package/jobs/construction/submittal-shop-drawing-review-check.yaml +45 -0
- package/jobs/construction/weather-delay-impact-log.yaml +44 -0
- package/jobs/education/chronic-absenteeism-tracker.yaml +34 -0
- package/jobs/education/department-budget-variance-check.yaml +37 -0
- package/jobs/education/enrollment-withdrawal-trend-tracker.yaml +39 -0
- package/jobs/education/facility-work-order-backlog-check.yaml +34 -0
- package/jobs/education/free-reduced-lunch-eligibility-renewal-check.yaml +36 -0
- package/jobs/education/iep-504-review-deadline-tracker.yaml +35 -0
- package/jobs/education/parent-teacher-conference-noshow-tracker.yaml +29 -0
- package/jobs/education/school-bus-route-ontime-check.yaml +40 -0
- package/jobs/education/standardized-test-registration-deadline-check.yaml +35 -0
- package/jobs/education/substitute-teacher-fill-rate-tracker.yaml +35 -0
- package/jobs/education/teacher-certification-expiry-tracker.yaml +35 -0
- package/jobs/education/textbook-inventory-shortage-check.yaml +32 -0
- package/jobs/fleet/accident-incident-report-tracker.yaml +34 -0
- package/jobs/fleet/driver-mvr-review-tracker.yaml +34 -0
- package/jobs/fleet/driver-safety-score-monitor.yaml +39 -0
- package/jobs/fleet/ev-battery-health-check.yaml +36 -0
- package/jobs/fleet/fuel-efficiency-trend-monitor.yaml +33 -0
- package/jobs/fleet/geofence-violation-check.yaml +37 -0
- package/jobs/fleet/lease-return-condition-check.yaml +33 -0
- package/jobs/fleet/tire-wear-replacement-check.yaml +30 -0
- package/jobs/fleet/toll-violation-tracker.yaml +34 -0
- package/jobs/fleet/vehicle-pool-scheduling-conflict-check.yaml +37 -0
- package/jobs/fleet/vehicle-tco-tracker.yaml +41 -0
- package/jobs/fleet/vehicle-utilization-rate-check.yaml +37 -0
- package/jobs/growth/cohort-retention-curve-monitor.yaml +39 -0
- package/jobs/growth/customer-health-score-monitor.yaml +37 -0
- package/jobs/growth/dau-mau-engagement-ratio-check.yaml +39 -0
- package/jobs/growth/dormant-account-reactivation-check.yaml +39 -0
- package/jobs/growth/expansion-revenue-opportunity-tracker.yaml +44 -0
- package/jobs/growth/feature-adoption-rate-tracker.yaml +44 -0
- package/jobs/growth/nps-trend-tracker.yaml +40 -0
- package/jobs/growth/onboarding-funnel-dropoff-check.yaml +39 -0
- package/jobs/growth/paywall-upgrade-prompt-conversion-check.yaml +40 -0
- package/jobs/growth/product-qualified-lead-tracker.yaml +42 -0
- package/jobs/growth/referral-program-performance-tracker.yaml +35 -0
- package/jobs/growth/trial-to-paid-conversion-rate-tracker.yaml +48 -0
- package/jobs/growth/winback-reactivation-campaign-tracker.yaml +46 -0
- package/jobs/hospitality/adr-revpar-tracker.yaml +43 -0
- package/jobs/hospitality/cancellation-rate-spike-check.yaml +21 -0
- package/jobs/hospitality/group-booking-space-utilization-check.yaml +40 -0
- package/jobs/hospitality/guest-complaint-sla-tracker.yaml +34 -0
- package/jobs/hospitality/guest-satisfaction-score-monitor.yaml +41 -0
- package/jobs/hospitality/linen-inventory-turnover-check.yaml +35 -0
- package/jobs/hospitality/loyalty-points-reconciliation-check.yaml +33 -0
- package/jobs/hospitality/minibar-charge-reconciliation-check.yaml +38 -0
- package/jobs/hospitality/occupancy-forecast-variance-check.yaml +33 -0
- package/jobs/hospitality/ota-rate-parity-check.yaml +36 -0
- package/jobs/hospitality/overbooking-risk-alert.yaml +38 -0
- package/jobs/hospitality/room-maintenance-work-order-tracker.yaml +31 -0
- package/jobs/hospitality/upsell-upgrade-conversion-tracker.yaml +37 -0
- package/jobs/insurance/adjuster-caseload-balance-check.yaml +45 -0
- package/jobs/insurance/agent-broker-license-expiry-tracker.yaml +40 -0
- package/jobs/insurance/cat-event-exposure-monitor.yaml +37 -0
- package/jobs/insurance/claims-aging-backlog-tracker.yaml +48 -0
- package/jobs/insurance/doi-filing-deadline-tracker.yaml +42 -0
- package/jobs/insurance/loss-ratio-by-line-monitor.yaml +43 -0
- package/jobs/insurance/policy-lapse-rate-monitor.yaml +41 -0
- package/jobs/insurance/premium-payment-delinquency-tracker.yaml +42 -0
- package/jobs/insurance/quote-to-bind-conversion-tracker.yaml +41 -0
- package/jobs/insurance/reinsurance-treaty-renewal-tracker.yaml +38 -0
- package/jobs/insurance/siu-fraud-referral-tracker.yaml +36 -0
- package/jobs/insurance/subrogation-recovery-tracker.yaml +41 -0
- package/jobs/insurance/underwriting-queue-sla-monitor.yaml +45 -0
- package/jobs/logistics/3pl-performance-scorecard.yaml +45 -0
- package/jobs/logistics/bol-freight-class-accuracy-audit.yaml +33 -0
- package/jobs/logistics/cargo-insurance-claim-status-check.yaml +39 -0
- package/jobs/logistics/carrier-load-tender-acceptance-check.yaml +34 -0
- package/jobs/logistics/carrier-otd-performance-scorecard.yaml +41 -0
- package/jobs/logistics/carrier-rate-contract-renewal-check.yaml +35 -0
- package/jobs/logistics/cross-dock-dwell-time-watch.yaml +43 -0
- package/jobs/logistics/freight-invoice-rate-audit.yaml +38 -0
- package/jobs/logistics/fuel-surcharge-rate-monitor.yaml +40 -0
- package/jobs/logistics/international-shipment-documentation-check.yaml +36 -0
- package/jobs/logistics/linehaul-transit-time-variance-check.yaml +43 -0
- package/jobs/logistics/proof-of-delivery-reconciliation-check.yaml +38 -0
- package/jobs/logistics/route-load-optimization-check.yaml +32 -0
- package/jobs/manufacturing/changeover-time-tracker.yaml +29 -0
- package/jobs/manufacturing/critical-spare-parts-stock-check.yaml +29 -0
- package/jobs/manufacturing/first-pass-yield-report.yaml +37 -0
- package/jobs/manufacturing/lot-traceability-audit.yaml +37 -0
- package/jobs/manufacturing/non-conformance-report-backlog-check.yaml +34 -0
- package/jobs/manufacturing/oee-efficiency-check.yaml +37 -0
- package/jobs/manufacturing/osha-recordable-incident-audit.yaml +37 -0
- package/jobs/manufacturing/production-schedule-adherence-check.yaml +35 -0
- package/jobs/manufacturing/safety-certification-expiry-check.yaml +37 -0
- package/jobs/manufacturing/scrap-waste-rate-watch.yaml +33 -0
- package/jobs/manufacturing/shift-handoff-report.yaml +37 -0
- package/jobs/manufacturing/supplier-quality-ppm-watch.yaml +38 -0
- package/jobs/manufacturing/tooling-die-wear-check.yaml +31 -0
- package/jobs/manufacturing/work-order-backlog-check.yaml +37 -0
- package/jobs/marketing/ad-creative-fatigue-check.yaml +44 -0
- package/jobs/marketing/affiliate-partner-performance-check.yaml +38 -0
- package/jobs/marketing/attribution-discrepancy-check.yaml +42 -0
- package/jobs/marketing/brand-share-of-voice-check.yaml +43 -0
- package/jobs/marketing/campaign-roas-cpa-anomaly-check.yaml +41 -0
- package/jobs/marketing/competitor-ad-creative-watch.yaml +40 -0
- package/jobs/marketing/email-list-growth-rate-check.yaml +43 -0
- package/jobs/marketing/landing-page-conversion-drop-check.yaml +44 -0
- package/jobs/marketing/mql-to-sql-handoff-sla-check.yaml +29 -0
- package/jobs/marketing/mql-volume-pace-check.yaml +34 -0
- package/jobs/marketing/paid-search-negative-keyword-waste-check.yaml +37 -0
- package/jobs/marketing/press-release-pickup-tracking.yaml +32 -0
- package/jobs/marketing/webinar-registration-attendance-check.yaml +38 -0
- package/jobs/restaurant/comp-void-anomaly-tracker.yaml +39 -0
- package/jobs/restaurant/daily-sales-flash-report.yaml +36 -0
- package/jobs/restaurant/delivery-platform-commission-reconciliation.yaml +33 -0
- package/jobs/restaurant/delivery-receiving-discrepancy-check.yaml +33 -0
- package/jobs/restaurant/food-handler-permit-expiry-tracker.yaml +33 -0
- package/jobs/restaurant/gift-card-liability-check.yaml +45 -0
- package/jobs/restaurant/kitchen-ticket-time-watch.yaml +38 -0
- package/jobs/restaurant/liquor-pour-cost-variance-check.yaml +34 -0
- package/jobs/restaurant/menu-86-frequency-tracker.yaml +39 -0
- package/jobs/restaurant/menu-item-profitability-check.yaml +33 -0
- package/jobs/restaurant/pos-end-of-day-reconciliation-check.yaml +31 -0
- package/jobs/restaurant/table-turnover-rate-tracker.yaml +36 -0
- package/jobs/restaurant/waitlist-conversion-check.yaml +37 -0
- package/jobs/retail/cash-office-deposit-variance-check.yaml +34 -0
- package/jobs/retail/competitor-price-monitoring-check.yaml +42 -0
- package/jobs/retail/damaged-merchandise-writeoff-tracker.yaml +41 -0
- package/jobs/retail/employee-discount-abuse-check.yaml +39 -0
- package/jobs/retail/layaway-special-order-pickup-tracker.yaml +33 -0
- package/jobs/retail/loyalty-enrollment-redemption-rate-tracker.yaml +37 -0
- package/jobs/retail/markdown-execution-audit-check.yaml +29 -0
- package/jobs/retail/planogram-compliance-audit-check.yaml +36 -0
- package/jobs/retail/pos-void-refund-anomaly-tracker.yaml +42 -0
- package/jobs/retail/price-tag-audit-accuracy-check.yaml +37 -0
- package/jobs/retail/sales-per-square-foot-tracker.yaml +36 -0
- package/jobs/retail/seasonal-staffing-coverage-check.yaml +35 -0
- package/jobs/retail/store-closing-checklist-compliance-check.yaml +32 -0
- package/jobs/retail/visual-merchandising-compliance-check.yaml +40 -0
- package/jobs/veterinary/appointment-no-show-rate-tracker.yaml +49 -0
- package/jobs/veterinary/boarding-kennel-capacity-utilization-check.yaml +39 -0
- package/jobs/veterinary/client-payment-plan-delinquency-check.yaml +36 -0
- package/jobs/veterinary/dvm-license-dea-registration-expiry-check.yaml +41 -0
- package/jobs/veterinary/microchip-registration-verification-check.yaml +40 -0
- package/jobs/veterinary/patient-record-completeness-audit.yaml +41 -0
- package/jobs/veterinary/pet-medication-refill-backlog-check.yaml +36 -0
- package/jobs/veterinary/puppy-kitten-vaccine-series-compliance-check.yaml +39 -0
- package/jobs/veterinary/senior-pet-wellness-recall-tracker.yaml +43 -0
- package/jobs/veterinary/spay-neuter-followup-compliance-check.yaml +35 -0
- package/jobs/veterinary/specialist-referral-followup-check.yaml +38 -0
- package/jobs/veterinary/surgical-schedule-utilization-check.yaml +36 -0
- package/jobs/veterinary/vet-staff-ce-credit-tracking.yaml +36 -0
- package/jobs/warehousing/conveyor-sortation-downtime-watch.yaml +48 -0
- package/jobs/warehousing/labor-productivity-rate-check.yaml +33 -0
- package/jobs/warehousing/mhe-preventive-maintenance-check.yaml +38 -0
- package/jobs/warehousing/order-fulfillment-sla-watch.yaml +42 -0
- package/jobs/warehousing/shift-headcount-coverage-check.yaml +33 -0
- package/jobs/warehousing/slotting-velocity-review-check.yaml +44 -0
- package/jobs/warehousing/warehouse-damage-writeoff-review.yaml +41 -0
- package/jobs/warehousing/warehouse-near-miss-incident-rate-watch.yaml +47 -0
- package/jobs/warehousing/warehouse-space-utilization-check.yaml +39 -0
- package/jobs/warehousing/wave-pick-batch-efficiency-check.yaml +33 -0
- package/jobs/warehousing/wms-integration-error-check.yaml +36 -0
- package/jobs/warehousing/yard-trailer-detention-watch.yaml +41 -0
- package/lib/category-descriptions.js +12 -12
- package/lib/duplicates-allowlist.js +10 -0
- package/package.json +2 -2
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
id: attribution-discrepancy-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Marketing Attribution Discrepancy Check
|
|
4
|
+
description: >
|
|
5
|
+
Compares conversions or revenue attributed to a channel across two
|
|
6
|
+
systems — the ad platform's own reporting and your analytics/CRM — and
|
|
7
|
+
flags when they diverge significantly. Use this if you've ever reported
|
|
8
|
+
two different numbers for the same campaign's results in the same
|
|
9
|
+
meeting because the ad platform and the analytics tool didn't agree.
|
|
10
|
+
category: marketing
|
|
11
|
+
tags: [marketing, attribution, analytics, reporting]
|
|
12
|
+
schedule: "0 9 * * 1"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: agent-prompt
|
|
15
|
+
prompt: |
|
|
16
|
+
Compare attributed results for channel "{{channel_name}}" over the last
|
|
17
|
+
{{lookback_days}} days between {{source_a_hint}} and {{source_b_hint}}.
|
|
18
|
+
1. Pull conversions (or revenue) attributed to the channel from each
|
|
19
|
+
source.
|
|
20
|
+
2. Compute the percent difference between the two numbers.
|
|
21
|
+
3. Flag if the difference exceeds {{discrepancy_threshold_pct}}%.
|
|
22
|
+
4. If flagged, suggest likely causes (attribution window mismatch,
|
|
23
|
+
UTM tagging gaps, view-through vs. click-through counting, deduping
|
|
24
|
+
differences) based on what's visible.
|
|
25
|
+
variables:
|
|
26
|
+
channel_name:
|
|
27
|
+
default: "your channel (e.g. Google Ads, Meta Ads, Email)"
|
|
28
|
+
description: Marketing channel to compare attribution for.
|
|
29
|
+
source_a_hint:
|
|
30
|
+
default: "the ad platform's own conversion reporting"
|
|
31
|
+
description: First source of attributed conversions/revenue.
|
|
32
|
+
source_b_hint:
|
|
33
|
+
default: "your analytics tool or CRM (GA4, PostHog, Salesforce, HubSpot)"
|
|
34
|
+
description: Second source of attributed conversions/revenue.
|
|
35
|
+
lookback_days:
|
|
36
|
+
default: 30
|
|
37
|
+
description: Window of results to compare.
|
|
38
|
+
discrepancy_threshold_pct:
|
|
39
|
+
default: 20
|
|
40
|
+
description: Percent difference between sources that triggers a flag.
|
|
41
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
42
|
+
notes: No generic script mode — pulling from two different reporting systems and reasoning about why they diverge needs judgment, not just a threshold comparison.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
id: brand-share-of-voice-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Brand Share of Voice Check
|
|
4
|
+
description: >
|
|
5
|
+
Compares how often your brand is mentioned online versus a list of
|
|
6
|
+
named competitors over a recent window, flagging a real shift in share
|
|
7
|
+
of voice. Use this if a competitor has ever quietly out-marketed you
|
|
8
|
+
and the first sign was a sales rep mentioning it in a deal review
|
|
9
|
+
instead of a share-of-voice report catching the trend.
|
|
10
|
+
category: marketing
|
|
11
|
+
tags: [marketing, competitor, share-of-voice, brand]
|
|
12
|
+
schedule: "0 9 * * 1"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: agent-prompt
|
|
15
|
+
prompt: |
|
|
16
|
+
Search for mentions of "{{brand_name}}" and each of these competitors —
|
|
17
|
+
{{competitor_names}} — from the last {{lookback_days}} days across
|
|
18
|
+
whatever sources you have access to (web search, X/Twitter, Reddit,
|
|
19
|
+
news).
|
|
20
|
+
1. Estimate a rough mention count for the brand and each competitor.
|
|
21
|
+
2. Compute the brand's approximate share of voice (brand mentions /
|
|
22
|
+
total mentions across all names).
|
|
23
|
+
3. Compare to the prior period if you can find historical data, and
|
|
24
|
+
flag a meaningful drop in share.
|
|
25
|
+
4. If one competitor stands out as gaining ground, name it and note
|
|
26
|
+
what seems to be driving it (launch, campaign, controversy) if
|
|
27
|
+
visible.
|
|
28
|
+
variables:
|
|
29
|
+
brand_name:
|
|
30
|
+
default: "your brand"
|
|
31
|
+
description: Your brand/product name to track.
|
|
32
|
+
competitor_names:
|
|
33
|
+
default: "Competitor A, Competitor B"
|
|
34
|
+
description: Comma-separated list of named competitors to compare against.
|
|
35
|
+
lookback_days:
|
|
36
|
+
default: 30
|
|
37
|
+
description: Window of mentions to consider.
|
|
38
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
39
|
+
notes: >
|
|
40
|
+
No generic script mode — needs live search across sources and judgment
|
|
41
|
+
to estimate relative volume. Distinct from content/social-mentions-watch
|
|
42
|
+
(reads sentiment/triage of your own brand's mentions one by one) — this
|
|
43
|
+
compares mention volume across named competitors instead.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
id: campaign-roas-cpa-anomaly-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Campaign ROAS/CPA Anomaly Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks a campaign's return-on-ad-spend against a minimum threshold and
|
|
6
|
+
flags a real collapse. Use this if a campaign has ever kept spending its
|
|
7
|
+
normal daily budget while ROAS quietly cratered because a bid strategy
|
|
8
|
+
or targeting change nobody caught broke conversion efficiency.
|
|
9
|
+
category: marketing
|
|
10
|
+
tags: [marketing, ads, roas, performance]
|
|
11
|
+
schedule: "0 8 * * *"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
stats=$(curl -s -H "Authorization: Bearer {{ad_platform_api_token}}" "{{ad_platform_stats_api_url}}");
|
|
16
|
+
roas=$(echo "$stats" | grep -o '"roas":[0-9.]*' | head -n1 | cut -d: -f2);
|
|
17
|
+
if [ -z "$roas" ]; then echo "ERROR: could not fetch ROAS from {{ad_platform_stats_api_url}}"; exit 1; fi;
|
|
18
|
+
if awk "BEGIN{exit !($roas < {{min_roas}})}"; then
|
|
19
|
+
echo "WARNING: ROAS ${roas}x for campaign {{campaign_name}} is below minimum threshold {{min_roas}}x";
|
|
20
|
+
exit 1;
|
|
21
|
+
else echo "OK: ROAS ${roas}x for campaign {{campaign_name}}"; fi
|
|
22
|
+
variables:
|
|
23
|
+
ad_platform_stats_api_url:
|
|
24
|
+
default: "https://api.example-ads.com/campaigns/{{campaign_name}}/stats"
|
|
25
|
+
description: Ad platform reporting API endpoint returning a roas field for the campaign.
|
|
26
|
+
ad_platform_api_token:
|
|
27
|
+
default: "your-api-token"
|
|
28
|
+
description: API token for the ad platform.
|
|
29
|
+
campaign_name:
|
|
30
|
+
default: "your campaign"
|
|
31
|
+
description: Name/ID of the ad campaign to check.
|
|
32
|
+
min_roas:
|
|
33
|
+
default: 2
|
|
34
|
+
description: Minimum acceptable return-on-ad-spend multiple before flagging.
|
|
35
|
+
compatible_agents: [generic, claude, codex]
|
|
36
|
+
notes: >
|
|
37
|
+
Generic REST pattern — point at your ad platform's (Google Ads, Meta Ads,
|
|
38
|
+
TikTok Ads) reporting API; if it doesn't report ROAS directly, compute it
|
|
39
|
+
as conversion value / spend before comparing. Distinct from
|
|
40
|
+
ad-spend-pacing-check (tracks spend velocity vs. budget) — this tracks
|
|
41
|
+
spend efficiency instead.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
id: competitor-ad-creative-watch
|
|
2
|
+
version: 1
|
|
3
|
+
name: Competitor Ad Creative Watch
|
|
4
|
+
description: >
|
|
5
|
+
Scans a competitor's public ad library (Meta Ad Library, Google Ads
|
|
6
|
+
Transparency Center, or similar) for new or changed ad creative and
|
|
7
|
+
summarizes what's new. Use this if a competitor has ever launched a new
|
|
8
|
+
campaign, offer, or positioning angle and you found out from a
|
|
9
|
+
customer instead of watching their ad library yourself.
|
|
10
|
+
category: marketing
|
|
11
|
+
tags: [marketing, competitor, ads, monitoring]
|
|
12
|
+
schedule: "0 9 * * 1"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: agent-prompt
|
|
15
|
+
prompt: |
|
|
16
|
+
Check {{competitor_name}}'s ads at {{ad_library_url_hint}} for anything
|
|
17
|
+
new in the last {{lookback_days}} days.
|
|
18
|
+
1. List any new creative, offer, or messaging angle that wasn't running
|
|
19
|
+
before.
|
|
20
|
+
2. Note the format (video, static, carousel) and apparent target
|
|
21
|
+
audience if visible.
|
|
22
|
+
3. If nothing new, say so in one line.
|
|
23
|
+
4. If something new stands out, note why it might matter (new offer,
|
|
24
|
+
new positioning, entering a new channel).
|
|
25
|
+
variables:
|
|
26
|
+
competitor_name:
|
|
27
|
+
default: "competitor name"
|
|
28
|
+
description: Competitor whose ads to check.
|
|
29
|
+
ad_library_url_hint:
|
|
30
|
+
default: "Meta Ad Library or Google Ads Transparency Center, searched by advertiser name"
|
|
31
|
+
description: Where to look up the competitor's running ads.
|
|
32
|
+
lookback_days:
|
|
33
|
+
default: 7
|
|
34
|
+
description: Window of new/changed ads to consider.
|
|
35
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
36
|
+
notes: >
|
|
37
|
+
No generic script mode — ad library sites vary and usually require a
|
|
38
|
+
live search rather than a stable API. Distinct from
|
|
39
|
+
competitor-page-diff-watch (tracks a competitor's own website) — this
|
|
40
|
+
tracks what they're actively advertising instead.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
id: email-list-growth-rate-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Email List Growth Rate Check
|
|
4
|
+
description: >
|
|
5
|
+
Compares net email list growth (new subscribers minus unsubscribes and
|
|
6
|
+
bounces) over a recent period against a minimum growth rate, flagging a
|
|
7
|
+
stalled or shrinking list. Use this if a list has ever been quietly
|
|
8
|
+
shrinking for months because unsubscribes were outpacing signups and
|
|
9
|
+
nobody was tracking the net number.
|
|
10
|
+
category: marketing
|
|
11
|
+
tags: [marketing, email, list-growth, retention]
|
|
12
|
+
schedule: "0 9 1 * *"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
stats=$(curl -s -H "Authorization: Bearer {{esp_api_token}}" "{{esp_list_stats_api_url}}");
|
|
17
|
+
current=$(echo "$stats" | grep -o '"current_count":[0-9]*' | head -n1 | cut -d: -f2);
|
|
18
|
+
previous=$(echo "$stats" | grep -o '"previous_count":[0-9]*' | head -n1 | cut -d: -f2);
|
|
19
|
+
if [ -z "$current" ] || [ -z "$previous" ] || [ "$previous" -eq 0 ]; then echo "ERROR: could not compute growth rate from {{esp_list_stats_api_url}}"; exit 1; fi;
|
|
20
|
+
growth_pct=$(awk "BEGIN{printf \"%.2f\", (($current-$previous)/$previous)*100}");
|
|
21
|
+
if awk "BEGIN{exit !($growth_pct < {{min_growth_rate_pct}})}"; then
|
|
22
|
+
echo "WARNING: list grew ${growth_pct}% over {{lookback_days}} days (min {{min_growth_rate_pct}}%) — $previous to $current subscribers";
|
|
23
|
+
exit 1;
|
|
24
|
+
else echo "OK: list grew ${growth_pct}% — $previous to $current subscribers"; fi
|
|
25
|
+
variables:
|
|
26
|
+
esp_list_stats_api_url:
|
|
27
|
+
default: "https://api.example-esp.com/lists/main/stats?days={{lookback_days}}"
|
|
28
|
+
description: Email service provider endpoint returning current_count and previous_count subscriber totals for the window.
|
|
29
|
+
esp_api_token:
|
|
30
|
+
default: "your-api-token"
|
|
31
|
+
description: API token for the email service provider.
|
|
32
|
+
lookback_days:
|
|
33
|
+
default: 30
|
|
34
|
+
description: Window over which to measure net list growth.
|
|
35
|
+
min_growth_rate_pct:
|
|
36
|
+
default: 0
|
|
37
|
+
description: Minimum acceptable net growth rate percent over the window (0 means "must not shrink").
|
|
38
|
+
compatible_agents: [generic, claude, codex]
|
|
39
|
+
notes: >
|
|
40
|
+
Generic REST pattern — point at your ESP's (Mailchimp, Klaviyo,
|
|
41
|
+
SendGrid) list stats endpoint; adjust field names to match its response
|
|
42
|
+
shape. Distinct from newsletter-unsubscribe-spike-check (per-send
|
|
43
|
+
unsubscribe rate) — this tracks net list size trend over time instead.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
id: landing-page-conversion-drop-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Landing Page Conversion Drop Check
|
|
4
|
+
description: >
|
|
5
|
+
Reviews a landing page's conversion rate over a recent window against
|
|
6
|
+
its baseline and flags a real drop. Use this if a landing page has ever
|
|
7
|
+
quietly stopped converting — a broken form, a slow load, a redesign
|
|
8
|
+
that hurt clarity — while traffic and ad spend kept flowing in as if
|
|
9
|
+
nothing changed.
|
|
10
|
+
category: marketing
|
|
11
|
+
tags: [marketing, landing-page, conversion, analytics]
|
|
12
|
+
schedule: "0 9 * * 1"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: agent-prompt
|
|
15
|
+
prompt: |
|
|
16
|
+
Check conversion rate for {{page_url}} using {{analytics_hint}}.
|
|
17
|
+
1. Compare the conversion rate over the last {{recent_days}} days to the
|
|
18
|
+
prior {{baseline_days}}-day baseline.
|
|
19
|
+
2. Flag a drop of {{drop_threshold_pct}}% or more.
|
|
20
|
+
3. If flagged, note any accompanying signal that's visible (bounce rate
|
|
21
|
+
spike, page load time, form error rate, traffic source mix shift)
|
|
22
|
+
that might explain the drop.
|
|
23
|
+
variables:
|
|
24
|
+
page_url:
|
|
25
|
+
default: "https://example.com/landing-page"
|
|
26
|
+
description: Landing page URL to check conversion rate for.
|
|
27
|
+
analytics_hint:
|
|
28
|
+
default: "your web analytics tool (GA4, PostHog, Mixpanel, etc.)"
|
|
29
|
+
description: Where conversion data lives.
|
|
30
|
+
recent_days:
|
|
31
|
+
default: 7
|
|
32
|
+
description: Recent window to evaluate.
|
|
33
|
+
baseline_days:
|
|
34
|
+
default: 30
|
|
35
|
+
description: Prior window used as the baseline for comparison.
|
|
36
|
+
drop_threshold_pct:
|
|
37
|
+
default: 20
|
|
38
|
+
description: Percent drop in conversion rate that counts as a real regression.
|
|
39
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
40
|
+
notes: >
|
|
41
|
+
No generic script mode — pulling conversion rate needs an analytics API
|
|
42
|
+
and judgment on which accompanying signals matter. Distinct from
|
|
43
|
+
broken-campaign-link-check (page reachability only) — this catches a
|
|
44
|
+
page that loads fine but stopped converting.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
id: mql-to-sql-handoff-sla-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: MQL-to-SQL Handoff SLA Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks how long marketing-qualified leads have been sitting since
|
|
6
|
+
becoming an MQL without sales accepting them as sales-qualified, and
|
|
7
|
+
flags leads stuck past the handoff SLA. Use this if a hot lead has ever
|
|
8
|
+
gone cold sitting in the queue between marketing handing it off and
|
|
9
|
+
sales actually picking it up.
|
|
10
|
+
category: marketing
|
|
11
|
+
tags: [marketing, mql, handoff, funnel, sla]
|
|
12
|
+
schedule: "0 * * * *"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
psql "{{database_url}}" -t -c "select name, email, mql_at from leads where status = 'mql' and sql_accepted_at is null and mql_at < now() - interval '{{handoff_sla_hours}} hours';"
|
|
17
|
+
variables:
|
|
18
|
+
database_url:
|
|
19
|
+
default: "postgres://user:pass@host:5432/db"
|
|
20
|
+
description: Connection string for the marketing/CRM leads database.
|
|
21
|
+
handoff_sla_hours:
|
|
22
|
+
default: 4
|
|
23
|
+
description: Hours an MQL can wait for sales acceptance before it's flagged as stuck.
|
|
24
|
+
compatible_agents: [generic, claude, codex]
|
|
25
|
+
notes: >
|
|
26
|
+
Assumes a `leads` table with `status`, `mql_at`, and `sql_accepted_at`
|
|
27
|
+
columns — adjust to your CRM's schema. Distinct from
|
|
28
|
+
sales/lead-response-time-check (first-touch response time on any new
|
|
29
|
+
lead) — this checks the specific marketing-to-sales handoff stage.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
id: mql-volume-pace-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: MQL Volume Pace Check
|
|
4
|
+
description: >
|
|
5
|
+
Compares marketing-qualified-lead (MQL) volume so far this period
|
|
6
|
+
against the target pace and flags under-delivery early. Use this if a
|
|
7
|
+
quarter has ever ended short on MQLs and sales only found out during
|
|
8
|
+
the pipeline review, instead of marketing catching it mid-quarter with
|
|
9
|
+
enough runway to fix it.
|
|
10
|
+
category: marketing
|
|
11
|
+
tags: [marketing, mql, funnel, pipeline]
|
|
12
|
+
schedule: "0 8 * * 1"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
count=$(psql "{{database_url}}" -t -c "select count(*) from leads where status = 'mql' and created_at >= date_trunc('quarter', current_date);");
|
|
17
|
+
target={{quarterly_mql_target}};
|
|
18
|
+
day_of_quarter=$(( ( $(date +%j) - 1 ) % 91 + 1 ));
|
|
19
|
+
expected=$(awk "BEGIN{printf \"%.0f\", ($target/91)*$day_of_quarter}");
|
|
20
|
+
echo "MQL pace check: $count MQLs so far this quarter vs. expected ~$expected (target $target)";
|
|
21
|
+
if [ "$count" -lt "$expected" ]; then echo "WARNING: MQL volume behind pace"; exit 1; fi
|
|
22
|
+
variables:
|
|
23
|
+
database_url:
|
|
24
|
+
default: "postgres://user:pass@host:5432/db"
|
|
25
|
+
description: Connection string for the marketing/CRM leads database.
|
|
26
|
+
quarterly_mql_target:
|
|
27
|
+
default: 900
|
|
28
|
+
description: Target MQL count for the quarter.
|
|
29
|
+
compatible_agents: [generic, claude, codex]
|
|
30
|
+
notes: >
|
|
31
|
+
Assumes a `leads` table with a `status` column that includes an `mql`
|
|
32
|
+
value and a `created_at` timestamp — adjust the query to your marketing
|
|
33
|
+
automation/CRM schema. Uses a flat 91-day quarter approximation for
|
|
34
|
+
pacing; swap in exact fiscal quarter boundaries if yours differ.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
id: paid-search-negative-keyword-waste-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Paid Search Negative Keyword Waste Check
|
|
4
|
+
description: >
|
|
5
|
+
Reviews the recent search terms report for a paid search account and
|
|
6
|
+
flags spend on queries that are clearly irrelevant to what's being
|
|
7
|
+
sold and should be added as negative keywords. Use this if a paid
|
|
8
|
+
search account has ever burned budget for weeks on obviously mismatched
|
|
9
|
+
search terms because nobody reviewed the search terms report.
|
|
10
|
+
category: marketing
|
|
11
|
+
tags: [marketing, paid-search, ads, waste, negative-keywords]
|
|
12
|
+
schedule: "0 8 * * 1"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: agent-prompt
|
|
15
|
+
prompt: |
|
|
16
|
+
Pull the search terms report for {{ad_account_hint}} over the last
|
|
17
|
+
{{lookback_days}} days.
|
|
18
|
+
1. Identify search terms that triggered ads but are clearly irrelevant
|
|
19
|
+
to the product/service being sold (mismatched intent, wrong
|
|
20
|
+
category, competitor brand names if that's not the strategy, junk
|
|
21
|
+
queries).
|
|
22
|
+
2. Sum the spend attributed to those irrelevant terms.
|
|
23
|
+
3. Flag if total wasted spend exceeds ${{min_wasted_spend_usd}}.
|
|
24
|
+
4. List the worst offending terms with spend and clicks, as candidates
|
|
25
|
+
to add to the negative keyword list.
|
|
26
|
+
variables:
|
|
27
|
+
ad_account_hint:
|
|
28
|
+
default: "your paid search account (Google Ads, Microsoft Ads)"
|
|
29
|
+
description: Which paid search account/platform to review.
|
|
30
|
+
lookback_days:
|
|
31
|
+
default: 30
|
|
32
|
+
description: Window of search terms data to review.
|
|
33
|
+
min_wasted_spend_usd:
|
|
34
|
+
default: 200
|
|
35
|
+
description: Total wasted spend in USD that triggers a flag.
|
|
36
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
37
|
+
notes: No generic script mode — judging whether a search term is "clearly irrelevant" to your specific product needs judgment a keyword-matching script can't reliably provide.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
id: press-release-pickup-tracking
|
|
2
|
+
version: 1
|
|
3
|
+
name: Press Release Pickup Tracking
|
|
4
|
+
description: >
|
|
5
|
+
Searches for media pickups of a recent press release and reports which
|
|
6
|
+
outlets ran it. Use this if a press release has ever gone out and
|
|
7
|
+
nobody actually confirmed whether any outlets picked it up.
|
|
8
|
+
category: marketing
|
|
9
|
+
tags: [marketing, pr, press, media]
|
|
10
|
+
schedule: "0 9 * * *"
|
|
11
|
+
timezone: "UTC"
|
|
12
|
+
runner: agent-prompt
|
|
13
|
+
prompt: |
|
|
14
|
+
Search for coverage of the press release "{{press_release_title}}"
|
|
15
|
+
(issued {{press_release_date}}) from the last {{lookback_days}} days.
|
|
16
|
+
1. List each outlet that picked it up, with a link and whether it ran
|
|
17
|
+
verbatim or as an original story.
|
|
18
|
+
2. Note the apparent reach/tier of each outlet if you can tell
|
|
19
|
+
(major trade press, niche blog, syndication network).
|
|
20
|
+
3. If no pickups found yet, say so — don't fabricate results.
|
|
21
|
+
variables:
|
|
22
|
+
press_release_title:
|
|
23
|
+
default: "your press release headline"
|
|
24
|
+
description: Title of the press release to track.
|
|
25
|
+
press_release_date:
|
|
26
|
+
default: "2026-01-01"
|
|
27
|
+
description: Date the press release was issued (YYYY-MM-DD).
|
|
28
|
+
lookback_days:
|
|
29
|
+
default: 14
|
|
30
|
+
description: Window since issue date to search for pickups.
|
|
31
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
32
|
+
notes: No generic script mode — finding pickups needs live web/news search, and judging outlet tier/reach needs judgment a script can't reliably automate.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
id: webinar-registration-attendance-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Webinar Registration/Attendance Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks a webinar's registration count and show-up (attendance) rate
|
|
6
|
+
against targets, with enough lead time to boost promotion or send
|
|
7
|
+
reminders. Use this if a webinar has ever gone live to a nearly empty
|
|
8
|
+
room because registration numbers looked fine on paper but nobody
|
|
9
|
+
checked the actual show-up rate trend.
|
|
10
|
+
category: marketing
|
|
11
|
+
tags: [marketing, webinar, events, registration]
|
|
12
|
+
schedule: "0 9 * * *"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
stats=$(curl -s -H "Authorization: Bearer {{webinar_platform_api_token}}" "{{webinar_platform_stats_api_url}}");
|
|
17
|
+
registrations=$(echo "$stats" | grep -o '"registrations":[0-9]*' | head -n1 | cut -d: -f2);
|
|
18
|
+
attendance_rate=$(echo "$stats" | grep -o '"attendance_rate":[0-9.]*' | head -n1 | cut -d: -f2);
|
|
19
|
+
if [ -z "$registrations" ]; then echo "ERROR: could not fetch stats from {{webinar_platform_stats_api_url}}"; exit 1; fi;
|
|
20
|
+
flagged=0;
|
|
21
|
+
if [ "$registrations" -lt "{{min_registrations}}" ]; then echo "WARNING: only $registrations registrations, below minimum {{min_registrations}}"; flagged=1; fi;
|
|
22
|
+
if [ -n "$attendance_rate" ] && awk "BEGIN{exit !($attendance_rate < {{min_attendance_rate_pct}})}"; then echo "WARNING: projected attendance rate ${attendance_rate}% below minimum {{min_attendance_rate_pct}}%"; flagged=1; fi;
|
|
23
|
+
if [ "$flagged" -eq 0 ]; then echo "OK: $registrations registrations, attendance rate ${attendance_rate}%"; else exit 1; fi
|
|
24
|
+
variables:
|
|
25
|
+
webinar_platform_stats_api_url:
|
|
26
|
+
default: "https://api.example-webinar.com/events/upcoming/stats"
|
|
27
|
+
description: Webinar platform API endpoint returning registrations and attendance_rate for the upcoming event.
|
|
28
|
+
webinar_platform_api_token:
|
|
29
|
+
default: "your-api-token"
|
|
30
|
+
description: API token for the webinar platform.
|
|
31
|
+
min_registrations:
|
|
32
|
+
default: 50
|
|
33
|
+
description: Minimum registration count before flagging.
|
|
34
|
+
min_attendance_rate_pct:
|
|
35
|
+
default: 35
|
|
36
|
+
description: Minimum projected/historical show-up rate percent before flagging.
|
|
37
|
+
compatible_agents: [generic, claude, codex]
|
|
38
|
+
notes: Generic REST pattern — point at your webinar platform's (Zoom, ON24, Livestorm) API; attendance_rate may only be available after the event, so schedule a same-day-before-event run for registrations and a next-day run for actual attendance.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
id: comp-void-anomaly-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: Comp/Void Transaction Anomaly Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Reviews comped and voided POS transactions for the period and flags
|
|
6
|
+
patterns worth a second look — an employee with an outsized comp
|
|
7
|
+
rate, comps clustered right before closeout, or repeated same-item
|
|
8
|
+
voids. Use this if comps and voids have ever quietly become a hole in
|
|
9
|
+
the till that nobody added up until year-end.
|
|
10
|
+
category: restaurant
|
|
11
|
+
tags: [restaurant, pos, loss-prevention, comps, voids]
|
|
12
|
+
schedule: "0 9 * * 1"
|
|
13
|
+
timezone: "America/New_York"
|
|
14
|
+
runner: agent-prompt
|
|
15
|
+
prompt: |
|
|
16
|
+
Pull comp and void transaction records from {{pos_system}} for the
|
|
17
|
+
past {{lookback_days}} days, including employee_id, amount, reason
|
|
18
|
+
code (if logged), and timestamp.
|
|
19
|
+
1. Total comp/void dollar amount and count, and as a percentage of
|
|
20
|
+
total sales for the period.
|
|
21
|
+
2. Rank employees by comp/void dollar amount and by comp/void rate
|
|
22
|
+
relative to their sales volume — flag anyone meaningfully above
|
|
23
|
+
the team average.
|
|
24
|
+
3. Flag any comps/voids clustered suspiciously close to shift end or
|
|
25
|
+
drawer close, or missing a reason code where one is normally
|
|
26
|
+
required.
|
|
27
|
+
4. List repeated voids of the same menu item, which may point to a
|
|
28
|
+
kitchen/prep problem rather than a POS misuse issue.
|
|
29
|
+
5. Present findings neutrally as patterns to review, not conclusions
|
|
30
|
+
of wrongdoing.
|
|
31
|
+
variables:
|
|
32
|
+
pos_system:
|
|
33
|
+
default: "your POS system"
|
|
34
|
+
description: Name of the point-of-sale system (e.g. "Toast", "Square", "Aloha").
|
|
35
|
+
lookback_days:
|
|
36
|
+
default: 30
|
|
37
|
+
description: Window of comp/void history to analyze.
|
|
38
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
39
|
+
notes: Read-only pattern surfacing — any disciplinary or policy action based on findings is a manager decision, not something this job should recommend directly.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
id: daily-sales-flash-report
|
|
2
|
+
version: 1
|
|
3
|
+
name: Daily Sales Flash Report
|
|
4
|
+
description: >
|
|
5
|
+
Pulls yesterday's key sales numbers (net sales, covers, average check,
|
|
6
|
+
comp/void total) and compares them against the same day last week and
|
|
7
|
+
last year, then writes a short flash summary. Use this if you've ever
|
|
8
|
+
wanted a same-day read on how the restaurant performed without
|
|
9
|
+
waiting for the full weekly P&L close.
|
|
10
|
+
category: restaurant
|
|
11
|
+
tags: [restaurant, sales, flash-report, reporting]
|
|
12
|
+
schedule: "0 7 * * *"
|
|
13
|
+
timezone: "America/New_York"
|
|
14
|
+
runner: agent-prompt
|
|
15
|
+
prompt: |
|
|
16
|
+
Pull yesterday's sales summary from {{pos_system}}: net sales, covers,
|
|
17
|
+
average check, comp/void total, and sales by daypart if available.
|
|
18
|
+
1. Also pull the same weekday from last week and, if available, the
|
|
19
|
+
same date last year for comparison.
|
|
20
|
+
2. Present a short flash summary: yesterday's numbers, % change vs.
|
|
21
|
+
last week same day, and % change vs. last year same date.
|
|
22
|
+
3. Flag anything notably off-trend (net sales or covers down more
|
|
23
|
+
than {{flag_threshold_pct}}% vs. last week same day) with a
|
|
24
|
+
one-line possible explanation if context is available (weather,
|
|
25
|
+
local event, holiday).
|
|
26
|
+
4. Keep the whole report to a few sentences plus the numbers table —
|
|
27
|
+
this is a same-day pulse check, not a full P&L.
|
|
28
|
+
variables:
|
|
29
|
+
pos_system:
|
|
30
|
+
default: "your POS system"
|
|
31
|
+
description: Name of the point-of-sale system (e.g. "Toast", "Square", "Aloha").
|
|
32
|
+
flag_threshold_pct:
|
|
33
|
+
default: 15
|
|
34
|
+
description: Percentage decline vs. last week same day that triggers a flag in the summary.
|
|
35
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
36
|
+
notes: A same-day directional pulse check, not a substitute for the formal weekly/period close that feeds food-cost-percentage-watch and labor-cost-percentage-watch.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
id: delivery-platform-commission-reconciliation
|
|
2
|
+
version: 1
|
|
3
|
+
name: Third-Party Delivery Commission Reconciliation
|
|
4
|
+
description: >
|
|
5
|
+
Recalculates what a delivery platform (DoorDash, Uber Eats, Grubhub)
|
|
6
|
+
should have paid out after commission and fees, and flags orders
|
|
7
|
+
where the actual payout came in lower than expected. Use this if
|
|
8
|
+
you've ever suspected a delivery platform's payout report doesn't
|
|
9
|
+
quite match its own published commission rate but never checked.
|
|
10
|
+
category: restaurant
|
|
11
|
+
tags: [restaurant, delivery, commission, reconciliation, third-party]
|
|
12
|
+
schedule: "0 9 * * 1"
|
|
13
|
+
timezone: "America/New_York"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
awk -F',' -v tolerance="{{variance_tolerance_usd}}" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
{
|
|
19
|
+
expected = $2 * (1 - ($3 / 100)) - $4;
|
|
20
|
+
diff = expected - $5;
|
|
21
|
+
absdiff = (diff < 0) ? -diff : diff;
|
|
22
|
+
if (absdiff > tolerance) printf "PAYOUT MISMATCH: order %s (%s) — expected payout $%.2f, actual $%.2f (diff $%.2f)\n", $1, $6, expected, $5, diff;
|
|
23
|
+
}
|
|
24
|
+
' "{{delivery_payout_csv}}"
|
|
25
|
+
variables:
|
|
26
|
+
delivery_payout_csv:
|
|
27
|
+
default: "./delivery-payouts.csv"
|
|
28
|
+
description: "CSV with header row, columns: order_id,order_subtotal_usd,commission_pct,other_fees_usd,actual_payout_usd,platform_name."
|
|
29
|
+
variance_tolerance_usd:
|
|
30
|
+
default: 1
|
|
31
|
+
description: Dollar variance allowed between expected and actual payout before an order is flagged.
|
|
32
|
+
compatible_agents: [generic, claude, codex]
|
|
33
|
+
notes: Pull order_subtotal_usd and actual_payout_usd from the platform's own payout CSV export; commission_pct should match your current contracted rate, which platforms occasionally change without a clear notice.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
id: delivery-receiving-discrepancy-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Supplier Delivery Receiving Discrepancy Check
|
|
4
|
+
description: >
|
|
5
|
+
Compares what was ordered from a supplier against what was actually
|
|
6
|
+
received on the delivery receiving log and flags shortages or
|
|
7
|
+
overages. Use this if a supplier has ever shorted a case of product
|
|
8
|
+
and it only got noticed mid-service when the kitchen ran out.
|
|
9
|
+
category: restaurant
|
|
10
|
+
tags: [restaurant, suppliers, receiving, inventory]
|
|
11
|
+
schedule: "0 12 * * *"
|
|
12
|
+
timezone: "America/New_York"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
awk -F',' -v tolerance="{{qty_tolerance_pct}}" '
|
|
16
|
+
NR==1 {next}
|
|
17
|
+
{
|
|
18
|
+
if ($2 > 0) {
|
|
19
|
+
diff_pct = (($3 - $2) / $2) * 100;
|
|
20
|
+
absdiff = (diff_pct < 0) ? -diff_pct : diff_pct;
|
|
21
|
+
if (absdiff > tolerance) printf "DISCREPANCY: %s from %s — ordered %d, received %d (%.1f%% off)\n", $1, $4, $2, $3, diff_pct;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
' "{{receiving_log_csv}}"
|
|
25
|
+
variables:
|
|
26
|
+
receiving_log_csv:
|
|
27
|
+
default: "./receiving-log.csv"
|
|
28
|
+
description: "CSV with header row, columns: item_name,qty_ordered,qty_received,supplier_name — one row per delivered line item."
|
|
29
|
+
qty_tolerance_pct:
|
|
30
|
+
default: 5
|
|
31
|
+
description: Percentage difference between ordered and received quantity allowed before a line item is flagged.
|
|
32
|
+
compatible_agents: [generic, claude, codex]
|
|
33
|
+
notes: Have whoever signs for the delivery log qty_received per line before signing — this catches shortages/overages that a total-case-count check would miss.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
id: food-handler-permit-expiry-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: Food Handler Permit Expiry Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Checks staff food handler permits and manager certifications
|
|
6
|
+
(ServSafe or your local equivalent) against their expiration dates
|
|
7
|
+
and flags anyone expiring soon. Use this if a health inspector has
|
|
8
|
+
ever asked for a permit that had quietly lapsed weeks earlier.
|
|
9
|
+
category: restaurant
|
|
10
|
+
tags: [restaurant, compliance, certification, staff]
|
|
11
|
+
schedule: "0 8 1 * *"
|
|
12
|
+
timezone: "America/New_York"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
today=$(date +%s);
|
|
16
|
+
awk -F',' -v today="$today" -v warn="{{warn_days_before}}" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
{
|
|
19
|
+
cmd = "date -d \"" $3 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $3 "\" +%s 2>/dev/null";
|
|
20
|
+
cmd | getline expiry_epoch; close(cmd);
|
|
21
|
+
days_left = (expiry_epoch - today) / 86400;
|
|
22
|
+
if (days_left <= warn) printf "PERMIT EXPIRING: %s — %s expires %s (%d days left)\n", $1, $2, $3, days_left;
|
|
23
|
+
}
|
|
24
|
+
' "{{food_handler_permits_csv}}"
|
|
25
|
+
variables:
|
|
26
|
+
food_handler_permits_csv:
|
|
27
|
+
default: "./food-handler-permits.csv"
|
|
28
|
+
description: "CSV with header row, columns: employee_name,permit_type,expiration_date (YYYY-MM-DD)."
|
|
29
|
+
warn_days_before:
|
|
30
|
+
default: 30
|
|
31
|
+
description: Days before expiration to start warning, giving time to schedule recertification.
|
|
32
|
+
compatible_agents: [generic, claude, codex]
|
|
33
|
+
notes: Requirements (which roles need a permit, renewal cadence) vary by state/county — confirm against your local health department before relying on this alone.
|