Skills tell an agent when to run a workflow and what to do. Forms give that workflow a structured input step: buttons, dropdowns, radio groups, checkboxes, date pickers, and text fields that work in the PushMetrics chat UI and in Slack.

Put them together and you get a lightweight app inside a conversation. A user can type a short trigger like tableau-form, pick a few options, and the agent has enough structured input to run the right export, query, alert, or report without a long back-and-forth.

This guide walks through the pattern using a Tableau export workflow, then shows the form options you can reuse for other workflows.


The pattern

A good skill-plus-form workflow has four parts:

  1. Trigger: the phrase or request that should activate the skill.
  2. First choice: usually a small button choice that decides which path the user wants.
  3. Form: the structured fields needed for that path.
  4. Action: what the agent should do with the answers.

In plain English:

When the user asks for X:
1. Ask them which variant they want.
2. Show the form for that variant.
3. Use the submitted answers to run the correct tool or workflow.
4. Reply with the result.

The skill is the durable part. Once it is assigned to an agent, everyone who talks to that agent can use the same workflow from chat or Slack.


Example: Tableau export form

Imagine you want a Slack-friendly Tableau export flow. Instead of teaching every user the workbook names, view names, filters, and export formats, you create a skill called tableau-form.

When someone types tableau-form, the agent first asks which workbook they want:

  • Superstore
  • Regional

If they pick Superstore, it shows a form with:

  • A view dropdown: Overview, Product, Customers, Shipping
  • A region radio group: East, West, Central
  • Export format checkboxes: PDF, PNG, CSV

If they pick Regional, it shows a smaller form with:

  • A view dropdown: Economy, Stocks

After the user submits the form, the agent searches the right Tableau view, applies the selected filters, exports the requested format, and replies with the file. In Slack, the file is posted back into the same thread.

The Tableau form rendered in the PushMetrics web chat, showing workbook selection and export options

The same skill works in Slack. The agent renders the workbook choice, then the export options form directly in the thread:

The Tableau form rendered in Slack by the PushMetrics Assistant, with workbook and export options

When the export is done, the agent sends back the generated Tableau result:

The final Tableau export result sent by the PushMetrics Assistant after the form is submitted

The skill

Create a new skill under Settings -> AI Capabilities -> Skills. A complete version could look like this:

---
name: tableau-form
description: Use when a user types "tableau-form" or asks for the Tableau export form.
category: Integrations
---

# Tableau Export Form

When a user types `tableau-form` or asks for the Tableau form, run this workflow.

## Step 1: choose a workbook

Ask the user:

> Choose a workbook:

Use button options:

```json
["Superstore", "Regional"]
```

## Step 2A: Superstore form

If the user chooses `Superstore`, ask for the export settings with this form:

```yaml
title: Superstore Export Options
description: Choose the Tableau view, region filter, and export format.
submit_label: Export
fields:
  - name: view
    type: select
    label: View
    required: true
    options:
      - Overview
      - Product
      - Customers
      - Shipping

  - name: region
    type: radio
    label: Region Filter
    required: true
    options:
      - East
      - West
      - Central

  - name: export_formats
    type: checkboxes
    label: Export Format
    required: true
    options:
      - PDF
      - PNG
      - CSV
```

After the form is submitted:

1. Search Tableau for the selected Superstore view.
2. Apply the selected region filter.
3. Export one file for each selected export format.
4. Reply with the exported file or files.
5. If the conversation is in Slack, send the exported files back to the current Slack thread.

Use descriptive filenames in this format:

```text
Superstore - <View> - Region <Region>
```

## Step 2B: Regional form

If the user chooses `Regional`, ask for the view with this form:

```yaml
title: Regional Export Options
description: Choose the Regional Tableau view to export.
submit_label: Export
fields:
  - name: view
    type: select
    label: View
    required: true
    options:
      - Economy
      - Stocks
```

After the form is submitted:

1. Search Tableau for the selected Regional view.
2. Export the view as a PNG unless the user asked for another format.
3. Reply with the exported file.
4. If the conversation is in Slack, send the exported file back to the current Slack thread.

Two details are doing the work here.

First, the skill description is explicit. The agent sees that short description in its skill index, so phrases like tableau-form, "show me the Tableau form", or "I need the Tableau export form" route to the right skill.

Second, the workflow separates the first choice from the detailed form. The workbook choice is a small one-click decision, so it should be buttons. The export settings need several answers at once, so they belong in a form.


Assign the skill to an agent

Open the agent that should run the workflow and find the Skills section.

The agent settings page showing the Skills section where a specific skill can be assigned to an agent

You have two choices:

  • Use all workspace skills: the agent automatically sees tableau-form and every other workspace skill.
  • Use only selected skills: tick tableau-form in the checklist so this agent can use it.

For Slack workflows, the second option is usually cleaner. A channel-specific agent with only the relevant skills behaves more predictably than a general-purpose agent with every playbook in the workspace.

Once the skill is assigned, connect Slack under Settings -> AI Capabilities -> Inbound Channels and route the Slack channel to that agent. Now people can mention the agent in Slack and type:

tableau-form

The agent will start the same form flow in the Slack thread.


Choosing the right input type

Forms support a few field types. Pick the smallest one that captures the user's intent.

In the web app, form fields render as normal chat UI controls:

All supported agent form input types rendered in the PushMetrics web chat

In Slack, the same form definition maps to Slack Block Kit controls:

All supported agent form input types rendered in Slack
Input type Best for Notes
options A short one-step choice before a form Renders as clickable buttons. Use for 2-5 choices. This is not part of the YAML form.
buttons Submit-style decisions inside a form Up to 5 buttons. Can use intent: primary or intent: danger.
select One choice from a longer list Up to 100 options. Good for workspaces, reports, views, or owners.
multi_select Several choices from a longer list Up to 100 options. Good for channels, recipients, or tags.
radio One visible choice from a short list Up to 10 options. Good when users should see all choices at once.
checkboxes Several visible choices from a short list Up to 10 options. Good for formats, destinations, or flags.
text One-line text input Good for names, IDs, or short labels.
textarea Longer free text Good for notes, instructions, or context.
email Email address input Use when the value should be an email.
url URL input Use for links to docs, dashboards, or tickets.
number Numeric input Supports min, max, and default.
datepicker Date input Supports min_date, max_date, and default.

The practical rule:

  • Use button options for a single quick branch.
  • Use a form when you need multiple answers in one round trip.
  • Use radio or checkboxes when there are only a few choices and seeing all of them helps.
  • Use select or multi_select when the list is longer.

Form YAML basics

Every form has a title, optional description, optional submit label, and a list of fields.

title: Configure alert
description: Pick the slice and threshold for this alert.
submit_label: Create alert
fields:
  - name: alert_name
    type: text
    label: Name
    required: true
    placeholder: Daily revenue dip

  - name: threshold
    type: number
    label: "Threshold (%)"
    min: 0
    max: 100
    default: 10

  - name: channels
    type: checkboxes
    label: Notify
    options:
      - Slack
      - Email
      - PagerDuty

Field name is the machine-readable key the agent receives after submission. Keep it stable and simple: view, region, export_formats, starts_on.

Field label is what the user sees. Make labels human-friendly: Export Format, Starts on, Region Filter.

For choice fields, options can be simple strings:

options:
  - East
  - West
  - Central

Or label/value pairs:

options:
  - {label: "US East", value: us_east}
  - {label: "US West", value: us_west}

Use label/value pairs when the user-facing label differs from the value the agent should pass to a tool.


More workflow examples

The same pattern works beyond Tableau.

Weekly KPI pack

Trigger: weekly-kpi-pack

Form fields:

  • team: select from Sales, Product, Support, Finance
  • date_range: select from Last week, Last month, Quarter to date
  • include_sections: checkboxes for Revenue, Usage, Churn, Pipeline
  • destination: radio for Slack or Email

Action:

The agent runs the relevant metric queries, creates charts, writes a short summary, and sends the pack to the chosen destination.

Customer health check

Trigger: customer-health

Form fields:

  • account: text or select
  • lookback_days: number
  • include_tickets: checkboxes for Open tickets, Escalations, Feature requests
  • output_style: radio for Executive summary, Detailed analysis, Renewal risk

Action:

The agent pulls usage, tickets, revenue, and notes, then replies with a structured account summary.

Incident update

Trigger: incident-update

Form fields:

  • severity: radio for P0, P1, P2, P3
  • affected_area: select
  • summary: textarea
  • status_page: checkbox for Publish status-page draft
  • notify: checkboxes for Slack, Email, PagerDuty

Action:

The agent drafts the incident update, formats it for each destination, and asks for confirmation before sending anything public.


Tips for reliable form workflows

Keep the trigger phrase obvious. A skill named tableau-form should say "Use when the user types tableau-form" in the description.

Keep forms short. If a form has more than 8-10 fields, split it into a first choice plus a smaller follow-up form.

Use required fields for anything the downstream tool needs. If Tableau export needs a view, mark view as required: true.

Prefer explicit option values when calling tools. A label like Product Detail can map to a value like product_detail, which is easier for the agent to pass into an API.

Tell the agent what to do after submission. The form collects input, but the skill still needs the action: search the view, apply filters, export, attach the file, reply in Slack.

Add confirmation before destructive or public actions. Exports are safe to run immediately. Sending a company-wide announcement or changing data should usually end with a confirmation button.


Why this works well in Slack

Slack is a high-friction place to collect structured input if users have to type everything manually. Forms remove the guesswork.

Instead of this:

Can you export the Product view from Superstore for West as a PNG?

Users can type:

tableau-form

Then click through the workflow. The agent receives clean structured values, which means fewer clarification questions, fewer spelling issues, and more repeatable results.

For teams, that is the real benefit: you turn a fragile prompt into a reusable workflow that lives behind a short phrase.