[Platform](https://noodleseed.com/platform) / Architecture

Architecture

# The control system around every AI agent.

Quick builds put the rules in a prompt and hope. We put them in the engine: what an AI agent may do is declared, checked before it goes live, guarded on every action and recorded. The model holds the conversation; the engine decides what happens.

The control system

## Declared, checked, guarded, recorded.

01

### Declared

What each AI agent may do is written down as capabilities, not left to a prompt.

-   Who may use it, on which channels
-   Which records it reads and which it changes
-   Money as typed values, never free text
-   Every possible outcome, with approved words

02

### Checked

A capability cannot go live until the engine has checked it.

-   Every change has a read-back
-   Money, roles and outcomes are complete
-   Every value has a known source
-   Each channel’s real limits are respected

03

### Guarded

At run time the engine, not the model, decides what happens.

-   The person is proved before their data is shown
-   Permission is checked before every action
-   Nothing changes without a yes to an exact read-back
-   Tokens never reach your systems

04

### Recorded

Every action leaves a record you can show anyone.

-   Who asked, and for whom
-   What was shown and confirmed
-   What actually happened, with the provider’s confirmation
-   Secrets kept out of records and logs

Failure lab

## What happens when it goes wrong.

Pick a failure. Each is a moment where a quick build does the wrong thing, and each names the mechanism that handles it.

The payment times out halfway. A quick build: Retries and charges twice, or loses the order. Noodle Seed: Resumes from the last completed step and charges once. How: Durable workflows on Temporal, idempotent steps and provider event deduplication.

The model says "booked" but the system did not confirm. A quick build: Tells the customer it is done. Noodle Seed: Can only say what the outcome allows: booked, pending, conflict, rejected or unknown. How: Every capability declares its outcomes, with approved words for each, before it can run.

A message or web page tells the AI agent to ignore its rules. A quick build: Follows the instruction. Noodle Seed: Nothing the model says can approve an action. Permission is checked outside the model. How: Business-scoped policy before every tool call, and again at confirmation.

A customer types their card number into the chat. A quick build: Keeps it in the transcript. Noodle Seed: Takes payment on the provider’s own checkout and masks protected fields. How: Provider checkout; structural redaction in records and logs.

Two people book the last table at once. A quick build: Books it twice. Noodle Seed: Confirms one and offers the other a real alternative. How: A conflict outcome, with records checked again at the moment of confirmation.

The AI agent passes its sign-in token to your systems. A quick build: Forwards the token. Noodle Seed: Exchanges it for a narrow credential. The token never reaches your backend. How: A credential broker issuing delegated credentials per system.

Someone asks to see another person’s order. A quick build: Shows it. Noodle Seed: Proves who they are first. How: One-time codes on every channel; a record belongs to a person by phone or email.

A price or value is invented. A quick build: Uses the model’s number. Noodle Seed: Every value in a read-back comes from your records, never from model output. How: Provenance checks on each value before a capability can be published.

The service restarts mid-conversation. A quick build: Forgets what the customer agreed to. Noodle Seed: The read-back survives and the conversation carries on. How: Durable read-backs, stored outside the conversation.

The provider never answers. A quick build: Guesses success or failure. Noodle Seed: Says the result is unknown, then reconciles it with the provider. How: An unknown outcome and a reconciliation step, never a guess.

Anatomy of one action

## One booking, followed through every control.

A table for four with a $20 deposit, from the first message to the record, with what the engine produces at each step.

Step 1: The request. A guest asks on WhatsApp.

inbound whatsapp from +44 7700 900123 signature verified with the provider text "Table for four tonight at 8?"

Step 2: The capability. The model picks a declared capability.

capability('reserve-table', { roles: \['guest'\], reads: \['availability', 'price-list'\], changes: \['reservations.create'\], money: { deposit: 'USD 20.00' }, outcomes: \['booked', 'pending', 'conflict', 'rejected', 'unknown'\], })

Step 3: The checks it passed. It could not have gone live without them.

check readback pass every change is read back check money pass deposit typed, paid by provider check roles pass a guest may book for themselves check outcomes pass 5 of 5 outcomes have words check provenance pass every value has a source

Step 4: Permission. Decided outside the model.

policy business saffron-table channel whatsapp action reserve-table person proved by phone decision allow

Step 5: Live facts. Read from the booking system, not guessed.

read availability source booking system at 19:02:11 20:15 window table free 20:30 terrace table free

Step 6: The read-back. Exact values, each from a record.

readback rb\_7f2 party 4 from the request time 20:15 from availability deposit USD 20.00 from the price list stored durable, survives a restart

Step 7: The yes. The guest confirms those exact values.

consent rb\_7f2 answer Confirm and pay channel whatsapp at 19:02:40 matches the stored read-back

Step 8: The payment. On the provider’s own checkout.

checkout provider checkout amount USD 20.00 card never seen by Noodle Seed event payment succeeded signature verified

Step 9: The durable step. Booked once, even through a restart.

workflow reserve-table / rb\_7f2 1 deposit confirmed 2 reservations.create attempt 1 ok idempotency key rb\_7f2

Step 10: The outcome. Said only after success is confirmed.

outcome booked words "Your table for four is booked for 8:15 pm tonight."

Step 11: The record. One record from request to result.

record reserve-table / rb\_7f2 who guest, proved by phone for Saffron Table checked identity, permission confirmed rb\_7f2 at 19:02:40 result booked, payment confirmed

Interaction language

## Write a conversation once. Serve it properly everywhere.

Every capability is described in our own channel-independent interaction language: who takes part, the steps they go through, what each step shows, asks and changes, and every possible outcome. The runtime then serves it on each channel in the form that channel supports.

// Simplified for illustration
interaction('reserve-item', {
  roles: \['customer'\],
  steps: \[
    inform('availability', { facts: source('stock') }),
    choose('size', { from: source('variants') }),
    confirm('reserve', { effect: 'orders.reserve' }),
    outcome({ success, pending, conflict,
              rejected, unknown }),
  \],
})

Customers

WhatsApp

Instagram

SMS

Website chat

ChatGPT

Claude

Employees

Slack

Microsoft Teams

Google Chat

LL

 **Linen and Loom** Business account

Today

Do you have the linen shirt in medium? I need it by Friday.10:41 _✓✓_

Yes, two left in medium at $68. Standard delivery to you arrives Thursday. Shall I reserve one?10:42

Yes please.10:43 _✓✓_

Linen shirt, medium **$68.00** 

Delivery **Thursday** 

Pay by card, bank transfer or wallet?

10:43

Confirm

Change

Example conversations. One platform, every channel. 

Pause channels

How it adapts

## Each step takes the form each channel does best.

_Native_ The channel’s own way_Adapted_ Same meaning, simpler form_Secure page_ Continues on a protected page, then returns

| Channel | Show facts | Offer a choice | Confirm an action | Card or identity details |
| --- | --- | --- | --- | --- |
| Website chat | _Native_ | _Native_ | _Native_ | _Secure page_ |
| WhatsApp | _Native_ | _Native_ | _Native_ | _Secure page_ |
| Instagram | _Native_ | _Adapted_ | _Adapted_ | _Secure page_ |
| SMS | _Adapted_ | _Adapted_ | _Adapted_ | _Secure page_ |
| ChatGPT and Claude | _Native_ | _Native_ | _Native_ | _Secure page_ |
| Slack, Microsoft Teams, Google Chat | _Native_ | _Native_ | _Native_ | _Secure page_ |
| Voice | _Adapted_ | _Adapted_ | _Adapted_ | _Secure page_ |

Honest outcomes

## What the AI agent says is written before anything runs.

Every action declares its possible results, and each has approved words. The AI agent never announces a success the system has not confirmed.

Success

“Your table for four is booked for 8:00 pm on Friday.”

Pending

“Your payment is being processed. I will confirm as soon as the bank does.”

Conflict

“That time was just taken. 8:30 pm is free. Shall I book it instead?”

Rejected

“The card was declined. Nothing was charged and nothing was booked.”

Unknown

“We could not confirm the booking yet. I am checking and will message you shortly.”

Under the hood

### Durable waits and follow-ups

A step can wait for a payment, an approval or an event for up to 90 days, then carry on. A change that ended unknown is checked, not repeated. Built on Temporal.

### Secure pages for sensitive steps

Card numbers, documents and identity checks move to a protected page and come back to the conversation, so they never sit in a chat.

### Confirmed changes

Each step can change at most one thing, through a registered operation with checked inputs, and only after a yes.

### One build, every assistant platform

Capabilities are written in TypeScript and compiled into one runtime artifact that serves both current MCP protocol versions, including apps in ChatGPT and Claude.

### A broker for credentials

Each person’s access is exchanged for narrow, delegated credentials for each system. Tokens an AI agent presents never reach your backend.

### An open runtime

Noodle Core, our runtime for AI agents and the tools they use, is open source under Apache-2.0.

[How it is controlled](https://noodleseed.com/security)

Talk to us

## Tell us what you need. We will suggest where to start.

Any layer, any size: a review, a project, a programme or a partnership.

Who you areWhat you need firstSize

Suggested starting point

 **An MCP server and apps for ChatGPT and Claude covering the actions your users ask for most, with sign-in through your own accounts, then submission and upkeep.** 

Layer: Applications: MCP servers and apps  
Delivery: Build, Run  
Scale: Review, then a first project

Your nameWork emailCompany website

Ask us to get in touch

We use your details only to reply. See our [privacy policy](https://noodleseed.com/privacy).

---

Source: https://noodleseed.com/architecture

[All public pages in Markdown](https://noodleseed.com/llms.txt)
