Documentation menu

Actions

Jetty supports a number of pre-built actions that work alongside runbooks. A runbook hands a whole job to an agent. An action does one well-defined piece of work with no agent in the loop: call a model, fan out over a list, fetch a file, grade an output. Put the two together and a single run can prepare inputs before a runbook starts, hand the runbook its data, and score what it produced afterwards.

An action is one entry in a workflow's step_configs. Each entry names an activity — the unit of work Jetty knows how to run — plus the config that activity needs, and the workflow's steps list sets the order. The runbook activity is itself an action, which is how a runbook task becomes a one-step workflow and how other actions slot in before and after it. Actions pass data to one another through path expressions.

Actions fall into four families: AI models, control flow, data processing, and evaluation. The tables below list a representative slice of each, not the whole registry.

Path expressions

Actions don't share variables. They read each other's data through path expressions: dot-notation strings that point at a value somewhere in the run. Any config field ending in _path takes a path instead of a literal value, so prompt_path: "init_params.user_prompt" means “use the value found at that path as this step's prompt.”

PatternPoints at
init_params.<field>An input to the run, as passed by the caller or defaulted by the task.
<step>.outputs.<field>Something an earlier action produced. steps.<step>.outputs.<field> is the explicit form of the same path.
<step>.inputs.<field>The resolved input an earlier action received.
…[0].<field>One element of an array output.
…[*].<field>Every element of an array output, collected into a list.

Wire a later action to an earlier one by pointing its *_path at earlier_step.outputs.…; the order in steps guarantees the source has produced its output first.

{
  "init_params": { "user_prompt": "Explain quantum computing simply" },
  "step_configs": {
    "analyze": {
      "activity": "litellm_chat",
      "model": "gpt-4o",
      "prompt_path": "init_params.user_prompt"
    },
    "grade": {
      "activity": "simple_judge",
      "content_path": "analyze.outputs.text",
      "criteria": "Clear, correct, and under 200 words"
    }
  },
  "steps": ["analyze", "grade"]
}

analyze reads its prompt from the run's inputs and grade reads the text analyze produced. Pass a different user_prompt at run time and both steps follow, with nothing in the workflow to edit.

Where a value comes from

A parameter can be set in more than one place. Inside a step it resolves in priority order: literal in step config → *_path in step config → literal in init_params*_path in init_params → the activity's declared default. init_params themselves merge shallowly, caller over task definition. That is why a deployed runbook task reads its agent, model, and instruction through *_path fields, and why the same task can be rerun with a different agent, model, or input without being redeployed. The full rules are in the machine instructions.

Magic variables inside a fan-out

When list_emit_await fans out over a list, each child run can reach a few magic variables through template expressions, written as {{ expression }}:

VariableMeaning
$itemThe current item.
$indexThe current index, 0-based.
$parent_idThe parent run's trajectory id.
$item_lenThe length of the current item.
$item_typeThe type name of the current item.

Path expressions show up in a few other places too. A bearer token for an attached MCP server (mcp_auth_token) accepts one, so the token can come from init_params or an earlier step. The inputs recorded on every run are the values these paths resolved to. And because the wiring between actions is just paths, Jetty can draw any workflow as a graph: each action a node, each path reference an edge. The live syntax reference is GET /api/v1/step-templates/path-expressions.

AI models

These call language, image, and video models. Each family needs the matching provider key configured; see runtimes and Integrations for how Jetty resolves credentials at run time.

CategoryActivityWhat it does
AI modelslitellm_chatOne chat completion against any of 100+ providers via LiteLLM.
AI modelslitellm_batchMany completions in one step: fan out a list of requests.
AI modelsGemini stepsPrompt and reader activities plus gemini_image_generator.
AI modelsAWS BedrockInvoke models hosted on Bedrock.
AI modelsreplicate_text2imageReplicate models for text-to-image and the rest of the Replicate catalog.

Control flow

These shape how a workflow runs: branching, looping, fanning out across many inputs, and pulling data back out of prior runs.

CategoryActivityWhat it does
Control flowlist_emit_awaitFan out over a list and run children in parallel.
Control flowconditional_branchTake one path or another based on a value.
Control flownumber_sequence_generatorProduce a numeric range to iterate over.
Control flowloop_counterTrack iterations in a loop.
Control flowextract_from_trajectoriesPull values out of earlier runs into the current run.

Data processing

The glue steps: moving text and files around, attaching metadata, and reaching out over HTTP.

CategoryActivityWhat it does
Data processingtext_concatenateJoin text fragments into one string.
Data processingread / download / save file stepsRead, fetch, and persist files through Jetty storage.
Data processingmetadataAttach or read metadata on an asset.
Data processingwebhookCall out to an external HTTP endpoint mid-workflow.

Evaluation

These grade and analyze runs, the steps that drive run-based evaluation.

CategoryActivityWhat it does
Evaluationsimple_judgeLLM-as-judge: score on a 1–5 scale or a categorical rubric.
Evaluationselect_trajectoriesFilter prior runs into a set to analyze.
Evaluationvisualize_correlationPlot how scores or signals relate across runs.

Discovering actions programmatically

This catalog is a snapshot, while the live registry is the source of truth. The API calls actions step templates: list the full set from your editor with list-step-templates (MCP) or listStepTemplates (SDK), then inspect any one to see its exact config shape.


Ready to wire these together? See writing runbooks for the runbook-first path, or machine instructions for the programmatic workflow surface.