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

# Filter and action reference

> Every field, operator, and action available to an agent.

## Filter fields

Agents filter on opportunity, account, and contact fields.

### Opportunity

| Field       | Label      |
| ----------- | ---------- |
| `StageName` | Stage      |
| `Amount`    | Amount     |
| `CloseDate` | Close date |
| `IsClosed`  | Is closed  |
| `dealtype`  | Deal type  |

### Account

| Field                   | Label    |
| ----------------------- | -------- |
| `account.name`          | Name     |
| `account.industry`      | Industry |
| `account.annualrevenue` | Revenue  |
| `account.type`          | Type     |
| `account.country`       | Country  |

### Contact

| Field                    | Label     |
| ------------------------ | --------- |
| `contact.email`          | Email     |
| `contact.jobtitle`       | Title     |
| `contact.company`        | Company   |
| `contact.lifecyclestage` | Lifecycle |

### Filter-only fields

Two more fields are available in filters but aren't general-purpose fields like `Amount` or `StageName` — they exist to narrow the population an agent evaluates.

| Field     | Use it to                               |
| --------- | --------------------------------------- |
| `id`      | Filter to a specific deal               |
| `user_id` | Filter by owner, or to unassigned deals |

## Operators

Every opportunity, account, and contact field supports all of these:

| Operator      | Meaning                 |
| ------------- | ----------------------- |
| `eq`          | Equals                  |
| `neq`         | Does not equal          |
| `in`          | Is one of               |
| `nin`         | Is not one of           |
| `gt` / `gte`  | Greater than / or equal |
| `lt` / `lte`  | Less than / or equal    |
| `between`     | Within a range          |
| `contains`    | Substring match         |
| `startswith`  | Begins with             |
| `endswith`    | Ends with               |
| `is_null`     | Has no value            |
| `is_not_null` | Has any value           |

## Combining conditions

Filters nest with `and`, `or`, and `not`:

```
or:
  - and:
      - StageName  eq   "Negotiation"
      - CloseDate  lt   today
  - and:
      - Amount            gt   250000
      - contact.jobtitle  contains  "VP"
```

Read as: *late-stage deals that have slipped past their close date, or any large deal with a VP-level contact.*

## Schedules

| Property        | Notes                               |
| --------------- | ----------------------------------- |
| Trigger kind    | `schedule`                          |
| Cron            | Standard cron expression            |
| Recurrence rule | An RRULE, as an alternative to cron |
| Timezone        | Named timezone, up to 64 characters |

Set the timezone explicitly. An agent meant for 8am Eastern will fire at the wrong hour for half the year if it's running on UTC.

## Actions

An agent can have **1–10 actions**.

### `send_message`

Posts to Slack.

| Property    | Value                                                      |
| ----------- | ---------------------------------------------------------- |
| Provider    | `slack`                                                    |
| Destination | A channel your workspace has connected                     |
| Content     | Literal text (up to 4,000 characters) or a Canvas template |

Canvas content renders the template with live deal data at send time. See [Canvas](/canvas).

### `noop`

Does nothing. Useful for testing a filter and schedule on their own before wiring up a real action.

## Lifecycle

| Action            | Effect                                              |
| ----------------- | --------------------------------------------------- |
| `upsert_disabled` | Create or update. Always leaves the agent disabled. |
| `enable`          | Validate dependencies and start running.            |
| `disable`         | Stop running. Configuration is kept.                |
| `delete`          | Soft delete.                                        |

**Any configuration edit disables the agent.** Re-enable it when you're done.

## Blockers

Enabling validates dependencies first. If something's missing, you get a named blocker and the tool to fix it — not a silent failure. Common ones:

* The destination Slack channel isn't connected, or Deal Brain hasn't been invited to it
* A referenced canvas template isn't published
* The agent lacks execution authority for the account it would run as

Listing your agents shows current blockers and readiness for each one.
