---
sidebar:
  hidden: true
title: roboto.domain.triggers.targets
---
## Module Contents

### ActionInvocationSpec

```python
class roboto.domain.triggers.targets.ActionInvocationSpec(/, **data: Any)
```

`from roboto.domain.triggers import ActionInvocationSpec`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/triggers/targets.py#L59-L100)

Bases: `pydantic.BaseModel`

How to run an action: which action, its parameters, overrides, and input selectors.

The part of an invoke-action target that says nothing about when it runs, shared by [`InvokeActionTarget`](/reference/python-sdk/roboto/domain/triggers/targets#roboto.domain.triggers.targets.InvokeActionTarget) and anything else that stores an action invocation to run later, such as an ingestion rule. String leaves of [`parameter_values`](/reference/python-sdk/roboto/domain/triggers/targets#roboto.domain.triggers.targets.ActionInvocationSpec.parameter_values) and [`invocation_input`](/reference/python-sdk/roboto/domain/triggers/targets#roboto.domain.triggers.targets.ActionInvocationSpec.invocation_input) may contain `{{...}}` placeholders resolved against the event namespace at dispatch time.

**Parameters**

- **data** (`Any`)

**Attributes**

- **ActionInvocationSpec.action** (`roboto.domain.actions.action_record.ActionReference`): The action to invoke. `owner` defaults to the trigger's org when omitted and `digest` to the action's latest version.
- **ActionInvocationSpec.compute_requirement_overrides** (`roboto.domain.actions.action_record.ComputeRequirements | None`) = `None`: Optional compute requirement overrides for the invocation.
- **ActionInvocationSpec.container_parameter_overrides** (`roboto.domain.actions.action_record.ContainerParameters | None`) = `None`: Optional container parameter overrides for the invocation.
- **ActionInvocationSpec.invocation_input** (`roboto.domain.actions.invocation_record.InvocationInput | None`) = `None`: Optional query-based input selection (files, topics, sessions) resolved when the invocation runs, e.g. `InvocationInput.file_query('tags CONTAINS "{{event.name}}"')`. The way a trigger on an event that names no dataset selects its inputs; may also accompany the file patterns of an event that names one.
- **ActionInvocationSpec.model_config**: Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- **ActionInvocationSpec.parameter_values** (`dict[str, Any]`) = `None`: Parameter values passed to the action; string leaves may be templated.
- **ActionInvocationSpec.timeout** (`int | None`) = `None`: Optional invocation timeout override, in minutes.
- **ActionInvocationSpec.upload_destination** (`roboto.domain.actions.invocation_record.InvocationUploadDestination | None`) = `None`: Optional destination for the invocation's output files.

#### ActionInvocationSpec.referenced_placeholders()

```python
def referenced_placeholders() -> set[str]
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/triggers/targets.py#L96-L100)

Return every `{{name}}` placeholder referenced by this spec's templated fields.

**Returns**

- `set[str]`

### InvokeActionTarget

```python
class roboto.domain.triggers.targets.InvokeActionTarget(/, **data: Any)
```

`from roboto.domain.triggers import InvokeActionTarget`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/triggers/targets.py#L103-L173)

Bases: [`ActionInvocationSpec`](/reference/python-sdk/roboto/domain/triggers/targets#roboto.domain.triggers.targets.ActionInvocationSpec), `_TargetSpecBase`

Stored configuration for invoking an action when a trigger fires.

Spec only — dispatch behavior lives server-side. The [`ActionInvocationSpec`](/reference/python-sdk/roboto/domain/triggers/targets#roboto.domain.triggers.targets.ActionInvocationSpec) fields say how to run the action; this class adds the target's identity and its file patterns. String leaves of [`required_inputs`](/reference/python-sdk/roboto/domain/triggers/targets#roboto.domain.triggers.targets.InvokeActionTarget.required_inputs) and [`additional_inputs`](/reference/python-sdk/roboto/domain/triggers/targets#roboto.domain.triggers.targets.InvokeActionTarget.additional_inputs) may contain `{{...}}` placeholders, as the spec's may.

An event that names a dataset invokes the action against that dataset, with inputs matched from its files by the file patterns. An event that names no dataset has no files to match: the invocation has no data source and selects its inputs with [`invocation_input`](/reference/python-sdk/roboto/domain/triggers/targets#roboto.domain.triggers.targets.ActionInvocationSpec.invocation_input).

**Parameters**

- **data** (`Any`)

**Attributes**

- **InvokeActionTarget.additional_inputs** (`list[str] | None`) = `None`: Optional extra file patterns passed as invocation inputs beyond the required ones. Only for events that name a dataset; must be empty otherwise.
- **InvokeActionTarget.model_config**: Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- **InvokeActionTarget.required_inputs** (`list[str]`) = `None`: File patterns (e.g. `**/*.bag`) that gate dispatch on the firing event's files. Only for events that name a dataset; must be empty otherwise.
- **InvokeActionTarget.target_id** (`str`): Stable id of this target within its trigger. Part of the dispatch idempotency key: the target's once-per history is kept under this id, so renaming it (or replacing it with an identical target under a new id) starts a fresh history and the target fires again for subjects the old id already fired for.
- **InvokeActionTarget.type** (`Literal[TriggerTargetType]`): Discriminator for [`TriggerTargetSpec`](/reference/python-sdk/roboto/domain/triggers/targets#roboto.domain.triggers.targets.TriggerTargetSpec).

#### InvokeActionTarget.from_invocation()

```python
@classmethod
def from_invocation(
    invocation: ActionInvocationSpec,
    *,
    target_id: str,
    required_inputs: Optional[list[str]] = None,
    additional_inputs: Optional[list[str]] = None,
) -> InvokeActionTarget
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/triggers/targets.py#L137-L151)

A target that runs `invocation`, with the given identity and file patterns.

**Parameters**

- **invocation** (`ActionInvocationSpec`)
- **target_id** (`str`)
- **required_inputs** (`Optional[list[str]]`)
- **additional_inputs** (`Optional[list[str]]`)

**Returns**

- `InvokeActionTarget`

#### InvokeActionTarget.invocation()

```python
def invocation() -> ActionInvocationSpec
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/triggers/targets.py#L153-L155)

How this target runs its action, without its identity or file patterns.

**Returns**

- `ActionInvocationSpec`

#### InvokeActionTarget.referenced_placeholders()

```python
def referenced_placeholders() -> set[str]
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/triggers/targets.py#L167-L173)

Return every `{{name}}` placeholder referenced by this target's templated fields.

**Returns**

- `set[str]`

### SendSlackMessageTarget

```python
class roboto.domain.triggers.targets.SendSlackMessageTarget(/, **data: Any)
```

`from roboto.domain.triggers import SendSlackMessageTarget`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/triggers/targets.py#L209-L232)

Bases: `_TargetSpecBase`

Stored configuration for posting a Slack message when a trigger fires.

Spec only — dispatch behavior lives server-side. The channel must be on the org's Slack outbound allowlist at dispatch time.

**Parameters**

- **data** (`Any`)

**Attributes**

- **SendSlackMessageTarget.channel_id** (`str`): Slack channel to post to.
- **SendSlackMessageTarget.model_config**: Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- **SendSlackMessageTarget.target_id** (`str`): Stable id of this target within its trigger; part of the dispatch idempotency key.
- **SendSlackMessageTarget.text** (`str`): Message body; may contain `{{...}}` placeholders resolved against the event namespace.
- **SendSlackMessageTarget.type** (`Literal[TriggerTargetType]`): Discriminator for [`TriggerTargetSpec`](/reference/python-sdk/roboto/domain/triggers/targets#roboto.domain.triggers.targets.TriggerTargetSpec).

#### SendSlackMessageTarget.referenced_placeholders()

```python
def referenced_placeholders() -> set[str]
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/triggers/targets.py#L230-L232)

Return every `{{name}}` placeholder referenced by this target's templated text.

**Returns**

- `set[str]`

### StartAgentTarget

```python
class roboto.domain.triggers.targets.StartAgentTarget(/, **data: Any)
```

`from roboto.domain.triggers import StartAgentTarget`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/triggers/targets.py#L176-L206)

Bases: `_TargetSpecBase`

Stored configuration for starting an agent thread when a trigger fires.

Spec only — dispatch behavior lives server-side. Each value in [`values`](/reference/python-sdk/roboto/domain/triggers/targets#roboto.domain.triggers.targets.StartAgentTarget.values) is a template resolved against the event namespace, then handed to the agent's own variable resolution as a plain value.

**Parameters**

- **data** (`Any`)

**Attributes**

- **StartAgentTarget.agent_id** (`str`): The agent definition to launch.
- **StartAgentTarget.analysis_scope** (`roboto.ai.core.AnalysisScope | None`) = `None`: Optional analysis scope for the resulting thread.
- **StartAgentTarget.model_config**: Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- **StartAgentTarget.target_id** (`str`): Stable id of this target within its trigger; part of the dispatch idempotency key.
- **StartAgentTarget.type** (`Literal[TriggerTargetType]`): Discriminator for [`TriggerTargetSpec`](/reference/python-sdk/roboto/domain/triggers/targets#roboto.domain.triggers.targets.TriggerTargetSpec).
- **StartAgentTarget.values** (`dict[str, str]`) = `None`: Agent variable name to a template string resolved against the event namespace.
- **StartAgentTarget.visibility** (`roboto.ai.agent_thread.record.ThreadVisibility`): Visibility of the resulting agent thread.

#### StartAgentTarget.referenced_placeholders()

```python
def referenced_placeholders() -> set[str]
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/triggers/targets.py#L204-L206)

Return every `{{name}}` placeholder referenced by this target's templated values.

**Returns**

- `set[str]`

### TriggerTargetSpec

```python
roboto.domain.triggers.targets.TriggerTargetSpec
```

`from roboto.domain.triggers import TriggerTargetSpec`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/triggers/targets.py#L235-L238)

A trigger target spec, discriminated on `type`.

### TriggerTargetType

```python
class roboto.domain.triggers.targets.TriggerTargetType
```

`from roboto.domain.triggers import TriggerTargetType`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/triggers/targets.py#L33-L43)

Bases: `roboto.compat.StrEnum`

The kind of thing a trigger does when it fires.

**Attributes**

- **TriggerTargetType.InvokeAction** = `'invoke_action'`: Invoke a containerized action.
- **TriggerTargetType.SendSlackMessage** = `'send_slack_message'`: Post a message to a Slack channel on the org's allowlist.
- **TriggerTargetType.StartAgent** = `'start_agent'`: Start an AI agent thread from a saved agent definition.

### target_catalog_manifest()

```python
def roboto.domain.triggers.targets.target_catalog_manifest() -> dict[str, Any]
```

`from roboto.domain.triggers import target_catalog_manifest`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/triggers/targets.py#L242-L251)

The kinds of target a trigger can have, as the web UI's target picker reads them.

`target_catalog.json` in this package is this function's output, written by `scripts/gen_trigger_manifests.py` and drift-checked by a test on each side. Each entry's body is empty: a target carries no save-time constraint of its own, so the picker offers every type for every event.

**Returns**

- `dict[str, Any]`
