Define an Activity function (or class) for each external call; annotate or register it with the Temporal worker, setting schedule_to_close_timeout
Define a Workflow function that calls activities via workflow.execute_activity (Python) or workflow.ExecuteActivity (Go/Java); activities run outside the workflow sandbox
Register both workflows and activities with a Worker pointed at your Temporal server address and a task queue name
Start a workflow execution via the Temporal client: client.start_workflow(MyWorkflow.run, args, id='YOUR_WORKFLOW_ID', task_queue='YOUR_QUEUE')
Handle activity failures with retry policies on the ActivityOptions; workflows automatically retry activities per the policy without replaying the whole workflow
Known gotchas
Workflow code must be deterministic; do not use random numbers, current time (use workflow.now()), or I/O directly in workflow functions — all such calls must go through activities
Changing workflow code while workflows are in-flight can break replay if the history no longer matches the new code; use workflow versioning (workflow.get_version) for safe deployments
The Temporal server does not execute workflow or activity code; it only stores history and schedules tasks — you must run at least one worker process for execution to happen
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp