@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,45 @@
|
|
|
1
|
+
id: gift-card-liability-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Gift Card Liability Reconciliation
|
|
4
|
+
description: >
|
|
5
|
+
Reconciles total outstanding gift card balance (liability) against
|
|
6
|
+
cards sold minus cards redeemed for the period, and flags a mismatch
|
|
7
|
+
worth investigating. Use this if you've ever had to guess at your
|
|
8
|
+
gift card liability for the books instead of actually reconciling it.
|
|
9
|
+
category: restaurant
|
|
10
|
+
tags: [restaurant, gift-cards, finance, reconciliation]
|
|
11
|
+
schedule: "0 9 1 * *"
|
|
12
|
+
timezone: "America/New_York"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
sold="{{gift_cards_sold_usd}}";
|
|
16
|
+
redeemed="{{gift_cards_redeemed_usd}}";
|
|
17
|
+
prior="{{prior_period_liability_usd}}";
|
|
18
|
+
ledger="{{current_ledger_balance_usd}}";
|
|
19
|
+
tolerance="{{variance_tolerance_usd}}";
|
|
20
|
+
expected=$(awk -v p="$prior" -v s="$sold" -v r="$redeemed" 'BEGIN{printf "%.2f", p+s-r}');
|
|
21
|
+
diff=$(awk -v e="$expected" -v l="$ledger" 'BEGIN{d=e-l; if (d<0) d=-d; printf "%.2f", d}');
|
|
22
|
+
if awk -v d="$diff" -v t="$tolerance" 'BEGIN{exit !(d > t)}'; then
|
|
23
|
+
echo "MISMATCH: expected liability \$$expected, ledger shows \$$ledger (diff \$$diff)";
|
|
24
|
+
exit 1;
|
|
25
|
+
else
|
|
26
|
+
echo "OK: gift card liability reconciles within tolerance (\$$diff diff)";
|
|
27
|
+
fi
|
|
28
|
+
variables:
|
|
29
|
+
gift_cards_sold_usd:
|
|
30
|
+
default: 0
|
|
31
|
+
description: Total value of gift cards sold during the period.
|
|
32
|
+
gift_cards_redeemed_usd:
|
|
33
|
+
default: 0
|
|
34
|
+
description: Total value of gift cards redeemed during the period.
|
|
35
|
+
prior_period_liability_usd:
|
|
36
|
+
default: 0
|
|
37
|
+
description: Outstanding gift card liability carried over from the prior period.
|
|
38
|
+
current_ledger_balance_usd:
|
|
39
|
+
default: 0
|
|
40
|
+
description: Current outstanding gift card balance as recorded in your accounting ledger.
|
|
41
|
+
variance_tolerance_usd:
|
|
42
|
+
default: 25
|
|
43
|
+
description: Dollar variance allowed before the reconciliation is flagged as a mismatch.
|
|
44
|
+
compatible_agents: [generic, claude, codex]
|
|
45
|
+
notes: This reconciles aggregate liability for the books, not individual card expiry — pair with a per-card expiry check if your state allows gift cards to expire.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
id: kitchen-ticket-time-watch
|
|
2
|
+
version: 1
|
|
3
|
+
name: Kitchen Ticket Time Watch
|
|
4
|
+
description: >
|
|
5
|
+
Reviews kitchen display system ticket times (fire to plate-up) and
|
|
6
|
+
flags stations or dayparts running consistently slower than target.
|
|
7
|
+
Use this if slow ticket times have ever driven complaints or comps
|
|
8
|
+
before anyone traced it back to a specific station falling behind.
|
|
9
|
+
category: restaurant
|
|
10
|
+
tags: [restaurant, kitchen, kds, speed-of-service]
|
|
11
|
+
schedule: "0 10 * * 1"
|
|
12
|
+
timezone: "America/New_York"
|
|
13
|
+
runner: agent-prompt
|
|
14
|
+
prompt: |
|
|
15
|
+
Pull ticket time data from {{kds_system}} for the past
|
|
16
|
+
{{lookback_days}} days, including station, item, fire time, and
|
|
17
|
+
plate-up time.
|
|
18
|
+
1. Calculate average ticket time overall and by station.
|
|
19
|
+
2. Flag any station averaging above {{target_minutes}} minutes, and
|
|
20
|
+
note whether the slowness is concentrated at specific dayparts
|
|
21
|
+
(peak lunch/dinner rushes vs. slow periods).
|
|
22
|
+
3. Identify the specific menu items driving the slowest tickets at
|
|
23
|
+
each flagged station.
|
|
24
|
+
4. Suggest one concrete fix per flagged station — additional prep,
|
|
25
|
+
station staffing, or menu item batching — without recommending
|
|
26
|
+
cutting a dish outright unless it's clearly the only lever.
|
|
27
|
+
variables:
|
|
28
|
+
kds_system:
|
|
29
|
+
default: "your kitchen display system"
|
|
30
|
+
description: Name of the KDS (e.g. "Toast KDS", "QSR Automations", "a manual ticket-time log").
|
|
31
|
+
lookback_days:
|
|
32
|
+
default: 14
|
|
33
|
+
description: Window of ticket data to analyze.
|
|
34
|
+
target_minutes:
|
|
35
|
+
default: 15
|
|
36
|
+
description: Target average ticket time in minutes before a station is flagged as running slow.
|
|
37
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
38
|
+
notes: Read-only speed-of-service analysis — pair with kitchen leadership before making staffing changes based on the findings.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
id: liquor-pour-cost-variance-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Liquor Pour Cost Variance Check
|
|
4
|
+
description: >
|
|
5
|
+
Compares each bottle's theoretical usage (from drinks sold) against
|
|
6
|
+
actual bottle depletion from inventory counts, and flags bottles
|
|
7
|
+
showing a variance that points to over-pouring, spillage, or theft.
|
|
8
|
+
Use this if the bar's overall liquor cost percentage looks fine but
|
|
9
|
+
you suspect a specific bottle is walking off faster than it's rung up.
|
|
10
|
+
category: restaurant
|
|
11
|
+
tags: [restaurant, bar, liquor-cost, inventory, loss-prevention]
|
|
12
|
+
schedule: "0 7 * * 1"
|
|
13
|
+
timezone: "America/New_York"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
awk -F',' -v tolerance="{{variance_tolerance_pct}}" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
{
|
|
19
|
+
if ($2 > 0) {
|
|
20
|
+
variance_pct = (($3 - $2) / $2) * 100;
|
|
21
|
+
absvar = (variance_pct < 0) ? -variance_pct : variance_pct;
|
|
22
|
+
if (absvar > tolerance) printf "POUR VARIANCE: %s — theoretical usage %.1f oz, actual depletion %.1f oz (%.1f%% variance)\n", $1, $2, $3, variance_pct;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
' "{{pour_cost_csv}}"
|
|
26
|
+
variables:
|
|
27
|
+
pour_cost_csv:
|
|
28
|
+
default: "./liquor-pour-cost.csv"
|
|
29
|
+
description: "CSV with header row, columns: bottle_name,theoretical_usage_oz,actual_depletion_oz — theoretical comes from POS drink sales times recipe pour size, actual from physical bottle counts."
|
|
30
|
+
variance_tolerance_pct:
|
|
31
|
+
default: 10
|
|
32
|
+
description: Percentage variance (either direction) allowed before a bottle is flagged.
|
|
33
|
+
compatible_agents: [generic, claude, codex]
|
|
34
|
+
notes: Distinct from food-cost-percentage-watch and menu-item-profitability-check — this drills into per-bottle variance at the bar rather than an overall cost ratio or a food dish's margin.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
id: menu-86-frequency-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: Menu Item 86 Frequency Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Reviews how often each menu item gets 86'd (marked sold out) mid-
|
|
6
|
+
service and flags items that run out repeatedly, which usually points
|
|
7
|
+
to a par-level or ordering problem rather than one bad night. Use
|
|
8
|
+
this if the same dish has ever been 86'd three Fridays in a row
|
|
9
|
+
before anyone connected the dots.
|
|
10
|
+
category: restaurant
|
|
11
|
+
tags: [restaurant, menu, kitchen, ordering, par-levels]
|
|
12
|
+
schedule: "0 10 * * 1"
|
|
13
|
+
timezone: "America/New_York"
|
|
14
|
+
runner: agent-prompt
|
|
15
|
+
prompt: |
|
|
16
|
+
Pull 86 (sold-out) log entries from {{pos_or_kitchen_log}} for the
|
|
17
|
+
past {{lookback_days}} days, including item name, time 86'd, and
|
|
18
|
+
time (if any) it came back available.
|
|
19
|
+
1. Rank menu items by number of times 86'd in the window.
|
|
20
|
+
2. For each item 86'd more than {{repeat_threshold}} times, note the
|
|
21
|
+
typical time of day/day of week it runs out, which suggests
|
|
22
|
+
whether it's a prep-quantity or a purchasing-quantity issue.
|
|
23
|
+
3. Flag any item that's been 86'd on back-to-back service days —
|
|
24
|
+
that's a stronger signal than scattered one-offs.
|
|
25
|
+
4. Suggest a par-level or prep-batch adjustment per repeatedly-86'd
|
|
26
|
+
item, distinct from a general waste-log review which looks at
|
|
27
|
+
over-ordering rather than under-ordering.
|
|
28
|
+
variables:
|
|
29
|
+
pos_or_kitchen_log:
|
|
30
|
+
default: "your POS 86 list or kitchen display system"
|
|
31
|
+
description: Where 86'd items get logged (e.g. "Toast 86 list", "a kitchen whiteboard log transcribed daily").
|
|
32
|
+
lookback_days:
|
|
33
|
+
default: 30
|
|
34
|
+
description: Window of 86-log history to analyze.
|
|
35
|
+
repeat_threshold:
|
|
36
|
+
default: 3
|
|
37
|
+
description: Minimum number of times an item must be 86'd in the window to be called out individually.
|
|
38
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
39
|
+
notes: Complements inventory-waste-log-review — that job catches over-ordering (waste), this one catches under-ordering (running out).
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
id: menu-item-profitability-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Menu Item Profitability Check
|
|
4
|
+
description: >
|
|
5
|
+
Compares each menu item's plate cost against its menu price and flags
|
|
6
|
+
items whose contribution margin has dropped below target. Use this if
|
|
7
|
+
an ingredient cost has ever crept up on a specific dish until it was
|
|
8
|
+
quietly losing money on every order, unlike the overall food-cost
|
|
9
|
+
percentage which only shows the average.
|
|
10
|
+
category: restaurant
|
|
11
|
+
tags: [restaurant, menu-engineering, margin, food-cost]
|
|
12
|
+
schedule: "0 8 1 * *"
|
|
13
|
+
timezone: "America/New_York"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
awk -F',' -v target="{{min_margin_pct}}" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
{
|
|
19
|
+
if ($3 > 0) {
|
|
20
|
+
margin_pct = (($3 - $2) / $3) * 100;
|
|
21
|
+
if (margin_pct < target) printf "LOW MARGIN: %s — plate cost $%.2f, price $%.2f, margin %.1f%% (target %.0f%%)\n", $1, $2, $3, margin_pct, target;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
' "{{menu_cost_csv}}"
|
|
25
|
+
variables:
|
|
26
|
+
menu_cost_csv:
|
|
27
|
+
default: "./menu-item-costs.csv"
|
|
28
|
+
description: "CSV with header row, columns: item_name,plate_cost_usd,menu_price_usd — one row per active menu item."
|
|
29
|
+
min_margin_pct:
|
|
30
|
+
default: 65
|
|
31
|
+
description: Minimum acceptable contribution margin percentage before an item is flagged.
|
|
32
|
+
compatible_agents: [generic, claude, codex]
|
|
33
|
+
notes: Rebuild menu-item-costs.csv whenever a recipe or ingredient price changes — this compares per-item margin, not the restaurant-wide average that food-cost-percentage-watch checks.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
id: pos-end-of-day-reconciliation-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: POS End-of-Day Reconciliation Check
|
|
4
|
+
description: >
|
|
5
|
+
Compares the POS system's expected cash-drawer total against what was
|
|
6
|
+
actually counted at close and flags any shift over the acceptable
|
|
7
|
+
variance. Use this if a drawer has ever come up short (or suspiciously
|
|
8
|
+
over) and nobody traced it back to which shift it happened on.
|
|
9
|
+
category: restaurant
|
|
10
|
+
tags: [restaurant, pos, cash-handling, reconciliation]
|
|
11
|
+
schedule: "0 6 * * *"
|
|
12
|
+
timezone: "America/New_York"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
awk -F',' -v tolerance="{{variance_tolerance_usd}}" '
|
|
16
|
+
NR==1 {next}
|
|
17
|
+
{
|
|
18
|
+
diff = $4 - $3;
|
|
19
|
+
absdiff = (diff < 0) ? -diff : diff;
|
|
20
|
+
if (absdiff > tolerance) printf "VARIANCE: %s shift %s — expected $%.2f, counted $%.2f (diff $%.2f)\n", $1, $2, $3, $4, diff;
|
|
21
|
+
}
|
|
22
|
+
' "{{eod_close_csv}}"
|
|
23
|
+
variables:
|
|
24
|
+
eod_close_csv:
|
|
25
|
+
default: "./eod-close-log.csv"
|
|
26
|
+
description: "CSV with header row, columns: close_date,shift_name,pos_expected_usd,counted_usd — one row per drawer close."
|
|
27
|
+
variance_tolerance_usd:
|
|
28
|
+
default: 10
|
|
29
|
+
description: Dollar variance (either direction) allowed before a shift close is flagged.
|
|
30
|
+
compatible_agents: [generic, claude, codex]
|
|
31
|
+
notes: Export the close log from your POS's end-of-day/drawer-count report — this only compares totals, it doesn't investigate the cause of a variance.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
id: table-turnover-rate-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: Table Turnover Rate Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Analyzes seating and table-clear timestamps to calculate average
|
|
6
|
+
table turnover time by section, day, and shift, and flags where
|
|
7
|
+
tables are sitting occupied well past the typical dining window. Use
|
|
8
|
+
this if you suspect one section or server is quietly slowing down
|
|
9
|
+
the whole dining room's throughput on busy nights.
|
|
10
|
+
category: restaurant
|
|
11
|
+
tags: [restaurant, front-of-house, tables, throughput]
|
|
12
|
+
schedule: "0 10 * * 1"
|
|
13
|
+
timezone: "America/New_York"
|
|
14
|
+
runner: agent-prompt
|
|
15
|
+
prompt: |
|
|
16
|
+
Pull seated and table-cleared timestamps from {{pos_or_reservation_system}}
|
|
17
|
+
for the past {{lookback_days}} days.
|
|
18
|
+
1. Calculate average table turnover time (seated to cleared) overall,
|
|
19
|
+
then broken down by section, day of week, and shift (lunch/dinner).
|
|
20
|
+
2. Flag any section or shift where average turnover time is
|
|
21
|
+
meaningfully above the overall average, and estimate the covers
|
|
22
|
+
lost to the slowdown based on typical table demand at that time.
|
|
23
|
+
3. Note any pattern tied to a specific server or table size, if that
|
|
24
|
+
data is available, without naming individuals punitively — this is
|
|
25
|
+
for staffing/floor-plan decisions, not performance write-ups.
|
|
26
|
+
4. Recommend one concrete adjustment (seating flow, bussing staffing,
|
|
27
|
+
course pacing) for the slowest-flagged segment.
|
|
28
|
+
variables:
|
|
29
|
+
pos_or_reservation_system:
|
|
30
|
+
default: "your POS or table-management system"
|
|
31
|
+
description: System that logs seat and clear timestamps (e.g. "Toast", "OpenTable", "SevenRooms").
|
|
32
|
+
lookback_days:
|
|
33
|
+
default: 14
|
|
34
|
+
description: Window of turnover data to analyze.
|
|
35
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
36
|
+
notes: Read-only analysis for floor-plan and staffing decisions — do not use this to single out individual servers without corroborating context.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
id: waitlist-conversion-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Waitlist-to-Seated Conversion Check
|
|
4
|
+
description: >
|
|
5
|
+
Analyzes waitlist app data to see what share of people who joined the
|
|
6
|
+
waitlist actually got seated versus walked away, and whether quoted
|
|
7
|
+
wait times matched reality. Use this if you suspect an overly
|
|
8
|
+
optimistic quoted wait time is quietly driving guests to leave before
|
|
9
|
+
their table is ready.
|
|
10
|
+
category: restaurant
|
|
11
|
+
tags: [restaurant, front-of-house, waitlist, guest-experience]
|
|
12
|
+
schedule: "0 11 * * 1"
|
|
13
|
+
timezone: "America/New_York"
|
|
14
|
+
runner: agent-prompt
|
|
15
|
+
prompt: |
|
|
16
|
+
Pull waitlist entries from {{waitlist_app}} for the past
|
|
17
|
+
{{lookback_days}} days, including join time, quoted wait, actual seated
|
|
18
|
+
time (or abandoned/no-show status), and party size.
|
|
19
|
+
1. Calculate overall waitlist-to-seated conversion rate and the
|
|
20
|
+
abandonment rate (left before being seated).
|
|
21
|
+
2. Compare quoted wait time to actual wait time — flag any pattern
|
|
22
|
+
where actual wait consistently runs longer than quoted, which
|
|
23
|
+
likely drives abandonment.
|
|
24
|
+
3. Break down conversion rate by day of week, time slot, and party
|
|
25
|
+
size — flag the weakest-converting segments.
|
|
26
|
+
4. Recommend whether quoted wait times need adjusting for the
|
|
27
|
+
flagged segments, or whether a text-notification/callback flow
|
|
28
|
+
would reduce walk-aways.
|
|
29
|
+
variables:
|
|
30
|
+
waitlist_app:
|
|
31
|
+
default: "your waitlist/reservation app"
|
|
32
|
+
description: Name of the waitlist system (e.g. "Yelp Waitlist", "NoWait", "Toast Tables").
|
|
33
|
+
lookback_days:
|
|
34
|
+
default: 30
|
|
35
|
+
description: Window of waitlist history to analyze.
|
|
36
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
37
|
+
notes: Read-only analysis — any change to quoted-wait logic or staffing is a floor-management decision for a human to make.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
id: cash-office-deposit-variance-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Cash Office Deposit Variance Check
|
|
4
|
+
description: >
|
|
5
|
+
Compares the bank deposit slip amount against the store's total
|
|
6
|
+
reported cash sales for the day and flags a mismatch. Use this if a
|
|
7
|
+
bank deposit has ever come up short of what the registers reported for
|
|
8
|
+
days before anyone in accounting reconciled it back to a specific
|
|
9
|
+
store.
|
|
10
|
+
category: retail
|
|
11
|
+
tags: [retail, cash, deposit, reconciliation]
|
|
12
|
+
schedule: "0 10 * * *"
|
|
13
|
+
timezone: "America/New_York"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
awk -F',' -v tolerance="{{tolerance_usd}}" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
{
|
|
19
|
+
diff = $2 - $3;
|
|
20
|
+
abs_diff = (diff < 0) ? -diff : diff;
|
|
21
|
+
if (abs_diff > tolerance) {
|
|
22
|
+
printf "DEPOSIT VARIANCE: store %s — reported cash $%.2f, bank deposit $%.2f (diff $%.2f)\n", $1, $2, $3, diff;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
' "{{deposit_log_csv}}"
|
|
26
|
+
variables:
|
|
27
|
+
deposit_log_csv:
|
|
28
|
+
default: "./cash-deposit-log.csv"
|
|
29
|
+
description: "CSV with header row, columns: store_id,pos_reported_cash_total,bank_deposit_amount — one row per store per deposit day."
|
|
30
|
+
tolerance_usd:
|
|
31
|
+
default: 10.00
|
|
32
|
+
description: Acceptable variance in dollars between reported cash and the actual bank deposit before flagging.
|
|
33
|
+
compatible_agents: [generic, claude, codex]
|
|
34
|
+
notes: Distinct from `pos-till-reconciliation-check` (per-register count at close) — this checks the far end of the process, the actual bank deposit against total reported store cash.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
id: competitor-price-monitoring-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Competitor Price Monitoring Check
|
|
4
|
+
description: >
|
|
5
|
+
Reviews a nearby competitor's weekly ad/flyer or in-store price shots
|
|
6
|
+
against your own shelf prices for a shortlist of high-traffic items.
|
|
7
|
+
Use this if you've ever found out you were losing foot traffic to a
|
|
8
|
+
competitor's price on a staple item only because a customer mentioned
|
|
9
|
+
it at the register.
|
|
10
|
+
category: retail
|
|
11
|
+
tags: [retail, pricing, competitor, monitoring]
|
|
12
|
+
schedule: "0 9 * * 5"
|
|
13
|
+
timezone: "America/New_York"
|
|
14
|
+
runner: agent-prompt
|
|
15
|
+
prompt: |
|
|
16
|
+
Compare the competitor's current weekly ad/flyer or in-store price
|
|
17
|
+
photos ({{competitor_source_path}}) against our own shelf prices
|
|
18
|
+
({{our_price_list_csv}}) for the tracked item list.
|
|
19
|
+
1. For each tracked item, find the competitor's current price if it
|
|
20
|
+
appears in the source material.
|
|
21
|
+
2. Flag any item where the competitor's price is at least
|
|
22
|
+
${{diff_threshold_usd}} cheaper than ours.
|
|
23
|
+
3. Note any item the competitor doesn't appear to be carrying anymore
|
|
24
|
+
versus one you simply couldn't find a price for.
|
|
25
|
+
4. Summarize as a short list ranked by dollar gap, for the store
|
|
26
|
+
manager to decide on a price-match or promo response this week.
|
|
27
|
+
variables:
|
|
28
|
+
competitor_source_path:
|
|
29
|
+
default: "./competitor-flyers/"
|
|
30
|
+
description: Folder of this week's competitor flyer scans or in-store price photos.
|
|
31
|
+
our_price_list_csv:
|
|
32
|
+
default: "./tracked-items-price-list.csv"
|
|
33
|
+
description: "CSV with columns: sku,item_name,our_price — the shortlist of high-traffic items being watched."
|
|
34
|
+
diff_threshold_usd:
|
|
35
|
+
default: 1.00
|
|
36
|
+
description: Minimum price gap in dollars worth flagging.
|
|
37
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
38
|
+
notes: >
|
|
39
|
+
Physical-store competitor price checks off flyers/photos, distinct from
|
|
40
|
+
ecommerce's `competitor-price-watch`, which scrapes a competitor's live
|
|
41
|
+
product page URL per SKU — there's no comparable URL for a
|
|
42
|
+
brick-and-mortar competitor's shelf price. See duplicates-allowlist.js.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
id: damaged-merchandise-writeoff-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: Damaged Merchandise Write-Off Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Reviews logged damaged/defective merchandise write-offs for patterns
|
|
6
|
+
worth a closer look — a single SKU with a recurring damage reason, or
|
|
7
|
+
one store writing off well above the chain average. Use this if
|
|
8
|
+
write-offs have ever just gotten rubber-stamped monthly instead of
|
|
9
|
+
getting checked for a root cause (bad packaging, a rough receiving
|
|
10
|
+
process, or something less innocent).
|
|
11
|
+
category: retail
|
|
12
|
+
tags: [retail, damage, write-off, loss-prevention]
|
|
13
|
+
schedule: "0 8 1 * *"
|
|
14
|
+
timezone: "UTC"
|
|
15
|
+
runner: agent-prompt
|
|
16
|
+
prompt: |
|
|
17
|
+
Review this period's damaged merchandise write-off log
|
|
18
|
+
({{writeoff_log_path}}) across stores.
|
|
19
|
+
1. Identify any SKU that recurs as a write-off reason more than
|
|
20
|
+
{{recurring_sku_threshold}} times — that points at a packaging or
|
|
21
|
+
handling issue worth escalating to the vendor or receiving process,
|
|
22
|
+
not just re-approving the write-off.
|
|
23
|
+
2. Flag any store whose total write-off dollar amount is more than
|
|
24
|
+
{{store_outlier_multiplier}}x the average store in the file.
|
|
25
|
+
3. Separate write-offs with a documented cause (damaged in transit,
|
|
26
|
+
customer damage, expired) from those marked "unknown" — a high rate
|
|
27
|
+
of "unknown" is itself worth flagging.
|
|
28
|
+
4. Summarize findings in a short list a loss-prevention or merchandising
|
|
29
|
+
manager could act on.
|
|
30
|
+
variables:
|
|
31
|
+
writeoff_log_path:
|
|
32
|
+
default: "./damaged-merchandise-writeoffs.csv"
|
|
33
|
+
description: "CSV with columns: store_id,sku,writeoff_amount,reason — one row per write-off in the period."
|
|
34
|
+
recurring_sku_threshold:
|
|
35
|
+
default: 3
|
|
36
|
+
description: Number of times a SKU must recur as a write-off before flagging a possible systemic cause.
|
|
37
|
+
store_outlier_multiplier:
|
|
38
|
+
default: 2
|
|
39
|
+
description: How many times the average store's write-off total counts as an outlier worth flagging.
|
|
40
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
41
|
+
notes: Judging what counts as a meaningful pattern versus normal variance across stores and reasons needs an agent, not a fixed threshold script.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
id: employee-discount-abuse-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Employee Discount Abuse Check
|
|
4
|
+
description: >
|
|
5
|
+
Reviews employee discount usage for patterns that look like abuse —
|
|
6
|
+
unusually high dollar volume, discounts applied to gift cards, or
|
|
7
|
+
discounts rung up under an employee's number when they weren't
|
|
8
|
+
scheduled to work. Use this if employee-discount abuse has ever quietly
|
|
9
|
+
eaten margin for months because each transaction looked fine in
|
|
10
|
+
isolation.
|
|
11
|
+
category: retail
|
|
12
|
+
tags: [retail, employee-discount, fraud, loss-prevention]
|
|
13
|
+
schedule: "0 7 1 * *"
|
|
14
|
+
timezone: "UTC"
|
|
15
|
+
runner: agent-prompt
|
|
16
|
+
prompt: |
|
|
17
|
+
Review this period's employee discount transaction log
|
|
18
|
+
({{discount_log_path}}) against the shift schedule
|
|
19
|
+
({{schedule_csv_path}}).
|
|
20
|
+
1. Flag any employee whose total discounted purchase volume for the
|
|
21
|
+
period exceeds ${{monthly_volume_threshold_usd}}.
|
|
22
|
+
2. Flag any discount applied to a gift card purchase — most policies
|
|
23
|
+
disallow this.
|
|
24
|
+
3. Cross-reference discount timestamps against the schedule and flag
|
|
25
|
+
any discount rung up on a day the employee wasn't scheduled to work
|
|
26
|
+
(a common sign of a shared or misused employee number).
|
|
27
|
+
4. Summarize flagged employees with the specific reason for each flag.
|
|
28
|
+
variables:
|
|
29
|
+
discount_log_path:
|
|
30
|
+
default: "./employee-discount-log.csv"
|
|
31
|
+
description: "CSV with columns: employee_id,transaction_date,amount,item_type,discount_pct."
|
|
32
|
+
schedule_csv_path:
|
|
33
|
+
default: "./employee-schedule.csv"
|
|
34
|
+
description: CSV of scheduled shifts to cross-reference against discount timestamps.
|
|
35
|
+
monthly_volume_threshold_usd:
|
|
36
|
+
default: 500
|
|
37
|
+
description: Total discounted purchase volume per employee in the period that triggers a flag.
|
|
38
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
39
|
+
notes: A flag is a prompt for HR/loss prevention review, not an accusation — cross-referencing two data sources and judging intent needs an agent, not a fixed script.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
id: layaway-special-order-pickup-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: Layaway & Special Order Pickup Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Flags layaway and special-order items that have been ready for pickup
|
|
6
|
+
past a set number of days. Use this if a paid-for special order has
|
|
7
|
+
ever sat in the back room for weeks because nobody was tracking pickup
|
|
8
|
+
age, only whether the item had arrived.
|
|
9
|
+
category: retail
|
|
10
|
+
tags: [retail, layaway, special-order, customer-service]
|
|
11
|
+
schedule: "0 9 * * 2"
|
|
12
|
+
timezone: "America/New_York"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
today=$(date +%s);
|
|
16
|
+
awk -F',' -v today="$today" -v warn={{overdue_days_threshold}} '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
$4 == "ready" {
|
|
19
|
+
cmd="date -d \"" $3 "\" +%s 2>/dev/null || date -jf \"%Y-%m-%d\" \"" $3 "\" +%s";
|
|
20
|
+
cmd | getline ready_ts; close(cmd);
|
|
21
|
+
days_waiting = int((today - ready_ts) / 86400);
|
|
22
|
+
if (days_waiting >= warn) printf "OVERDUE PICKUP: order %s for %s ready %d days (since %s)\n", $1, $2, days_waiting, $3;
|
|
23
|
+
}
|
|
24
|
+
' "{{orders_csv}}"
|
|
25
|
+
variables:
|
|
26
|
+
orders_csv:
|
|
27
|
+
default: "./layaway-special-orders.csv"
|
|
28
|
+
description: "CSV with header row, columns: order_id,customer_name,ready_date(YYYY-MM-DD),status(pending/ready/picked-up)."
|
|
29
|
+
overdue_days_threshold:
|
|
30
|
+
default: 14
|
|
31
|
+
description: Days an order can sit marked "ready" before it counts as overdue for pickup.
|
|
32
|
+
compatible_agents: [generic, claude, codex]
|
|
33
|
+
notes: A long-overdue pickup is worth a courtesy call before it becomes a restocking/refund headache or a customer dispute.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
id: loyalty-enrollment-redemption-rate-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: Loyalty Enrollment & Redemption Rate Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Tracks new loyalty program enrollments and reward redemptions against
|
|
6
|
+
targets, not just whether individual points are about to expire. Use
|
|
7
|
+
this if enrollment has ever quietly stalled, or redemption has ever
|
|
8
|
+
dropped off a cliff, for months before anyone looked at the trend.
|
|
9
|
+
category: retail
|
|
10
|
+
tags: [retail, loyalty, customers, rewards, metrics]
|
|
11
|
+
schedule: "0 8 1 * *"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
awk -F',' -v enroll_target="{{monthly_enrollment_target}}" -v redeem_floor="{{redemption_rate_floor_pct}}" '
|
|
16
|
+
NR==1 {next}
|
|
17
|
+
{ enrolled += $2; redeemed += $3; eligible += $4 }
|
|
18
|
+
END {
|
|
19
|
+
redeem_pct = (eligible > 0) ? (redeemed / eligible) * 100 : 0;
|
|
20
|
+
printf "New enrollments this period: %d (target %d)\n", enrolled, enroll_target;
|
|
21
|
+
if (enrolled < enroll_target) printf "BELOW TARGET: enrollment %d short of target %d\n", enroll_target - enrolled, enroll_target;
|
|
22
|
+
printf "Redemption rate: %.1f%% (%d redeemed of %d eligible)\n", redeem_pct, redeemed, eligible;
|
|
23
|
+
if (redeem_pct < redeem_floor) printf "LOW REDEMPTION: %.1f%% is below the %.1f%% floor\n", redeem_pct, redeem_floor;
|
|
24
|
+
}
|
|
25
|
+
' "{{loyalty_activity_csv}}"
|
|
26
|
+
variables:
|
|
27
|
+
loyalty_activity_csv:
|
|
28
|
+
default: "./loyalty-activity.csv"
|
|
29
|
+
description: "CSV with header row, columns: store_id,new_enrollments,points_redeemed,points_eligible_for_redemption — one row per store or period."
|
|
30
|
+
monthly_enrollment_target:
|
|
31
|
+
default: 100
|
|
32
|
+
description: Target number of new loyalty enrollments for the period across the file.
|
|
33
|
+
redemption_rate_floor_pct:
|
|
34
|
+
default: 20
|
|
35
|
+
description: Minimum acceptable redemption rate (redeemed / eligible) before flagging.
|
|
36
|
+
compatible_agents: [generic, claude, codex]
|
|
37
|
+
notes: Complements `loyalty-points-expiry-reminder` (individual point expiry) by tracking program health as an aggregate trend — enrollment growth and redemption engagement, not per-customer expiry.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
id: markdown-execution-audit-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Markdown Execution Audit Check
|
|
4
|
+
description: >
|
|
5
|
+
Confirms that approved markdowns were actually applied at the register,
|
|
6
|
+
not just flagged as candidates. Use this if a markdown has ever been
|
|
7
|
+
approved on paper but never keyed into the POS, so the item kept
|
|
8
|
+
ringing at full price for weeks while it sat on the clearance rack.
|
|
9
|
+
category: retail
|
|
10
|
+
tags: [retail, markdown, pricing, audit]
|
|
11
|
+
schedule: "0 8 * * 2"
|
|
12
|
+
timezone: "America/New_York"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
awk -F',' '
|
|
16
|
+
NR==1 {next}
|
|
17
|
+
{
|
|
18
|
+
approved = $2; pos_current = $3;
|
|
19
|
+
if (approved != pos_current) {
|
|
20
|
+
printf "NOT APPLIED: SKU %s — approved markdown price $%s, POS still shows $%s\n", $1, approved, pos_current;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
' "{{markdown_approvals_csv}}"
|
|
24
|
+
variables:
|
|
25
|
+
markdown_approvals_csv:
|
|
26
|
+
default: "./markdown-approvals.csv"
|
|
27
|
+
description: "CSV with header row, columns: sku,approved_markdown_price,pos_current_price — one row per approved markdown."
|
|
28
|
+
compatible_agents: [generic, claude, codex]
|
|
29
|
+
notes: Complements `markdown-aging-inventory-check` (flags candidates for markdown) by auditing the other end — whether an already-approved markdown was actually executed at the register.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
id: planogram-compliance-audit-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Planogram Compliance Audit Check
|
|
4
|
+
description: >
|
|
5
|
+
Reviews a store's shelf/floor photos against the current planogram and
|
|
6
|
+
flags sections that are out of compliance. Use this if a reset has ever
|
|
7
|
+
quietly drifted out of plan for weeks — wrong facings, missing
|
|
8
|
+
end-caps, product in the wrong bay — before a district visit caught it.
|
|
9
|
+
category: retail
|
|
10
|
+
tags: [retail, planogram, merchandising, compliance]
|
|
11
|
+
schedule: "0 8 * * 3"
|
|
12
|
+
timezone: "America/New_York"
|
|
13
|
+
runner: agent-prompt
|
|
14
|
+
prompt: |
|
|
15
|
+
Compare this week's shelf photos ({{shelf_photos_path}}) against the
|
|
16
|
+
current planogram document ({{planogram_doc_path}}) for store
|
|
17
|
+
{{store_id}}.
|
|
18
|
+
1. Go section by section and note any bay where product placement,
|
|
19
|
+
facing count, or signage doesn't match the planogram.
|
|
20
|
+
2. Flag missing or expired promotional signage separately from pure
|
|
21
|
+
placement drift.
|
|
22
|
+
3. Rank findings by sections that drive the most revenue first (per the
|
|
23
|
+
planogram's priority notes, if included).
|
|
24
|
+
4. Produce a short punch list a store associate could act on today.
|
|
25
|
+
variables:
|
|
26
|
+
shelf_photos_path:
|
|
27
|
+
default: "./planogram-photos/"
|
|
28
|
+
description: Folder or path containing this cycle's shelf/section photos for the store.
|
|
29
|
+
planogram_doc_path:
|
|
30
|
+
default: "./current-planogram.pdf"
|
|
31
|
+
description: Path to the current approved planogram document or image set.
|
|
32
|
+
store_id:
|
|
33
|
+
default: "store-001"
|
|
34
|
+
description: Identifier for the store being audited.
|
|
35
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
36
|
+
notes: Needs visual comparison and judgment about what counts as meaningful drift versus a shopper-caused mess — not a fit for a fixed script.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
id: pos-void-refund-anomaly-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: POS Void & Refund Anomaly Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Flags cashiers or registers with an unusually high rate of transaction
|
|
6
|
+
voids and refunds instead of treating each one as an isolated event.
|
|
7
|
+
Use this if register-level fraud or sweethearting has ever gone
|
|
8
|
+
unnoticed for months because void/refund activity was never rolled up
|
|
9
|
+
per employee.
|
|
10
|
+
category: retail
|
|
11
|
+
tags: [retail, pos, fraud, loss-prevention]
|
|
12
|
+
schedule: "0 7 * * 1"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
awk -F',' -v void_pct_max="{{void_rate_threshold_pct}}" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
{
|
|
19
|
+
employee[$1] += 1;
|
|
20
|
+
total[$1] += 1;
|
|
21
|
+
if ($2 == "void" || $2 == "refund") flagged[$1] += 1;
|
|
22
|
+
}
|
|
23
|
+
END {
|
|
24
|
+
for (e in total) {
|
|
25
|
+
if (total[e] > 0) {
|
|
26
|
+
pct = (flagged[e] / total[e]) * 100;
|
|
27
|
+
if (pct >= void_pct_max) {
|
|
28
|
+
printf "HIGH VOID/REFUND RATE: %s — %.1f%% of %d transactions (%d void/refund)\n", e, pct, total[e], flagged[e];
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
' "{{transactions_csv_path}}"
|
|
34
|
+
variables:
|
|
35
|
+
transactions_csv_path:
|
|
36
|
+
default: "./pos-transactions.csv"
|
|
37
|
+
description: "Path to a CSV with columns: employee_id,transaction_type (sale/void/refund) — one row per transaction in the period."
|
|
38
|
+
void_rate_threshold_pct:
|
|
39
|
+
default: 8
|
|
40
|
+
description: Percentage of an employee's transactions that are voids/refunds before flagging for review.
|
|
41
|
+
compatible_agents: [generic, claude, codex]
|
|
42
|
+
notes: A flag is a prompt for a manager to review video/receipts, not proof of wrongdoing — some roles (returns desk) will legitimately run higher.
|