The Whole System in One Picture

How Jarvis (our chat brain) sits between your team and NetSuite. Read top to bottom — 60 seconds to understand the whole thing.

1. Your team + where they type 2. Jarvis — the brain in the middle (Cloudflare Worker) 3. What Jarvis remembers (data + memory) 4. The approval step — Mike says yes before anything gets written back 5. Where the real data lives (NetSuite + Dropbox) 6. Outside AI helpers 7. The sync engine — copies NetSuite into our memory every few minutes your question goes in if a pattern fits picks tools runs them reads answer comes back wants to write? queue it for Mike push approved write every 5/15/60 min data lands in memory specs + docs asks LLMs Mike admin · approver runs the system always in the loop Sales team price checks customer questions bid prep K-12 buyers NYC DOE etc. read bid hubs download specs Chat (Jarvis) where your chat goes 10 role views approve / reject queue chat.ai-globalfoodsolutions.co Hubs + dashboards Corp hub, NYC DOE hub admin dashboard pricing + spec pages gfs-hub · gfs-nycdoe-hub Pattern matcher "this looks like X" first simple cases skip the LLM canonical patterns · regex Council of 3 LLMs three brains, then a chairman synthesizes the answer Claude brain 1 Claude brain 2 Claude brain 3 Chairman synthesizes 1 answer ~$0.007/question 175+ chat tools small skills Jarvis can call Look-up tools prices, items, orders, customers ~80% Write tools propose changes, always HITL-gated need approval Diagnostics health, audits, traces tools return data · LLM narrates Role gate "who's asking?" picks the right tools 10 role views: price · nutrition · finance relationship · order mgmt bid · production · admin + legacy roles each role sees only its tools writes → queue for Mike Worker "gfs-netsuite" one Cloudflare Worker = the brain routes every request runs at the edge ~18.5K lines 175+ endpoints global, fast, no servers to babysit D1 database our mirror of NetSuite 144 tables 311K+ rows fast read, no NS round-trip SQLite at the edge R2 storage the file cabinet PDFs, spec sheets, attachments, bid docs cheap object storage KV cache sticky notes recent answers, cron locks, sessions fast lookups Vectorize "find similar" memory past Q&A, decisions, spec context semantic search Durable Objects the traffic cops CostCap (spend limits) PushMutex (one-at-a-time) prevents collisions Proposed actions "Jarvis wants to do X" waiting for Mike queue table in D1 Mike reviews + approves preview → confirm edit token required human-in-the-loop gate Pending pushes approved · ready to send retried if NS hiccups staging area NS push queue writes go out one at a time no race conditions Cloudflare Queue NetSuite the real books · the source of truth customers · vendors · items · orders · invoices · bills all GFS finance + ops we read via custom RESTlet (TBA OAuth) Dropbox source documents spec sheets · price lists USDA files · bid intake copied into R2 + Vectorize Web surfaces (Cloudflare Pages) live pages your team + buyers see /pricing/<item> · /vendor/<name> · /bid/<id> rendered live from D1 (no cache) gfs-netsuite · gfs-hub · gfs-nycdoe-hub · gfs-system-guide Anthropic API where the LLMs actually run Claude models called by the council Cursor CLI Composer 2.5 + Kimi K2.5 Mike's dev assistant independent code reviewer Codex (GPT-5) different model family adversarial auditor catches Claude blind spots Why three families? No single model is right all the time. Cross-family review catches more bugs. Mike uses them locally Cron schedules hot 5m · warm 15m cold 60m · daily · weekly Sync engine pulls NetSuite into D1 self-heals if it drifts Doc ingest Dropbox → R2 PDF/DOCX/XLSX → markdown Email intake 5 mailboxes → queue bid + intake auto-route Memory stays fresh D1 mirrors NS in near real-time chat never waits on NetSuite reads NS Legend: live chat path approval flow (HITL) background sync (cron) regular API call UI Worker / logic data + memory system of record / hosting HITL gate queue people / outside service

Read the picture top-to-bottom

  • • Your team types a question into Chat or opens a Hub
  • • The Worker (Jarvis) routes it — pattern first, then 3-LLM council, then tools
  • • Tools read from D1 + R2 + Vectorize + KV (the memory)
  • • If a write is needed, it goes into the HITL queue first
  • • Mike approves → push to NetSuite via the queue

The two non-obvious things

  • Memory mirrors NetSuite. Chat answers from D1, not live NS — that's why it's fast
  • Nothing writes back without Mike. Every change parks in proposed_actions first
  • • The sync engine runs in the background on a clock (5/15/60 min tiers)

What's where (single-vendor)

  • • All of it runs on Cloudflare (Worker, D1, R2, KV, Vectorize, Queues, DOs, Pages)
  • • NetSuite is the source of truth — we never bypass it
  • • Dropbox holds source specs + bid intake docs
  • • LLMs come from Anthropic; Cursor + Codex are local dev tools