CustomGPT Envoy · in detail

What Envoy is, exactly.

Envoy is an enterprise agent that represents a company wherever people tag it, and works in the background on its behalf. Every answer comes from the company's own sources. Every outside action passes a policy the company controls.

Buyer
VP Support / CX, Head of IT
Runs in
Slack, Teams, X, Discord, Reddit
Built on
Plan & Act + our knowledge base
Different because
Cited, governed, audited

It is

  • A company's agent that answers when tagged in a thread
  • A background worker that runs on schedules, events and goals
  • An approval inbox where humans OK what goes out
  • An audit trail of every answer and every action

It is not

  • A consumer assistant for one person's life (that's Muse)
  • A social media scheduler or a marketing post generator
  • A bot that replies to people who didn't tag it
  • An agent that acts with no human in the loop by default
Who uses it

Four people touch Envoy. Only one pays.

B
Buyer

VP Support

Wants fewer repeat questions and faster answers in public, without brand risk.

Sees: monthly accuracy, deflection, cost.

A
Admin

Ops / IT

Connects channels, picks sources per channel, writes the approval rules.

Sees: the admin console.

R
Approver

Team lead, CSM

Approves, edits or rejects what Envoy proposes, mostly from Slack or Teams.

Sees: approval cards with evidence.

U
End user

Customer, employee

Tags the company in a thread and gets a cited answer in the same place.

Sees: one reply, labelled automated.

Use cases

Six jobs, one engine.

Support · Answer

Public product questions

TriggerCustomer tags @Acme on X
EnvoyAnswers from docs with citations
ApprovalReview-first for the first 30 days
OutcomeAnswered in-thread, logged
Support · Act

Ticket spike response

TriggerZendesk topic up 3× in 2 hours
EnvoyClusters tickets, drafts an FAQ + macro
ApprovalSupport lead in Slack
OutcomeFAQ live, on-call pinged
Customer success · Act

Renewal briefs

TriggerRenewal in 21 days (goal)
EnvoyUsage, tickets, open risks in one page
ApprovalCSM approves the email
OutcomeBrief sent, memory updated
IT / HR · Answer

Internal policy questions

Trigger@Envoy in a Teams channel
EnvoyAnswers from SharePoint, HR wiki
ApprovalAuto, internal-only sources
OutcomeFewer IT/HR tickets
DevRel · Answer

Community Discord

Trigger@Acme in #help
EnvoyAnswers from docs + changelog
ApprovalAuto above a confidence bar
OutcomeUnanswered threads drop
Leadership · Act

Weekly digest

TriggerEvery Monday 09:00 exists
EnvoyTop questions, gaps, competitor news
ApprovalNone, internal read-only
OutcomePosted to #leadership
Answer mode · end to end

From a tag to a cited reply.

One interaction = one tag. Envoy replies once. If the person tags again, that's a new interaction with the full thread re-read.

STEP 1

Mention arrives new

Slack and Teams push an event. X and Reddit are polled. Discord holds a live socket. Each event is de-duplicated by its platform id.

queue: envoy_inbound
STEP 2

Thread is built new

Fetch the parent post and replies, capped per channel (e.g. 20 posts). Strip links and markup. Mark it as untrusted text, never as instructions.

custom_context ← thread
STEP 3

Triage new

Classify: question, complaint, abuse, legal or press, off-topic. Abuse is ignored. Legal and press always go to a human. Only questions move on automatically.

STEP 4

Plan & Act answers exists

Runs headless with only the sources allowed for that channel. Public channels get public docs only. No tool actions in Answer mode, just retrieval and optional web search.

AgenticSessionDispatchService::dispatchHeadless
STEP 5

Policy gate new

Checks confidence, citations present, banned topics, length limits. Passes → post. Fails → approval card to the channel's approvers, or a polite hand-off line.

STEP 6

Reply and log new

Posted in the same thread with the "automated" label. Thread, answer, sources, approver and cost go to the audit log.

Angry customer

Acknowledge, answer the factual part, offer a human. Never argue.

Doesn't know

Says so and hands off. A wrong answer costs more than no answer.

Other language

Replies in the asker's language, cites the original source.

Act mode · end to end

From a trigger to an approved action.

TRIGGER

Schedule exists · Event · Watch · Goal new

Schedule: cron-like. Event: a webhook from Zendesk, HubSpot, Stripe. Watch: a metric crosses a line. Goal: a standing objective with a date.

RUN

Plan & Act, headless exists

Up to the plan's action limit. Uses the knowledge base, web search, Smart Tasks, MCP and integrations.

PROPOSE

Proposals, not actions new

Anything that leaves the agent becomes a proposal with evidence and a risk level.

APPROVE

Where the approver already is new

Buttons in Slack or Teams, email, or the web inbox. Unapproved proposals expire.

EXECUTE

Integrations + MCP exists

Runs the approved action, records the result.

REMEMBER

Memory new

Saves what happened and what the human changed, so the next proposal is better.

Proposal anatomyLevel 2
What
Email a renewal brief for Globex to Sam (account owner)
Why
Renewal in 21 days. Usage down 18% this quarter, 2 open P2 tickets.
Evidence
Usage dashboard · Zendesk #4812, #4840 · last QBR notes
Draft
“Hi Sam, Globex renews on Nov 23. Three things to raise…”
Approver
Any CSM lead · expires in 48h
Cost
6 actions · 12 queries
Admin console

Three screens the admin lives in.

ChannelSourcesModeStatus
SSlack · #help, #it-helpAll internalAuto
TTeams · HR QuestionsHR wiki, SharePointAuto
XX · @AcmeCloudPublic docs onlyReview first
DDiscord · Acme CommunityDocs, changelogConfidence ≥ 0.8
RReddit · u/AcmeCloudPublic docs onlyReview first
# policy: public channels
channels: [x, reddit, discord]
sources:  public_docs, changelog
answer:
  require_citation: true
  min_confidence:   0.8        # below → approval card
  max_length:       280
  never_discuss:    [pricing_exceptions, legal, roadmap_dates]
  always_human:     [press, lawsuit, outage]
act:
  level_1: auto                 # internal messages
  level_2: approve(cs_leads)    # customer-facing
  level_3: approve(2, admins)   # changes systems or money
limits:
  replies_per_hour: 60
  monthly_budget:   $400       # then pause + alert
kill_switch: #envoy-ops        # "stop" pauses every channel
TimeChannelWhat happenedBy
09:41XAnswered SSO question · 2 sourcesMaria (approved)
09:38SlackAnswered VPN reset · 1 sourceAuto
09:12ZendeskProposed FAQ “export failing”Waiting
09:00ScheduleWeekly digest posted to #leadershipAuto
08:47DiscordSkipped · abuse detectedPolicy
Approval levels

Risk decides who has to say yes.

L0

Read

Search, summarise, draft for itself

Always auto
L1

Internal message

Post to an internal channel, answer an employee

Auto by default
L2

Customer-facing

Public reply, email to a customer

One approver by default
L3

Changes things

Update CRM, refund, change settings

Two approvers, always

Admins can lower L2 to auto per channel once accuracy is proven. L3 can never be auto.

Architecture

What we add to customgpt-app, and where.

Innew
Webhook receiversSlack Events, Teams Bot, Zendesk, HubSpot
PollersX mentions, Reddit inbox · Laravel scheduler
Socket workerDiscord gateway · small separate service
existsScheduled TasksDispatchDueScheduledTasksJob, every minute
CoreLaravel + Flask
newInbound queue + dedupeHorizon queue envoy_inbound
newThread builder + triageThread → custom_context, classify
existsPlan & Act runtimedispatchHeadless → Flask v3 → stream consumer
existsToolsKB, web search, Smart Tasks, Skills, Personas
newPolicy engineLevels, confidence, topics, budgets
newMemorypgvector store we already run
Outnew
Approval cardsSlack / Teams buttons, email, web inbox
Channel postersReply in-thread per platform
existsIntegrations + MCP80 integrations, 35 connectors
Audit logExport to SIEM, CSV

New tables

envoy_channels

A connected account per agent

project_id · type · credentials (encrypted) · mode · source_scope · enabled
envoy_inbound_events

Every mention or trigger received

channel_id · external_id (unique) · thread_json · triage · status · task_id
envoy_proposals

Things waiting for a human

project_id · level · action · payload · evidence · status · approved_by · expires_at
envoy_policies

Rules per agent and channel

project_id · channel_id? · rules_json · version
envoy_memories

What the agent learned

project_id · scope (account/user) · content · embedding · source_event
envoy_audit_logs

Append-only, high volume

project_id · actor · event · refs · cost · created_at · partition by month

New tables only. No changes to existing large tables. Envoy runs get their own query multiplier, set alongside the existing agentic ones.

Channels

Start where we're already welcome.

S

Slack

Easy
In
Events API, app_mention
Out
Reply in thread, buttons for approvals
Rules
Workspace admin installs
Note
We already run a Slack app to build on
T

Teams

Medium
In
Bot Framework, @mention
Out
Threaded reply, Adaptive Card approvals
Rules
Tenant admin consent
Note
Where Copilot Studio competes
X

X

Medium
In
Poll mentions (pay-per-use)
Out
One reply per tag
Rules
Tagged-only, Automated label, named operator
Cost
$0.015 reply · $0.20 with link · $0.005 per post read
D

Discord

Medium
In
Gateway socket, mentions
Out
Reply in channel or thread
Rules
Server admin adds the bot
Note
Needs an always-on worker
R

Reddit

Hard
In
Poll username mentions
Out
Comment reply
Rules
Commercial API terms, subreddit bot rules
Note
Last, and only with a partner who asks
@

Email

Later
In
Forward-to address, inbound parse
Out
Reply-all draft
Rules
Always L2
Note
Mostly for Act approvals
Security & compliance

The parts a security review will ask about.

Prompt injection

  • Public text is data, never instructions
  • No tools in Answer mode
  • Act tools allow-listed per policy

Data scoping

  • Sources picked per channel
  • Public channels: public sources only
  • Memory scoped per account

Identity

  • SSO / SAML exists
  • Teams & roles exists
  • Approvers mapped to roles

Secrets

  • Channel tokens encrypted at rest
  • OAuth where the platform allows
  • Rotate without downtime

Privacy

  • PII redaction before logging
  • Retention per agent
  • Delete a person's data on request

Control

  • Kill switch per channel and global
  • Budgets with auto-pause
  • Append-only audit, exportable
Metrics

How we know it's working.

Proposed targets, to agree with the design partner.

≥ 95%
Answer accuracy

Weekly human grading of a sample

100%
Answers with a source

Grok sits near 30%

< 15%
Edit rate

Approvals changed before sending

< 10%
Rejected proposals

Tells us proactivity is well-timed

< 60s
Time to answer

Tag to reply, when auto

30%+
Repeat-question drop

In channels Envoy covers

$
Cost per answer

Model + platform fees, tracked per channel

0
Brand incidents

The one that matters most

Competition

Everyone has half of it.

GrokxAI · on X
HasHuge reach, tagged replies on X
MissingYour sources, citations, approvals, other channels
Meta MuseConsumer + small business
HasBackground work, memory, approvals, connectors
MissingEnterprise controls, audit, your knowledge base
Meta Business AgentWhatsApp
HasCustomer chats on WhatsApp
MissingOne channel, one agent per number
Copilot StudioMicrosoft
HasEvent triggers, background agents, Teams
MissingLives inside Microsoft data and channels
AgentforceSalesforce
HasDeep CRM actions
MissingGrounded in Salesforce data first
CustomGPT EnvoyOur position
HasAny source we sync, any channel, cited answers
PlusApproval levels and audit, neutral to the stack
Pricing & packaging

Three ways to charge. Pick one with the first partner.

Add-on per agent

Monthly fee on Enterprise. Includes channels, approvals, audit. Usage counts against queries with an Envoy multiplier.

Simplest. Fits current billing.

Per resolved interaction

Charge for each answered tag or executed action. Rejected proposals are free.

Easy to sell, harder to forecast.

Channel packs

Internal pack (Slack, Teams) and Public pack (X, Discord, Reddit) with platform fees passed through.

Public pack priced for its risk.

Build plan

Four phases. Each one ships something.

Phase 1

Act, internal

Mostly reuse
Build
  • Deliver Scheduled Task results to Slack, Teams, email
  • Proposals table + approval inbox
  • L0–L3 levels, audit log v1
Done when
  • A design partner runs 3 weekly tasks for a month
  • Every outbound action has an approver in the log
Phase 2

Answer, internal

Medium
Build
  • Slack app_mention + Teams bot adapters
  • Thread builder, triage, per-channel sources
  • Policy gate with confidence + citations
Done when
  • ≥ 95% graded accuracy for 2 weeks
  • Admins can switch a channel to auto
Phase 3

Act+

Large
Build
  • Event triggers (webhooks), watches, goals
  • Memory with pgvector
  • One-off tasks, proposal expiry
Done when
  • Rejected proposals under 10%
  • Memory visibly improves the next proposal
Phase 4

Answer, public

Large
Build
  • X poller + poster, Discord socket worker
  • Budgets, rate limits, kill switch
  • Reddit only on request
Done when
  • 30 days review-first with zero brand incidents
  • Cost per answer inside budget