Generated banner for Inventory Planner
Generated logo for Inventory Planner

Inventory Planner

AnthropicOfficialPublished by Anthropic

  • Skill
  • Workflow
  • Business and productivity
  • Apache-2.0
  • No issues found

From the author

Works out what to reorder and when, from what is actually selling: pulls sales history and stock on hand from Shopify, Square, NetSuite, or an uploaded CSV, computes 7-day and 28-day sales velocity per item, projects a conservative stockout date for each, sizes a 60-day reorder quantity, and drafts the purchase orders and vendor emails to cover it. Flags the money sitting still too — overstock, dead stock, and zero-velocity items, reported as slow movers to clear rather than things to buy more of. Seasonality is applied where the history supports it and named where it does not. Nothing is ordered and no vendor is emailed without approval. Reach for this whenever stock comes up — "what do I need to reorder," "am I going to run out," "what should I order this month," "we keep running out of filters," "how much cash is sitting in the warehouse," "what is not moving," or "draft a PO for my supplier."
— the description by Anthropic

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

Inventory Planner helps businesses optimize stock levels by analyzing sales history and current inventory. It calculates sales velocity over 7-day and 28-day windows to project stockout dates and determine appropriate reorder quantities. The skill distinguishes between items that need replenishment and those that are stagnant, providing clear visibility into cash tied up in overstock or dead stock. It supports data ingestion from major platforms like Shopify, Square, and NetSuite, or via CSV, and ensures all purchase orders and vendor communications are reviewed and approved by the user before execution.

What it does

  • Computes 7-day and 28-day sales velocity to identify trends.
  • Projects conservative stockout dates based on current inventory and demand.
  • Sizes 60-day reorder quantities while accounting for lead times and inbound stock.
  • Flags overstock, dead stock, and zero-velocity items to improve cash flow.
  • Drafts professional purchase orders and vendor emails for user approval.
  • Applies seasonal adjustments only when sufficient historical data is available.

When to use it

  • When you need to determine which items to reorder to prevent stockouts.
  • When you want to identify stagnant inventory that is tying up cash.
  • When preparing to place orders with suppliers and needing draft documentation.
  • When you need a clear report on warehouse cash value and stock health.

Advantages

  • Prevents lost sales by identifying items nearing stockout status.
  • Reduces capital tied up in dead or slow-moving inventory.
  • Ensures reorder quantities are based on actual sales data rather than guesswork.
  • Provides transparency into the reasoning behind every reorder recommendation.
  • Maintains control by requiring explicit approval for all financial commitments.

Usage examples

“What do I need to reorder this month?”
The agent analyzes your sales history and current stock to present a prioritized list of items to reorder, including quantities and estimated costs.
“How much cash is sitting in the warehouse?”
The agent identifies slow-moving and dead stock, calculating the total dollar value of items that are not currently generating sales.
“Draft a PO for my supplier.”
The agent generates a purchase order and a corresponding vendor email based on your current stock needs for your review and approval.
“Am I going to run out of filters?”
The agent checks the sales velocity and current stock of your filters to report if you are at risk of a stockout and if there is still time to reorder.

Install

  1. Download the skill as a ZIP:

    https://mp-staging.autogineer.com/agent-skills/anthropics/inventory-planner/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip inventory-planner.zip -d .agents/skills

Documentation by Anthropic

Inventory Planner

Buy what sells, before it runs out, and stop buying what doesn't.

Stock is cash the owner already spent. Two things go wrong: running out of the item customers came for, and sitting on a pallet of something nobody wants. Both are visible in the sales history well before they become a problem, which is what this skill reads for.

Step 1 — Get sales and stock

Preferred: Shopify for sales and inventory levels. Square and NetSuite work the same way.

Fallback, fully supported: a CSV of sales history plus a stock-on-hand count. Two files, or one with both. This path works with zero connectors and gives the same output. Many businesses count on a clipboard, and that is a legitimate input.

You need, per item: SKU, name, units sold by date, current stock on hand, unit cost, unit price, vendor, and lead time if known. Missing lead time is asked for once and remembered — see reference/data_sources.md.

Say what the count is as of. A stock figure two weeks old produces a stockout date two weeks wrong.

Step 2 — Compute velocity, both windows

For every item, compute:

  • 7-day velocity — units per day over the last week. Catches what is happening now.

  • 28-day velocity — units per day over four weeks. The stable baseline.

Both matter, and disagreement between them is information. An item selling three times its 28-day rate this week is either trending or had one bulk order, and those need different responses. reference/velocity_and_reorder.md covers how to tell them apart.

Exclude one-off distortions from the baseline where you can identify them: a single wholesale order, a returned batch, a stockout period where the item could not sell. A period of zero sales because there was no stock is not zero demand, and treating it as such is how an item gets under-ordered forever.

Step 3 — Project stockout dates, conservatively

Stockout date is stock on hand divided by the daily velocity you trust least — the higher of the two windows. Being early is cheap; being late loses the sale.

Then compare against lead time. The number that matters is not when it runs out, it is whether there is still time to order:

  • Past the point of no return — lead time exceeds days of cover. Already going to stock out. Say so plainly.

  • Order now — cover is within lead time plus a safety buffer.

  • Order soon — comfortable, but on the next cycle.

  • Fine — no action.

Never state a stockout date for an item with no reliable velocity. New items with two weeks of history and items whose sales were interrupted get flagged as "not enough history," by name.

Step 4 — Size the reorder

Default target is 60 days of cover plus the lead time, sized on the 28-day rate — not on the faster of the two. The stock has to last from the day it lands until the next order lands, so leaving the lead time out runs the item short by exactly that many days every cycle. Then adjust for pack size, minimum order quantity, and what is already on order.

The two rates do different jobs and both get named on the line: the higher one says when it runs out, the 28-day one says how much to buy. Sizing a 60-day order off a one-week spike is how cash ends up in a pallet.

Never size a reorder without subtracting inbound stock. Double-ordering a slow item is how a business ends up with three years of it.

Round to the vendor's pack size and say which direction you rounded. Show the dollar cost of every recommendation — the owner is deciding about cash, not units.

Step 5 — Handle the items that are not moving

Zero-velocity and very slow items are a separate list with a separate purpose. They are never reorder candidates.

  • Zero velocity — no units in 28 days. Report as a slow mover with the cash tied up in it. Never compute days of cover for these — nothing is selling, so nothing is running out, and the number is either an error or nonsense. The one exception is an item inside a season the owner has named, which goes on a dated watch list instead of the clear-out list.

  • Overstock — more than 120 days of cover. Report the excess units and the dollars.

  • Dead stock — no movement in 90 days. Suggest clearing, bundling, or discounting.

Total the cash sitting in these. That figure is usually the most surprising number in the whole report and often the most useful one.

Step 6 — Apply seasonality only where history supports it

With at least a year of history, compare the coming period against the same period last year and adjust.

With less than a year, say so and do not adjust. A seasonal multiplier invented from nine months of data is a guess wearing a suit. Ask the owner instead — they know their season better than a short history does. reference/seasonality.md covers both paths.

Step 7 — Present the buy list

Lead with the total dollar amount and the count of items about to stock out. Then: order now, order soon, slow movers, and anything with too little history to judge.

Every line carries the numbers behind it — velocity, days of cover, lead time, quantity, cost. An owner who can see the reasoning approves in a minute; one who cannot rebuilds the whole thing by hand.

Render the buy list as an HTML artifact using the house artifact style (../../shared/artifact-style.md): a stockout table sorted by stockout date with mono tabular-nums numerals, urgency status pills (order now / order soon / fine / past the point of no return), a reorder panel with quantities and dollar totals, and a slow-movers section with the cash tied up in it. The chat summary stays — the artifact is the full picture, not the only one.

Step 8 — Draft POs and vendor emails, with approval

Purchase orders commit money and vendor emails go out under the owner's name, so both wait for an explicit yes.

State the vendor, the line items, and the total before asking. Draft the vendor email in the owner's voice per the shared voice profile. If no profile exists yet, follow that file's "When there is no sample" instruction — ask for three emails they have already sent a supplier. If they would rather not, write the email plain and neutral and say it is not in their voice. Never invent a personality for someone's vendor relationship.

With Google Calendar connected, offer a recurring block for the restock decision — this works far better as a rhythm than as a fire drill. Keep the approved PO document here — this skill owns it. With QuickBooks or NetSuite connected, hand ap-processor the coded memo for each one (vendor, PO number, total, expected date, and the account, class, and job), so the bill three-way-matches against a real record when it arrives. ap-processor reads POs; it does not create them.

Closing offer

Close with one line on what was decided — the total buy and the items about to run out. Then offer the most relevant next step with its exact trigger phrase: "reorder" (/restock) when the owner wants the POs drafted and sent end to end. Up to two more from the router's table, such as "cash forecast" (cash-flow-snapshot) or "pay the bills" (/pay-the-bills). Three offers at most, and never repeat one the owner already declined this session.

What not to do

  • Do not invent a velocity, a lead time, or a stockout date. Too little history is reported by SKU, not smoothed over.

  • Do not treat an out-of-stock period as zero demand. It is suppressed demand and it biases everything downstream.

  • Do not recommend reordering a zero-velocity item. No sales means stop buying, not buy more.

  • Do not size a reorder without subtracting what is already inbound.

  • Do not apply seasonality without a year of history. Ask the owner instead.

  • Do not send a PO or a vendor email without approval. Both spend money or spend goodwill.

  • Do not report units without dollars. The owner thinks in cash.

Reference files

  • reference/data_sources.md — Shopify, Square, NetSuite, and the CSV path, with required fields

  • reference/velocity_and_reorder.md — the 7/28-day math, distortion handling, and reorder sizing

  • reference/seasonality.md — when to adjust, when to ask, and how to say which you did

  • reference/po_drafting.md — purchase order structure and vendor email drafting

  • reference/gotchas.md — the mistakes that stock out a bestseller or bury cash in a pallet

Using a tool that isn't listed

The connectors named in this skill are the tested paths, not a wall. If the owner wants this flow to use a tool that isn't connected or listed, offer build-connector — it checks the connector directory first and connects through Zapier otherwise, never hand-building against a raw API. Once the connection exists, the tool joins this skill like any other optional connector, under the same approval gates.

Files

reference/velocity_and_reorder.md

Velocity and Reorder Sizing

The math, and the judgment around the math.


The two windows

7-day velocity = units sold in the last 7 days ÷ 7 28-day velocity = units sold in the last 28 days ÷ 28

Both, always, for every item. The point is not to pick one — it is that the gap between them tells you something.

PatternReadingAction
7-day ≈ 28-daySteadyPlan on the 28-day rate. Easy
7-day much higherTrending up, or one bulk orderCheck the order detail before believing it
7-day much lowerCooling, or a stockout mid-weekCheck whether stock was available all week
7-day zero, 28-day positiveStopped selling, or stocked outCheck stock history before calling it dead

When the two disagree by more than 50%, look at the underlying orders before recommending anything. One wholesale order of 40 units makes a slow item look like a bestseller for exactly one week, and ordering into that spike is how a pallet gets bought.


Which velocity to plan on

Two different numbers, and they must not be mixed up:

  • stockout_velocity = the higher of the 7-day and 28-day rates. Used for days of cover and the stockout date.

  • sizing_velocity = the 28-day rate. Used for the reorder quantity.

That asymmetry is deliberate:

  • Stockout dates should be pessimistic. Being early costs a little carrying cost. Being late costs the sale and sometimes the customer.

  • Reorder quantities should be sober. Sizing 60 days of stock off a one-week spike is how cash gets buried.

Say which rate went into each number. An owner who can see "running out on the 5.8 rate, ordered on the 4.1 rate" can override either one in seconds. Never use one word — "planning velocity" — for both, because the two numbers are different on exactly the items that matter most.


Distortions to strip out

Stockout periods. Days with zero stock are not days of zero demand. Exclude them from the denominator: velocity is units sold ÷ days the item was actually available. Failing to do this permanently under-orders exactly the items that keep running out.

Bulk or wholesale orders. A single order well outside the normal order size distorts the window it lands in. Identify it, report it, and offer both numbers — with and without.

Returns. Net them out of the period they were sold in, not the period they came back in.

Promotions. A period with a discount running is not a baseline. If promotion data is available, mark those periods. If it is not, and the owner mentions a sale, ask.

New items. An item with under 28 days of history has no reliable 28-day velocity. Say "not enough history" by SKU rather than annualizing a week.


Days of cover and the order decision

days_of_cover = (stock_on_hand + units_on_order) ÷ stockout_velocity

Inbound stock counts. An item with 4 days on the shelf and a pallet landing Thursday is not about to stock out, and flagging it as urgent teaches the owner to ignore the urgent list.

Zero velocity has no days of cover. Dividing by zero produces either an error or an absurd number, and either way the item does not belong on this ladder — nothing is selling, so nothing is running out. Skip the cover calculation entirely and send it straight to the slow-mover list with the cash tied up in it. The one exception is a season the owner has named; see below.

Compare against lead time plus a safety buffer. Default buffer is 7 days, or half the lead time, whichever is larger — long lead times need proportionally more room. Cap the buffer at 30 days.

buffer = min(30, max(7, lead_time_days ÷ 2))

The cap matters on slow imports. A 120-day lead time would otherwise produce a 60-day buffer, which quietly turns a 60-day order into a 150-day one and buries a quarter of the year's cash in a container. Past 30 days the right answer is ordering more often, not ordering more.

ConditionStatusWording
cover < lead timeToo late"Will stock out before an order can land. Ordering now shortens the gap, it does not close it"
cover < lead time + bufferOrder now"X days of cover, Y-day lead time. This is the week"
cover < 45 daysOrder soon"Fine for now, put it on the next cycle"
cover 45–120 daysFineNo action
cover > 120 daysOverstockNot a reorder. See the slow-mover list
The one carve-out for zero velocity

A pool heater sells nothing in February and that is not dead stock — it is February. When the owner has named a season for an item or a category, a zero-velocity item inside that season does not go on the slow-mover list as something to clear.

It goes on a dated watch list instead: the item, the date the owner says its season starts, and the date the decision has to be made, which is the season start minus the lead time.

Pool heater, 400k BTU        SKU PHT-400
  Velocity      0/day (28d) — Ray says the season starts around May 15
  On hand       4 units
  Decide by     April 10 — 35-day lead time from the season start
  Status        WATCH, not a slow mover

Two rules keep this honest. The owner names the season; it is never inferred from a quiet month or from what the item sounds like. And the watch entry carries a date, because an undated "seasonal, check later" is how a business misses the first hot week entirely. When the decide-by date arrives with still no sales history, ask — do not size an order from a season that has not started.


Reorder quantity

Sized on the 28-day rate, never on the hot one.

target    = (60 + lead_time_days) × sizing_velocity
order_qty = target − stock_on_hand − units_on_order

The target covers 60 days of selling plus the lead time, because the stock has to last from the day it lands until the next order lands. Sizing 60 days flat means running short by the length of the lead time on every single cycle.

Then adjust:

  • Round up to pack size, unless that overshoots 90 days of cover at the sizing velocity, in which case round down and say so

  • Respect minimum order quantity — see below

  • Never return a negative quantity. Below zero means there is already enough; that item goes on the no-action list

  • Always subtract units on order. When inbound quantity is unknown, say the number assumes nothing is inbound

Minimum order quantity

An MOQ is almost always a floor on the whole vendor order, not on each line. Vendors set a minimum dollar or unit amount per shipment. Check the total against it first — three items that each fall short may clear it together, and splitting one line to hit a shipment minimum orders stock nobody needs.

When the order still falls short and the vendor will not ship, the owner has a real decision, so give them the real numbers rather than quietly padding the order:

Ferguson's minimum is USD 1,000. The order as sized comes to USD 888.
Clearing the minimum means one more case — 40 filters, USD 148, about 10 extra
days of stock at the 4.1/day rate.
Order the extra case, hold the order until the next item comes due, or
split it across two vendors?

Excess units, excess dollars, and excess days — all three, every time. Then the owner decides. Never silently round an order up to a vendor minimum.


Every line shows its work

Merv 11 filter, 20x25x1        SKU FLT-2025
  Velocity      4.1/day (28d), 5.8/day (7d) — running hot
  On hand       38 units, none inbound
  Runs out      6.6 days of cover on the 5.8 rate (38 ÷ 5.8)
  Lead time     3 days (Ferguson) + 7-day buffer
  Status        ORDER NOW
  Sized on      4.1/day, the 28-day rate — the 7-day spike is one week old
  Target        258 units — 63 days (60 + 3 lead) × 4.1
  Order         240 units (258 − 38 on hand = 220, rounded up to 6 cases of 40)
  Cost          USD 888 at USD 3.70/unit

Two different rates in one block, each labeled. The item runs out on the fast rate because being late loses the sale; it is ordered on the slow rate because a one-week spike is not a reason to buy a pallet. An owner who thinks the spike is real says so and the order gets resized in one step.

The rounding check: 38 on hand plus 240 ordered is 278 units, about 68 days at 4.1/day. Under the 90-day ceiling, so rounding up to a full case is fine. Had it landed over 90 days, the order drops to 5 cases and the line says why.

The owner approves this in ten seconds because the reasoning is visible. A bare "order 240" gets rebuilt by hand every time.

Requirements and compatibility

Written for: Claude Code, Claude apps

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Needs: Declares allowed tools

Security

No issues found by our static scan· No issues found

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Published by
Anthropic
Publisher
Anthropic (Official)
Source
anthropics/knowledge-work-plugins · small-business/skills/inventory-planner · commit e050c2e
Licence
Apache License 2.0 (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by Anthropic.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download inventory-planner.zip