* feat(hub): deploy canonical workflow bundles Keep CLI deployment aligned with Hub's authored bundle boundary so validation and activation receive the same deterministic source files. Public documentation now teaches that boundary as the only configuration format. * test(hub): assert validation diagnostics directly * refactor(hub): deepen HTTP client module * feat(hub): validate named agent configurations * docs(hub): align Claude mode example
1.5 KiB
title, description, nav, order, category
| title | description | nav | order | category |
|---|---|---|---|---|
| Slack triggers | Configure Slack mentions and thread replies in one workflow file. | Slack | 68 | Hub |
Slack triggers
slack.mention fires when the bot is mentioned in a channel where it is present. Direct messages, slash commands, and interactive components do not produce this trigger.
.paseo/workflows/slack-help.yml:
name: slack-help
on: slack.mention
max_runtime: 1h
filters:
workspace: T01234567
channels: [C01234567]
from_users: [U01234567]
steps:
- id: answer
environment: dev
max_runtime: 30m
idle_timeout: 5m
agent: codex
prompt:
- text: |
Answer with hub.reply, then call hub.finish_execution.
${{ paseo.prompt }}
allow_outputs:
- { type: slack.reply, max: 1, required: true }
Slack filters use IDs, not display names. from_users matches the author, workspace the team, and channels the channel. pattern checks the beginning of text after the mention; contains checks a substring. All filters must pass.
The reply posts in the triggering thread. A root message gets a thread; a threaded message stays there. slack.reply grants hub.reply, but does not add reply instructions to the prompt.
Leading declared inputs follow the mention:
@Paseo repo=project agent=claude investigate the failed sync
Hub consumes consecutive declared headers and exposes the remainder as ${{ paseo.prompt }}. See Workflows.