Build a Customer Support Agent You Can Trust With Complex Tickets

Atrium is the platform for building customer support agents that resolve complex requests end to end. With built-in tools, permissions, and evaluations, you can use your coding agent to connect your systems, define your agent’s behavior, and control when it acts autonomously.

  1. API
    Question receivedReceived
    POST /sources/plain/events
  2. InvestigationQueued
    Question received
    POST /sources/plain/events
    Webhook accepted · thread queued
  3. API
    Send replyQueued
    Plain GraphQL · replyToThread

Your team already uses AI. Getting it to run support is still a project.

Getting the right tone, connecting customer context, and making AI reliable enough to act still takes work.

Nothing you cannot customize.

Your channels and systems stay. Customize what the agent does, how it does it, and what it may do.

ChannelsAlready yours
Your helpdesk, Slack, email, or API.
SkillsYou customize
What to do. Your team's procedures.
ToolsYou customize
How to do it. Built in or custom code.
ConnectionsYou customize
What may run, needs approval, or is blocked.
Your systemsAlready yours
Your database, Stripe, Linear, and more.
ChannelsYours already
Slack Connect, Pylon, Plain, Zendesk, email or the API. The conversation arrives where it already arrives.
SkillsYou write this
What to do. The approach your team takes for the requests that come back again and again.
ToolsYou write this
How to do it. Built in, or TypeScript you own, tested against your own past tickets before it goes near a customer.
ConnectionsYou write this
Whether it may. One credential per system, and every call decided before it runs: allowed, held for a person, or blocked.
Your systemsYours already
Stripe, Postgres, Linear, Sentry, any MCP server, or any tool your company uses that has an API. Running where they already run.

You describe the change. It gets built.

Describe what you want. Your coding agent builds it, tests it against past tickets, and shows you the result.

Claude Code Example session

> Add a tool for duplicate charges. Refunds must be within 30 days and need approval.

  • Skill and refund tool written
  • Tested against past tickets
  • Change ready for your review
New skillDuplicate charges

Stripe · Refund duplicate charge

Requires approval
acme-support — claude — scope: read, test, publish

>

Atrium · Skills4 skills
  • refundscustomer channels
  • sso-setupcustomer channels
  • plan-changescustomer channels
  • usage-limitscustomer channels
Duplicate chargesCustomer channelsEnabledUpdated just nowEdit
When to useHandle a customer billed twice for the same thing.
View instructions
Related tools & connections
Stripe / Refund duplicate chargeRequires approval
Stripe / Read any Stripe API (GET)Allowed
Stripe / Write to any Stripe API (POST, PATCH, PUT, DELETE)Requires approval
Current shared permissions · customer channels · investigations. These links document relationships; they do not change which tools the agent can use. Live controls and call inputs also apply. Manage tools
Version history · 1

Flexible reasoning. Rules enforced in code.

Skills guide the procedure. Code enforces your rules, and connection permissions decide what can run.

Your instruction

Only allow refunds within 30 days, and require approval before issuing one.

Enforced in code · excerpt
if (days > 30)
throw new Error(
"outside the 30-day refund window"
)
Example · 36-day-old chargeBlocked before refund
skills/duplicate-charges.mdread by the model

Only allow refunds within 30 days, and require approval before issuing one.

## What to do
2. Check for a retried webhook before calling it
a duplicate.
3. Call refund_duplicate_charge with the second
charge id. The window is 30 days from the
charge, not from the invoice date.
refund_duplicate_charge.mjsruns before Stripe does
export default async function run(input, ctx) {
const charge = await ctx.connections.stripe.call("stripe_api_read", {
stripe_api_operation_id: "GetCharges",
parameters: { charge: input.charge_id },
})
const days = (Date.now() / 1000 - charge.created) / 86400
if (days > 30) throw new Error("outside the 30-day refund window")
if (charge.refunded) throw new Error("already refunded")
return await ctx.connections.stripe.call("stripe_api_write", {
stripe_api_operation_id: "PostRefunds",
parameters: { charge: input.charge_id, amount: charge.amount },
})
}

Build the confidence to let your agent handle more.

Review real requests and test past cases. Decide what your agent handles on its own, one category at a time.

Demo workspace

Unchanged
61.4%
Rating
4.6
Back in 7d
0.8%
Change Billing AddressAutonomous

604 conversations · 98% sent unchanged

Small RefundsReady

412 conversations · 98% sent unchanged

331 refunds proposed under $50. Every one approved, none rejected, none reversed.

Learns from every ticket and suggests improvements.

New skills, corrected knowledge, better instructions. Your agent proposes changes. You decide what ships.

Learning from every conversation

4 suggestions for your review

New skill

Refund duplicate charges

skills/duplicate-charges.md

+ Refund the duplicate payment.

+ Confirm with the customer first.

Eleven requests in 30 days, all resolved the same way.

  • New skill

    Refund duplicate charges

    skills/duplicate-charges.md

    + Refund the duplicate payment.

    + Confirm with the customer first.

    Eleven requests in 30 days, all resolved the same way.

    Awaiting review
  • Knowledge fix

    Set retry limit to 3

    Retry limit53

    It answered 5. The customer corrected it, and was right.

    Awaiting review
  • Instruction change

    Skip the stock intro

    Thanks for reaching out.

    Get straight to the answer.

    Four replies in a row were edited to cut that line.

    Awaiting review
  • Knowledge gap

    Cover SSO sync failures

    47
    conversations, no skill

    SSO · group sync

    47 conversations matched no skill at all.

    Awaiting review

The questions everyone asks on the first call.

Can we edit the prompts?

Yes. Instructions and skills are text files you can edit in your repo with your coding agent, or directly in the UI. Test changes against fixtures, publish versioned releases, and roll back when needed. You control how it investigates and writes.

Will it sound like us?

It investigates first, then writes using your instructions and examples. Ratings and corrections become proposed skill updates for an admin to review. No fine-tuning required.

What works from day one?

Atrium provides built-in tools for billing through Stripe, account and usage lookups through your database, bug investigations through Linear, GitHub and PostHog, and how-to answers from your docs and repos. Connect your sources so your customer support agent can investigate and draft, then add custom tools, skills, and permissions for your business.

What needs approval?

By default, reads run automatically, writes need approval, and destructive actions are blocked. Adjust permissions per channel or tool. Approve requests in Slack or the inbox for one action, one investigation, or future requests in that channel.

Do we keep our helpdesk?

Yes. Atrium works on top of your existing customer support stack.

How do we check its work?

Start in shadow mode: it investigates and drafts, your team sends. Every run records prompts, tool calls and permissions. A resolution counts only if the reply goes out unchanged, needs no follow-up and stays resolved for seven days. Unreviewed sending is earned per category and revoked after a poor answer.

How does pricing work?

Usage-based pricing with a monthly minimum. No seat fees or per-resolution charges.

Where does our data live?

Use our hosting or deploy in your own infrastructure, where it only creates helpdesk drafts. Secrets are encrypted per workspace and database queries are tenant-scoped. Compliance attestations, retention policies and deletion procedures are in progress. Share any requirements before rollout.

What if our sources conflict or are out of date?

It always starts with your product code and reads your sources live. It can reconcile conflicting or outdated knowledge at runtime across docs, repos, meeting notes and past customer replies. The review log shows which sources informed each answer.

Build confidence in your customer support agent.

Build on Atrium’s tools, permissions, and evaluations. Shape your agent around your business, review its work, and decide which requests it can handle autonomously.