Skip to main content
Scenarios define the starting state for one or more digital twins. They can contain Slack channels with message history, Stripe customers with subscriptions, GitHub repositories with open pull requests, and other provider-specific data. Use a Scenario when you want a short-lived Twin Run to start from known data or a persistent twin environment to return to the same baseline after a reseed.

Preset scenarios

Arga ships with 10 built-in scenario templates covering common testing patterns. These are available to all users and can be cloned to customize.

Functionality

Security

Edge cases

Using presets

From the web app: Open Scenarios in the sidebar. Preset templates appear at the top. Select Use in Run to open a Twin Run with that Scenario, or Clone to save an editable copy. From the API:
From the CLI:
You can list presets and manage custom scenarios with arga test-runner scenarios ....

Custom scenarios

Create your own scenarios tailored to your application. There are two ways to define the twin data:
  • Natural language — describe what you want and Arga generates the seed configuration automatically
  • Explicit config — provide the exact JSON for each twin
When you use a natural-language prompt, Arga runs a two-pass pipeline to generate the seed configuration:
  1. Twin selection — a classifier reads your prompt and picks the single most relevant twin. It always prefers provider-specific twins (slack, discord, notion, gmail, google_drive, google_docs, google_sheets, google_workspace, google_calendar, stripe, github, gitlab, dropbox, box, jira, salesforce, linear, postgres, unstructured) over unified. The unified twin is only selected when the prompt explicitly mentions “unified” or “unified.to”. Multiple twins are selected only when the prompt explicitly names more than one provider (for example, “a GitHub repo AND a Slack workspace”).
  2. Config generation — a second pass generates the seed JSON scoped to the selected twin(s). Any secondary details that don’t map to the chosen twin’s schema are either mapped to the closest available field or omitted.
If you need full control over which twins are included, pass the twins array explicitly alongside your seed_config.

Choose a generation mode

Use Fast for everyday scenarios that should be ready sooner. Choose Thorough for stronger handling of complex requirements when a longer wait is acceptable. Fast is the default when you omit the option. The mode only affects generating new seed data from a prompt. Explicit seed JSON, saved scenarios, presets, and resets reuse their existing data. Changing the mode alone does not regenerate a saved scenario. To regenerate one, update its prompt without sending seed_config. The API and MCP accept fast or thorough; unknown values are rejected. The Python and TypeScript SDKs export ScenarioGenerationMode for typed integrations. When provisioning with a scenario_id, Arga reuses that scenario and ignores the prompt and mode. For workflows that take a saved scenario ID, generate and save the scenario first, then pass its ID. See the CLI examples, MCP tool, Python SDK, and TypeScript SDK.

From the web app

  1. Open Scenarios in the sidebar
  2. Click Create Scenario
  3. Enter a name and either a natural language prompt or raw JSON config
  4. For a prompt, select Fast or Thorough
  5. Save — Arga generates and stores the twin configuration
You can also save a Scenario while configuring a Twin Run, then reuse it later.

From a twin dashboard

Browser-facing twin UIs (Box, Discord, Dropbox, GitHub, GitLab, Gmail, Google Calendar, Google Drive, Linear, LinkedIn, Notion, Slack, Stripe, Unified, Unstructured) include a Save scenario button in the dashboard header. Clicking it captures the twin’s current state as a seed_config payload and hands it off to the Arga web app, which opens the scenario creation flow pre-filled with that configuration. Use it to turn a hand-crafted twin state into a reusable scenario without copying JSON manually.

From the API

With a natural language prompt:
With explicit config:

From the CLI

Create a scenario from a prompt:
Import or export explicit seed JSON for agent-authored scenarios:
Use a Scenario to seed a Twin Run:

Managing scenarios

List

Filter by twin or tag:
Include presets alongside your scenarios:

Update

If you update the prompt without providing a new seed_config, Arga regenerates the configuration from the updated prompt.

Delete

Use a Scenario with twins

To start fresh twins from a Scenario, pass both twins and scenario_id to the Provision twins API:
Arga seeds the twins before the run becomes ready. Point your app or agent at the returned provider URLs, then run your tests against that software.

Persistent twin environments

A saved Scenario can also own a persistent twin environment. From the Twin Runs UI, choose a persistent session and a saved Scenario. Arga creates stable twin URLs that you can inspect, reseed from the Scenario, or tear down later. The API exposes create-or-get, status, reseed, and delete operations under /scenarios/{scenario_id}/twin-environment. The Python and TypeScript SDKs expose the same lifecycle through their scenarios resources.

Supported twins

Slack OAuth scope overrides

The Slack twin enforces OAuth scope requirements on API calls. You can customize the scopes granted to bot and user tokens by including oauth_bot_scopes, oauth_user_scopes, or tokens in the Slack seed configuration. This is useful for testing how your app handles missing permissions.
Bot tokens always receive chat:write and files:write as minimum scopes, even if your configuration specifies a narrower set. See configurable token scopes for the full list of available scopes and their corresponding API methods.

Slack workspace constraints

You can configure workspace-level settings in the Slack seed to test how your app handles restricted environments — disabled file uploads, storage quotas, and rate limits.
See workspace constraints for the full reference and error response shapes.

GitHub repository seed config

Each entry in the GitHub seed’s repos array creates one repository in the twin. You can describe the files inline with files, or clone a public GitHub repository to pre-populate the twin with its tracked files.
When cloning from repo_url, the runner enforces these limits per repository to keep seeding fast and bounded:
  • Only public HTTPS github.com URLs are accepted. Credentialed URLs are rejected.
  • Up to 1,000 tracked files are copied.
  • Each file must be 1 MiB or smaller; symlinks are skipped.
  • The total cloned payload is capped at 25 MiB. Files beyond the limit are skipped.

Tags

Organize scenarios with free-form tags for filtering:
Filter by tag in the API (?tag=billing) or web app.