The trust layer for AI agents

An AI agent for every end-user, and a record of everything it does.

Each of your end-users gets their own agent, with its own memory and its own access to your systems. Built and hosted in Europe.

Its own memory and history for every end-user
Works in the systems you already run: orders, CRM, help desk
Pauses for your approval before sensitive actions
Every step recorded, timed, and costed
run.tracerun_7fa2
00:00.0run.startedpriya · "where’s my refund for order #8821?"
00:00.4tool.executingorders.lookup(id: 8821)
00:01.1tool.completedshipped · refund eligible
00:01.2approval.requiredpausedrefund.issue(€48.00)
00:02.6approval.resolvedapproved by you
00:02.9message.completed"Your €48 refund is on its way."
00:03.0run.completed5 steps · 3,812 tokens · €0.0241
Priya asks about a late refund. Her agent checks order #8821, you approve the €48, she gets an answer. Three seconds, two cents, every step of it above.
European by architecture

Built and hosted in Europe. Your agents' data stays yours — and you can prove where it lives.

Sealed per smith

One end-user's memory, tools, and history never reach another's, and every token is scoped to one tenant.

Signed webhooks

Every lifecycle event can land in your systems with a verifiable signature.

Versioned API

Dated, idempotent endpoints keep production integrations boring.

How it works

One question, start to finish.

  1. 1

    Your end-user asks

    Priya asks about a late refund, in your app or over Slack, WhatsApp, or email. She reaches her own agent, which already knows her history with you.

  2. 2

    The agent does the work

    It looks up order #8821 in your systems and checks it against the refund rules you configured.

  3. 3

    You approve what you chose to gate

    You decide which tools need sign-off. Lookups usually don't; refunds, credits, and account changes do. When the agent reaches a gated tool, the run pauses until you approve it.

  4. 4

    The run is on the record

    Each step is written down as it happens, with its timing and its cost, and the whole run can be replayed afterwards.

The agent running for Priya is hers alone: its memory, connections, and history reach no one else’s. We call it a smith, one running copy of your agent per end-user.

Agents & smiths

One design. One smith per end-user.

You design an agent — its instructions, model, tools, and memory — and publish versioned snapshots of it.

A smith is one end-user’s running copy of that agent, with its own memory, conversations, and connections. Roll a new version out to the whole fleet at once, or pin and override a single smith.

Every token is scoped to one tenant, so no tenant reads another’s data. Inside a tenant, each smith’s memory, threads, and connections stay its own.

More on smiths
Agent · the design
support-concierge
instructionsmodeltoolsmemory
v7 · published
one each
Smiths · one per end-user
ppriya
live thread
mmarco
2 channels
aalice
312 memories
Auditable by default

Open any run. Replay every step.

Calling a model API gives you a prompt in and an answer out, with no idea what happened between. Here every run is a recorded sequence of steps you can open, replay, and cost — and everything that happens lands on one append-only feed.

Trace every run, end to end

Each run is a recorded sequence of steps — every model call, tool invocation, and decision, timed and costed. Open any of them and replay it.

run.started → tool.executing → run.completed

Account for every token

Usage and cost are attributed down to the individual smith, so you always know which end-user spent what — and can meter it onward.

budget.threshold

Approve before it acts

Gate sensitive tools behind a human. Runs pause on approval, wait for your sign-off, and resume at the exact step they left off.

approval.required → approval.resolved
How we keep it honest
GET /v1/eventsappend-only
evt_9c4run.completedpriya12:04:21
evt_9c3approval.resolvedpriya12:04:18
evt_9c2approval.requiredpriya12:04:17
evt_9c1budget.thresholdmarco12:03:55
evt_9c0tool.completedalice12:03:40
evt_9bfrun.startedpriya12:04:14
operator.consolelive
pending approvals
3
refunds · account changes
per-smith spend
€18.42
alice · this month
budget threshold
80%
project alert delivered
webhook health
2.1s
p95 delivery latency
The runtime

The hard parts, run for you.

Memory, tools, models, and channels — the infrastructure an agent needs in production, behind one API and one console, so you ship the product instead.

Where it fits

Useful agents are product features, not demos.

Reach for Ingram Cloud when an agent needs customer-specific memory, real tools, delivery channels, and a record your operators can trust after it acts.

See all solutions

Support that can actually do the work

Answer from your product data, look up orders, draft fixes, and pause before refunds, credits, or account changes.

Help center → orders.lookup → approval → reply

A private copilot for every end-user

An assistant for every end-user across Slack, WhatsApp, Telegram, and email, with the same memory wherever they write.

Inbound message → right smith → same thread

Back-office workflows with a record

Let agents triage leads, chase missing details, reconcile tickets, and call your internal tools without losing the audit trail.

Tool call → signed event → replayable run

AI features for SaaS products

Add a copilot to your product without building the plumbing first: per-end-user memory, approvals, tracing, and metering already exist.

Your app → the API → isolated user state
Developer experience

API-first, visible in the console.

Everything in the console is the public /v1 REST API — the same surface you build on. Drive agents from your backend, or drop in the OpenAI-compatible endpoint and keep the SDK you already use.

  • OpenAI-compatible /v1/chat/completions — keep your SDK
  • Infrastructure as Code with the Pulumi provider
  • Signed webhooks for every lifecycle event
  • Idempotent writes and a versioned, dated API
  • Per-project isolation with cryptographically scoped tokens
  • Meter and bill your own customers on top
app.ts
// drop-in: point the OpenAI-compatible
// provider at a smith and stream
import { createOpenAICompatible }
from "@ai-sdk/openai-compatible";
import { streamText } from "ai";
const ingram = createOpenAICompatible({
name: "ingram",
baseURL: "https://api.cloud.ingram.tech/v1",
apiKey: SMITH_TOKEN,
});
const { textStream } = streamText({
model: ingram("openai.gpt-5.6-sol"),
prompt,
});

Put an agent in your product this week.

Create a project, mint a token, and stream your first reply in minutes — every action on the record from the first one. No infrastructure to stand up, and you pay for what your smiths use.