Hub
Command center. Every answer in this Toolbox is source-tagged to a validated source, every proposed write waits for a human in Approvals, and anything that can't be verified is withheld, not guessed. Synthetic tenant HARBORPEAK — no real data.
Health ● all live
Alerts
Advisory sessions, agents & recent activity
Advisory sessions
Agents (background scans)
Recent activity
Consultants (7)
M3 Implementation Expert @m3consultant
Order-to-Cash @o2c
Procure-to-Pay @p2p
Inventory & Warehouse @inventory
Manufacturing @manufacturing
Finance @finance
EDI & Integration @edi
System Health & Connection Status
Live connection status for every system the Toolbox reads or writes, with latency, uptime, and the last successful check. Nothing here is assumed — an unreachable source shows as unknown, never as clean.
Engine boot & governance arm-state
Chat — the governed front door
Ask about live tenant data or the doc corpus. Every factual claim is validated against a read path before it reaches you and carries its source tag. Writes never happen here — they route to Approvals. What can't be verified is withheld.
Runner — a goal into a governed plan
Give it a business goal; it decomposes into a cited, step-by-step M3 plan. Any step that changes data becomes a draft that waits in Approvals — the Runner never writes on its own.
- 1.Read the credit-hold queue and classify by reason OIS300MI.LstHead · HOLD via @o2c
- 2.For each held order, pull customer credit + aging CRS610MI.GetFinancial ARS200MI.LstInvoices
- 3.Propose credit-limit changes where aging is clean draft → Approvals via @finance
- 4.Draft a standard release for orders now within limit draft → Approvals via @o2c
- 5.Summarize expected cash-flow impact for the CFO GL · posted
@o2c · 6 cited @finance · 4 cited. Every factual step traces to a validated read; steps that write are drafts, never auto-executed.Approvals — Consequence Preview
The draft inbox. Every proposed write waits here. You approve an outcome — the consequences, not a raw field diff. Nothing touches the tenant until all three locks pass and you confirm, and the exact preview you saw is hashed into the audit.
- Transaction
- CRS610MI.ChgFinancial
- Customer
- C-1088
- Field
- CRLM (credit limit): 50,000 → 75,000
- WARNING2 orders on credit hold totaling $41,000 become releasable.2 sources · CRS610/OIS300 · sum of held-order amounts for the customer
- NOTICE3 open AR invoices for the customer — review aging before raising the limit.1 source · ARS200MI.LstInvoices · aging 64–74 days
- UNCHECKEDDownstream effect on this customer's dunning level could not be determined.reason: no readable provider for dunning on this tenant — absence of a warning is not a guarantee
100 → CRS610MI → ChgFinancial permitted (default-deny)9d17…c4eb — server re-checks it on confirm; a stale preview blocks the writeTickets
Read-only Jira, correlated to M3 entities. Ticket facts and M3 facts are each tagged to their own system of record and never blended. Nothing is written back.
| Key | Summary | Status | Assignee | Correlated M3 entity | Source |
|---|---|---|---|---|---|
| OPS-1423 | Billing dispute — Riverside Supply invoice 90341 | Open | a.reyes | Customer C-1088 | LIVE_TICKET |
| OPS-1417 | Short shipment reported on order 4688 | Open | j.okafor | Order 4688 | LIVE_TICKET |
| OPS-1402 | Item master cleanup — coupling family | In review | s.patel | Item grp HP-20xx | LIVE_TICKET |
| OPS-1390 | Supplier lead-time change — Anvil Metals | Open | a.reyes | Supplier V-2044 | LIVE_TICKET |
| OPS-1377 | Recurring credit-hold on repeat customer | Open | m.chen | Customer C-1088 | LIVE_TICKET |
JQL: project = OPS AND status in (Open,"In review") ORDER BY updated DESC · read-only. Remove the credential and this surface fails closed with a specific remediation, never a silent empty state.
Audit
Every governed operation, hash-chained. Each row commits to the one before it — a later edit, deletion, or reorder breaks the chain and fails verification. A confirm row also records the hash of the exact consequence preview the human saw.
| seq | op | program/transaction | source | result | preview | entry_hash |
|---|---|---|---|---|---|---|
| 1203 | confirm | CRS610MI.ChgFinancial | LIVE_TRN | PASS | a91c…7f20 | c4eb…9d17 |
| 1202 | draft | CRS610MI.ChgFinancial | LIVE_TRN | PASS | — | 6f4e…1bc3 |
| 1201 | read | OIS300MI.LstHead | LIVE_TRN | PASS | — | 2e0a…8b82 |
| 1200 | write | MMS002MI.UpdItmWhs | LIVE_TRN | BLOCKED | — | 7a13…04df |
Our own governance failures — found, dated, published
Capabilities & governance
What the Toolbox is allowed to do on this tenant, and how it decides what to trust. Writes are default-deny; only an explicitly allowlisted triple can execute. Every claim carries a confidence from its source, with hard floors for reads and writes.
Write allowlist — per CONO, default-deny
| CONO | Program | Transaction | Intent | State |
|---|---|---|---|---|
| 100 | CRS610MI | ChgFinancial | Raise/lower credit limit | allowed |
| 100 | OIS017MI | UpdBasePrice | Change base price | allowed |
| 100 | MMS200MI | UpdItmBasic | Update item master | allowed |
| 100 | PMS100MI | UpdMO | Update manufacturing order | allowed |
| 100 | CRS620MI | ChgBankInfo | Change supplier bank | denied (no catalog match) |
Source-tag confidence ladder (Truth Protocol)
| Tag | Meaning | Confidence |
|---|---|---|
| LIVE_TRN | Live read from your M3 tenant | 1.00 |
| LIVE_TICKET | Live read from a different system of record (Jira) — never blended | 1.00 |
| DOC_INFOR | Grounded in Infor documentation | 0.90 |
| ANALYTICS_BIRST | Modeled, time-lagged analytic | 0.80 |
| DATALAKE_COMPASS | Data-lake aggregate (lagged) | 0.80 |
| UNVERIFIED | No validated source — hard block | 0.00 |
Confidence floors
Cost gate (per tenant / day)
MI Payload Builder
The ION fluency proof. The Toolbox walks this tenant's own MI catalog at boot (MRS001MI), so every program, transaction, field, type, and required flag comes from the tenant — not a hardcoded list. Pick a program and transaction; the form is schema-driven. It builds and validates the payload; it never executes.
Narrate
Deterministic narration over validated findings — the same facts produce byte-identical output. Every dollar is a finding's own amount, every count a real row count. Any evidence reference that doesn't resolve is dropped and tallied, never narrated. Two lenses, same facts.
- #1 Procurement Exception — supplier bank-change exposure $214,500
- #2 AR Cash Acceleration — aged receivables concentration $184,000
- #3 AR Cash Acceleration — credit-hold backlog releasable $41,000
- • OIS300MI.LstHead:HOLD=1 (2 rows) — held sales orders, $29,000 + $12,000
- • CRS610MI.GetFinancial:C-1088 (1 row) — limit 50,000, balance 62,400
- • ARS200MI.LstInvoices:AGED>60 (3 rows) — INV5501 (74d), INV5588 (64d), INV5602 (61d)
- • APS200MI.LstInvoices:V-2044 (2 rows) — $200,000 + $14,500 open
- • APS130MI.LstProposals:V-2044 (1 row) — PP-3001 pending release
amountUsd, every count a real row count. 1 unresolved ref (next-quarter margin forecast) was dropped and NOT narrated.- • OIS300MI.LstHead:HOLD=1 (2 rows) — orders 4711, 4720
- • LIVE_TICKET (2 rows) — OPS-1423, OPS-1417 correlate to these holds
- • MMS060MI.LstViaItem (3 rows) — HP-2040 (36/40), HP-2055 (18/30), HP-2210 (5/25)
- • (no resolved evidence — TO_VERIFY)
EDI
Translate X12/EDIFACT into M3 EDI BOD drafts — or honestly withhold what can't map yet. Nothing posts; mapped documents become drafts that wait in Approvals.
Mapped (customer role — M3 sells)
| EDI | → M3 BOD | Direction | State |
|---|---|---|---|
| 850 / ORDERS | LoadM3EDISalesOrder | inbound | draft → Approvals |
| 855 / ORDRSP | SyncM3EDISalesOrderAcknowledge | outbound | draft → Approvals |
| 810 / INVOIC | customer invoice | outbound | draft → Approvals |
| 820 / REMADV | LoadM3EDICustomerRemittanceAdvice | inbound | draft → Approvals |
Withheld (2) — no guess
NL→SQL Reports
Ask a data question in plain English; get a grounded Compass SQL statement, server-validated as SELECT-only, and not executed. If it can't be grounded in real tables, it says so instead of inventing a query.
SELECT OHCUCD AS currency,
SUM(OHTOTA) AS total_order_value
FROM oohead
WHERE OHORDT >= '20260101'
GROUP BY OHCUCD
ORDER BY total_order_value DESC
Generated, validated, and grounded — never executed here. In a live engagement, execution is tenant-gated behind the same governance as any read.
Birst — governed analytics
Source-tagged KPI rows from Birst, clearly marked as derived and time-lagged. Analytics inform; they never authorize a write on their own.
SELECT [Fill Rate] BY [Warehouse]
| Warehouse | Fill rate | Lines shipped | Backorders |
|---|---|---|---|
| 100 | 96.4% | 4,182 | 151 |
| 200 | 91.8% | 2,905 | 238 |
| 300 | 98.1% | 1,377 | 26 |