Workflows

A workflow runs named steps in order. Each step receives the previous step’s result. Use a workflow when you know the sequence; use an agent when a model needs to choose what to do next.

Run two steps

Keep the notes service running. Create cmd/workflow/main.go:

package main

import (
    "context"
    "fmt"
    "log"

    "go-micro.dev/v6/flow"
)

func main() {
    f := flow.New("read-notes", flow.Steps(
        flow.Step{Name: "list", Run: flow.Call("notes", "Notes.List")},
        flow.Step{Name: "print", Run: func(ctx context.Context, state flow.State) (flow.State, error) {
            fmt.Println(state.String())
            return state, nil
        }},
    ))
    if err := f.Execute(context.Background(), "{}"); err != nil {
        log.Fatal(err)
    }
}

Run it from your project:

go run ./cmd/workflow

The first step calls the service. The second prints its JSON response. A step can call a service, dispatch work to an agent, or run your own Go function.

Retries and saved progress

Flows save progress between steps. The default checkpoint uses a file store; retain that data if you need to resume after a restart. Completed steps are skipped on resume, but an interrupted step can run again. Make operations safe to repeat before enabling retries.

For configuration and recovery methods, see the flow API.