> ## Documentation Index
> Fetch the complete documentation index at: https://arize-ax.mintlify.site/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Managed agent and Signal mutations

> Run managed agent sandboxes and automations, and configure Signal per project. Arguments, return types and a validated example for each of the 25 mutations.

Run managed agent sandboxes and automations, and configure Signal per project.

For task-oriented walkthroughs of these operations, see the [Managed agent and Signal guide](/docs/ax/graphql-reference/guides/managed-agents-and-signal). Every mutation below is sent as a `POST` to `https://app.arize.com/graphql` with an `x-api-key` header; see [Forming calls](/docs/ax/graphql-reference/overview/how-to-use-graphql/forming-calls).

## Mutations in this page

* [`createSandboxIntegration`](#createsandboxintegration): Create sandbox integration.
* [`updateSandboxIntegration`](#updatesandboxintegration): Update sandbox integration.
* [`deleteSandboxIntegration`](#deletesandboxintegration): Delete sandbox integration.
* [`createSandboxConfig`](#createsandboxconfig): Create sandbox config.
* [`updateSandboxConfig`](#updatesandboxconfig): Update sandbox config.
* [`deleteSandboxConfig`](#deletesandboxconfig): Delete sandbox config.
* [`addIntegrationToSandboxConfig`](#addintegrationtosandboxconfig): Add integration to sandbox config.
* [`createSandboxJob`](#createsandboxjob): Create a new managed agent sandbox job
* [`createSandboxTemplate`](#createsandboxtemplate): Snapshot a sandbox and save it as a reusable template for future jobs
* [`sendSandboxMessage`](#sendsandboxmessage): Send a follow-up message to a running sandbox agent
* [`createAutomation`](#createautomation): Create a new managed agent automation.
* [`updateAutomation`](#updateautomation): Replace an existing automation's trigger (cron cadence or metric config) in full and set or clear its per-automation agent-runtime override, in a single save.
* [`deleteAutomation`](#deleteautomation): Soft-delete a managed agent automation.
* [`setAutomationEnabled`](#setautomationenabled): Pause or resume a managed agent automation.
* [`setAutomationRepo`](#setautomationrepo): Set or clear an automation's repo binding — the repo its spawned jobs and 'Open PR' / 'Open GitHub issue' actions target.
* [`triggerAutomationNow`](#triggerautomationnow): Spawn a job for an automation immediately, bypassing next\_fire\_at.
* [`setSignalEnabled`](#setsignalenabled): Enable or disable the Signal automation for a project.
* [`setSignalEnabledBulk`](#setsignalenabledbulk): Enable or disable the Signal automation for multiple projects in one call.
* [`updateSignalConfig`](#updatesignalconfig): Update a project's Signal config: the run cadence and the free-form additional context injected into the Signal prompt.
* [`setSignalAgentConfig`](#setsignalagentconfig): Attach a custom agent config (sandbox config) to a project's Signal automation, repointing it away from the shared built-in default.
* [`resetSignalAgentConfig`](#resetsignalagentconfig): Revert a project's Signal automation back to the shared built-in agent config, detaching any custom config (the custom config itself is left intact).
* [`setSignalIssueStatus`](#setsignalissuestatus): Set the lifecycle status of a Signal issue — Resolve, Ignore, or re-open it.
* [`openSignalIssuePR`](#opensignalissuepr): Launch a managed agent sandbox job that fixes a Signal issue and opens a PR, borrowing the project's Signal automation repo/agent config.
* [`openSignalIssueGitHubIssue`](#opensignalissuegithubissue): File a GitHub issue for a Signal issue, using the project's Signal repo and its connected GitHub token.
* [`deleteSignal`](#deletesignal): Delete the Signal automation for a project.

## Reference

### createSandboxIntegration

`createSandboxIntegration(input: CreateSandboxIntegrationInput!): CreateSandboxIntegrationPayload`

#### Arguments

<ParamField body="input" type="CreateSandboxIntegrationInput!" required>
  <Expandable title="CreateSandboxIntegrationInput fields">
    <ParamField body="accountId" type="ID!" required>
      The global relay ID of the account
    </ParamField>

    <ParamField body="spaceId" type="ID">
      Optional Relay ID of the space the caller is acting from. When provided, authorizes via Space Member+ (MANAGED\_AGENT\_\*) in that space; account/org admins may omit it. The integration row stays account-scoped.
    </ParamField>

    <ParamField body="provider" type="String!" required>
      Provider key (e.g., 'github', 'datadog')
    </ParamField>

    <ParamField body="name" type="String!" required>
      Human-readable name for the integration
    </ParamField>

    <ParamField body="env" type="[SandboxIntegrationSecretInput!]!" required>
      Env var entries to store on the integration. Each entry is \{envVar, value} — the env var is what gets injected into sandbox pods. Empty array is allowed for custom provider integrations.

      <Expandable title="SandboxIntegrationSecretInput fields">
        <ParamField body="envVar" type="String!" required>
          Environment variable name to inject into the sandbox (e.g. 'DD\_API\_KEY').
        </ParamField>

        <ParamField body="value" type="String!" required>
          Plaintext secret value — encrypted at rest.
        </ParamField>
      </Expandable>
    </ParamField>

    <ParamField body="installer" type="String">
      For custom provider: install mechanism. Currently only 'github' (git clone) is supported.
    </ParamField>

    <ParamField body="installSource" type="String">
      For custom provider: source to install from (e.g., GitHub repository URL).
    </ParamField>

    <ParamField body="description" type="String">
      For custom provider: description of how Claude should use the skill.
    </ParamField>

    <ParamField body="clientMutationId" type="String" />
  </Expandable>
</ParamField>

#### Returns

<ResponseField name="sandboxIntegration" type="SandboxIntegration!">
  The created sandbox integration

  <Expandable title="SandboxIntegration fields">
    Scalar fields: `id`, `name`, `provider`, `hasApiKey`, `createdAt`, `updatedAt`, `installer`, `installSource`, `description`.

    Object fields (select subfields): `creator`.
  </Expandable>
</ResponseField>

#### Example

Only required input fields are shown. Replace `<ID>` and `<string>` placeholders with real values; the [object graph](/docs/ax/graphql-reference/queries/object-graph) page shows how to look IDs up.

<CodeGroup>
  ```graphql Mutation theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  mutation CreateSandboxIntegration($input: CreateSandboxIntegrationInput!) {
    createSandboxIntegration(input: $input) {
      sandboxIntegration { id name }
    }
  }
  ```

  ```json Variables theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  {
    "input": {
      "accountId": "<ID>",
      "provider": "<string>",
      "name": "<string>",
      "env": [
        {
          "envVar": "<string>",
          "value": "<string>"
        }
      ]
    }
  }
  ```
</CodeGroup>

### updateSandboxIntegration

`updateSandboxIntegration(input: UpdateSandboxIntegrationInput!): UpdateSandboxIntegrationPayload`

#### Arguments

<ParamField body="input" type="UpdateSandboxIntegrationInput!" required>
  <Expandable title="UpdateSandboxIntegrationInput fields">
    <ParamField body="spaceId" type="ID">
      Optional Relay ID of the space the caller is acting from. When provided, authorizes via Space Member+ (MANAGED\_AGENT\_\*) in that space; account/org admins may omit it. The integration row stays account-scoped.
    </ParamField>

    <ParamField body="sandboxIntegrationId" type="ID!" required>
      The global relay ID of the sandbox integration to update
    </ParamField>

    <ParamField body="name" type="String">
      New name (omit to keep current)
    </ParamField>

    <ParamField body="provider" type="String">
      New provider (omit to keep current)
    </ParamField>

    <ParamField body="env" type="[SandboxIntegrationSecretInput!]">
      Replace the row's env entries with these (omit to keep current).

      <Expandable title="SandboxIntegrationSecretInput fields">
        <ParamField body="envVar" type="String!" required>
          Environment variable name to inject into the sandbox (e.g. 'DD\_API\_KEY').
        </ParamField>

        <ParamField body="value" type="String!" required>
          Plaintext secret value — encrypted at rest.
        </ParamField>
      </Expandable>
    </ParamField>

    <ParamField body="installer" type="String">
      For custom provider: install mechanism (omit to keep current).
    </ParamField>

    <ParamField body="installSource" type="String">
      For custom provider: source to install from (omit to keep current).
    </ParamField>

    <ParamField body="description" type="String">
      For custom provider: description of how Claude should use the skill (omit to keep current).
    </ParamField>

    <ParamField body="clientMutationId" type="String" />
  </Expandable>
</ParamField>

#### Returns

<ResponseField name="sandboxIntegration" type="SandboxIntegration!">
  The updated sandbox integration

  <Expandable title="SandboxIntegration fields">
    Scalar fields: `id`, `name`, `provider`, `hasApiKey`, `createdAt`, `updatedAt`, `installer`, `installSource`, `description`.

    Object fields (select subfields): `creator`.
  </Expandable>
</ResponseField>

#### Example

Only required input fields are shown. Replace `<ID>` and `<string>` placeholders with real values; the [object graph](/docs/ax/graphql-reference/queries/object-graph) page shows how to look IDs up.

<CodeGroup>
  ```graphql Mutation theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  mutation UpdateSandboxIntegration($input: UpdateSandboxIntegrationInput!) {
    updateSandboxIntegration(input: $input) {
      sandboxIntegration { id name }
    }
  }
  ```

  ```json Variables theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  {
    "input": {
      "sandboxIntegrationId": "<ID>"
    }
  }
  ```
</CodeGroup>

### deleteSandboxIntegration

`deleteSandboxIntegration(input: DeleteSandboxIntegrationInput!): DeleteSandboxIntegrationPayload`

#### Arguments

<ParamField body="input" type="DeleteSandboxIntegrationInput!" required>
  <Expandable title="DeleteSandboxIntegrationInput fields">
    <ParamField body="spaceId" type="ID">
      Optional Relay ID of the space the caller is acting from. When provided, authorizes via Space Member+ (MANAGED\_AGENT\_\*) in that space; account/org admins may omit it. The integration row stays account-scoped.
    </ParamField>

    <ParamField body="sandboxIntegrationId" type="ID!" required>
      The global relay ID of the sandbox integration to delete
    </ParamField>

    <ParamField body="clientMutationId" type="String" />
  </Expandable>
</ParamField>

#### Returns

<ResponseField name="success" type="Boolean!">
  Whether the integration was successfully soft-deleted
</ResponseField>

#### Example

Only required input fields are shown. Replace `<ID>` and `<string>` placeholders with real values; the [object graph](/docs/ax/graphql-reference/queries/object-graph) page shows how to look IDs up.

<CodeGroup>
  ```graphql Mutation theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  mutation DeleteSandboxIntegration($input: DeleteSandboxIntegrationInput!) {
    deleteSandboxIntegration(input: $input) {
      success
    }
  }
  ```

  ```json Variables theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  {
    "input": {
      "sandboxIntegrationId": "<ID>"
    }
  }
  ```
</CodeGroup>

### createSandboxConfig

`createSandboxConfig(input: CreateSandboxConfigInput!): CreateSandboxConfigPayload`

#### Arguments

<ParamField body="input" type="CreateSandboxConfigInput!" required>
  <Expandable title="CreateSandboxConfigInput fields">
    <ParamField body="accountId" type="ID!" required>
      The global relay ID of the account
    </ParamField>

    <ParamField body="spaceId" type="ID">
      Optional Relay ID of the space the caller is acting from. When provided, authorizes via Space Member+ (MANAGED\_AGENT\_\*) in that space; account/org admins may omit it. The config row stays account-scoped.
    </ParamField>

    <ParamField body="name" type="String!" required>
      Human-readable name for the config
    </ParamField>

    <ParamField body="repo" type="String">
      Repository URL or path (defaults to empty string)
    </ParamField>

    <ParamField body="sandboxTemplateId" type="Int">
      Optional DB ID of the sandbox template to link
    </ParamField>

    <ParamField body="sandboxIntegrationIds" type="[ID!]">
      Optional list of global relay IDs of sandbox integrations to link
    </ParamField>

    <ParamField body="llmIntegrationId" type="ID">
      Optional global relay ID of an LLM integration on this account (default model gateway for an Arize-hosted sandbox). Must be null when providerId points at a claude\_managed sandbox provider — the LLM credential lives on the sandbox provider in that case.
    </ParamField>

    <ParamField body="harness" type="Harness">
      Agent runtime for this config. Omit for Claude Code. One of: `claude_code`, `codex`, `cursor`, `opencode`.
    </ParamField>

    <ParamField body="providerId" type="ID">
      Optional global relay ID of the sandbox provider this config dispatches to (e.g., a claude\_managed provider). Omit/null for the default Arize-hosted sandbox.
    </ParamField>

    <ParamField body="claudeAgentId" type="String">
      Optional Claude managed agent id. Required when providerId points at a claude\_managed provider.
    </ParamField>

    <ParamField body="claudeEnvironmentId" type="String">
      Optional Claude managed environment id. Required when providerId points at a claude\_managed provider.
    </ParamField>

    <ParamField body="clientMutationId" type="String" />
  </Expandable>
</ParamField>

#### Returns

<ResponseField name="sandboxConfig" type="SandboxConfig!">
  The created sandbox config

  <Expandable title="SandboxConfig fields">
    Scalar fields: `id`, `name`, `repo`, `isBuiltin`, `sandboxTemplateCreatedAt`, `harness`, `claudeAgentId`, `claudeEnvironmentId`, `createdAt`, `updatedAt`.

    Object fields (select subfields): `activeSandboxTemplate`, `templates`, `llmIntegration`, `sandboxProvider`, `creator`, `sandboxIntegrations`.
  </Expandable>
</ResponseField>

#### Example

Only required input fields are shown. Replace `<ID>` and `<string>` placeholders with real values; the [object graph](/docs/ax/graphql-reference/queries/object-graph) page shows how to look IDs up.

<CodeGroup>
  ```graphql Mutation theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  mutation CreateSandboxConfig($input: CreateSandboxConfigInput!) {
    createSandboxConfig(input: $input) {
      sandboxConfig { id name }
    }
  }
  ```

  ```json Variables theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  {
    "input": {
      "accountId": "<ID>",
      "name": "<string>"
    }
  }
  ```
</CodeGroup>

### updateSandboxConfig

`updateSandboxConfig(input: UpdateSandboxConfigInput!): UpdateSandboxConfigPayload`

#### Arguments

<ParamField body="input" type="UpdateSandboxConfigInput!" required>
  <Expandable title="UpdateSandboxConfigInput fields">
    <ParamField body="spaceId" type="ID">
      Optional Relay ID of the space the caller is acting from. When provided, authorizes via Space Member+ (MANAGED\_AGENT\_\*) in that space; account/org admins may omit it. The config row stays account-scoped.
    </ParamField>

    <ParamField body="sandboxConfigId" type="ID!" required>
      The global relay ID of the sandbox config to update
    </ParamField>

    <ParamField body="name" type="String">
      New name (omit to keep current)
    </ParamField>

    <ParamField body="repo" type="String">
      New repo URL/path (omit to keep current)
    </ParamField>

    <ParamField body="sandboxTemplateId" type="Int">
      New sandbox template DB ID (omit to keep current, pass null to unlink)
    </ParamField>

    <ParamField body="sandboxIntegrationIds" type="[ID!]">
      Replace the full set of linked integrations (omit to keep current)
    </ParamField>

    <ParamField body="llmIntegrationId" type="ID">
      LLM integration relay ID for an Arize-hosted sandbox (omit to keep; pass null to unlink). Must be null when providerId resolves to a claude\_managed sandbox provider.
    </ParamField>

    <ParamField body="harness" type="Harness">
      Agent runtime (omit to keep current). One of: `claude_code`, `codex`, `cursor`, `opencode`.
    </ParamField>

    <ParamField body="providerId" type="ID">
      Sandbox provider relay ID (omit to keep; pass null to fall back to the default Arize-hosted sandbox).
    </ParamField>

    <ParamField body="claudeAgentId" type="String">
      Claude managed agent id (omit to keep; pass null to clear).
    </ParamField>

    <ParamField body="claudeEnvironmentId" type="String">
      Claude managed environment id (omit to keep; pass null to clear).
    </ParamField>

    <ParamField body="clientMutationId" type="String" />
  </Expandable>
</ParamField>

#### Returns

<ResponseField name="sandboxConfig" type="SandboxConfig!">
  The updated sandbox config

  <Expandable title="SandboxConfig fields">
    Scalar fields: `id`, `name`, `repo`, `isBuiltin`, `sandboxTemplateCreatedAt`, `harness`, `claudeAgentId`, `claudeEnvironmentId`, `createdAt`, `updatedAt`.

    Object fields (select subfields): `activeSandboxTemplate`, `templates`, `llmIntegration`, `sandboxProvider`, `creator`, `sandboxIntegrations`.
  </Expandable>
</ResponseField>

#### Example

Only required input fields are shown. Replace `<ID>` and `<string>` placeholders with real values; the [object graph](/docs/ax/graphql-reference/queries/object-graph) page shows how to look IDs up.

<CodeGroup>
  ```graphql Mutation theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  mutation UpdateSandboxConfig($input: UpdateSandboxConfigInput!) {
    updateSandboxConfig(input: $input) {
      sandboxConfig { id name }
    }
  }
  ```

  ```json Variables theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  {
    "input": {
      "sandboxConfigId": "<ID>"
    }
  }
  ```
</CodeGroup>

### deleteSandboxConfig

`deleteSandboxConfig(input: DeleteSandboxConfigInput!): DeleteSandboxConfigPayload`

#### Arguments

<ParamField body="input" type="DeleteSandboxConfigInput!" required>
  <Expandable title="DeleteSandboxConfigInput fields">
    <ParamField body="spaceId" type="ID">
      Optional Relay ID of the space the caller is acting from. When provided, authorizes via Space Member+ (MANAGED\_AGENT\_\*) in that space; account/org admins may omit it. The config rows stay account-scoped.
    </ParamField>

    <ParamField body="sandboxConfigIds" type="[ID!]!" required>
      The global relay IDs of the sandbox configs to delete. Must contain at least one id.
    </ParamField>

    <ParamField body="clientMutationId" type="String" />
  </Expandable>
</ParamField>

#### Returns

<ResponseField name="deletedCount" type="Int!">
  How many configs were actually soft-deleted. May be less than the requested count if some ids did not exist, belonged to another account, or were already deleted.
</ResponseField>

#### Example

Only required input fields are shown. Replace `<ID>` and `<string>` placeholders with real values; the [object graph](/docs/ax/graphql-reference/queries/object-graph) page shows how to look IDs up.

<CodeGroup>
  ```graphql Mutation theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  mutation DeleteSandboxConfig($input: DeleteSandboxConfigInput!) {
    deleteSandboxConfig(input: $input) {
      deletedCount
    }
  }
  ```

  ```json Variables theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  {
    "input": {
      "sandboxConfigIds": [
        "<ID>"
      ]
    }
  }
  ```
</CodeGroup>

### addIntegrationToSandboxConfig

`addIntegrationToSandboxConfig(input: AddIntegrationToSandboxConfigInput!): AddIntegrationToSandboxConfigPayload`

#### Arguments

<ParamField body="input" type="AddIntegrationToSandboxConfigInput!" required>
  <Expandable title="AddIntegrationToSandboxConfigInput fields">
    <ParamField body="spaceId" type="ID">
      Optional Relay ID of the space the caller is acting from. When provided, authorizes via Space Member+ (MANAGED\_AGENT\_\*) in that space; account/org admins may omit it. The config row stays account-scoped.
    </ParamField>

    <ParamField body="sandboxConfigId" type="ID!" required>
      The global relay ID of the sandbox config
    </ParamField>

    <ParamField body="sandboxIntegrationId" type="ID!" required>
      The global relay ID of the sandbox integration to link
    </ParamField>

    <ParamField body="clientMutationId" type="String" />
  </Expandable>
</ParamField>

#### Returns

<ResponseField name="sandboxConfig" type="SandboxConfig!">
  The updated sandbox config

  <Expandable title="SandboxConfig fields">
    Scalar fields: `id`, `name`, `repo`, `isBuiltin`, `sandboxTemplateCreatedAt`, `harness`, `claudeAgentId`, `claudeEnvironmentId`, `createdAt`, `updatedAt`.

    Object fields (select subfields): `activeSandboxTemplate`, `templates`, `llmIntegration`, `sandboxProvider`, `creator`, `sandboxIntegrations`.
  </Expandable>
</ResponseField>

#### Example

Only required input fields are shown. Replace `<ID>` and `<string>` placeholders with real values; the [object graph](/docs/ax/graphql-reference/queries/object-graph) page shows how to look IDs up.

<CodeGroup>
  ```graphql Mutation theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  mutation AddIntegrationToSandboxConfig($input: AddIntegrationToSandboxConfigInput!) {
    addIntegrationToSandboxConfig(input: $input) {
      sandboxConfig { id name }
    }
  }
  ```

  ```json Variables theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  {
    "input": {
      "sandboxConfigId": "<ID>",
      "sandboxIntegrationId": "<ID>"
    }
  }
  ```
</CodeGroup>

### createSandboxJob

Create a new managed agent sandbox job

`createSandboxJob(input: CreateSandboxJobInput!): CreateSandboxJobPayload`

#### Arguments

<ParamField body="input" type="CreateSandboxJobInput!" required>
  <Expandable title="CreateSandboxJobInput fields">
    <ParamField body="spaceId" type="ID!" required>
      The space to create the job in
    </ParamField>

    <ParamField body="initialPrompt" type="String">
      Initial prompt for regular sandbox jobs. Omit or leave empty when agentTemplateKey is set. Setup Repo sessions use a default when omitted or empty.
    </ParamField>

    <ParamField body="agentTemplateKey" type="String">
      Optional repository-owned agent template resolved by the sandbox controller.
    </ParamField>

    <ParamField body="templateInputs" type="String">
      JSON object of declared inputs for the selected agent template.
    </ParamField>

    <ParamField body="integrations" type="[SandboxIntegrationRefInput!]">
      Optional list of sandbox integrations (provider + relay GID) to expose inside the sandbox pod.

      <Expandable title="SandboxIntegrationRefInput fields">
        <ParamField body="provider" type="String!" required>
          Provider key matching sandbox\_integrations.provider — used by sandboxcontroller to dispatch per-provider secret materialization.
        </ParamField>

        <ParamField body="id" type="ID!" required>
          Relay GID of the sandbox integration row to bind to this job or automation.
        </ParamField>
      </Expandable>
    </ParamField>

    <ParamField body="sandboxConfigId" type="ID">
      Optional Relay GID of the sandbox config to associate with this job.
    </ParamField>

    <ParamField body="isSetupSession" type="Boolean">
      Marks this job as a Setup Repo session — the only path that can produce sandbox\_templates via the Save as Template flow. When true and initialPrompt is omitted, the server applies a canned setup prompt.
    </ParamField>

    <ParamField body="providerId" type="ID">
      Optional Relay GID of sandbox provider. Use for non-k8s providers.
    </ParamField>

    <ParamField body="repoUrl" type="String">
      Optional repository url. When omitted, sandbox config repo is used.
    </ParamField>

    <ParamField body="claudeAgentId" type="String">
      Claude managed agent id. Required when provider is claude\_managed unless present on sandbox config.
    </ParamField>

    <ParamField body="claudeEnvironmentId" type="String">
      Claude managed environment id. Required when provider is claude\_managed unless present on sandbox config.
    </ParamField>

    <ParamField body="llmIntegrationId" type="ID">
      Optional Relay GID of an agent-eligible Anthropic AI Provider (llm\_integration) to pin as this run's runtime. Only valid for ad-hoc (no sandboxConfigId) jobs on the Arize/k8s provider; forbidden for claude\_managed. Omit to use the Arize-managed model.
    </ParamField>

    <ParamField body="agentRoleId" type="ID">
      Optional Relay GID of a managed-agent role to bind for this run. Only valid for ad-hoc (no sandboxConfigId) jobs; config-backed jobs inherit the role from the sandbox config. Omit to use the default Managed Agent role.
    </ParamField>

    <ParamField body="harness" type="Harness">
      Agent runtime to run this job with. Omit for the default (claude\_code). One of: `claude_code`, `codex`, `cursor`, `opencode`.
    </ParamField>

    <ParamField body="clientMutationId" type="String" />
  </Expandable>
</ParamField>

#### Returns

<ResponseField name="jobId" type="ID!">
  The Relay global ID of the newly created sandbox job
</ResponseField>

<ResponseField name="sandboxId" type="ID">
  The Relay global ID of the newly created sandbox, if one exists.
</ResponseField>

#### Example

Only required input fields are shown. Replace `<ID>` and `<string>` placeholders with real values; the [object graph](/docs/ax/graphql-reference/queries/object-graph) page shows how to look IDs up.

<CodeGroup>
  ```graphql Mutation theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  mutation CreateSandboxJob($input: CreateSandboxJobInput!) {
    createSandboxJob(input: $input) {
      jobId
      sandboxId
    }
  }
  ```

  ```json Variables theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  {
    "input": {
      "spaceId": "<ID>"
    }
  }
  ```
</CodeGroup>

### createSandboxTemplate

Snapshot a sandbox and save it as a reusable template for future jobs

`createSandboxTemplate(input: CreateSandboxTemplateInput!): CreateSandboxTemplatePayload`

#### Arguments

<ParamField body="input" type="CreateSandboxTemplateInput!" required>
  <Expandable title="CreateSandboxTemplateInput fields">
    <ParamField body="jobId" type="String!" required>
      The global ID of the sandbox job to snapshot
    </ParamField>

    <ParamField body="name" type="String!" required>
      Name for the new template
    </ParamField>

    <ParamField body="clientMutationId" type="String" />
  </Expandable>
</ParamField>

#### Returns

<ResponseField name="templateId" type="String!">
  The integer primary key of the newly created sandbox template
</ResponseField>

#### Example

Only required input fields are shown. Replace `<ID>` and `<string>` placeholders with real values; the [object graph](/docs/ax/graphql-reference/queries/object-graph) page shows how to look IDs up.

<CodeGroup>
  ```graphql Mutation theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  mutation CreateSandboxTemplate($input: CreateSandboxTemplateInput!) {
    createSandboxTemplate(input: $input) {
      templateId
    }
  }
  ```

  ```json Variables theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  {
    "input": {
      "jobId": "<string>",
      "name": "<string>"
    }
  }
  ```
</CodeGroup>

### sendSandboxMessage

Send a follow-up message to a running sandbox agent

`sendSandboxMessage(input: SendSandboxMessageInput!): SendSandboxMessagePayload`

#### Arguments

<ParamField body="input" type="SendSandboxMessageInput!" required>
  <Expandable title="SendSandboxMessageInput fields">
    <ParamField body="jobId" type="String!" required>
      Global ID of the sandbox job to message
    </ParamField>

    <ParamField body="message" type="String!" required>
      The message to send to the Claude Code agent
    </ParamField>

    <ParamField body="clientMutationId" type="String" />
  </Expandable>
</ParamField>

#### Returns

<ResponseField name="jobId" type="String!">
  The sandbox job ID the message was sent to
</ResponseField>

#### Example

Only required input fields are shown. Replace `<ID>` and `<string>` placeholders with real values; the [object graph](/docs/ax/graphql-reference/queries/object-graph) page shows how to look IDs up.

<CodeGroup>
  ```graphql Mutation theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  mutation SendSandboxMessage($input: SendSandboxMessageInput!) {
    sendSandboxMessage(input: $input) {
      jobId
    }
  }
  ```

  ```json Variables theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  {
    "input": {
      "jobId": "<string>",
      "message": "<string>"
    }
  }
  ```
</CodeGroup>

### createAutomation

Create a new managed agent automation.

`createAutomation(input: CreateAutomationInput!): CreateAutomationPayload`

#### Arguments

<ParamField body="input" type="CreateAutomationInput!" required>
  <Expandable title="CreateAutomationInput fields">
    <ParamField body="spaceId" type="ID!" required>
      Space the automation lives under.
    </ParamField>

    <ParamField body="name" type="String!" required>
      User-supplied automation name.
    </ParamField>

    <ParamField body="promptTemplate" type="String!" required>
      Go text/template prompt for custom automations. Must be empty when agentTemplateKey is set.
    </ParamField>

    <ParamField body="agentTemplateKey" type="String">
      Optional repository-owned agent template resolved by the sandbox controller.
    </ParamField>

    <ParamField body="templateInputs" type="String">
      JSON object of declared inputs for the selected agent template.
    </ParamField>

    <ParamField body="sandboxConfigId" type="ID!" required>
      SandboxConfig Relay GID to spawn jobs from.
    </ParamField>

    <ParamField body="repo" type="String">
      Optional per-automation repo (org/repo) override. When set, spawned jobs use this repo instead of the bound SandboxConfig's repo, so automations sharing a preset can target different repos. Omitted/empty inherits the config's repo.
    </ParamField>

    <ParamField body="agentProfile" type="AgentProfile!" required>
      Settings and system-prompt preset each spawned job runs with. One of: `default`, `harness_evaluation`.
    </ParamField>

    <ParamField body="harness" type="Harness!" required>
      Agent runtime each spawned job uses. Omit for the default (claude\_code). One of: `claude_code`, `codex`, `cursor`, `opencode`.
    </ParamField>

    <ParamField body="integrations" type="[SandboxIntegrationRefInput!]">
      Optional list of sandbox integrations (provider + relay GID) to bind to each job spawned by this automation. At most one integration per provider.

      <Expandable title="SandboxIntegrationRefInput fields">
        <ParamField body="provider" type="String!" required>
          Provider key matching sandbox\_integrations.provider — used by sandboxcontroller to dispatch per-provider secret materialization.
        </ParamField>

        <ParamField body="id" type="ID!" required>
          Relay GID of the sandbox integration row to bind to this job or automation.
        </ParamField>
      </Expandable>
    </ParamField>

    <ParamField body="cron" type="AutomationCronTriggerInput">
      Cron trigger. Exactly one of cron or metric must be provided.

      <Expandable title="AutomationCronTriggerInput fields">
        <ParamField body="cadenceSeconds" type="Int!" required>
          Fire every N seconds. Must be > 0.
        </ParamField>
      </Expandable>
    </ParamField>

    <ParamField body="metric" type="AutomationMetricTriggerInput">
      Metric trigger. Exactly one of cron or metric must be provided.

      <Expandable title="AutomationMetricTriggerInput fields">
        <ParamField body="modelId" type="ID!" required>
          Relay GID of the Model the value is scoped to (custom metric host model, or model whose spans the filter applies to).
        </ParamField>

        <ParamField body="customMetricId" type="ID">
          Relay GID of the CustomMetric to evaluate. Mutually exclusive with queryFilter.
        </ParamField>

        <ParamField body="queryFilter" type="String">
          Arize span-filter DSL expression (e.g. `attributes["status_code"] = "ERROR"`). Value compared against threshold is the COUNT of matching spans in the lookback window. Mutually exclusive with customMetricId.
        </ParamField>

        <ParamField body="lookbackSeconds" type="Int!" required>
          Window (in seconds) the value is computed over. Must be > 0.
        </ParamField>

        <ParamField body="threshold" type="Float!" required>
          Threshold the value is compared against.
        </ParamField>

        <ParamField body="operator" type="AutomationMetricOperator!" required>
          Comparison: fire when value \<op> threshold. One of: `GT`, `LT`, `GTE`, `LTE`, `EQ`.
        </ParamField>

        <ParamField body="evalIntervalSeconds" type="Int!" required>
          How often to re-evaluate. Must be > 0.
        </ParamField>
      </Expandable>
    </ParamField>

    <ParamField body="maxJobsPerWindow" type="Int">
      Cooloff: max fires in cooloff\_window\_seconds. 0/omitted = no limit.
    </ParamField>

    <ParamField body="cooloffWindowSeconds" type="Int">
      Cooloff window. 0/omitted = no limit.
    </ParamField>

    <ParamField body="producer" type="String">
      Optional issue-producer identity (e.g. 'cost'). When set, the automation is authorized to file issues under this producer and must be project-scoped: a cron automation supplies modelId, a metric trigger carries its own. Omitted = an ordinary automation. Signal is NOT set here.
    </ParamField>

    <ParamField body="modelId" type="ID">
      Relay GID of the Model (project) the automation is scoped to. Stored on any cron automation that supplies it, so the project an agent watches can be queried instead of parsed out of its prompt. Required for a cron issue producer — issue producers are project-scoped. A metric trigger carries its own modelId and this field is ignored.
    </ParamField>

    <ParamField body="clientMutationId" type="String" />
  </Expandable>
</ParamField>

#### Returns

<ResponseField name="automationId" type="ID!">
  Relay GID of the newly created automation.
</ResponseField>

<ResponseField name="jobId" type="ID">
  Relay GID of the initial job, or null when it could not be started.
</ResponseField>

#### Example

Only required input fields are shown. Replace `<ID>` and `<string>` placeholders with real values; the [object graph](/docs/ax/graphql-reference/queries/object-graph) page shows how to look IDs up.

<CodeGroup>
  ```graphql Mutation theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  mutation CreateAutomation($input: CreateAutomationInput!) {
    createAutomation(input: $input) {
      automationId
      jobId
    }
  }
  ```

  ```json Variables theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  {
    "input": {
      "spaceId": "<ID>",
      "name": "<string>",
      "promptTemplate": "<string>",
      "sandboxConfigId": "<ID>",
      "agentProfile": "default",
      "harness": "claude_code"
    }
  }
  ```
</CodeGroup>

### updateAutomation

Replace an existing automation's trigger (cron cadence or metric config) in full and set or clear its per-automation agent-runtime override, in a single save. Exactly one of cron/metric must be provided, mirroring createAutomation. Recomputes the next fire time so the new schedule takes effect on the next cycle.

`updateAutomation(input: UpdateAutomationInput!): UpdateAutomationPayload`

#### Arguments

<ParamField body="input" type="UpdateAutomationInput!" required>
  <Expandable title="UpdateAutomationInput fields">
    <ParamField body="spaceId" type="ID!" required>
      Space the automation belongs to (for tenancy verification).
    </ParamField>

    <ParamField body="automationId" type="ID!" required>
      Relay GID of the automation to update.
    </ParamField>

    <ParamField body="cron" type="AutomationCronTriggerInput">
      Cron trigger. Exactly one of cron or metric must be provided.

      <Expandable title="AutomationCronTriggerInput fields">
        <ParamField body="cadenceSeconds" type="Int!" required>
          Fire every N seconds. Must be > 0.
        </ParamField>
      </Expandable>
    </ParamField>

    <ParamField body="metric" type="AutomationMetricTriggerInput">
      Metric trigger. Exactly one of cron or metric must be provided.

      <Expandable title="AutomationMetricTriggerInput fields">
        <ParamField body="modelId" type="ID!" required>
          Relay GID of the Model the value is scoped to (custom metric host model, or model whose spans the filter applies to).
        </ParamField>

        <ParamField body="customMetricId" type="ID">
          Relay GID of the CustomMetric to evaluate. Mutually exclusive with queryFilter.
        </ParamField>

        <ParamField body="queryFilter" type="String">
          Arize span-filter DSL expression (e.g. `attributes["status_code"] = "ERROR"`). Value compared against threshold is the COUNT of matching spans in the lookback window. Mutually exclusive with customMetricId.
        </ParamField>

        <ParamField body="lookbackSeconds" type="Int!" required>
          Window (in seconds) the value is computed over. Must be > 0.
        </ParamField>

        <ParamField body="threshold" type="Float!" required>
          Threshold the value is compared against.
        </ParamField>

        <ParamField body="operator" type="AutomationMetricOperator!" required>
          Comparison: fire when value \<op> threshold. One of: `GT`, `LT`, `GTE`, `LTE`, `EQ`.
        </ParamField>

        <ParamField body="evalIntervalSeconds" type="Int!" required>
          How often to re-evaluate. Must be > 0.
        </ParamField>
      </Expandable>
    </ParamField>

    <ParamField body="cooloffWindowSeconds" type="Int">
      Cooloff window. 0/omitted = server-defaulted.
    </ParamField>

    <ParamField body="llmIntegrationId" type="ID">
      LLM integration relay ID to pin. Null clears the override (falls back to the bound sandbox\_config's runtime, then the space default, then Arize-managed).
    </ParamField>

    <ParamField body="clientMutationId" type="String" />
  </Expandable>
</ParamField>

#### Returns

<ResponseField name="ok" type="Boolean!">
  True when the update completed.
</ResponseField>

#### Example

Only required input fields are shown. Replace `<ID>` and `<string>` placeholders with real values; the [object graph](/docs/ax/graphql-reference/queries/object-graph) page shows how to look IDs up.

<CodeGroup>
  ```graphql Mutation theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  mutation UpdateAutomation($input: UpdateAutomationInput!) {
    updateAutomation(input: $input) {
      ok
    }
  }
  ```

  ```json Variables theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  {
    "input": {
      "spaceId": "<ID>",
      "automationId": "<ID>"
    }
  }
  ```
</CodeGroup>

### deleteAutomation

Soft-delete a managed agent automation.

`deleteAutomation(input: DeleteAutomationInput!): DeleteAutomationPayload`

#### Arguments

<ParamField body="input" type="DeleteAutomationInput!" required>
  <Expandable title="DeleteAutomationInput fields">
    <ParamField body="spaceId" type="ID!" required>
      Space the automation belongs to (for tenancy verification).
    </ParamField>

    <ParamField body="automationId" type="ID!" required>
      Relay GID of the automation to soft-delete.
    </ParamField>

    <ParamField body="clientMutationId" type="String" />
  </Expandable>
</ParamField>

#### Returns

<ResponseField name="ok" type="Boolean!">
  True when the soft-delete completed.
</ResponseField>

#### Example

Only required input fields are shown. Replace `<ID>` and `<string>` placeholders with real values; the [object graph](/docs/ax/graphql-reference/queries/object-graph) page shows how to look IDs up.

<CodeGroup>
  ```graphql Mutation theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  mutation DeleteAutomation($input: DeleteAutomationInput!) {
    deleteAutomation(input: $input) {
      ok
    }
  }
  ```

  ```json Variables theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  {
    "input": {
      "spaceId": "<ID>",
      "automationId": "<ID>"
    }
  }
  ```
</CodeGroup>

### setAutomationEnabled

Pause or resume a managed agent automation. Disabled automations stay in the list (keeping their config) but are skipped by the scheduler.

`setAutomationEnabled(input: SetAutomationEnabledInput!): SetAutomationEnabledPayload`

#### Arguments

<ParamField body="input" type="SetAutomationEnabledInput!" required>
  <Expandable title="SetAutomationEnabledInput fields">
    <ParamField body="spaceId" type="ID!" required>
      Space the automation belongs to (for tenancy verification).
    </ParamField>

    <ParamField body="automationId" type="ID!" required>
      Relay GID of the automation to update.
    </ParamField>

    <ParamField body="enabled" type="Boolean!" required>
      true to resume, false to pause.
    </ParamField>

    <ParamField body="clientMutationId" type="String" />
  </Expandable>
</ParamField>

#### Returns

<ResponseField name="ok" type="Boolean!">
  True when the update completed.
</ResponseField>

#### Example

Only required input fields are shown. Replace `<ID>` and `<string>` placeholders with real values; the [object graph](/docs/ax/graphql-reference/queries/object-graph) page shows how to look IDs up.

<CodeGroup>
  ```graphql Mutation theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  mutation SetAutomationEnabled($input: SetAutomationEnabledInput!) {
    setAutomationEnabled(input: $input) {
      ok
    }
  }
  ```

  ```json Variables theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  {
    "input": {
      "spaceId": "<ID>",
      "automationId": "<ID>",
      "enabled": true
    }
  }
  ```
</CodeGroup>

### setAutomationRepo

Set or clear an automation's repo binding — the repo its spawned jobs and 'Open PR' / 'Open GitHub issue' actions target. Overrides the bound sandbox\_config's repo; an empty string clears the binding so jobs inherit the config's repo. Used to attach or change the repo for a producer agent (e.g. Cost), which keeps its repo on the automation rather than the shared preset.

`setAutomationRepo(input: SetAutomationRepoInput!): SetAutomationRepoPayload`

#### Arguments

<ParamField body="input" type="SetAutomationRepoInput!" required>
  <Expandable title="SetAutomationRepoInput fields">
    <ParamField body="spaceId" type="ID!" required>
      Space the automation belongs to (for tenancy verification).
    </ParamField>

    <ParamField body="automationId" type="ID!" required>
      Relay GID of the automation to update.
    </ParamField>

    <ParamField body="repo" type="String!" required>
      The org/repo (or repo URL) to bind. Empty string clears the binding.
    </ParamField>

    <ParamField body="clientMutationId" type="String" />
  </Expandable>
</ParamField>

#### Returns

<ResponseField name="ok" type="Boolean!">
  True when the update completed.
</ResponseField>

#### Example

Only required input fields are shown. Replace `<ID>` and `<string>` placeholders with real values; the [object graph](/docs/ax/graphql-reference/queries/object-graph) page shows how to look IDs up.

<CodeGroup>
  ```graphql Mutation theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  mutation SetAutomationRepo($input: SetAutomationRepoInput!) {
    setAutomationRepo(input: $input) {
      ok
    }
  }
  ```

  ```json Variables theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  {
    "input": {
      "spaceId": "<ID>",
      "automationId": "<ID>",
      "repo": "<string>"
    }
  }
  ```
</CodeGroup>

### triggerAutomationNow

Spawn a job for an automation immediately, bypassing next\_fire\_at. All admission gates (cooloff, capacity, signal-issue limit) still apply. next\_fire\_at is reset to now+cadence so the schedule resumes from now.

`triggerAutomationNow(input: TriggerAutomationNowInput!): TriggerAutomationNowPayload`

#### Arguments

<ParamField body="input" type="TriggerAutomationNowInput!" required>
  <Expandable title="TriggerAutomationNowInput fields">
    <ParamField body="automationId" type="ID!" required>
      Relay GID of the automation to trigger.
    </ParamField>

    <ParamField body="additionalPrompt" type="String">
      Optional extra instructions appended to the automation's rendered prompt.
    </ParamField>

    <ParamField body="clientMutationId" type="String" />
  </Expandable>
</ParamField>

#### Returns

<ResponseField name="jobId" type="Int!">
  DB id of the newly created sandbox job.
</ResponseField>

#### Example

Only required input fields are shown. Replace `<ID>` and `<string>` placeholders with real values; the [object graph](/docs/ax/graphql-reference/queries/object-graph) page shows how to look IDs up.

<CodeGroup>
  ```graphql Mutation theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  mutation TriggerAutomationNow($input: TriggerAutomationNowInput!) {
    triggerAutomationNow(input: $input) {
      jobId
    }
  }
  ```

  ```json Variables theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  {
    "input": {
      "automationId": "<ID>"
    }
  }
  ```
</CodeGroup>

### setSignalEnabled

Enable or disable the Signal automation for a project. Enabling lazily provisions the built-in Signal preset; disabling pauses the scheduler but keeps the automation.

`setSignalEnabled(input: SetSignalEnabledInput!): SetSignalEnabledPayload`

#### Arguments

<ParamField body="input" type="SetSignalEnabledInput!" required>
  <Expandable title="SetSignalEnabledInput fields">
    <ParamField body="modelId" type="ID!" required>
      Relay GID of the project (model) to update.
    </ParamField>

    <ParamField body="enabled" type="Boolean!" required>
      true to enable Signal, false to disable.
    </ParamField>

    <ParamField body="llmIntegrationId" type="ID">
      Optional relay GID of the agent-eligible Anthropic AI Provider integration Signal should run on for this project. Null/omitted uses the Arize-managed model. Only applied when enabling.
    </ParamField>

    <ParamField body="clientMutationId" type="String" />
  </Expandable>
</ParamField>

#### Returns

<ResponseField name="ok" type="Boolean!">
  True when the update completed.
</ResponseField>

<ResponseField name="signalStatus" type="SignalStatus!">
  The Signal status after the update.

  <Expandable title="SignalStatus fields">
    Scalar fields: `state`, `automationId`, `presetName`, `hasAttachedRepo`, `cadenceSeconds`, `additionalContext`, `llmIntegrationId`, `lastFiredUnix`, `nextFireUnix`, `issueLimitReached`.

    Object fields (select subfields): `agentConfig`.
  </Expandable>
</ResponseField>

#### Example

Only required input fields are shown. Replace `<ID>` and `<string>` placeholders with real values; the [object graph](/docs/ax/graphql-reference/queries/object-graph) page shows how to look IDs up.

<CodeGroup>
  ```graphql Mutation theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  mutation SetSignalEnabled($input: SetSignalEnabledInput!) {
    setSignalEnabled(input: $input) {
      ok
      signalStatus { state }
    }
  }
  ```

  ```json Variables theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  {
    "input": {
      "modelId": "<ID>",
      "enabled": true
    }
  }
  ```
</CodeGroup>

### setSignalEnabledBulk

Enable or disable the Signal automation for multiple projects in one call. Each project is processed independently — a single project's failure does not abort the others — and per-project outcomes are returned in `results`.

`setSignalEnabledBulk(input: SetSignalEnabledBulkInput!): SetSignalEnabledBulkPayload`

#### Arguments

<ParamField body="input" type="SetSignalEnabledBulkInput!" required>
  <Expandable title="SetSignalEnabledBulkInput fields">
    <ParamField body="modelIds" type="[ID!]!" required>
      Relay GIDs of the projects (models) to update.
    </ParamField>

    <ParamField body="enabled" type="Boolean!" required>
      true to enable Signal, false to disable.
    </ParamField>

    <ParamField body="llmIntegrationId" type="ID">
      Optional relay GID of the agent-eligible Anthropic AI Provider integration Signal should run on. Applied to every selected project. Null/omitted uses the Arize-managed model. Only applied when enabling.
    </ParamField>

    <ParamField body="clientMutationId" type="String" />
  </Expandable>
</ParamField>

#### Returns

<ResponseField name="results" type="[SignalEnabledBulkResult!]!">
  The per-project outcome of the bulk update.

  <Expandable title="SignalEnabledBulkResult fields">
    Scalar fields: `modelId`, `ok`, `error`.

    Object fields (select subfields): `signalStatus`.
  </Expandable>
</ResponseField>

<ResponseField name="okCount" type="Int!">
  Number of projects that were updated successfully.
</ResponseField>

<ResponseField name="failedCount" type="Int!">
  Number of projects that failed to update.
</ResponseField>

#### Example

Only required input fields are shown. Replace `<ID>` and `<string>` placeholders with real values; the [object graph](/docs/ax/graphql-reference/queries/object-graph) page shows how to look IDs up.

<CodeGroup>
  ```graphql Mutation theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  mutation SetSignalEnabledBulk($input: SetSignalEnabledBulkInput!) {
    setSignalEnabledBulk(input: $input) {
      results { modelId }
      okCount
      failedCount
    }
  }
  ```

  ```json Variables theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  {
    "input": {
      "modelIds": [
        "<ID>"
      ],
      "enabled": true
    }
  }
  ```
</CodeGroup>

### updateSignalConfig

Update a project's Signal config: the run cadence and the free-form additional context injected into the Signal prompt.

`updateSignalConfig(input: UpdateSignalConfigInput!): UpdateSignalConfigPayload`

#### Arguments

<ParamField body="input" type="UpdateSignalConfigInput!" required>
  <Expandable title="UpdateSignalConfigInput fields">
    <ParamField body="modelId" type="ID!" required>
      Relay GID of the project (model) to update.
    </ParamField>

    <ParamField body="cadenceSeconds" type="Int!" required>
      New run cadence in seconds. Must be between 4 hours and 30 days.
    </ParamField>

    <ParamField body="additionalContext" type="String!" required>
      Free-form additional context injected into the Signal prompt. Empty string clears it.
    </ParamField>

    <ParamField body="llmIntegrationId" type="ID">
      Relay GID of the agent runtime integration to use for this Signal. Null sets it to Arize-managed. Omit to leave the current runtime unchanged.
    </ParamField>

    <ParamField body="harness" type="Harness">
      Agent runtime this Signal automation runs on. Omit to leave the automation's harness unchanged; null selects Claude Code. Determines whether llmIntegrationId must be an Anthropic or OpenAI AI Provider. One of: `claude_code`, `codex`, `cursor`, `opencode`.
    </ParamField>

    <ParamField body="clientMutationId" type="String" />
  </Expandable>
</ParamField>

#### Returns

<ResponseField name="ok" type="Boolean!">
  True when the update completed.
</ResponseField>

<ResponseField name="signalStatus" type="SignalStatus!">
  The Signal status after the update.

  <Expandable title="SignalStatus fields">
    Scalar fields: `state`, `automationId`, `presetName`, `hasAttachedRepo`, `cadenceSeconds`, `additionalContext`, `llmIntegrationId`, `lastFiredUnix`, `nextFireUnix`, `issueLimitReached`.

    Object fields (select subfields): `agentConfig`.
  </Expandable>
</ResponseField>

#### Example

Only required input fields are shown. Replace `<ID>` and `<string>` placeholders with real values; the [object graph](/docs/ax/graphql-reference/queries/object-graph) page shows how to look IDs up.

<CodeGroup>
  ```graphql Mutation theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  mutation UpdateSignalConfig($input: UpdateSignalConfigInput!) {
    updateSignalConfig(input: $input) {
      ok
      signalStatus { state }
    }
  }
  ```

  ```json Variables theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  {
    "input": {
      "modelId": "<ID>",
      "cadenceSeconds": 1,
      "additionalContext": "<string>"
    }
  }
  ```
</CodeGroup>

### setSignalAgentConfig

Attach a custom agent config (sandbox config) to a project's Signal automation, repointing it away from the shared built-in default.

`setSignalAgentConfig(input: SetSignalAgentConfigInput!): SetSignalAgentConfigPayload`

#### Arguments

<ParamField body="input" type="SetSignalAgentConfigInput!" required>
  <Expandable title="SetSignalAgentConfigInput fields">
    <ParamField body="modelId" type="ID!" required>
      Relay GID of the project (model) to update.
    </ParamField>

    <ParamField body="sandboxConfigId" type="ID!" required>
      Relay GID of the sandbox config (agent config) to attach.
    </ParamField>

    <ParamField body="clientMutationId" type="String" />
  </Expandable>
</ParamField>

#### Returns

<ResponseField name="ok" type="Boolean!">
  True when the update completed.
</ResponseField>

<ResponseField name="signalStatus" type="SignalStatus!">
  The Signal status after the update.

  <Expandable title="SignalStatus fields">
    Scalar fields: `state`, `automationId`, `presetName`, `hasAttachedRepo`, `cadenceSeconds`, `additionalContext`, `llmIntegrationId`, `lastFiredUnix`, `nextFireUnix`, `issueLimitReached`.

    Object fields (select subfields): `agentConfig`.
  </Expandable>
</ResponseField>

#### Example

Only required input fields are shown. Replace `<ID>` and `<string>` placeholders with real values; the [object graph](/docs/ax/graphql-reference/queries/object-graph) page shows how to look IDs up.

<CodeGroup>
  ```graphql Mutation theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  mutation SetSignalAgentConfig($input: SetSignalAgentConfigInput!) {
    setSignalAgentConfig(input: $input) {
      ok
      signalStatus { state }
    }
  }
  ```

  ```json Variables theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  {
    "input": {
      "modelId": "<ID>",
      "sandboxConfigId": "<ID>"
    }
  }
  ```
</CodeGroup>

### resetSignalAgentConfig

Revert a project's Signal automation back to the shared built-in agent config, detaching any custom config (the custom config itself is left intact).

`resetSignalAgentConfig(input: ResetSignalAgentConfigInput!): ResetSignalAgentConfigPayload`

#### Arguments

<ParamField body="input" type="ResetSignalAgentConfigInput!" required>
  <Expandable title="ResetSignalAgentConfigInput fields">
    <ParamField body="modelId" type="ID!" required>
      Relay GID of the project (model) to update.
    </ParamField>

    <ParamField body="clientMutationId" type="String" />
  </Expandable>
</ParamField>

#### Returns

<ResponseField name="ok" type="Boolean!">
  True when the update completed.
</ResponseField>

<ResponseField name="signalStatus" type="SignalStatus!">
  The Signal status after the update.

  <Expandable title="SignalStatus fields">
    Scalar fields: `state`, `automationId`, `presetName`, `hasAttachedRepo`, `cadenceSeconds`, `additionalContext`, `llmIntegrationId`, `lastFiredUnix`, `nextFireUnix`, `issueLimitReached`.

    Object fields (select subfields): `agentConfig`.
  </Expandable>
</ResponseField>

#### Example

Only required input fields are shown. Replace `<ID>` and `<string>` placeholders with real values; the [object graph](/docs/ax/graphql-reference/queries/object-graph) page shows how to look IDs up.

<CodeGroup>
  ```graphql Mutation theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  mutation ResetSignalAgentConfig($input: ResetSignalAgentConfigInput!) {
    resetSignalAgentConfig(input: $input) {
      ok
      signalStatus { state }
    }
  }
  ```

  ```json Variables theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  {
    "input": {
      "modelId": "<ID>"
    }
  }
  ```
</CodeGroup>

### setSignalIssueStatus

Set the lifecycle status of a Signal issue — Resolve, Ignore, or re-open it. Resolving/ignoring removes it from the active dashboard view; a resolved issue silently re-opens if the problem recurs, while an ignored one stays suppressed. Gated by hasSignalIssueWriteAccess (PROJECT\_UPDATE).

`setSignalIssueStatus(input: SetSignalIssueStatusInput!): SetSignalIssueStatusPayload`

#### Arguments

<ParamField body="input" type="SetSignalIssueStatusInput!" required>
  <Expandable title="SetSignalIssueStatusInput fields">
    <ParamField body="id" type="ID!" required>
      Signed relay GID of the Signal issue to update. The server resolves it to the signal\_issues row and enforces tenancy from the issue's owning project.
    </ParamField>

    <ParamField body="status" type="SignalIssueStatus!" required>
      Target lifecycle status: OPEN (re-open / un-dismiss), RESOLVED, or IGNORED. One of: `OPEN`, `RESOLVED`, `IGNORED`.
    </ParamField>

    <ParamField body="clientMutationId" type="String" />
  </Expandable>
</ParamField>

#### Returns

<ResponseField name="signalIssue" type="SignalIssue!">
  The Signal issue after the update, with its persisted status. Returning the node lets Relay merge the new status into its store.

  <Expandable title="SignalIssue fields">
    Scalar fields: `id`, `issueKey`, `title`, `bodyMd`, `severity`, `producer`, `status`, `entity`, `outcome`, `tags`, `traceIds`, `totalMatchCount`, `estimatedSavingsUsd`, `firstSeen`, `lastSeen`, `lastJobId`, `projectId`, `projectName`, `hasAttachedRepo`, `githubIntegrationId`, `automationId`.

    Object fields (select subfields): `agentConfig`, `prJobs`, `actions`, `pendingActions`.
  </Expandable>
</ResponseField>

#### Example

Only required input fields are shown. Replace `<ID>` and `<string>` placeholders with real values; the [object graph](/docs/ax/graphql-reference/queries/object-graph) page shows how to look IDs up.

<CodeGroup>
  ```graphql Mutation theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  mutation SetSignalIssueStatus($input: SetSignalIssueStatusInput!) {
    setSignalIssueStatus(input: $input) {
      signalIssue { id status }
    }
  }
  ```

  ```json Variables theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  {
    "input": {
      "id": "<ID>",
      "status": "OPEN"
    }
  }
  ```
</CodeGroup>

### openSignalIssuePR

Launch a managed agent sandbox job that fixes a Signal issue and opens a PR, borrowing the project's Signal automation repo/agent config. Gated by hasSignalIssueWriteAccess (PROJECT\_UPDATE).

`openSignalIssuePR(input: OpenSignalIssuePRInput!): OpenSignalIssuePRPayload`

#### Arguments

<ParamField body="input" type="OpenSignalIssuePRInput!" required>
  <Expandable title="OpenSignalIssuePRInput fields">
    <ParamField body="id" type="ID!" required>
      Signed relay GID of the Signal issue to fix. The server resolves it to the signal\_issues row and enforces tenancy from the issue's owning project.
    </ParamField>

    <ParamField body="clientMutationId" type="String" />
  </Expandable>
</ParamField>

#### Returns

<ResponseField name="jobId" type="ID!">
  Relay GID of the newly launched sandbox job.
</ResponseField>

<ResponseField name="sandboxId" type="ID">
  Relay GID of the sandbox provisioned for the job, if one exists yet.
</ResponseField>

#### Example

Only required input fields are shown. Replace `<ID>` and `<string>` placeholders with real values; the [object graph](/docs/ax/graphql-reference/queries/object-graph) page shows how to look IDs up.

<CodeGroup>
  ```graphql Mutation theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  mutation OpenSignalIssuePR($input: OpenSignalIssuePRInput!) {
    openSignalIssuePR(input: $input) {
      jobId
      sandboxId
    }
  }
  ```

  ```json Variables theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  {
    "input": {
      "id": "<ID>"
    }
  }
  ```
</CodeGroup>

### openSignalIssueGitHubIssue

File a GitHub issue for a Signal issue, using the project's Signal repo and its connected GitHub token. Runs entirely in app-server (no sandbox agent). Gated by hasSignalIssueWriteAccess (PROJECT\_UPDATE).

`openSignalIssueGitHubIssue(input: OpenSignalIssueGitHubIssueInput!): OpenSignalIssueGitHubIssuePayload`

#### Arguments

<ParamField body="input" type="OpenSignalIssueGitHubIssueInput!" required>
  <Expandable title="OpenSignalIssueGitHubIssueInput fields">
    <ParamField body="id" type="ID!" required>
      Signed relay GID of the Signal issue to file. The server resolves it to the signal\_issues row and enforces tenancy from the issue's owning project.
    </ParamField>

    <ParamField body="clientMutationId" type="String" />
  </Expandable>
</ParamField>

#### Returns

<ResponseField name="issueUrl" type="String!">
  html\_url of the newly created GitHub issue.
</ResponseField>

#### Example

Only required input fields are shown. Replace `<ID>` and `<string>` placeholders with real values; the [object graph](/docs/ax/graphql-reference/queries/object-graph) page shows how to look IDs up.

<CodeGroup>
  ```graphql Mutation theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  mutation OpenSignalIssueGitHubIssue($input: OpenSignalIssueGitHubIssueInput!) {
    openSignalIssueGitHubIssue(input: $input) {
      issueUrl
    }
  }
  ```

  ```json Variables theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  {
    "input": {
      "id": "<ID>"
    }
  }
  ```
</CodeGroup>

### deleteSignal

Delete the Signal automation for a project. Idempotent — deleting an absent Signal is a no-op.

`deleteSignal(input: DeleteSignalInput!): DeleteSignalPayload`

#### Arguments

<ParamField body="input" type="DeleteSignalInput!" required>
  <Expandable title="DeleteSignalInput fields">
    <ParamField body="modelId" type="ID!" required>
      Relay GID of the project (model) whose Signal to delete.
    </ParamField>

    <ParamField body="clientMutationId" type="String" />
  </Expandable>
</ParamField>

#### Returns

<ResponseField name="ok" type="Boolean!">
  True when the delete completed.
</ResponseField>

#### Example

Only required input fields are shown. Replace `<ID>` and `<string>` placeholders with real values; the [object graph](/docs/ax/graphql-reference/queries/object-graph) page shows how to look IDs up.

<CodeGroup>
  ```graphql Mutation theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  mutation DeleteSignal($input: DeleteSignalInput!) {
    deleteSignal(input: $input) {
      ok
    }
  }
  ```

  ```json Variables theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  {
    "input": {
      "modelId": "<ID>"
    }
  }
  ```
</CodeGroup>
