All packs
E-commerce

Store operations on autopilot β€” inventory, orders, reviews, reorders.

Your assistant watches inventory, triages orders and refunds, chases reviews, and flags reorders before you stock out.

$39one-time

6 skills Β· instant download

14-day refund on every pack β€” no questions asked. Guest checkout via Stripe β€” no account needed.

Prefer everything? The All-Access bundle includes this pack for $99.

Who it's for

Shopify / DTC operators drowning in daily store ops.

What changes after installing

Your assistant watches inventory, triages orders and refunds, chases reviews, and flags reorders before you stock out.

What's inside

6 skills, one job.

inventory-watch

Alert when SKUs cross a low-stock threshold; surface velocity so you reorder in time.

order-triage

Summarize the day's orders, flag risky/fraud-signal ones, and draft responses.

refund-assistant

Draft policy-consistent refund/return replies and log the reason.

review-requests

Time and draft post-delivery review requests per customer.

reorder-logicsample

Given sales velocity + lead time, recommend reorder quantities and timing.

daily-store-brief

A morning brief: sales, stockouts, refunds, and the 3 things to handle today.

See before you buy

Sample skill: reorder-logic

This is one of the actual skill files in the pack β€” the real SKILL.md, exactly as your assistant would load it. It shows the depth and shape of what you're buying.

reorder-logic/SKILL.md
---
name: reorder-logic
description: Recommend how much to reorder and when, from real sales velocity and supplier lead time β€” so you replenish before you stock out without over-ordering cash into shelves. Use when the user asks "what should I reorder" or "how much of X do I buy".
metadata: { "openclaw": { "emoji": "πŸ”" } }
---

# Reorder Logic

Turn sales velocity + supplier lead time into a concrete purchase order recommendation. The
goal is a boring, defensible number: enough to not stock out before the next shipment lands,
without parking cash in inventory you won't sell for months.

## When to use (trigger phrases)

Use this skill when the user says:

- "what should I reorder?"
- "how many units of SKU-XYZ should I buy?"
- "am I about to stock out on anything?"
- "build me a PO for [supplier]"
- "what's my reorder point on [product]?"

## How it works

Read config from `~/.openclaw/ecom-ops/config.json` (store, `apiVersion`, `leadTimeDaysDefault`,
`safetyDaysDefault`, `primaryLocationId`) and the token from `$SHOPIFY_ADMIN_TOKEN`.

1. **Pull sales velocity.** Sum units sold per variant over a trailing window (default 30 days;
   use 60–90 for slow movers). One order can have many line items, so aggregate by `sku` /
   `variant_id`, not by order.
   ```bash
   STORE=$(jq -r .store ~/.openclaw/ecom-ops/config.json)
   VER=$(jq -r .apiVersion ~/.openclaw/ecom-ops/config.json)
   SINCE=$(date -u -v-30d +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -d '30 days ago' +%Y-%m-%dT%H:%M:%SZ)
   curl -s "https://$STORE.myshopify.com/admin/api/$VER/orders.json?status=any&financial_status=paid&created_at_min=$SINCE&fields=line_items,created_at&limit=250" \
     -H "X-Shopify-Access-Token: $SHOPIFY_ADMIN_TOKEN" \
     | jq -r '.orders[].line_items[] | [.sku, .quantity] | @tsv' \
     | awk -F'\t' '{s[$1]+=$2} END{for(k in s) print k"\t"s[k]}'
   ```
   Paginate via the `Link` header (`rel="next"` + `page_info`) β€” a 30-day window on a real store
   is many pages. Exclude cancelled/refunded quantities so velocity isn't inflated.

2. **Compute daily velocity.** `velocity = units_sold / window_days`. If the product had a
   stockout inside the window, its true velocity is *higher* than observed β€” note that and, if
   you know the out-of-stock days, divide by in-stock days instead. This is the #1 way naive
   reorder math under-buys bestsellers.

3. **Get on-hand.** For each variant, resolve `inventory_item_id`, then read available at the
   primary location:
   ```bash
   curl -s "https://$STORE.myshopify.com/admin/api/$VER/inventory_levels.json?inventory_item_ids=$IIDS&location_ids=$LOC" \
     -H "X-Shopify-Access-Token: $SHOPIFY_ADMIN_TOKEN" | jq '.inventory_levels'
   ```
   Add inbound-but-unreceived units if the user tracks POs (ask; Shopify doesn't model this natively).

4. **Reorder point (when to buy).**
   `reorder_point = (velocity Γ— lead_time_days) + safety_stock`
   where `safety_stock = velocity Γ— safety_days`. Use the SKU's lead time / safety days if set,
   else the config defaults. If `on_hand ≀ reorder_point`, it needs a PO **now**.

5. **Order quantity (how much).** Order up to a target coverage window (default: cover
   `lead_time + review_cycle`, commonly 45–60 days):
   `order_qty = ceil((target_days Γ— velocity) βˆ’ on_hand βˆ’ inbound)`
   Then round to the supplier's case pack / MOQ (ask or read from config) and never go below
   MOQ. Cap at what clears before expiry for perishables.

6. **Sanity-check the cash.** Multiply `order_qty Γ— unit_cost` per line and show a PO subtotal.
   Flag any single line > 40% of the PO so the user notices concentration risk.

## Output

A per-supplier PO table plus a one-line rationale each. Example:

```
Supplier: Shenzhen Widgets Β· lead time 21d Β· safety 10d Β· target coverage 50d

SKU        On hand  Inbound  30d velocity  Days cover  Reorder pt  ORDER  Unit $  Line $
CBL-USBC   18       0        3.4/day       5.3d ⚠      106         200*    2.10    420.00   *rounded to 100-pack MOQ
HUB-7PORT  240      0        1.1/day       218d        44          0       β€”       β€”        healthy, skip
MAT-STD    9        50       6.0/day       9.8d† ⚠     130         320     4.80    1,536.00 †incl. 50 inbound

PO subtotal: $1,956.00  Β·  2 lines need action, 1 healthy
† had a 4-day stockout in the window β€” real velocity likely ~15% higher; consider +1 case.
```

Then ask: "Want me to draft this as a CSV / email to the supplier?" β€” but do not send anything
without explicit confirmation.

## Notes

- **This recommends; it does not purchase.** There's no auto-buy. The agent produces a PO the
  human reviews and places with the supplier.
- Velocity is a trailing average β€” it is blind to launches, promos, and seasonality. For a Q4
  or a known spike, tell the agent the multiplier ("plan for 2Γ— on gift SKUs") rather than
  trusting the 30-day number.
- Requires a Shopify custom app with `read_products`, `read_orders`, and `read_inventory`
  scopes; token in `$SHOPIFY_ADMIN_TOKEN` (never in the config JSON). See the pack README.
- Unit cost and MOQ/case pack aren't reliably in Shopify. Keep them in the config file or a
  `costs.csv` the agent reads; otherwise it will ask.
- Standard REST is a leaky bucket (~2 req/s, 40 burst). On a large catalog, prefer the GraphQL
  Admin API `inventoryItems`/`productVariants` bulk query to cut round-trips.

How to install

Live in a couple of minutes.

Unzip, copy the skill folders into ~/.openclaw/skills, and start a new OpenClaw session. The pack's README lists the trigger phrases and anything to configure.

01

Buy the pack

Guest checkout via Stripe β€” no account. Your card is charged once; the pack is yours.

02

Download the zip

You land on a private download page with a permanent link. Bookmark it β€” it's your receipt and re-download.

03

Drop it into your skills folder

Unzip and copy the skill folders into ~/.openclaw/skills (or your workspace's skills/ directory).

04

Start a new OpenClaw session

OpenClaw loads the new skills on the next session. Trigger them with the phrases in each pack's README.

Clawmart is an independent storefront and is not affiliated with or endorsed by OpenClaw.