Skip to main content

Documentation Index

Fetch the complete documentation index at: https://polos.dev/docs/llms.txt

Use this file to discover all available pages before exploring further.

Workflows are durable functions with automatic retry and state management.

Simple workflow

from polos import workflow, WorkflowContext
from pydantic import BaseModel

class OrderPayload(BaseModel):
    order_id: str
    items: list[str]
    total: float

@workflow(id="process_order")
async def process_order(ctx: WorkflowContext, payload: OrderPayload):
    # Steps are automatically retried on failure
    await ctx.step.run("validate", validate_order, payload)
    await ctx.step.run("reserve", reserve_inventory, payload.items)
    await ctx.step.run("charge", process_payment, payload.total)

    # Deterministic UUID (same on replay)
    confirmation = await ctx.step.uuid("confirmation")

    return {"status": "completed", "confirmation": confirmation}

Custom retry settings

await ctx.step.run(
    "unreliable_api",
    call_external_api,
    data,
    max_retries=5,
    base_delay=2.0,
    max_delay=30.0,
)

Deterministic operations

# These return the same value on replay
random_value = await ctx.step.random("coin_flip")
unique_id = await ctx.step.uuid("order_id")
timestamp = await ctx.step.now("created_at")

Wait for time

await ctx.step.wait_for("cooldown", seconds=60)

Run it

git clone https://github.com/polos-dev/polos.git
cd polos/python-examples/08-workflow-basics
cp .env.example .env  # Add your POLOS_PROJECT_ID and API key
uv sync
python main.py
Open http://localhost:5173 to view your agents and workflows, run them from the UI, and see execution traces. Python example on GitHub | TypeScript example on GitHub