
# Slack triggers

## Events

| `on`            | Fires when                                                |
| --------------- | --------------------------------------------------------- |
| `slack.mention` | The bot is mentioned in a channel it has been invited to. |

The mention is required. Direct messages, slash commands, and interactive components do not produce this trigger.

## Filters

Slack filters use IDs, not display names:

```yaml
filters:
  workspace: T01234567
  channels: [C01234567]
  from_users: [U01234567]
  pattern: "repo="
```

`from_users` matches the author's Slack user id. `workspace` is the team id. `channels` matches the channel id. `pattern` (or `contains`) matches the start of the text after the mention. All filters must pass.

## Invocation

Put leading inputs directly after the mention:

```text
@Paseo repo=project agent=claude investigate the failed sync
```

Hub consumes only declared consecutive headers and passes `investigate the failed sync` as `${{ paseo.prompt }}`. See [Hub workflows](/docs/hub/workflows) for input types, defaults, choices, and rejection behavior.

## Replies and workflow shape

Put the reply capability on a step:

```yaml
allow_outputs:
  - type: slack.reply
    max: 5
```

The reply is posted in the triggering thread. A root message gets a new thread; a threaded message stays in that thread.

The declaration grants the `hub.reply` tool; the prompt has to tell the agent to call it. See [Tell the agent which tool to call](/docs/hub/workflows#tell-the-agent-which-tool-to-call), and the shared [workflow scenarios](/docs/hub/workflows#scenarios) for complete configurations.
