⚙️ Autonomous 💬 Conversational gates

New Product Introduction Agent

Centric PLMSAP S/4HANA SalsifyKinaxis SalesforceServiceNowTeams
1📋

Overview & business value

The New Product Introduction (NPI) agent takes a product from PLM design approval to sellable across PLM, ERP, PIM, supply planning, CRM, ITSM and collaboration. It creates the ERP material master, enriches and publishes product content, validates supply feasibility, sets up the commercial record, and runs a launch-readiness gate — coordinating seven systems as one flow. It reads and reasons freely, but never writes directly: every change is executed through an Action Ticket carrying a MOP.

Problem

A new SKU touches PLM, ERP, PIM, planning, CRM and ITSM. Today this is a relay of spreadsheets and tickets across functions: the material master is keyed by hand, content is chased over email, supply feasibility is checked late, and launch dates slip. Steps run serially and the gaps between systems are where launches stall.

Solution approach

An event-driven agent wakes when a design is approved in Centric PLM. It maps the BOM to the SAP material template, raises the material via a BAPI Action Ticket, enriches Salsify content, runs a Kinaxis what-if for the launch date, sets up the Salesforce commercial record, and runs a go/no-go gate — reasoning where judgement is needed and following fixed mappings where they exist.

Core capabilities

  • PLM design-approval trigger and BOM read
  • Deterministic BOM → SAP material-template mapping
  • Material master create via BAPI Action Ticket
  • Content gap detection and AI draft in Salsify
  • Kinaxis what-if for feasible launch date
  • Channel-readiness gates (GTIN, hero image)
  • Salesforce Product2 + pricebook setup
  • Launch-readiness go/no-go with human approval

How it helps

Functions stop relaying SKUs by hand. Time-to-shelf compresses because steps run in parallel and feasibility is checked up front, not at the end. Every write is an auditable, reversible Action Ticket, so the speed does not cost control — which is what makes this safe to run near ERP and finance records.

Illustrative value model — plug in your own figures

SKUs introduced / quarter
H hrs
Manual coordination saved / SKU
D days
Time-to-shelf reduction / SKU

Value = (SKUs/quarter × H hours saved × blended loaded rate) + revenue pulled forward by D days of earlier availability. These are placeholders, not measured results — substitute your own baseline to size the case.

2📖

The story (for the sales conversation)

The one-liner

"Every new product you launch has to walk through seven systems before it can be sold. Today a person carries it by hand, system to system. This agent walks it for you — and never skips a safety check."

😣 Today, without the agent

Maya, a product manager, gets the nod that the new GreenLeaf shampoo is approved. Now the relay race begins.

She re-keys the recipe into SAP and waits on the ERP team. She emails the content team for Amazon copy and a photo, and chases them for a week. She pings supply planning to ask if there are enough bottles for launch week, and gets an answer three days later — too late, there aren't. She files a ticket to set the product up in Salesforce. Each handoff is an email, a wait, and a chance for something to fall through.

The launch slips. Nobody did anything wrong. The work simply lives in the gaps between systems that don't talk to each other.

😌 The same launch, with the agent

Maya types one sentence: "Launch GreenLeaf shampoo for Spring 2026."

The agent reads the approved design, creates the ERP material master, drafts the Amazon copy and flags only the one thing a human must do (the hero photo), and runs a supply what-if on the spot — telling her the original week only fills 62%, so it recommends shifting two weeks for a 95% fill. It sets up the Salesforce record so sales can quote. Then it stops and asks her: "Readiness 82 out of 100. Go for Amazon at the later week? Two blockers remain."

Minutes, not weeks. And every change it made is a logged, reversible action she can audit.

"It's not that the agent is fast. It's that it never writes anything into your ERP, your CRM or your planning system without raising a ticketed, reversible action first. Speed you can trust near the systems that run your business."

The trust point — lead with this for risk-conscious buyers (Finance, IT, Ops)
1
The villain: the gaps

A new product touches seven systems. The delay and errors live in the handoffs between them, not inside any one tool.

2
The hero: one agent, one sentence

The agent walks the product across all seven — reading freely, reasoning where there's judgement, and following fixed rules where there are rules.

3
The reason to trust it

It never writes directly. Every action is an Action Ticket carrying a step-by-step procedure, executed and validated by the platform, fully reversible and audited.

💡How to use this tab: open here for a business audience, tell the before/after, land the trust line, then drop into "Sample questions" to show what they'd type and "Live scenarios" to prove it actually executes. Save the Tools and Governance tabs for the technical buyer.
3📥

Input data

Source systemField / entityTypePurpose
Centric PLMstyle, status, seasonobjectTrigger: only act on status = Approved
Centric PLMbom[] (materials)listComponents to map into the SAP material/BOM
Centric PLMcategorystringDerives SAP product hierarchy on exception
SAP S/4HANAmaterial template (FERT, plant)objectField mapping target for material create
Salsify PXMattributes, missing[], channelobjectContent gaps per sales channel
Kinaxis RapidResponsepart, demand, week, fillRateobjectSupply feasibility and launch date
SalesforceProduct2, PricebookEntrysObjectCommercial record for quoting
ServiceNowchange_requestrecordNPI tracking change for the launch
ℹ️ Developer note: the agent is triggered by a Centric PLM design-approval event (webhook or polled modifiedSince sync). The trigger payload carries the style id; the agent fetches everything else through the read tools in Section 4.
4⚙️

Processing flow (tools mapped per step)

ℹ️Each step shows the path it runs on (deterministic policy-bound, non-deterministic AI reasoning) and whether it is read-only or a write that must go via an Action Ticket.
1

Trigger & read design deterministic

Design reaches Approved in Centric PLM. Agent reads the style, season and BOM. No action taken if status is not Approved.

centric.read · ListBOMs / ListMaterials
2

Map BOM to SAP material template deterministic

Apply the fixed mapping from PLM category and BOM to the SAP material type (FERT) and plant. Emit the exact field set; do not improvise values.

(internal mapping skill) PLM category → product hierarchy, plant
3

Create material master deterministic Action Ticket

Raise an Action Ticket carrying MOP-SAP-MATERIAL-CREATE. ProcBot invokes the BAPI; Sherlock validates the bapiret2 return; the ticket records before/after.

sap.materialCreate · BAPI_MATERIAL_SAVEDATA (via ticket)
4

Open NPI tracking change deterministic Action Ticket

Open a ServiceNow change to track the launch and link every subsequent ticket to it.

servicenow.change · POST change_request (via ticket)
5

Detect content gaps & draft non-deterministic Action Ticket

Read Salsify per channel; reason about which gaps are auto-draftable (bullets) vs human-only (hero image). Write drafts via ticket; flag the rest.

salsify.read → salsify.write · UpsertProduct (via ticket)
6

Supply feasibility & launch date non-deterministic

Run a Kinaxis what-if for the target week; reason over fill rate and the binding constraint to recommend a feasible launch date. Read-only.

kinaxis.scenarioRun · RunScenario → PullResults
7

Commercial setup deterministic Action Ticket

If no Product2 exists, create it and a standard pricebook entry so sales can quote.

salesforce.query → salesforce.write · PutSalesforceObject (via ticket)
8

Channel-readiness gates deterministic

Apply per-channel rules (e.g. Target requires GTIN). Block publish and raise no ticket if a hard requirement is missing.

salsify.read · GetProduct (channel attributes)
9

Launch-readiness go/no-go non-deterministic human approval

Compose a readiness score from material, content, supply and commercial reads; present GO/NO-GO with blockers and wait for human approval before any external publish.

parallel reads → readiness summary → approval gate
5🔧

Skills & tools (real connectors)

ℹ️Every tool below maps to a real processorKey in the enttribe connector library. Connection type and call envelope are taken verbatim from each connector's documentation. Read tools are called directly; write tools are only invoked inside an Action Ticket (Section 6).
centric.readRESTSOURCE
plm.processors.CentricPLMRead
Reads products, styles, colours, materials, suppliers and BOMs from Centric PLM. Incremental via modifiedSince.
{"operation":"ListBOMs|ListStyles|ListMaterials|ListSuppliers","payload":{"modifiedSince","pageSize"}}
READ · direct
centric.writeRESTSINK
plm.processors.CentricPLMWrite
Upserts product specs, materials and supplier records into Centric PLM with spec versioning and approval routing.
{"operation":"UpsertProduct|UpsertSpec|LinkSupplier","payload":{"id","name",...}}
WRITE · via Action Ticket
sap.readOData v4SOURCE
erp.processors.SAPS4HanaPull
Pulls data from SAP S/4HANA Cloud OData v4 services. Basic or OAuth2 credentials.
{baseUrl}/sap/opu/odata4/sap/{serviceName}/{entitySet}
READ · direct
sap.materialCreateBAPI / RFCTRANSFORM
erp.processors.SAPBAPICall
Executes SAP BAPI/RFC function modules via the SAP BTP API Management REST proxy. Builds IMPORT/TABLE params, parses bapiret2, handles commit/rollback. Material create uses BAPI_MATERIAL_SAVEDATA.
BAPI_MATERIAL_SAVEDATA (alt: SAPOpenAPIInvoke for the OData material service)
WRITE · via Action Ticket
salsify.readRESTSOURCE
pim.processors.SalsifyProductRead
Reads products, assets, channels and category metadata from Salsify PXM. Rate limit 120 req/min per org.
{"operation":"GetProduct|ListAssets|ListChannels","payload":{"orgId","updatedAfter"}}
READ · direct
salsify.writeRESTSINK
pim.processors.SalsifyProductWrite
Upserts product records and digital assets in Salsify PXM. Validates property types against the schema; assets ≤ 50MB.
{"operation":"UpsertProduct|UploadAsset|LinkAssetToProduct","payload":{"orgId","productId","properties"}}
WRITE · via Action Ticket
kinaxis.scenarioRunRESTSOURCE
supplychain.processors.KinaxisScenarioRun
Triggers RapidResponse what-if scenarios and polls for metrics. Async run-id tracking.
{"operation":"RunScenario|GetScenarioStatus|PullResults","payload":{"scenarioId","parameters","runId"}}
READ · direct
kinaxis.queryRESTSOURCE
supplychain.processors.KinaxisQuery
Queries RapidResponse worksheets, scenarios and resources for orders, forecasts and inventory positions.
{"operation":"QueryWorksheet|ListScenarios|GetResources","payload":{"worksheetId","scenario"}}
READ · direct
salesforce.queryREST / BulkSOURCE
crm.processors.SalesforceBulkAPI / salesforce.QuerySalesforceObject
Executes Bulk API 2.0 query jobs / SOQL reads. Connected App OAuth 2.0 (JWT or username-password).
SELECT Id FROM Product2 WHERE ProductCode = '…'
READ · direct
salesforce.writeRESTSINK
salesforce.PutSalesforceObject
Creates new records for a Salesforce sObject (objectType attribute). Insert only. Used for Product2 + PricebookEntry.
POST sObject (objectType=Product2 | PricebookEntry)
WRITE · via Action Ticket
servicenow.changeTable APISOURCE
itsm.processors.ServiceNowChange
Manages ServiceNow change requests via the Table API with envelope validation and workflow-state awareness.
/api/now/v2/table/change_request
WRITE · via Action Ticket
teams.postGraphSINK
collaboration.processors.TeamsSendMessage / TeamsAdaptiveCardPost
Sends Teams channel/chat messages or adaptive cards (send_card, update_card, list_channels) for human-in-the-loop notices.
TeamsSendMessage · channel/chat message envelope
WRITE · via Action Ticket
⚠️ Connectivity honesty: connection badges reflect the protocol stated in each connector's own documentation (REST, OData v4, BAPI/RFC, ServiceNow Table API, MS Graph). The agent calls these as tools through the connector runtime. Where a vendor offers a first-party managed MCP server it can be substituted, but this spec does not assert vendor-native MCP for connectors the library exposes over REST.
6🤖

Agent prompt (production)

🤖 System prompt
You are the New Product Introduction (NPI) Orchestrator, an enterprise agent that
takes a product from PLM design approval to sellable across PLM, ERP, PIM, supply
planning, CRM and ITSM.

## Operating rules
1. Analysis is unrestricted. You may read from any connected system at any time
   using the SOURCE tools.
2. You NEVER write to a system directly. To change anything you raise an Action
   Ticket that carries a MOP (Method of Procedure). ProcBot executes the MOP;
   Sherlock validates the result; the ticket records before/after state and is
   reversible.
3. Choose the path per step:
   - Deterministic: a known, policy-bound transformation (e.g. PLM BOM -> SAP
     material by template). Emit the exact field mapping; do not improvise.
   - Non-deterministic: a judgement call (content quality, supply feasibility,
     exception cause). Reason over the evidence and state a confidence 0..1.
4. Require human approval before: the launch go/no-go and any content publish to
   external channels.
5. Always cite which tool and record produced each value. Never invent IDs,
   quantities or dates you have not read from a tool.

## Tools
READ (direct): centric.read, sap.read, salsify.read, kinaxis.query,
  kinaxis.scenarioRun, salesforce.query
WRITE (Action Ticket only): sap.materialCreate (BAPI_MATERIAL_SAVEDATA),
  salesforce.write (PutSalesforceObject), salsify.write, centric.write,
  servicenow.change, teams.post

## Output (every step)
{
  "decision": "...",
  "path": "deterministic | non-deterministic",
  "confidence": 0.0,
  "action_ticket": { "mop": "...", "scope": "...", "approval": "auto | human" } | null,
  "evidence": [ { "tool": "...", "record": "..." } ],
  "message_to_user": "..."
}
7🛡️

Execution governance — Action Ticket → MOP

No write reaches a system from the model. The agent's reasoning produces an Action Ticket; the ticket carries a MOP (the exact, parameterised procedure); ProcBot executes it; Sherlock validates the result; the ticket records before/after and stays reversible.

1 · Reason

Agent decides a change is needed and on which path (deterministic / non-deterministic).

2 · Action Ticket

Ticket raised carrying the MOP id, scope, parameters and approval level.

3 · ProcBot executes

Runs the MOP against the real connector (e.g. the SAP BAPI). Model never writes.

4 · Sherlock validates

Checks the return (e.g. bapiret2), confirms before/after, closes or rolls back.

{
  "action_ticket": "AT-1001",
  "mop": "MOP-SAP-MATERIAL-CREATE",
  "raised_by": "npi-orchestrator",
  "approval": "auto",
  "target": { "tool": "sap.materialCreate", "processorKey": "erp.processors.SAPBAPICall" },
  "procedure": {
    "bapi": "BAPI_MATERIAL_SAVEDATA",
    "import": { "HEADDATA": { "MATERIAL": "STYLE-4471", "MATL_TYPE": "FERT", "IND_SECTOR": "C" },
                "CLIENTDATA": { "MATL_GROUP": "HAIRCARE", "BASE_UOM": "EA" },
                "PLANTDATA": { "PLANT": "1010" } }
  },
  "validation": { "owner": "sherlock", "expect": "bapiret2.TYPE in ['S']" },
  "reversible": true
}
8🔀

Data flow

flowchart TD A([Centric PLM design Approved]) --> B[Read style + BOM centric.read] B --> C[Map BOM to SAP material template] C --> D{{Action Ticket MOP-SAP-MATERIAL-CREATE}} D --> E[ProcBot: BAPI_MATERIAL_SAVEDATA Sherlock validates] E --> F{{Action Ticket MOP-SNOW-NPI-CHANGE}} F --> G[Read Salsify per channel salsify.read] G --> H{Content gaps?} H -->|Auto-draftable| I{{Action Ticket MOP-SALSIFY-CONTENT-UPSERT}} H -->|Human asset| J[teams.post flag] I --> K[Kinaxis what-if kinaxis.scenarioRun] J --> K K --> L[Commercial setup PutSalesforceObject via ticket] L --> M{Channel gates GTIN / hero image} M -->|Pass| N[Go/No-Go readiness human approval] M -->|Fail| O[Block publish no ticket raised]
9🏗️

Systems touched

🎨 Centric PLM — styles, BOM, materials, suppliers
🟡 SAP S/4HANA — material master (read OData, write BAPI)
📦 Salsify PXM — content, assets, channel readiness
📈 Kinaxis RapidResponse — supply feasibility, launch date
☁️ Salesforce — Product2 + pricebook
🛠️ ServiceNow — NPI tracking change
💬 Microsoft Teams — human-in-the-loop notices
10🗄️

Mock data (seed to demo)

Centric BOM
SAP material create
Salsify content
Kinaxis what-if
Salesforce Product2
// centric.read → ListBOMs { style: "STYLE-4471" }
{
  "style": "STYLE-4471",
  "name": "GreenLeaf Organic Shampoo 250ml",
  "status": "Approved",
  "season": "Spring 2026",
  "category": "Hair Care > Shampoo",
  "bom": [
    { "material": "MAT-OILBASE-12", "desc": "Organic oil base", "qty": 0.18, "uom": "L" },
    { "material": "MAT-FRAG-ROSE",  "desc": "Rose fragrance",   "qty": 0.01, "uom": "L" },
    { "material": "MAT-PET-250",    "desc": "250ml PET bottle",  "qty": 1,    "uom": "EA" },
    { "material": "MAT-LBL-EN",     "desc": "EN label",          "qty": 1,    "uom": "EA" }
  ]
}
// Action Ticket AT-1001 → ProcBot → BAPI_MATERIAL_SAVEDATA
// Sherlock reads bapiret2:
{
  "RETURN": [
    { "TYPE": "S", "ID": "MM", "NUMBER": "356",
      "MESSAGE": "The material STYLE-4471 has been created" }
  ],
  "MATERIAL": "STYLE-4471",
  "plant": "1010",
  "material_type": "FERT"
}
// salsify.read → GetProduct { productId: "STYLE-4471", channel: "amazon-us" }
{
  "productId": "STYLE-4471",
  "attributes": { "description": "GreenLeaf Organic Shampoo" },
  "missing": [ "bullet_points", "hero_image" ]
}
// salsify.write (via AT-1003) → UpsertProduct
{ "updated": [ "bullet_points" ], "status": "ok" }
// kinaxis.scenarioRun → RunScenario → PullResults
{
  "part": "MAT-PET-250",
  "demand": 50000,
  "week": "2026-W12",
  "fillRate": 0.62,
  "constraint": { "part": "MAT-PET-250", "type": "capacity", "shortfallUnits": 19000 },
  "supplierLeadTimeDays": 21
}
// salesforce.query → SELECT Id FROM Product2 WHERE ProductCode='STYLE-4471'
{ "records": [] }
// salesforce.write (via AT-1005) → PutSalesforceObject objectType=Product2
{
  "product2": { "Id": "01t5g000004XyZ1", "ProductCode": "STYLE-4471", "IsActive": true },
  "pricebookEntry": { "UnitPrice": 12.99, "CurrencyIsoCode": "USD" }
}
11💬

Sample questions (conversational triggers)

These are the natural-language prompts the agent is built to answer. Each maps to one or more of the live scenarios below.

🚀"Launch STYLE-4471 for Spring 2026."Orchestrates scenarios 1, 2, 8 → 3 → exception 4
"Is STYLE-4471 ready to launch?"→ Scenario 9 (go/no-go readiness)
"What's blocking the launch of the GreenLeaf shampoo?"→ Scenarios 5, 9 (channel gates, blockers)
📦"Can the supply chain support 50,000 units in launch week?"→ Scenario 3 (Kinaxis what-if)
☁️"Set up GreenLeaf shampoo for sale in Salesforce."→ Scenario 6 (commercial setup)
🔧"Why did the SAP material creation fail?"→ Scenario 4 (exception recovery)
⚖️"Give me a go/no-go on STYLE-4471."→ Scenario 9 (approval gate)
📈"How is STYLE-4471 selling since launch?"→ Scenario 10 (sell-through watch)
🎯 Recommended demo run
Seed the mock data (Section 9), then ask "Launch STYLE-4471 for Spring 2026" — the agent walks scenarios 1, 2, 8, then 3 (supply), surfacing the exception in 4. Then ask "go/no-go" (scenario 9), approve, and later trigger scenario 10. Scenarios 5 and 6 can be invoked directly with their own questions.
12🎬

Live scenarios (tool-execution traces)

ℹ️Ten end-to-end runs. Each step is a tool call (SOURCE = read), a reasoning step, an Action Ticket carrying a MOP, or an agent message. Responses are the mock data above.