> ## Documentation Index
> Fetch the complete documentation index at: https://yukta.infenia.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Plugin reference

> Every built-in node type grouped by role, the options every node accepts, how a build selects plugins and how to read a plugin's schema from the catalogue API.

# Plugin reference

A plugin implements one node `type`; this page lists the built-in types, the settings that apply to every node and how to read a schema from a running server.

The option tables on the pages below are taken from each plugin's declared schema (`ConfigField` list). The same data is served by `GET /api/plugins/{type}`, so a running server is the final authority for what it has installed.

## Types by page

| Page | Types |
| - | - |
| [Triggers](https://yukta.infenia.com/reference/plugins/triggers.md) | `API_TRIGGER`, `WEBHOOK_TRIGGER`, `SCHEDULE_TRIGGER`, `CONSTANT_SOURCE`, `SUPERVISOR_SIGNAL` |
| [Routing and flow](https://yukta.infenia.com/reference/plugins/routing-and-flow.md) | `BRANCH`, `FILTER`, `SPLITTER`, `AGGREGATE`, `RECIPIENT_LIST`, `DELAY`, `LOOP_PREDICATE`, `LOOP_STREAM`, `SUB_WORKFLOW`, `WAIT_FOR_SIGNAL`, `ASK_INPUT`, `KV_STORE` |
| [Transform](https://yukta.infenia.com/reference/plugins/transform.md) | `MAPPER`, `CONTENT_FILTER`, `VALIDATE` |
| [External I/O](https://yukta.infenia.com/reference/plugins/external-io.md) | `HTTP_REQUEST`, `PROCESS_EXECUTOR`, `AGENT_SESSION`, `SQL_QUERY`, `FILE_READ`, `FILE_WRITE` |
| [AI](https://yukta.infenia.com/reference/plugins/ai.md) | `LLM_CALL`, `MCP_LIST_TOOLS`, `MCP_TOOL_CALL`, `SESSION_MEMORY` |
| [Decisions](https://yukta.infenia.com/reference/plugins/decisions.md) | `CLASSIFY`, `GATE`, `SCORE`, `ASK`, `ANOMALY`, `DEDUPE` |
| [Terminals](https://yukta.infenia.com/reference/plugins/terminals.md) | `CONSOLE_TERMINAL`, `NOTIFY_TERMINAL`, `OUTCOME_TERMINAL`, `SUPERVISOR_DECISION` |

## Roles

| Role | Contract | Output ports |
| - | - | - |
| `TRIGGER` | `start(config)` emits the first messages of a run | `default` unless the plugin says otherwise |
| `PROCESSOR` | `process(input, config)` turns a stream of messages into a stream of messages | `default` unless the plugin says otherwise |
| `TERMINAL` | `consume(input, config)` ends a branch | none |

A message leaves a node on one named port; the engine delivers it along the edges whose `sourcePort` names that port. A processor that fails a message under `failureMode` `CONTINUE` may emit it on the `error` port. See [Workflow JSON](https://yukta.infenia.com/reference/workflow-json.md) for the edge fields.

## Settings every node accepts

| Key | Where | Type | Default | Description |
| - | - | - | - | - |
| `timeoutSeconds` | `config` | number | the plugin's default timeout | Idle timeout of the node in seconds. |
| `engine` | node | object | none | Engine policy: trigger join rule, retry, error routing, failure budgets, `echoOutput`, `group`. See [Node options](https://yukta.infenia.com/reference/node-options.md). |

The default timeout of a plugin is 30 seconds unless the plugin page names another. Plugins whose work has its own timeout derive the node timeout from it, for example `HTTP_REQUEST` adds 5 seconds to `timeout`.

```json theme={"system"}
{ "nodeId": "wait", "type": "DELAY", "config": { "delayMs": 500, "timeoutSeconds": 60 } }
```

## Common option conventions

| Convention | Meaning |
| - | - |
| `failureMode` | `ERROR` fails the node on a failed call. `CONTINUE` emits a result (or routes to `error`) so a later node can react. Default `ERROR`. |
| `routeByStatus`, `routeByExitCode` | Emit on `success` and `failure` ports instead of `default`. Rejected unless `failureMode` is `CONTINUE`. |
| `concurrency` | Messages in flight at once for the node. The default is per plugin. |
| `strictMode` | Routing and transform plugins: `true` fails the node on an evaluation error; `false` drops the message or skips the step. |
| `errorPort` | Port that receives a message whose evaluation failed, with the failure attached to its metadata. |
| `decrypted:<key>` | A `SECRET` option reads the value from the secret store; the server reads the environment variable `YUKTA_SECRET_<KEY>`. |
| `${...}` | Options documented as supporting variables resolve them per message. See [Expressions](https://yukta.infenia.com/reference/expressions.md). |

## Selecting plugins at build time

The build property `yukta.plugins` selects the optional modules. The routing, transform and flow processors, all triggers and all terminals are always included.

| Value | Result |
| - | - |
| `default` (property absent) | Every optional module except `script-js` |
| `all` | Every optional module |
| `none` | No optional module |
| comma-separated list | Exactly the named modules |

| Module | Types |
| - | - |
| `process-executor` | `PROCESS_EXECUTOR`, `AGENT_SESSION` |
| `http-request` | `HTTP_REQUEST` |
| `file-io` | `FILE_READ`, `FILE_WRITE` |
| `sql-query` | `SQL_QUERY` |
| `llm-call` | `LLM_CALL` |
| `session-memory` | `SESSION_MEMORY` |
| `mcp-tool-call` | `MCP_TOOL_CALL`, `MCP_LIST_TOOLS` |
| `decision` | `CLASSIFY`, `GATE`, `SCORE`, `ASK`, `ANOMALY`, `DEDUPE`; depends on `llm-call` |
| `script-js` | no type; enables `MAPPER` mode `SCRIPT` |

An unknown module name stops the build. A workflow that uses an uninstalled type is rejected at validation with `Plugin not found for type: <TYPE>`.

## Catalogue API

| Request | Result |
| - | - |
| `GET /api/plugins` | Each installed `type` with its `category`. |
| `GET /api/plugins/{type}` | `type`, `category`, `description`, `usagePattern`, `uiDesign`, `outputPorts`, `configSchema`; `404` when the type is not installed. |

Each `configSchema` entry has `name`, `type` (`STRING`, `NUMBER`, `BOOLEAN`, `ENUM`, `LIST`, `MAP`, `EXPRESSION`, `SECRET`), `required`, `defaultValue`, `options` and `description`. The MCP tools `list_plugins` and `get_plugin_details` return the same data. See the [catalogue API](https://yukta.infenia.com/api/catalogue.md).

## Tiers and enabling plugins

Each plugin has a tier (`CORE`, `EXTENDED`, `SPECIFIC`) and a `restricted` flag for plugins that reach outside the engine (processes, files, network, databases). Core and unrestricted extended plugins are always on. Specific and restricted ones, such as `PROCESS_EXECUTOR`, `HTTP_REQUEST`, `FILE_READ`, `FILE_WRITE`, `SQL_QUERY`, `LLM_CALL`, `MCP_TOOL_CALL`, `SESSION_MEMORY` and the decision types, are off until you name them:

```yaml theme={"system"}
yukta:
  plugins:
    enabled: PROCESS_EXECUTOR,HTTP_REQUEST   # env YUKTA_PLUGINS_ENABLED; `all` enables every plugin
```

`GET /api/plugins` and the `list_plugins` MCP tool list every plugin with `tier`, `restricted`, `enabled` and, for a disabled one, `enableWith`. A workflow that uses a disabled type fails validation with that hint.

* [Workflow JSON](https://yukta.infenia.com/reference/workflow-json.md)
* [Node options](https://yukta.infenia.com/reference/node-options.md)
* [Configuration reference](https://yukta.infenia.com/reference/configuration.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.