Skip to content

Open Customer Service Orchestration

Customer service,
rethought for the AI age.

Today customer service is scattered across channels, tools and teams, with AI bolted on at the edges. OCSO is the open orchestration layer where AI agents and your people serve customers together on WhatsApp, web chat, Slack and Teams. Every configuration change is approved by a second person and written to a signed audit trail.
Channels
WhatsApp · web chat · Slack · Teams
Governed
maker–checker on every change
Open source
Apache-2.0, self-hosted

Built with Winsen Labs

We’ll build this with you.

OCSO is open source, and you can run it yourself. If you would rather rethink customer service with the people who build it, Winsen Labs works alongside a small number of teams at a time. We select those engagements carefully, so each one gets our full attention.

  1. 01

    Map how you serve customers today

    Your channels, queues, teams, tools and the edge cases that fall between them.

  2. 02

    Stand up OCSO on your infrastructure

    Your servers or your cloud account, your model providers, your systems connected over MCP.

  3. 03

    Run it with your team

    Agents, routing and hand-offs shaped with the people who serve your customers, every change approved.

The conversation workspace for Nikhil Menon, a Service member. A web chat customer asked Maya, the AI agent, for a human about a duplicate EMI debit; the timeline shows Maya telling the customer a colleague will join, the escalation, the routing to the Cards & EMI Tier 2 queue, Nikhil claiming it and his reply. A dark banner says Human active: Maya is attached and will not reply until control returns, with Return to AI and Resolve buttons. Side panels show the AI summary, the assignment, the routing and the approved tools.
Your team’s view: the AI hands over, a named colleague picks up the same conversation with the AI’s summary. Demo data.

Tell us about your customer service team, and we’ll set up a walkthrough.

Request a demoAbout Winsen Labs

The problem

Customer service is scattered.

Every channel, tool and team handles its own slice of the customer, and nobody sees the whole. AI bolted onto the edges only adds another silo. Customer service needs rethinking for the AI age: one layer that orchestrates every channel, agent and person.

Channels

TodayA bot on the website, a WhatsApp number run by a vendor, Slack for your biggest accounts. Each with its own rules and its own history.

With OCSOWhatsApp, web chat, Slack and Microsoft Teams behind one contract: one conversation model, one hand-off, one audit trail.

Tools

TodayA helpdesk, a bot builder, a CRM and a spreadsheet of who handles what, stitched together by people.

With OCSOOne path for every customer: channel, router, queue, agent. Your own systems join as tools over MCP.

Teams

TodayThe bot belongs to one team and the queue to another. At the hand-off, the customer explains everything again.

With OCSOAI agents and people on the same conversation, with explicit control states and the AI summary carried across.

Edge cases

TodayThe case nobody configured falls through the cracks, and nobody notices until the customer complains.

With OCSOEscalation rules, SLA policies and a weekly signed report of the customers routing could not place.

AI

TodayBolted on in places. Prompts edited in production, with no record of who changed what, or why.

With OCSOVersioned prompts, and every change to live configuration approved by a second person and written to a signed audit store.

The OCSO way

One orchestration layer for customer service.

Every customer takes the same readable path, whichever channel they write on. AI agents and your people work the same conversations, and hand them to each other in both directions.

  1. 01 · Channels

    • WhatsApp
    • Web chat
    • Slack
    • Teams

    Each message is verified and stored before anything else happens.

  2. 02 · Routers

    • Menu
    • Model
    • Known facts

    Ask a menu question, classify with a model, or use what you already know, then pick a queue.

  3. 03 · Queues

    • Cards & EMI
    • Hardship
    • Sales

    The service unit: one AI agent, its human teams, an SLA policy, hours and transfer targets.

  4. 04 · Agents and people

    • Maya, AI agent
    • Your team

    The AI answers with the tools you approved. A rule, the customer or the agent can bring in a person.

Hand-off both ways. Every change of control is explicit and audited:

  1. AI active
  2. Escalation requested
  3. Waiting for a human
  4. Human active
  5. AI resuming
  6. Resolved

01 · Home for a Head

What needs you, before it goes wrong

An understaffed queue, an exception to review, the week’s containment and escalations, and the live flow from channel to router to queue to agent.

Catches: A queue with customers waiting and nobody on shift.

02 · Workspace

AI and people on the same conversation

The AI agent hands off with a reason, a colleague claims the chat with the AI summary in front of them, and the AI stays attached to take it back.

Catches: A customer stuck with a bot after asking for a person.

03 · Router builder

Routing you can read, test and approve

Build a menu, a model classifier or known-fact rules, then simulate a customer before the router goes live.

Catches: A routing change that sends customers to the wrong queue.

04 · Agent prompt

Versioned prompts, built from parts

Identity, objective, behaviour and policies compile into one prompt with a hash. Every version is immutable, attributable and can be rolled back.

Catches: A prompt edited in production with no record of who changed it.

05 · Escalation rules

When the AI must bring in a person

Rules evaluated in code on every turn: hardship language, refunds above a limit, disputes, repeated tool failures, a customer asking for a human.

Catches: An AI agent handling a case it should never handle alone.

06 · Channel setup

Channels set up from a guide, not a ticket

Each channel type brings its own setup guide. For Slack, OCSO generates the app manifest with this channel’s webhook URL, ready to download.

Catches: A half-configured channel going live: a draft receives nothing until its activation is approved.

Built for everyone in customer service.

Four role presets, checked in code, with per-user grants on top. Each team sees what it owns.

Claim the next customer from the pickup queue, with the SLA clock and the AI’s summary in front of you.

The pickup queue for Nikhil Menon: 4 queues, 3 conversations waiting now, 0 past the pickup SLA. Three web chat customers wait in Cards & EMI · Tier 2 after asking Maya for a human (about a duplicate EMI debit, a hardship plan and a credit card upgrade), each with priority P3 and minutes left to the SLA. Below, the queues table shows each queue’s agent, approval, pickup mode, teams, skills, languages, SLA policy and who is on shift.

Screens from OCSO running with demo data.

Head

For customer service leaders

Full authority inside your teams: agents, queues, SLAs and quality. You check your colleagues’ changes and sign the exception report.

Lead

For team leads

Run your teams’ agents, prompts, queues and routers. Propose changes, replay a draft prompt on past conversations, and roll back.

Service

For service teams

Handle the conversations in your queues. Take over from the AI with the context in front of you, then hand back.

Tech

For platform teams

Run the platform: model providers, channels, MCP, sign-in and audit verification, without reading conversation content.

Ask OCSO · ⌘J

A copilot that can do anything you are permitted to do.

Its tools are generated from OCSO’s own API and filtered to your permissions, so it grows with the product.

  • What needs my attention?
  • What is waiting on my approval?
  • Which conversations are waiting for a human?
  • Which agent escalates most this week?
Ask OCSO in Slack and Teams →
  • 01

    It acts as you, never as more

    Every call goes through the real API with a single-use delegation for you: the same permissions, team scope, approvals and audit as the app.

  • 02

    Every write is a card you confirm

    Reads answer straight away. A write comes back as a confirmation card built by the server, and runs only when you click.

  • 03

    Governed changes go to a checker

    A change that needs approval becomes a proposal, and the checker can review and decide it from Ask OCSO too.

  • 04

    Also in Slack and Microsoft Teams

    Link your chat account once and ask as yourself, with the same cards, approvals and audit.

Governed for real

Controls an auditor can check, not just trust.

Built for regulated service teams. Permissions are checked in code, never in a prompt, and nothing a model says can grant one.

The Approvals page for Rohan Kapoor, a Head, with two queue changes from Anjali Rao awaiting him. One is open in a drawer: “Change queue Cards & EMI · Tier 2”, with its reason (Tamil-speaking customers from the Chennai card launch now reach this queue), maker, checker, content hash and a before and after table (auto-assign after 90 → 120 seconds; languages en, mr, hi → en, mr, hi, ta), and Approve and Reject buttons.

Approvals: the checker sees the maker, the reason, the content hash and exactly what would change.

01

Maker–checker on every configuration change

Agents, prompts, tool grants, routers, queues, SLA policies, channels, providers, MCP connections, SSO, users and permission grants. Each change is a proposal a named second person approves, and the checker approves exactly the content they saw, enforced by content hashes. Stops such as pause, disable and revoke apply at once.

02

A separate, signed audit store

Audit events commit in the same transaction as the change, then ship to their own append-only database (PostgreSQL or ClickHouse) that the application cannot rewrite. There they are hash-chained, checkpointed with Ed25519 signatures, exported daily and verifiable offline.

03

A weekly signed exception report

Where the controls were bypassed or failed: configuration live without an approval, self-approvals, rights granted around approval, customers routing could not place, audit events that did not reach the store, a chain that did not verify.

Roles, and verification you can run yourself

Four presets (Tech, Head, Lead, Service), per-user grants with an optional expiry, and team-scoped ownership of agents. Taking access away applies at once; widening it needs approval. The audit-verify tool re-checks the hash chain against the signed checkpoints, trusting only the public keys you pin.

Security and governance, in detail →
$ docker compose run --rm migrate \
    node audit-store/dist/bin/audit-verify.js

01 · Exception report

Where the controls were bypassed, signed weekly

A weekly report of self-approvals, configuration live without an approval and more, frozen with a content hash for a Head to sign.

Catches: Controls that exist on paper but were worked around.

02 · Audit store

A separate store you can verify

Events ship to their own append-only database, hash-chained and checkpointed with signatures. Verify any range from the System page.

Catches: An audit trail that was quietly rewritten.

03 · Audit log

Every privileged action, attributed

Who did what, to which object, through which interface, with payloads redacted when written.

Catches: A change nobody can account for.

Open source

Build on it. Host it. Own it.

OCSO is a core plus contracts. Everything that touches an outside system is a plugin, and a lint rule fails the build if core code names one. Six model providers ship today: AWS Bedrock, Google Vertex AI, Microsoft Foundry, OpenAI, Anthropic and Sarvam.

Integrations → Models: the scripted demo model (development only) configured in ap-south-1 with its profiles, caching and latency, and cards for AWS Bedrock, Google Vertex AI, Microsoft Foundry, OpenAI, Anthropic and Sarvam AI, not configured, each listing the credentials and caching it uses.
Models. Provider cards with residency, caching and profiles; credentials are write-only and stored by reference.
Integrations → MCP connections, Shared servers tab: one server, meridian-core (the demo’s core banking system for customers, cards, EMI, statements, disputes and payments), with header authorization, shared scope, 7 of 7 tools and a Healthy status.
MCP connections. Shared MCP servers with their auth, scope, tool count and health; tools are approved per agent.

Docker Compose, on your own server

The supported deployment: one host with four vCPU and 8 GB of RAM for a pilot, and a Caddy overlay for HTTPS. Single-tenant: one deployment belongs to one organization.

git clone https://github.com/winsenlabs/ocso.git && cd ocso
cp .env.example .env
docker compose up -d --build
Compose operations guide →

AWS

Terraform for ECS Fargate with S3, SQS and Secrets Manager drivers. Validated, not yet applied to a real account: a starting point.

AWS guide →

Hardened by default

Non-root, read-only containers; the database on a network with no internet access; credentials envelope-encrypted and kept out of logs, prompts and audit payloads.

View on GitHub

Apache-2.0. OCSO is pre-1.0: APIs, the schema and plugin contracts can still change.

Request a demo

See OCSO on your customer service.

Tell us who you are and how your team serves customers. We’ll reply to set up a walkthrough shaped around your channels and volumes.

What happens next

  1. 01You get a confirmation email straight away.
  2. 02Someone from Winsen Labs reads your answers and replies.
  3. 03We walk your team through OCSO, set up around how you serve customers.

Email

hello@winsenlabs.com

Winsen Labs

winsenlabs.com

The applied AI lab behind OCSO.