# Core Concepts

**Steps** are the smallest building blocks of MESA. Every step has exactly one task to perform before handing things off to the next step, but the types of tasks are varied. For example, tasks can listen for new information ("a customer signs up"), make a decision ("does the customer live in California?"), or talk to other apps ("send them an email!"). Each step will perform its task and pass the result to the next step until MESA reaches the last one.

When you have more than one step, that sequence is collectively called a **workflow**. A workflow is made up of steps and describes a job to be done. For example, "When a customer signs up, check if they live in California, and send those that do a welcome email" is one workflow made up of three discrete steps.

MESA has hundreds of pre-built, fully customizable workflows called [**templates**](/templates.md). Templates can be a helpful starting point when building your own workflow, or in some cases, even used right out of the box.

The first step in a workflow is called a [**trigger**](/workflow-builder/triggers.md)**.** The trigger tells MESA what circumstances should cause your workflow to be executed. A trigger is either based on an event ("a customer signs up") or a schedule ("every Monday at 9 am Pacific time"). All of the steps after the trigger are called [**actions**](/workflow-builder/actions.md). Every workflow you create in MESA will have one trigger and one or more actions.

MESA comes with a ton of helpful triggers and actions; these are called [**tools**](/tools.md). MESA also has [**apps**](/connect.md) that bring in triggers and actions from all of the popular apps and services that e-commerce businesses need.

When a trigger tells MESA it is time to execute (or "run") your workflow, this is called an **automation**. If workflows are like a script in a play, then automations are the live performance. The automation runs through each step of a workflow in sequential order in order to complete the job you've described.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.getmesa.com/readme/core-concepts.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
