Ambient Agent FAQs

View as Markdown

Short, practical answers to the most common questions about Ambient Agents and System Triggers on Moveworks.

Ambient agents are always-on, event-driven automations. They listen for signals from your systems, reason with LLMs, and can execute workflows end-to-end with optional human approvals—no user prompt required.

A webhook is a way for one system (like GitHub or Workday) to automatically send real-time updates to another (like Moveworks) when something happens—e.g., a new ticket is filed or a document is signed.

Moveworks uses a Listener to receive these webhook events and trigger automation, notifications, or approvals.

Common terms

TermWhat it means in plain English
ListenerA webhook receiver you configure in Moveworks to accept events from a system like GitHub, Salesforce, etc.
Webhook URLA unique Moveworks-generated URL that external systems post events to.
PayloadThe JSON body of the webhook—the event data (e.g., ticket title, user name).
HeadersMetadata sent with the request—includes event type, signature, or secret token.
System TriggerA non-conversational trigger that starts a plugin (webhook, poller, or scheduled).
Event FilteringRules to discard unwanted events (e.g., “ignore closed tickets”). Can run at the listener level or inside the plugin.
Signature / HMACSecurity feature that confirms the sender is trusted and the payload wasn’t tampered with.
Validation / SchemaEnsures the payload has the fields you expect (e.g., title must be a string).
Replay ProtectionPrevents duplicate requests from triggering the same plugin twice.

Moveworks supports three blueprints:

  • Aggregation — prompt → information
  • Action — prompt → transaction
  • Ambient — system trigger → orchestration (no prompt)

System triggers start workflows based on events, checks, or schedules.

Trigger TypeExampleBest For
Webhook“New GitHub issue opened”Real-time automation
Poller“Check device logs every 5 min”Systems that don’t support webhooks
Scheduled“Run script every Monday at 9am”Time-based workflows (e.g., license cleanups)

Availability: Webhooks are in Limited Preview. Pollers and Scheduled triggers are coming soon.

Webhook traffic often includes sensitive data. Without authentication or signature verification, anyone who knows your Listener URL could trigger your workflow, causing unauthorized requests, data exposure, or unexpected automation runs.

What security options are available?

  1. Signature verification (HMAC)recommended. Configure a signing secret so Moveworks can verify the request comes from your provider and hasn’t been altered.
  2. Auth settings — require a bearer/API token in a header on every request.

What happens if I don’t secure my listener?

Unsecured listeners are heavily rate-limited to reduce risk.

  • Unsecured: 1 request every 10 seconds (max 6/min)
  • Secured: 20 requests per second (max 1200/min)

Limits are subject to change, but unsecured listeners will always have significantly lower limits.

Can I still publish an unsecured listener?

Yes—but it’s strongly discouraged, especially for production.

No. A plugin must use one trigger paradigm: system triggers (one or many) or conversational triggers (one or many). If you need both, create two plugins.

Yes. A plugin can subscribe to multiple system triggers (e.g., several Listeners), and one event can fan-out to multiple plugins if their conditions match.

Yes. Use Payload Schema to validate structure and types (LP focus: JSON). Without a schema, the request is treated as unstructured downstream.

Other formats may come later.

Yes. Event Filtering runs at the listener (global) and plugin (per-workflow) layers.

Copy-paste examples (Listener DSL):

A) GitHub — onlyissues.opened in one repo and titles containing “bug”:

(action == "opened")
AND (repository.full_name == "acme/widgets")
AND (issue.title.$LOWERCASE() CONTAINS "bug")

B) DocuSign — only fully executed envelopes; Sales contracts ≥ $10k:

(event == "EnvelopeSigned")
AND (contract.type == "Sales")
AND ($DECIMAL(contract.value) >= 10000)

C) Headers/params guard — only accept from prod and ignoredry_run=true:

(headers["X-Env"].$LOWERCASE() == "prod")
AND NOT (query_params["dry_run"].$LOWERCASE() == "true")

Enable Deduplication with a reliable key (e.g., X-GitHub-Delivery, event.id) and a deduplication window to drop duplicates and provider retries. This complements signature verification for replay protection.

Three dedicated logs trace the lifecycle:

  1. listener.webhook.trigger — request received (headers, method, parsed body, timestamps)
  2. listener.webhook.processor.update — processing outcome (published, failure reason, debounced)
  3. listener.webhook.plugin.trigger — which plugins were evaluated/triggered/skipped/expired

See Webhook Logs & Troubleshooting for playbooks like “plugin never ran”.

You have two paths:

Option 1 — API-based registration (if supported):

Some platforms expose APIs to register webhooks (e.g., Slack, Zoom, Okta). Use curl/Postman/SDKs to POST your Moveworks Listener URL and secret to the provider’s registration endpoint.

Option 2 — No UI and no API:

You can’t use webhooks with that app. Use a poller or scheduled trigger once available in Moveworks.

Approvals are part of the Process that runs after a trigger fires. Agents can run fully autonomously or pause for notify / question / review moments.

Listeners give our agents “ears” to hear events, reason over context, and act using Moveworks processes often eliminating the need for a separate iPaaS for these flows.