# Agent

The Agent is a software distributed by Zenaton. The role of the Agent is to listen to queues automatically deployed by Zenaton - trigger the processing of tasks or decisions, when receiving instructions from the Zenaton Engine - and to return the output of tasks or decisions to Zenaton Engine to be displayed on your dashboard. The Agent is installed on your local environment during development, and on a Zenaton Worker when in production.

# Decision

A decision is a special processing of the file describing the workflow to find out what to do next. Roughly speaking, a decision is processed each time a task is completed or an event is received. Decisions are processes by the Agents on Zenaton workers.

# Dispatch

The dispatching of a task or workflow is the instruction to asynchronously process it on a Zenaton worker. The instruction is queued before reaching an Agent. Most of the time, it will start processing within a second, but it could take more time if the Agent has a lot of instructions to process.

# Environment

Environments are used to isolate tasks and workflows instances between team members or between development and production. A task or a workflow dispatched in an environment will be processed only by an Agent listening to the same environment.

# Event

Events enable you to inject information into a running workflow instance. For example, if an e-commerce customer wants to change their delivery address it is possible to send this new data to the delivery workflow after it has started through an "updateDeliveryAddress" event.

# Schedule

The scheduling of a task or workflow is the instruction to dispatch it on a recurring interval, described by a cron expression.

# Tag

A tag is a string that you attach to a workflow when you dispatch it. It lets you easily select this workflow later.

# Task

A task is a function written in node.js that "does something". A task is processed by the Agent in a Zenaton worker. As part of a Zenaton project, a task is usually isolated from your application, that's why the actual implementation of a task is often limited to a single call - to a database - to a SAAS API - to an internal API or microservice... All tasks processed through Zenaton are monitored and can be retried if failed.

# Standalone Task

A standalone task is a task that is not part of a workflow. Dispatching a standalone task with Zenaton is interesting as it lets you monitor, and retry this asynchronous task, without having to install any infrastructure to do so.

# Long-Running Task

A long-running task is a task whose processing is too long to be managed by http call. In this case, Zenaton provides a way to return the output asynchronously.

# Workflow

A workflow describes the processing of tasks that are done through a precise sequence (described in node.js, using Zenaton functions). This sequence can be time-dependant and event-driven. At each step of the workflow, a decision is processed by the Agent to decide what to do next.

# Zenaton API

The Zenaton API is a GraphQL API that you can use to schedule or dispatch standalone tasks and workflows, to send an event to workflows, to pause, resume, terminate workflows.

# Zenaton Engine

The Zenaton Engine is hosted by Zenaton and maintains the states and history of each task and workflow. It also triggers tasks and decisions and collects output to update states.

# Zenaton Project

A Zenaton project includes the source code of your workflows and your tasks. We recommend dedicating a repository to this project, as it's the best way to be able to update it without being dependant on the development cycle of your application.

# Zenaton Worker

A Zenaton worker, is a server, with an Agent installed, and used to process tasks and workflows.

# Zenaton Functions

Zenaton functions (provided by the Zenaton node.js sdk) are functions you can use to describe a workflow. It includes functions to dispatch tasks and workflows or to wait for a date, duration or event.