Skip to content

Everruns Apps for Agent Distribution Channels

An App turns a Harness + Agent pair into a deployed service that responds to external messages. The App owns the channel-specific binding (such as Slack, webhook, or AG-UI), the inbound auth, the session-routing strategy, and the publish/unpublish lifecycle.

The same agent can back multiple apps (e.g., a Slack deployment and a webhook deployment), and each app’s lifecycle is independent.

App Architecture

  1. An external channel sends a request to the app’s endpoint.
  2. The app verifies the request using channel-specific auth (signing secret, OIDC, mTLS, etc.).
  3. A session is found or created according to the session strategy.
  4. The agent processes the message and the response flows back through the channel.
ChannelStatusWhat it does
SlackAvailableDeploy as a Slack bot
AG-UIAvailableAG-UI inbound channel
ScheduleDeprecatedNew channels are rejected; use Agent triggers
WebhookAvailableHTTP-triggered invocation
WhatsAppPlanned
Web WidgetPlanned

See Slack Integration for the Slack-side setup.

Each channel chooses how incoming messages map to sessions:

StrategyBehaviourUse when
per_thread (default)Each thread is its own sessionSupport bots, Q&A
per_channelOne session per channelPersistent channel assistant
per_userOne session per userPersonal assistant

Webhook channels use their own routing model (shared session vs. per-invocation). Agent triggers provide the same choice for scheduled runs.

Agent triggers are now the home for proactive scheduled execution. Existing agent-bound App schedule channels are migrated automatically with their cron expression, timezone, session mode, message, durable execution identity, and history preserved. Existing Apps without an agent are grandfathered and remain compatible.

For new scheduled work, create a trigger from the agent’s Triggers tab. See Agent triggers for the migration details and the distinction between agent triggers, App webhooks, and session schedules.

draft → published → draft → archived
  • Draft: configured but does not accept incoming requests.
  • Published: live; webhook requests are processed.
  • Archived: soft-deleted and hidden from listings.

Unpublishing stops new message processing; existing sessions remain accessible.

MethodPathDescription
POST/v1/appsCreate app
GET/v1/appsList apps
GET/v1/apps/{app_id}Get app
PATCH/v1/apps/{app_id}Update app
DELETE/v1/apps/{app_id}Archive
POST/v1/apps/{app_id}/publishPublish
POST/v1/apps/{app_id}/unpublishUnpublish

Full request/response schemas in the API reference.