Platform Vision · 2026

Supply chain
intelligence
that acts.
Not just alerts.

Two AI copilots. One shared brain. Built for the supply chain teams spending their mornings manually triaging spreadsheets, their afternoons losing chargeback disputes they could have won, and their evenings writing summaries no one reads.

5–15% Chargeback recovery lift
20–40% Exception resolution time ↓
$635/mo Infra at 5-client scale
scroll

What we are
actually building

Not AI wrappers. Not dashboards with chat. Purpose-built agents with deterministic cores, verifiable evidence chains, and humans always in the loop before anything ships.

Prototype 1 · OTIF

Compliance
Shield

A compliance copilot that turns OTIF chargebacks from reactive firefighting into AI-accelerated revenue recovery. Every dispute draft is grounded in routing guide clauses retrieved from pgvector RAG — with a human reviewing before anything is filed.

  • Detects OTIF failures in real-time against retailer-specific SLAs
  • Quantifies chargeback exposure using deterministic OTIFEngine (Python, not AI)
  • Retrieves routing guide clauses as legal evidence via pgvector semantic search
  • Drafts dispute letter with mandatory evidence_chain field — no hallucinations
  • Routes through human review gate before any submission
500
Shipments / month
150
Chargebacks / month
60%
Contestable rate
Prototype 2 · Exception Brain

Neural
Command

An AI that sits between 5 raw operational data streams and the humans who must act. Normalises noise, scores by revenue risk, routes to the right owner, and writes the morning brief that no operations team currently has time to produce.

  • Ingests 2,000–5,000 events/day from TMS, WMS, ERP, Telematics, EDI
  • Normalises via per-source adapters into canonical exception schema
  • Scores every exception: 0.40×revenue + 0.30×tier + 0.20×penalty + 0.10×urgency
  • TriageAgent routes top-20 exceptions every 15 min via Claude tool-calling
  • SummaryAgent writes S&OP brief once daily — structured JSON → Slack/Teams
~200
Exceptions / day
80%
Resolved in < 4h
P1/P2/P3
Priority tiers
Shared platform brain PostgreSQL + pgvector · One schema · Two agents
L1 Source Systems TMS · WMS · ERP · Retailer Portals · Telematics · EDI
L2 Ingestion & Normalisation MCP Tool Servers (P1) · Per-source Adapters (P2) · raw_events
L3 Intelligence Engine OTIFEngine + Claude Agent (P1) · PriorityScorer + TriageAgent (P2)
L4 Output & Actions Dispute Draft → State Machine → Review Gate (P1) · Priority Queue → Notifications (P2)
L5 User Interfaces OTIF Dashboard · Dispute UI (P1) · Ops Console · Exception Queue (P2)

The actual
hard problems

Eight decisions that determine whether this works or doesn't. Each has been resolved with a concrete architectural choice.

P1 · ADR-001

Credential isolation

Claude must access ERP/TMS/WMS data without ever seeing API keys, usernames, or passwords. How do you give an AI data access without giving it secrets?

MCP Tool Servers act as credential vault proxies. Claude receives only business-logic parameters. Credentials never appear in context windows or logs.
P2 · ADR-002

Event normalisation

Five source systems with five different schemas. A TMS "delay" event looks nothing like a WMS "short pick" event. How do you build a unified exception schema that doesn't lose signal?

Per-source adapter classes (pure functions). UNCLASSIFIED bucket for unmapped events — never dropped. source_event_id UNIQUE constraint prevents duplicates.
P1 · ADR-002

OTIF boundary

Where does deterministic math end and AI reasoning begin? If Claude does the OTIF calculation and it's wrong, the dispute is invalid. But if code does everything, why have AI at all?

check_otif() is a pure Python function. All timing and quantity math in code. Claude receives a pre-computed verdict and writes the narrative — never recalculates facts.
P2 · ADR-003

Deduplication

15-minute ingestion cycles mean the same exception can be routed twice. Multiple events from different source systems can reference the same underlying shipment problem.

agent_lock JSONB field with 30-min TTL on exceptions table. routing_run_id in actions table for idempotency. Lock claimed before routing, released on completion.
P1 · ADR-003

RAG disambiguation

Walmart and Target routing guides contradict each other. When Claude retrieves "delivery window" clauses, it must get Walmart's rules for Walmart shipments — not Target's.

Namespace by retailer_id + effective_date. Each pgvector search filters metadata before similarity. Tenant isolation prevents cross-client leakage.
P2 · ADR-004

Scorer ↔ Claude contract

The deterministic PriorityScorer and the Claude TriageAgent must agree on data format. If the contract is loose, Claude makes up priority levels or ignores revenue context.

Explicit Pydantic schema both ways. Scorer sends: [{exception_id, score, revenue_at_risk, customer_tier, owner_team, suggested_action}]. Claude returns: [{exception_id, final_action, assigned_to, rationale}].
P1 · ADR-005

Evidence transparency

If Claude generates a dispute letter and the human reviewer can't verify which routing guide clause was cited, the whole system is a black box. Disputes submitted on AI faith alone get rejected.

Mandatory evidence_chain field in DisputeDraft schema. Each claim maps to: rag_chunk_id + document_name + page_number + verbatim_excerpt. Pydantic validation rejects outputs without it.
P2 · ADR-005

Notification idempotency

Slack/Teams webhooks can fail silently. Retry logic without idempotency sends the same P1 exception alert three times, training ops teams to ignore notifications.

pending_notifications table with idempotency_key UNIQUE. NotificationWorker polls every 30s. Failed notifications retry with exponential backoff. Dead-letter after 5 attempts.

Cost at scale

Both prototypes on shared AWS infrastructure. Claude API is the dominant variable cost. Infrastructure margins are exceptional.

Component MVP (1 client) 3 clients 5 clients
Compute (ECS Fargate) $28/mo $80/mo $120/mo
PostgreSQL + pgvector (RDS) $25/mo $65/mo $100/mo
Redis (Celery queue) $12/mo $12/mo $18/mo
Claude API — P1 (dispute analysis) $3/mo $9/mo $32/mo
Claude API — P2 (triage + summary) $39/mo $118/mo $197/mo
Vercel (Next.js frontend) $20/mo $20/mo $20/mo
Total monthly infrastructure $127/mo $304/mo $487/mo
Target MRR at 5 clients
$10K–25K
Infrastructure margin at 5 clients
95%+
Primary cost driver is Claude API for Exception Brain TriageAgent (15-min cycles × 96 calls/day). Manageable with prompt caching and batch call optimisation as volume grows.

// north star

The supply chain team that
never writes another
morning status email.

Both prototypes exist to eliminate the daily manual work that prevents supply chain professionals from doing strategic thinking. Disputes filed automatically. Exceptions triaged before standup. The brief already in Slack when the team sits down.