Slack Built-in Workflows¶
The Slack plugin currently ships three built-in workflows.
summarize-slack-target¶
Search for a person or channel, read recent Slack messages, and summarize them with AI.
Source workflow: plugins/titan-plugin-slack/titan_plugin_slack/workflows/summarize-slack-target.yaml
Default flow¶
slack.validate_connectionslack.select_targetslack.ensure_target_conversationslack.read_recent_messagesslack.ai_summarize_messages
Typical usage¶
- summarize a recent DM or channel without manually browsing the Slack UI
- search Slack once and pick either a person or a channel from the same result list
Scope constraints¶
- this workflow depends on conversation-history scopes and AI configuration
- it assumes one active Slack workspace binding for the current repository
- it searches both users and channels through
select_targetand does not offer a quick-pick shortcut for repository-configureddefault_channels(useselect_default_or_search_channel_targetdirectly in a custom workflow if that shortcut is needed)
Related public steps¶
validate_connectionselect_targetensure_target_conversationread_recent_messagesai_summarize_messages
post-message¶
Resolve a Slack target and post a message, meant to be called as a nested workflow: step from any other workflow (project, personal, or another plugin's).
Source workflow: plugins/titan-plugin-slack/titan_plugin_slack/workflows/post-message.yaml
Default flow¶
slack.validate_connectionslack.select_default_or_search_channel_targetslack.prepare_message_destinationslack.prompt_message_bodyslack.format_markdown_messageslack.post_message
Typical usage¶
Call it as a nested step, sharing ctx.data with the caller:
- id: post_summary_to_slack
name: "Post Summary to Slack"
workflow: "plugin:slack/post-message"
on_error: continue # treat this as an optional extra; a caller should never fail because of it
Before calling it, a caller can optionally set:
slack_message_text(str): already Slack-ready text (e.g. a prebuilt table). Used verbatim, never converted.slack_message_markdown(str): standard Markdown text. Converted to Slack mrkdwn byformat_markdown_message.slack_preferred_target(str): a person or channel name to auto-select with no prompt, when it resolves to exactly one match.
If neither slack_message_text nor slack_message_markdown is set, prompt_message_body asks the user to type a message interactively - that typed text is then converted the same way a caller-provided Markdown message would be.
Scope constraints¶
- always call it with
on_error: continueon the outerworkflow:step - it's designed to fail cleanly (missing Slack plugin, not configured, cancelled selection) without ever being the reason a caller workflow fails - this workflow depends on messaging scopes (
chat:write, etc.) and, forselect_default_or_search_channel_target's search fallback, conversation-listing scopes
Related public steps¶
validate_connectionselect_default_or_search_channel_targetprepare_message_destinationprompt_message_bodyformat_markdown_messagepost_message
post-file¶
Resolve a Slack target and upload a local file with an optional message above it, meant to be called as a nested workflow: step from any other workflow (project, personal, or another plugin's). Same target resolution as post-message.
Source workflow: plugins/titan-plugin-slack/titan_plugin_slack/workflows/post-file.yaml
Default flow¶
slack.validate_connectionslack.select_default_or_search_channel_targetslack.prepare_message_destinationslack.format_markdown_messageslack.upload_file
Typical usage¶
- id: post_report_to_slack
name: "Post Report to Slack"
workflow: "plugin:slack/post-file"
on_error: continue # optional extra; a caller should never fail because of it
Before calling it, a caller must set:
slack_file_path(str): local path of the file to upload.
And can optionally set:
slack_file_title(str): title shown on the Slack file. Defaults to the file name.slack_message_text(str): already Slack-ready text posted above the file. Used verbatim.slack_message_markdown(str): standard Markdown text. Converted to Slack mrkdwn byformat_markdown_messageand posted above the file.slack_preferred_target(str): a person or channel name to auto-select with no prompt, when it resolves to exactly one match.
Unlike post-message, this workflow never prompts for a message body: the file is the payload and the message is optional.
Scope constraints¶
- always call it with
on_error: continueon the outerworkflow:step - depends on the
files:writescope in addition to the messaging scopes; Slack connections created beforefiles:writewas part of the default scope set must be reconnected from Plugin Management
Related public steps¶
validate_connectionselect_default_or_search_channel_targetprepare_message_destinationformat_markdown_messageupload_file