Shuffle workflow triggers: when playbooks start and when they wait
A SOC or SIRT lead who wants alerts to start Shuffle playbooks automatically, while a person approves any containment step, needs two building blocks: a trigger that starts the workflow and a user input step that holds the run until an analyst responds. A trigger is the event that creates a workflow execution. A user input step is a workflow action that pauses the run and waits for a human decision before the next action executes. Teams need both when enrichment and triage can run unattended but actions that change a system, such as isolating a host or disabling an account, should not run without sign-off.
Start with the trigger, because it decides how alerts reach Shuffle. The Shuffle docs describe trigger types including webhooks, schedules and subflows, which are workflows called by other workflows. A webhook suits a SIEM or detection tool that can push alerts to a URL. A schedule suits periodic checks, such as re-querying a data source. A subflow suits containment logic you want to reuse across playbooks. Confirm the exact trigger options in the current Shuffle docs for your release, and check which ones your alert sources can actually call, since the sending system must reach the endpoint Shuffle exposes.
The user input step is where the approval decision lives, so design it before the containment actions. Confirm in the current docs what the step sends, which channels or recipients it can reach, whether a response can be restricted to specific users, and what happens when nobody answers. Place the input step before any action that changes state, and make sure the workflow's downstream branches handle a rejection or timeout as a normal outcome. Test a pause and resume path with a real alert from your own environment and record what the analyst sees, not only what the workflow logs.
Deployment architecture changes what you can trigger from where. Shuffle's architecture docs describe a hybrid model in which Shuffle Cloud hosts the interface while a local Orborus node runs workflows inside your network and needs no inbound firewall ports. A fully self-hosted deployment can accept inbound webhooks directly on your servers. Before you commit to a design, confirm which trigger types work in each model, where the approval channel is reachable from, and how many Orborus nodes you will run. The configuration docs recommend more than one Orborus node so workflows keep running if one fails, which matters for waiting workflows that must resume.
Cost and effort depend on how Shuffle meters work. The pricing article says licensing is based on app runs, meaning actions that actually execute, and that triggers and skipped actions are not counted. Confirm how paused steps and approval responses are counted before you size a deployment. Ask any implementation partner for a written quote that lists the triggers and input steps in scope, the approval channels to integrate, the identity model for approvers, timeout and escalation rules, and testing of pause, resume and rejection paths. Those items drive most of the effort, and most of them recur when new playbooks are added.
Which trigger or pause pattern fits each playbook
This table compares how four Shuffle patterns start or pause a playbook, and what each one asks of your network and your analysts. Read each row against the playbook it will serve, then confirm trigger types, options and edition limits against the current Shuffle documentation and the edition you run before production. The main takeaway is that inbound reachability and analyst wait states cause most of the surprises teams meet after go-live.
| Pattern | What starts or pauses the run | Typical SOC use | Network path and what to verify |
|---|---|---|---|
| Webhook | An external tool sends an HTTP request to the workflow's webhook address, which starts a run. | Forwarding alerts from a SIEM, EDR or detection tool into a triage playbook. | Needs inbound HTTP from the sender to the Shuffle endpoint you expose. Confirm the URL format, authentication options and how the sender's proxies and allow lists handle it. |
| Schedule | A timer configured in the workflow starts the run at set times. | Periodic enrichment, refreshing lookup data, or sweeping stale cases. | Needs outbound access from the runtime to the APIs it calls, with no inbound trigger path. Confirm time zone handling and what happens to missed runs after a restart. |
| Subflow | A parent workflow calls another workflow and waits for its result. | Shared enrichment or containment blocks reused across several playbooks. | Uses the same backend and runtime as the parent, so no new network path. Confirm how errors and outputs return to the parent and how subflow actions count toward app runs. |
| User input step | The run pauses until an analyst answers a prompt or approves an action, then resumes. | Human approval before disabling an account, isolating a host or revoking a key. | Analysts need browser access to the Shuffle frontend and backend. Confirm who may respond, notification channels, reminder or timeout behavior and resume after a backend restart. |
| Hybrid with Shuffle Cloud | A Cloud-hosted workflow dispatches jobs to a local Orborus runtime in your network. | Keeping alert data inside your network while using Cloud for the workflow front end. | Documented as needing no inbound firewall ports for the local Orborus. Confirm outbound reachability from Orborus and that analysts can respond to approvals from the Cloud interface. |
| Self-hosted Docker Compose or Swarm | Triggers and approvals run on the servers you operate, with Orborus polling the backend for jobs. | Keeping webhooks, schedules and approvals fully inside your own network. | Webhooks need inbound reachability to the backend on port 5001 or your proxy. Confirm the port mapping, TLS termination and that Orborus can reach the backend. |
How Shuffle runs a triggered workflow from start to approval
A Shuffle workflow starts when a trigger sends a request to the server, and the path from that request to an approval pause runs through three server-side components you should be able to name before go-live. The frontend hosts the editor and the interface analysts use to review and answer pending steps. Behind it sits the Go backend API, which listens on port 5001, receives webhook calls, schedule events and subflow calls, and records each execution. The backend stores workflow definitions and execution documents in OpenSearch, the document database on the server side. When you size or back up a deployment, the OpenSearch data is what holds the record of what ran and what is waiting.
The runtime side is Orborus. It polls the backend for queued jobs, and for each workflow execution it starts a worker. The worker then starts the app containers that the workflow's actions need, using the versioned Docker images for each app. This split drives placement decisions. In a hybrid setup, Shuffle Cloud hosts the frontend and backend while a local Orborus runs inside your network and needs no inbound firewall ports, so actions that touch internal systems run where those systems are reachable. Ask which Orborus node picks up each job, and document the location of every node in your design. The high availability guidance recommends more than one Orborus node so a failed node does not stop running workflows, but test how a job is reassigned before you rely on it.
A user input step is where the run stops and waits for a person. The step sends a prompt, typically to a channel or app the analyst watches, and the execution stays open until someone responds or the step ends. Several points need confirmation in the documentation for your version and in a test environment. Confirm whether the waiting state is written to OpenSearch, whether any part of it depends on a worker still running, and what happens to a paused run when Orborus or the backend restarts during the wait. Also confirm how a response that arrives after the step's timeout is handled. Run a deliberate restart in the middle of a test approval before any production trigger uses the step.
Settle three decisions around the pause before you choose the trigger type. First, define who can answer an approval and confirm that each response is tied to an identity you can audit. Second, decide how long a containment request can wait and what the playbook does on no response, based on the timeout behavior you have verified. Third, keep the SHUFFLE_ENCRYPTION_MODIFIER value unchanged across restores, since the docs warn that changing it breaks saved app authentications that resumed steps depend on. The apps that deliver the approval prompt also rely on their own stored credentials, so include them in the same test run.
Which triggers work on self-hosted, hybrid and Cloud deployments
Shuffle documents four architectures, and the trigger listener and Orborus runtime sit in different places in each. The differences mostly concern where inbound alerts land and which connections your network must allow. Confirm each trigger type on the architecture you plan to run before you lock the design.
Single server with Docker Compose
The frontend, the Go backend API on port 5001, the OpenSearch database and Orborus all run on one host, and Orborus starts a worker for each workflow execution. Webhook and schedule triggers reach the backend on that host, so every system that posts alerts must be able to reach it on port 5001 or through your published address. Confirm which trigger types your Compose release exposes and how the backend URL is set before you finalize the design.
Distributed Docker Swarm
Swarm spreads the backend, frontend and Orborus across several servers, so the listener and the runtime no longer sit on one machine. The Shuffle docs recommend more than one Orborus node so workflows keep running if one fails. Confirm how the webhook endpoint is published across nodes, which nodes Orborus workers can land on, and whether shared files and the OpenSearch cluster are configured for several backends.
Hybrid with Shuffle Cloud
Shuffle Cloud hosts the backend and frontend, while a local Orborus polls it for jobs and starts worker and app containers inside your network. The documented model needs no inbound firewall ports on your side, because the local Orborus initiates its connections outward. Confirm that outbound rules allow that path, and confirm whether any trigger needs an alert source on your network to reach a listener on Shuffle Cloud, since that path could require inbound rules.
Kubernetes with Helm charts
Shuffle documents a Kubernetes deployment using Helm charts, which run the platform components as cluster workloads. Your ingress controller or load balancer then becomes the path that webhooks and schedules take into the backend. Confirm the chart version against the Shuffle release you plan to run, which components the chart deploys, how Orborus is permitted to start app containers in the cluster, and the storage class used for OpenSearch.
Confirm trigger types per architecture
Webhooks, schedules, subflows and user input steps do not all depend on the same listener, so test each trigger type on the architecture you will run. Build one approval playbook in a non-production environment, pause it at a user input step, and confirm that the resume path works from the analyst's side. Record the result for each architecture, because a Compose lab does not prove that a Kubernetes or hybrid deployment behaves the same way.
How app runs drive the cost of triggered and approval-gated playbooks
The cost of a triggered or approval-gated playbook in Shuffle is set by app runs, the single metric in its licensing. Shuffle's pricing article defines an app run as an action that actually executes in a workflow. Triggers are not counted, skipped actions are not counted, and users, apps and workflows are unlimited. That means the planning question is not how many alerts or webhook calls arrive, but how many executed actions each arrival causes. A webhook that fires often costs little if the first step filters most events out before any app action runs. Before you estimate, ask your Shuffle contact to confirm how a user input step is counted when the workflow pauses and later resumes, because the pricing article describes the metric in general terms.
Design choices decide the run volume. A schedule trigger is free on its own, but every scheduled execution that reaches an app action adds runs. A poll that returns nothing and ends at a condition costs little. A poll that enriches every returned record with several app calls costs a great deal. Fan-out subflows multiply the count: one parent run that starts a subflow for each indicator, host or user turns one execution into many. Steps that run on every alert change have the same effect when an alert is updated several times during its life. Enrichment that re-runs on each update, with no check for what changed, can multiply runs without adding any analyst value. Illustratively, an alert that updates five times and triggers four enrichment actions each time produces twenty executed actions from one alert.
Approval gates shape the count in a different way. A user input step pauses the workflow until an analyst responds. The pause itself is not an executed action, but the actions placed after approval are. Place containment steps after the approval point, and keep low-risk enrichment before it so that analysts are not waiting on repeated lookups. Decide whether one approval should cover a batch of items or whether each item needs its own gate. A batch gate usually produces fewer, larger runs. A per-item gate produces many small runs, each with its own app calls. Test the gate with a resumed execution in a non-production instance and read the execution history to see which actions ran and how often.
Edition limits are the other variable. Shuffle states that all features are available in the open-source edition, and that since v2.1.1 the limits between the open-source and enterprise editions are actively enforced. Shuffle also stopped supporting versions older than v2.1.1 after January 31, 2026. A design that ran comfortably on an older build may therefore meet an enforced limit after an upgrade. Confirm which edition's limits apply to your planned volume, using the configuration documentation and your licensing terms, and check the limits against the release you intend to deploy, not the one you tested on. The latest Docker tag is the recommended stable option, and the nightly tag carries experimental changes that may alter behavior.
Before you request a quote, build a run-volume estimate from the workflow graph. For each trigger, count the executed actions under expected and peak alert rates, mark every fan-out subflow and every step that re-runs on alert change, and note which steps sit before and after each approval gate. Ask the implementer to show where deduplication, conditions and change checks reduce the count. Ask for the edition and its enforced limits in writing, how run volume is reported to you, and how the design will be retested after each upgrade. Because runs recur every day the workflow operates, this cost is ongoing, and it should be reviewed whenever alert volume, the number of enrichment sources or the approval process changes.
How to set up an approval-gated playbook in a test environment
This sequence builds one playbook that starts from a trigger, pauses at a user input step, and runs containment only after an approver decides to proceed. Working through it in a test environment proves the trigger, approval and notification paths before any production system is connected.
Confirm deployment architecture and edition
Decide which documented architecture the test environment will mirror: a single server with Docker Compose, Docker Swarm, a hybrid with Shuffle Cloud and a local Orborus, or Kubernetes with Helm charts. Confirm where Orborus runs, because it polls the backend for jobs and starts the worker that executes each workflow. Confirm which edition you are running and its feature limits, since the open-source and enterprise editions have enforced limits. Done when Orborus shows as connected and a manual test run starts a worker.
Pin the current stable Docker tag
Use the latest Docker tag for stable releases, as the Shuffle documentation recommends, and reserve the nightly tag for experiments you can discard. Read the release notes on the Shuffle GitHub releases page for the version your tag resolves to, and note any breaking changes before deploying. Record the tag and image digest in your change log so the test and production builds can be compared later. Done when the backend reports the version you recorded and the frontend loads without errors.
Set the encryption secret before saving credentials
Set SHUFFLE_ENCRYPTION_MODIFIER in your secret store for the test environment before anyone saves an app credential or API key. Shuffle encrypts saved app authentications in OpenSearch with AES-256 using this value, and changing or losing it breaks every saved authentication. Keep a copy in your break-glass vault under your key management policy, and confirm your restore process. Done when a test API key saved through the interface still authenticates after the backend restarts.
Build the trigger for the playbook
Create the workflow start point: a webhook that receives alerts from your detection tool, or a schedule for polling jobs. Send a test payload that contains the fields the playbook reads, and keep that sample in version control alongside the exported workflow. Name the trigger, restrict who can edit it, and confirm that the input fields are parsed as expected. Done when the test payload creates an execution record in the workflow history and the worker log shows the expected input values.
Add containment behind a user input step
Place a user input step between the enrichment logic and the containment action, and connect the containment action only to the approved branch. Write the approval prompt so the approver sees the entity to be contained, the supporting evidence and the expected effect. In this environment, point the containment action at a test account or test host only. Done when a run with no answer shows no containment action in its execution history, and the approval decision is recorded on the execution.
Connect a notification app to approvers
Add the app that tells approvers a decision is waiting, such as a chat or email integration, and point it at a test channel or mailbox. Include the execution link in the message so the approver can open the waiting step directly. Store its credentials through the encryption path you set up earlier. Done when the approval request arrives in the test channel with a working link and the notification output appears in the execution record.
Test approve, reject and timeout paths
Run the playbook three times with a fresh test alert each time: approve, reject, and let the request expire without an answer. Confirm that each run takes the matching branch and that the approver identity and decision are recorded on the execution. Check timeout behavior against the wait setting in your version's user input step, since that setting decides which path runs. Done when approve runs the containment action once, reject and timeout run none, and the audit trail shows who decided or that no one did.
Securing webhook endpoints and approval decisions
Triggers and approvals move work into and out of a Shuffle workflow, so each one is a control point. The cards cover inbound webhook exposure, who may approve containment, how SSO applies, protection of saved credentials, and audit evidence of decisions. Confirm how your Shuffle version behaves before you rely on it.
Exposure of inbound webhook endpoints
Each webhook trigger gives an external system a URL that starts a workflow, so the URL is an entry point into your automation. Decide which sources must reach it, whether the backend is published to the internet or only to a private network or reverse proxy, and how each source authenticates. Keep webhook URLs out of tickets and chat, and plan rotation if one leaks. Confirm how your version validates inbound requests before a workflow runs, then test a request from a source that is not on the list.
Who can approve a containment step
A user input step pauses a playbook until someone responds, so the approval is only as strong as the group allowed to answer it. Map which roles may approve isolating a host, disabling an account or blocking an address. Keep those roles separate from the people who build and edit the workflow. Decide whether high-impact actions need more than one approver. Confirm whether the approval prompt can be limited to named users or groups, and test that a user outside that group cannot respond.
SSO for analysts and approvers
Shuffle added SAML single sign-on in version 0.9.16 and OpenID Connect in 1.0.0, both available on-premises and in the cloud. Per-tenant SSO enforcement can require analysts and approvers to sign in through your identity provider. Shuffle is deprecating SAML on Shuffle Cloud in favor of OpenID Connect, so plan new integrations on OIDC. Map identity provider groups to Shuffle roles, and confirm how local accounts are handled once enforcement is on.
Protecting saved app credentials
Shuffle encrypts saved app credentials and API keys in OpenSearch with AES-256, using the SHUFFLE_ENCRYPTION_MODIFIER secret. Store that value in your secrets manager, include it in your backup plan, and restrict who can read the deployment configuration. Losing or changing the modifier breaks all saved app authentications, so any rotation needs a planned re-entry of credentials for every affected app. Test a restore in a non-production environment to confirm the modifier and the encrypted data stay together.
Audit evidence of approvals
An approval gate is only useful if you can show who approved what, when, and what happened next. Define the evidence you need: approver identity, the decision, the timestamp, the workflow execution and the action taken afterward. Confirm how your Shuffle version records approver identity and decisions, where that record is stored, and how long it is kept. Export a sample approval to your SIEM or case record and check that an auditor could follow it from alert to containment.
Keeping scheduled and waiting workflows running when a node fails
Scheduled runs and paused approvals keep working through a node failure only if the high-availability layer under Shuffle is built and tested. Shuffle's documented guidance has five parts: an OpenSearch cluster, optional Memcached for a shared cache, NFS for shared files when several backends run, the backend and frontend scaled across all servers, and more than one Orborus node. Each part removes a single point of failure. Read the guidance as a set, because a clustered OpenSearch layer with one Orborus node still leaves runtime work with no fallback.
Schedules and approvals depend on this layer for different reasons. Orborus polls the backend for jobs and starts a worker for each workflow execution, so if the only Orborus node is down, no new scheduled run starts and any run it was executing may stop. A user input step waits for an analyst, and that waiting state is held with the workflow execution in the OpenSearch document database. If the cluster loses that data, or the backend that resumes the execution cannot reach it, the approval may be lost or fail. Confirm in your Shuffle version exactly where paused state is stored and how it resumes.
Several design decisions follow from this. Decide how many Orborus nodes you need and place them on separate hosts or failure domains so one outage does not stop all runtime work. Decide whether your NFS export is itself a single point of failure, and whether its backup and recovery match your approval timelines. Set OpenSearch replication and snapshot backups for the indexes that hold workflow executions. Make sure every scaled backend uses the same SHUFFLE_ENCRYPTION_MODIFIER value, because the documentation warns that losing or changing it breaks all saved app authentications. Memcached is optional, so decide whether your load justifies it before adding it.
Before relying on this design, test failover of the two cases that matter most. First, start a workflow that pauses at a user input step, stop the Orborus node that is running it, and confirm the approval still appears, can be answered, and lets the workflow finish. Second, set a schedule to fire while one Orborus node is down, and confirm the run starts once, completes, and records its result. Repeat both tests after stopping a backend instance and an OpenSearch node. Record what happened, including delays and any manual steps, and repeat the tests after each upgrade. Use these results to set the expectations you give analysts and the owners of time-sensitive playbooks.
What to confirm before you rely on triggers and approvals in production
Before a playbook pauses for an analyst or starts from a trigger, answer these six questions in writing, with Shuffle and in your own environment. The answers depend on your edition, deployment model, identity setup and change process, so treat them as acceptance criteria for your test plan.
Trigger types in your edition
Confirm which trigger types your edition provides, such as webhook, schedule, subflow and user input, and whether each one works in your deployment model. Shuffle states that all features are in the open-source edition and that paid tiers differ in limits, scaling and support, and that limits are enforced since v2.1.1. Ask which limits apply to your planned trigger volume, and confirm with Shuffle whether trigger runs count toward app runs under your license terms.
Timeout and reminder behavior
Ask what happens when a user input step receives no response. Confirm the default timeout, whether it is configurable per workflow, what state the paused execution enters when the timer expires, and whether reminders are sent, through which channel and how often. Run a test with an unanswered request and record the outcome, because an unhandled timeout can leave containment partly applied or stall the incident queue.
How approvals are logged
Check what an approval record contains: the approver identity, the timestamp, the decision, the content shown to the approver and the execution it released. Confirm where these records are stored, how long they are kept, and whether they can be exported to your SIEM or audit store. Also confirm whether rejected and expired requests leave a trace. Your evidence requirements should set the bar for these answers, and the interface view is only a starting point.
Restricting approvals to named roles
Confirm whether an approval step can be limited to specific users, groups or roles, and how that limit is enforced when group membership changes in your identity provider. Ask whether the restriction holds when a workflow is edited by someone with editing rights, and whether an approver can approve a request they initiated. Test with a user outside the approver group and document the result for your access review.
Behavior on version upgrades
Confirm how running workflows, pending approvals and trigger registrations carry through an upgrade. The Shuffle docs recommend the latest Docker tag for stable releases and the nightly tag for experimental changes, so pin a specific tag in production and test each release in staging first. Ask whether paused executions survive a backend restart or database change, and whether a documented rollback path exists.
Hybrid model and network rules
Shuffle's architecture docs describe a hybrid model in which Shuffle Cloud is paired with a local Orborus that needs no inbound firewall ports. Confirm with your network and security teams which outbound connections this requires, what data leaves your network, and whether that meets your rules. Also check whether your policy allows a cloud control plane to see workflow metadata, and whether local triggers keep firing during a cloud outage.
Questions buyers ask before outside help on triggers and approvals
What drives the cost of a Shuffle triggers and approvals build?
The main cost drivers are the number of playbooks, the number of trigger types, the number of approval paths, the deployment architecture, whether single sign-on is in scope, and how much testing the workflows need. Each playbook with its own triggers, approval gates and containment actions adds design, build and test work. Shuffle licensing is a separate cost from implementation services. Shuffle meters app runs, which are actions that actually execute, so triggers and skipped actions do not count, and users, apps and workflows are unlimited. A written scope lists each driver so you can compare quotes on the same basis. Ask the partner to state which drivers it assumed and which it excluded.
Does Shuffle charge for every trigger that starts a playbook?
No. Shuffle's pricing article says its single licensing metric is app runs, meaning actions that execute in a workflow, and that triggers and skipped actions are not counted. The practical effect is that the cost depends on how many actions your approved playbooks execute, not on how many webhooks or schedules start them. A playbook that enriches an alert across several apps before it reaches an approval step will consume more app runs than one that pauses early. When you estimate licensing, count the executed actions in each approved path, including the actions that run after an analyst approves. Confirm current tiers, limits and pricing directly with Shuffle before you decide, because feature limits differ between the open-source and paid editions.
How long does a scoped Shuffle trigger and approval build take?
The duration depends on the same drivers as the cost: the number of playbooks, trigger types, approval paths, architecture, single sign-on and testing. We do not publish a fixed timeline, and no duration applies until the scope is agreed in writing. Fewer trigger types, one deployment architecture, an existing identity provider and a small set of approved containment actions usually shorten the schedule, while several architectures and many approval paths extend it. Schedules also depend on the client: access to environments, named approvers and signed-off containment actions often set the pace more than the build itself. Ask for a milestone plan that shows which dependencies the client owns and when each one is needed.
Which deployment architecture should host approval-gated Shuffle playbooks?
Shuffle documents four architectures: a single server with Docker Compose, distributed Docker Swarm, a hybrid of Shuffle Cloud with a local Orborus, and Kubernetes with Helm charts. The choice is driven by where the playbooks must run, how many servers you can operate, and whether the approval and containment steps must stay inside your network. The hybrid model lets a local Orborus run without inbound firewall ports, which matters when the workflows act on systems in a restricted zone. Webhook triggers, however, require a backend endpoint that the sending system can reach, so check the network path for each trigger type before you choose. Confirm how each architecture handles your identity provider and secrets with Shuffle's documentation and your own network team.
Can our own team build and run Shuffle approvals without a partner?
Yes, if the team has the skills and time, and the answer depends on what you already run. Building a simple playbook with a webhook trigger and one user input step is within reach of an experienced automation engineer. Running the platform is a different commitment: you would own the Docker or Kubernetes hosts, the OpenSearch document database, backups, high availability with more than one Orborus node, the encryption secret, upgrades and the review of each approved containment action. Outside help is usually bought as a fixed-scope build, a handover, or a retainer for upgrades and continuous testing. Decide which parts your team will own after go-live before you ask for a quote, because that decision changes the scope.
What must we provide before a Shuffle approval build starts?
The client provides environment access, named approver roles, a written list of containment actions that are approved to run automatically or after approval, and test data that resembles real alerts without exposing production records. You also provide the identity provider details if single sign-on is in scope, and the approved target systems with credentials issued for the build. Approvers should confirm who can approve, what happens when nobody responds, and who can revoke an action. Without these inputs, a build stalls at design or testing. Ask the partner to list every client-side dependency in the written scope, with an owner and a date for each, so delays are visible early.
What breaks after Shuffle triggers and approvals go live?
The most common failures come from configuration and operations rather than from the workflow logic. Shuffle stores saved app credentials and API keys encrypted with the SHUFFLE_ENCRYPTION_MODIFIER secret, and its documentation warns that losing or changing it breaks all saved app authentications, so back it up with restricted access. Running a single Orborus node means workflows stop if that node fails, so the docs recommend more than one. Pending approvals can stall if no approver is reachable, so define escalation. Shuffle stopped supporting versions older than v2.1.1 after January 31, 2026, so an out-of-date server creates an upgrade task. Test failure paths, not only the approved route, before go-live.
How DeployOpen scopes, builds and supports Shuffle approval workflows
DeployOpen designs each Shuffle trigger and approval step as part of one controlled path, from the alert source to the analyst who approves containment. We first confirm where Shuffle runs, whether a single server, Docker Swarm, a hybrid with Shuffle Cloud or Kubernetes, because that decides which triggers can reach the platform. Engagements are fixed-scope, with the scope agreed in writing before work starts.
How we scope
- Inventory every trigger, webhook, schedule and subflow, with its source system and owner.
- Map which triggers work on your deployment model: self-hosted, hybrid with Shuffle Cloud, or Kubernetes.
- Agree the written scope, including which approval steps are in, who may approve, and what happens on timeout.
How we build
- Store webhook tokens and app credentials in Shuffle's encrypted store, never in workflow text.
- Test each trigger with recorded sample payloads and confirm every approval branch routes correctly.
- Plan more than one Orborus node so approval-gated workflows keep running if one node fails.
How we hand over
- Document each trigger's endpoint, authentication method, expected payload and failure handling.
- Provide an approval runbook covering notification recipients, how decisions are recorded, and escalation.
- Record the SHUFFLE_ENCRYPTION_MODIFIER value in your secrets process, since losing or changing it breaks saved app authentications.
How we support
- Offer a retainer covering trigger health checks, version upgrades and reviews of the approval queue.
- Review release notes before each Shuffle upgrade and confirm your running version remains supported.
- Re-test triggers and approval paths after each upgrade, starting on a non-production copy of the workflows.

