Platform

Three layers. One agent.

Knowledge tells the agent what is true. Policy tells it what is allowed. Actions let it do something about it. Everything else is plumbing — and we did the plumbing.

ZendeskIntercomSalesforceShopifyStripeSlackHubSpotGorgiasTwilioOktaNetSuiteChargebeeJiraLinear ZendeskIntercomSalesforceShopifyStripeSlackHubSpotGorgiasTwilioOktaNetSuiteChargebeeJiraLinear
01 — Knowledge

Grounded in what is actually true today.

Oriel indexes your help center, internal runbooks, Slack threads your team marked as canonical, and — crucially — the live state of the customer’s account. It cites every claim, so when a policy changes, the agent changes with it.

  • Live connectors: Zendesk, Intercom, Notion, Confluence, Google Drive, GitHub
  • Account-aware retrieval: order, plan, device, region, history
  • Freshness scoring — stale articles are demoted, not deleted
  • Every answer cites the source paragraph
Knowledge graph1,284 sources · fresh 2m ago
Help centerNotion#support-canon3 stale demoted
02 — Policy engine

Rules your agent can’t talk itself out of.

Policies are written in plain English and compiled to checks the model cannot override. Refund windows, dollar limits, identity verification, tone, regulated phrasing — evaluated before every action, visible in every transcript.

  • Plain-English policies with versioning and staged rollout
  • Hard limits: dollar caps, rate limits, allow-lists per action
  • Approval queues for anything above threshold
  • Red-team suite runs on every policy change
Policy checkv12 · 6 rules
§1Verify identity before any account change.PASS
§4.2Shipping refund if delivered > 48h late.PASS
§4.3Refunds > $250 require human approval.QUEUE
§7Never promise delivery dates; quote carrier ETA only.PASS
§9Regulated: no medical or legal advice. Hand off.PASS
03 — Actions

Resolution means doing something.

Oriel ships with 140 pre-built actions across commerce, billing, identity and ticketing, and a typed SDK for your own. Every action is scoped, idempotent, logged, and — where the underlying system allows it — reversible with one click.

  • 140 actions, from “issue refund” to “rotate API key”
  • Dry-run mode: see what the agent would have done
  • One-click reversal with audit trail
  • Your APIs via an OpenAPI spec or the SDK
Actions today3,118 · 0 reverted
stripe.refunds.create1,204 · avg 310ms
HEALTHY
shopify.orders.updateAddress612 · avg 540ms
HEALTHY
okta.users.resetPassword388 · avg 220ms
HEALTHY
acme.warranty.open91 · avg 1.2s · custom
HEALTHY
04 — Channels

Chat, email, voice, in-product.

Same agent, same memory, same policies. Voice runs at sub-second latency and hands off mid-call with the full transcript attached.

01

Chat

Web widget, in-app, WhatsApp, Messenger. Rich cards, file uploads, typing that means thinking.

02

Email

Threads, attachments, forwards. Replies in your voice, with your signature and your SLA.

03

Voice

Natural, interruptible, 31 languages. Verifies identity by voice and OTP. Hands off without hold music.

04

In-product

Reads live UI state via our SDK and guides or acts on the screen the customer is looking at.

05 — Analytics

Resolution rate, audited.

We count a conversation as resolved only when the customer confirms or goes quiet after an action. Every week a sample is re-checked by humans and the number is corrected. The dashboard shows you the gap.

  • Resolution, handoff and reopen rates per intent
  • Policy hits: what the agent wanted to do but couldn’t
  • Knowledge gaps ranked by cost
  • Export to Looker, Mode, BigQuery, Snowflake
Autonomous resolutionLast 12 weeks
80%60%40%20% OrielPrevious vendor — dashed
06 — Developers

Your APIs become actions in an afternoon.

Point Oriel at an OpenAPI spec or write an action in TypeScript. Declare inputs, scopes and a reversal. We generate the policy hooks, the audit log and the dry-run harness.

Read the docs
actions/warranty.ts
// Registers a reversible action with scopes + policy hooks
import { action, z } from "@oriel/sdk";

export default action({
  name: "warranty.open",
  scope: "orders:write",
  input: z.object({ orderId: z.string(), reason: z.enum(["defect", "damage"]) }),
  limits: { perCustomer: "1/30d" },
  async run({ input, customer }) {
    const rma = await acme.openRMA(input.orderId, input.reason);
    return { rmaId: rma.id, summary: `Opened ${rma.id}` };
  },
  async reverse({ output }) { await acme.cancelRMA(output.rmaId); }
});

See it on your backlog.

Shadow mode runs Oriel against last month’s tickets and shows you what it would have resolved. No customer sees a word until you say so.