Skip to main content

Agents

An agent is the atomic unit of work in a Modulo pipeline: a configured node that performs one step. Examples include reading a file, calling a large language model (LLM), writing a pull request (PR) comment, or waiting for human review.

Agent configuration

Pipeline config
{
  "name": "draft-pr-description",
  "type": "llm",
  "model_backend": "anthropic",
  "prompt": "Write a pull request description for the attached diff.",
  "schema": "pr-description-v1",
  "connector": "github"
}

Each agent has:

Agent configuration
Field Description
name Unique identifier within the pipeline
type llm, connector, transform, gate, manual, or trigger
model_backend Which model backend to route through (for llm type)
prompt System prompt for the agent
schema Schema that validates the agent’s output
connector Connector binding for tool access
condition Expression a gate agent evaluates; the gate passes when it is true
human_only When true, the node never runs automatically and waits for a human
timeout Max execution time before cancellation

Prompt versioning

Every prompt change creates a new version. Modulo preserves all versions and allows restoring any previous one. The audit log records which prompt version produced each run output.

Schema assignment

A schema turns an agent’s output into a typed artifact: it defines the expected shape and constraints. Schemas are versioned independently from agents, so a schema update can affect multiple agents at once.

Gate agents

Gate agents don’t produce output. They evaluate a condition and either pass or block the pipeline:

Pipeline config
{
  "name": "check-approval",
  "type": "gate",
  "condition": "{{ run_context.approved == true }}"
}

Human-only gates

Mark an agent as human_only: true to prevent automated execution. The pipeline pauses at this node until a human manually completes the step through the user interface (UI).