Warehouse - inventory system of record (WMS)
One physical truth:
on-hand, reserved, available.
Warehouse is the system of record for physical stock. It owns what is really on the shelf and runs the receive, put-away, pick, pack and ship lifecycle - operable by your floor team and by AI agents through the same door.
248
on-hand
60
reserved
188
available
available = on-hand − reserved
reserve against available
reserve 200 exceeds available 188→ the guard rejects it before any ledger row is written.

Everything on the floor
One system, every move on the floor.
From the receiving dock to the shipping door, one system owns the stock and the moves. These are the real capabilities - one short line each, no jargon.
Topology
Warehouse master
The floor as an enforced hierarchy: zone, aisle, rack, bin, location - each a barcoded node with a blocked flag for holds.
Stock
The stock ledger
One number each for on-hand, reserved and available, backed by an immutable transaction log you can replay.
Inbound
Receiving and put-away
Goods land against a purchase order, get counted in, and are placed into a real location - stock only moves when it truly arrives.
Outbound
Reserve, pick, pack, ship
Orders reserve against available stock, then move through picking and packing to shipping as one enforced state machine.
Corrections
Transfers, counts, adjustments
Move stock between locations, run cycle counts, adjust, write off defects, and record internal consumption - each an honest, named event.
Replenishment
Replenishment intake
When a target runs short, a replenishment request tops it back up - and cascades to procurement when the warehouse itself is short.
Console
Operator console
An eight-route workbench for the floor team - dashboard, receiving, packing, inventory, transfers, counts and defects, all in one place.
The lifecycle
One enforced flow, dock to door.
Every unit moves through one ordered sequence. Goods receive against a purchase order and put away into a real location, then a fulfillment request walks reserve, pick, pack and ship as a single state machine - never skipping a step.
01
Receive
Against a purchase order
02
Put away
Into a real location
03
Reserve
RESERVED
04
Pick
PICKED
05
Pack
PACKED
06
Ship
SHIPPED
One physical truth
A number you can prove, not just read.
- On-hand, reserved and available, one number each
- Every movement is an immutable, named transaction
- Fold the log and it reconciles to the summary, exactly
LedgerReceive to ship
The receive-to-ship lifecycle, one enforced flow.
- Receive and put away, so stock only counts once it truly arrives
- Reserve against available, then pick, pack and ship in order
- Short-stock lines go partially reserved or backordered, never negative
OutboundWhere it fits
Where Warehouse fits.
Warehouse is an API-first, agent-native inventory system of record for the Splenta family. The incumbents are broader and battle-tested, and they keep those strengths - WMS trades scale and shipping breadth for a reconcilable stock truth an AI agent can safely operate.
WMS is in active build and pre-revenue. Enterprise suites keep multi-DC scale, labor and wave planning; ShipHero in particular has production-mature shipping labels and carrier integrations that WMS simply does not have. WMS is narrow by design: one reconcilable physical truth, no shared-table coupling, operable by humans and agents through the same seam.
Under the hood
Owned by a ledger, operated through one seam.
The story above is the plain version. For evaluators, here is how it actually holds together - the frontend is React on Vite, the backend Spring Boot on Java 17 and PostgreSQL, and every peer talks to it by contract.
The negative-balance guard
Available is never stored and trusted. It is derived - on-hand minus reserved - and a reserve that would push it below zero is rejected before any row is written. Oversell is impossible at the WMS layer.
An append-only ledger
No balance is edited in place. Each change appends a transaction - type, quantity, resulting balance, source document, actor, timestamp. Fold the log for any item at any location and you get its summary, exactly.
One command seam, two front doors
There is a single write seam - a command gateway - and both the human console and an AI agent go through it. The MCP tools are that gateway over the official MCP Java SDK; the REST command endpoint is the same gateway with a different envelope. Same scope gate, validation, idempotency, audit and outbox. Reads stay on REST by design.
wms:inbound:write
- wms.inbound_receipt.record
- wms.putaway.confirm
wms:fulfillment:write
- wms.fulfillment.reserve
- wms.fulfillment.pick
- wms.fulfillment.pack
- wms.fulfillment.ship
wms:stock:write
- wms.stock.transfer
- wms.stock.cycle_count
- wms.stock.inventory_adjustment
- wms.stock.defect_write_off
- wms.stock.internal_consumption
wms:replenishment:write
- wms.replenishment.request
Integration by contract
WMS never shares a database table with another module. Supply lands from SCM, demand pulls from RMS, Arin reads and replenishes, and every state change publishes through a transactional outbox. Auth is ICE's job: WMS is a pure resource server that validates the token and checks the scope, and never mints one.
supply and demand in
- SCMgoods receipt
purchase-order lines land as a goods receipt
- RMSfulfillment
paid orders arrive as a fulfillment request
- ArinMCP + REST
reads available stock, requests replenishment
events out . outbox + SSE
- wms.stock.received
- wms.stock.changed
- wms.fulfillment.picked
- wms.fulfillment.packed
- wms.fulfillment.shipped
- wms.fulfillment.backordered
GET /api/wms/outbox-events/stream
Private - in active build
Give the whole stack one physical truth.
WMS is early - it runs end to end on a single warehouse, against a local database, with no customers yet. There is no public download and no self-serve sign-up. If a reconcilable stock truth that an agent can safely operate is the problem you have, tell us about your stack and we will walk you through the real ledger and the agent seam.